gemi 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/index.js +77 -77
- package/dist/app/index.js.map +4 -4
- package/dist/bin/gemi.js +142 -512
- package/dist/bin/gemi.js.map +4 -4
- package/dist/broadcasting/index.js +1 -1
- package/dist/{chunk-wvyxxxz7.js → chunk-00q77h4a.js} +2 -2
- package/dist/{chunk-wvyxxxz7.js.map → chunk-00q77h4a.js.map} +1 -1
- package/dist/{chunk-c3s0zqhy.js → chunk-0mfpz0sr.js} +2 -2
- package/dist/{chunk-c3s0zqhy.js.map → chunk-0mfpz0sr.js.map} +1 -1
- package/dist/chunk-0vq2p4bq.js +4 -0
- package/dist/{chunk-wwkrdyb4.js.map → chunk-0vq2p4bq.js.map} +6 -6
- package/dist/{chunk-azy2vwhc.js → chunk-0wa1m3yq.js} +3 -3
- package/dist/{chunk-azy2vwhc.js.map → chunk-0wa1m3yq.js.map} +1 -1
- package/dist/{chunk-1rrb8c0v.js → chunk-0wr6m6f4.js} +3 -3
- package/dist/{chunk-1rrb8c0v.js.map → chunk-0wr6m6f4.js.map} +1 -1
- package/dist/{chunk-6yvggc3x.js → chunk-3nzz6kqw.js} +2 -2
- package/dist/{chunk-6yvggc3x.js.map → chunk-3nzz6kqw.js.map} +1 -1
- package/dist/chunk-3q85w7aa.js +4 -0
- package/dist/{chunk-catb1gz8.js.map → chunk-3q85w7aa.js.map} +1 -1
- package/dist/{chunk-dmnc50py.js → chunk-4e18rqet.js} +2 -2
- package/dist/{chunk-dmnc50py.js.map → chunk-4e18rqet.js.map} +1 -1
- package/dist/{chunk-8ctxajfc.js → chunk-5q5qjyxf.js} +2 -2
- package/dist/{chunk-8ctxajfc.js.map → chunk-5q5qjyxf.js.map} +1 -1
- package/dist/{chunk-334phrqw.js → chunk-67ytmbmn.js} +3 -3
- package/dist/{chunk-334phrqw.js.map → chunk-67ytmbmn.js.map} +1 -1
- package/dist/{chunk-6pv9ngqe.js → chunk-68kvbrqd.js} +2 -2
- package/dist/{chunk-6pv9ngqe.js.map → chunk-68kvbrqd.js.map} +1 -1
- package/dist/{chunk-ebcx322z.js → chunk-6fy0y9na.js} +2 -2
- package/dist/{chunk-ebcx322z.js.map → chunk-6fy0y9na.js.map} +1 -1
- package/dist/chunk-6kfbsmxx.js +4 -0
- package/dist/{chunk-6cjfy81h.js.map → chunk-6kfbsmxx.js.map} +3 -3
- package/dist/chunk-6pwjkfk5.js +4 -0
- package/dist/{chunk-rahb5fwx.js.map → chunk-6pwjkfk5.js.map} +1 -1
- package/dist/{chunk-yrxxkmag.js → chunk-95b1a8cw.js} +2 -2
- package/dist/{chunk-yrxxkmag.js.map → chunk-95b1a8cw.js.map} +1 -1
- package/dist/chunk-9aswnsye.js +4 -0
- package/dist/chunk-9aswnsye.js.map +10 -0
- package/dist/chunk-acfdk70y.js +27 -0
- package/dist/{chunk-na4qm9jr.js.map → chunk-acfdk70y.js.map} +3 -3
- package/dist/{chunk-nnxgdzqx.js → chunk-cgh2sw3g.js} +2 -2
- package/dist/{chunk-nnxgdzqx.js.map → chunk-cgh2sw3g.js.map} +1 -1
- package/dist/{chunk-2wsmhvhf.js → chunk-fe1gn043.js} +2 -2
- package/dist/{chunk-2wsmhvhf.js.map → chunk-fe1gn043.js.map} +1 -1
- package/dist/{chunk-1gfsxd5v.js → chunk-jn8jhrkd.js} +2 -2
- package/dist/{chunk-1gfsxd5v.js.map → chunk-jn8jhrkd.js.map} +1 -1
- package/dist/chunk-jwebzy40.js +5 -0
- package/dist/{chunk-g8b20w5m.js.map → chunk-jwebzy40.js.map} +3 -3
- package/dist/chunk-jxftkhsd.js +4 -0
- package/dist/chunk-jxftkhsd.js.map +10 -0
- package/dist/{chunk-xm62byj2.js → chunk-m2p40y0k.js} +2 -2
- package/dist/{chunk-xm62byj2.js.map → chunk-m2p40y0k.js.map} +1 -1
- package/dist/{chunk-5yz4jjwj.js → chunk-mtbjk5px.js} +2 -2
- package/dist/{chunk-5yz4jjwj.js.map → chunk-mtbjk5px.js.map} +1 -1
- package/dist/{chunk-wnq14j8v.js → chunk-nxrhps23.js} +2 -2
- package/dist/{chunk-wnq14j8v.js.map → chunk-nxrhps23.js.map} +1 -1
- package/dist/chunk-pvxzx61f.js +5 -0
- package/dist/chunk-pvxzx61f.js.map +53 -0
- package/dist/{chunk-4wgjccxt.js → chunk-qcr71k85.js} +2 -2
- package/dist/{chunk-4wgjccxt.js.map → chunk-qcr71k85.js.map} +1 -1
- package/dist/{chunk-jfsxm8sz.js → chunk-rre72epn.js} +3 -3
- package/dist/{chunk-jfsxm8sz.js.map → chunk-rre72epn.js.map} +1 -1
- package/dist/chunk-svh4hjg3.js +4 -0
- package/dist/{chunk-ja250f5w.js.map → chunk-svh4hjg3.js.map} +3 -3
- package/dist/{chunk-ws63sddd.js → chunk-tw3t6x2n.js} +3 -3
- package/dist/{chunk-ws63sddd.js.map → chunk-tw3t6x2n.js.map} +1 -1
- package/dist/{chunk-kaa6sxg2.js → chunk-tyv9h73f.js} +3 -3
- package/dist/{chunk-kaa6sxg2.js.map → chunk-tyv9h73f.js.map} +1 -1
- package/dist/{chunk-akw359wq.js → chunk-wbg45cdc.js} +3 -3
- package/dist/{chunk-akw359wq.js.map → chunk-wbg45cdc.js.map} +1 -1
- package/dist/chunk-wewz52mc.js +3 -0
- package/dist/{chunk-skkyvmp4.js.map → chunk-wewz52mc.js.map} +4 -7
- package/dist/{chunk-47xbr7nj.js → chunk-yvrp97kk.js} +3 -3
- package/dist/{chunk-47xbr7nj.js.map → chunk-yvrp97kk.js.map} +1 -1
- package/dist/client/ProgressManager.d.ts +1 -1
- package/dist/client/index.js +18485 -18166
- package/dist/client/index.js.map +1 -1
- package/dist/email/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/index.js +4 -4
- package/dist/facades/index.js.map +5 -4
- package/dist/http/HttpRequest.d.ts +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +4 -5
- package/dist/i18n/I18nRouter.d.ts +10 -0
- package/dist/i18n/I18nRouter.d.ts.map +1 -0
- package/dist/i18n/I18nServiceContainer.d.ts +1 -1
- package/dist/i18n/I18nServiceContainer.d.ts.map +1 -1
- package/dist/i18n/I18nServiceProvider.d.ts +2 -1
- package/dist/i18n/I18nServiceProvider.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +2 -2
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/index.js +73 -62
- package/dist/services/index.js.map +19 -7
- package/package.json +2 -2
- package/dist/chunk-3ram01pg.js +0 -4
- package/dist/chunk-3ram01pg.js.map +0 -10
- package/dist/chunk-6cjfy81h.js +0 -4
- package/dist/chunk-catb1gz8.js +0 -4
- package/dist/chunk-ecfnwya3.js +0 -4
- package/dist/chunk-ecfnwya3.js.map +0 -10
- package/dist/chunk-g8b20w5m.js +0 -5
- package/dist/chunk-ja250f5w.js +0 -4
- package/dist/chunk-na4qm9jr.js +0 -27
- package/dist/chunk-qpm7mvjd.js +0 -5
- package/dist/chunk-qpm7mvjd.js.map +0 -53
- package/dist/chunk-rahb5fwx.js +0 -4
- package/dist/chunk-skkyvmp4.js +0 -4
- package/dist/chunk-wwkrdyb4.js +0 -4
- package/dist/http/I18nServiceContainer.d.ts +0 -27
- package/dist/http/I18nServiceContainer.d.ts.map +0 -1
- package/dist/http/I18nServiceProvider.d.ts +0 -12
- package/dist/http/I18nServiceProvider.d.ts.map +0 -1
package/dist/email/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{T as B}from"../chunk-6pwjkfk5.js";import{U as A}from"../chunk-9aswnsye.js";import"../chunk-nxrhps23.js";import"../chunk-6fy0y9na.js";import{render as P}from"jsx-email";import{jsx as Q}from"react/jsx-runtime";class D{from="";to=[];subject="No Subject";cc=[];bcc=[];attachments=[];template;static async send(q){let k=new this,F=A.use().service.defaultLocale,{to:G=k.to,from:H=k.from,subject:w=typeof k.subject==="string"?k.subject:k.subject[q.locale||F],cc:J=k.cc,bcc:K=k.bcc,attachments:M=k.attachments,data:O}=q,y=await k.render({...O,locale:q.locale});if(process.env.EMAIL_DEBUG==="true"){let z=`${process.env.ROOT_DIR}/.debug/emails/${new Date().toISOString()}${w}.html`;await Bun.write(z,y),Bun.spawnSync(["open",z]);return}await B.use().service.driver.send({bcc:K,cc:J,from:H,subject:w,to:G,attachments:M,html:y})}async render(q){let k=this.template;return await P(Q(k,{...q}))}}export{D as Email};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=3CD313A52C95A57264756E2164756E21
|
package/dist/email/index.js.map
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import type { ComponentType } from \"react\";\nimport { render } from \"jsx-email\";\nimport { EmailServiceContainer } from \"../services/email/EmailServiceContainer\";\nimport type { SendEmailParams } from \"../services/email/drivers/types\";\nimport { I18nServiceContainer } from \"../i18n/I18nServiceContainer\";\n\ninterface SendEmailArgs<T> extends Partial<Omit<SendEmailParams, \"html\">> {\n data: Omit<T, \"locale\">;\n locale?: string;\n}\n\nexport class Email {\n from = \"\";\n to = [];\n subject: string | Record<string, string> = \"No Subject\";\n cc = [];\n bcc = [];\n attachments = [];\n template: ComponentType<any>;\n\n static async send<T extends Email>(\n this: new () => T,\n args: SendEmailArgs<T[\"template\"] extends (p: infer P) => any ? P : never>,\n ) {\n const instance = new this();\n\n const defaultLocale = I18nServiceContainer.use().service.defaultLocale;\n\n const {\n to = instance.to,\n from = instance.from,\n subject = typeof instance.subject === \"string\"\n ? instance.subject\n : instance.subject[args.locale || defaultLocale],\n cc = instance.cc,\n bcc = instance.bcc,\n attachments = instance.attachments,\n data,\n } = args;\n\n const html = await instance.render({\n ...(data as any),\n locale: args.locale,\n });\n\n if (process.env.EMAIL_DEBUG === \"true\") {\n const fileName = `${process.env.ROOT_DIR}/.debug/emails/${new Date().toISOString()}${subject}.html`;\n await Bun.write(fileName, html);\n Bun.spawnSync([\"open\", fileName]);\n return;\n }\n\n await EmailServiceContainer.use().service.driver.send({\n bcc,\n cc,\n from,\n subject,\n to,\n attachments,\n html,\n });\n }\n\n protected async render<T extends Record<string, any>>(props: T) {\n const Template = this.template;\n return await render(<Template {...props} />);\n }\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": ";2JACA,YAAS,qDAUF,CAAM,CAAM,CACjB,KAAO,GACP,GAAK,CAAC,EACN,QAA2C,aAC3C,GAAK,CAAC,EACN,IAAM,CAAC,EACP,YAAc,CAAC,EACf,qBAEa,KAAqB,CAEhC,EACA,CACA,IAAM,EAAW,IAAI,KAEf,EAAgB,EAAqB,IAAI,EAAE,QAAQ,eAGvD,KAAK,EAAS,GACd,OAAO,EAAS,KAChB,UAAU,OAAO,EAAS,UAAY,SAClC,EAAS,QACT,EAAS,QAAQ,EAAK,QAAU,GACpC,KAAK,EAAS,GACd,MAAM,EAAS,IACf,cAAc,EAAS,YACvB,QACE,EAEE,EAAO,MAAM,EAAS,OAAO,IAC7B,EACJ,OAAQ,EAAK,MACf,CAAC,EAED,GAAI,QAAQ,IAAI,cAAgB,OAAQ,CACtC,IAAM,EAAW,GAAG,QAAQ,IAAI,0BAA0B,IAAI,KAAK,EAAE,YAAY,IAAI,SACrF,MAAM,IAAI,MAAM,EAAU,CAAI,EAC9B,IAAI,UAAU,CAAC,OAAQ,CAAQ,CAAC,EAChC,OAGF,MAAM,EAAsB,IAAI,EAAE,QAAQ,OAAO,KAAK,CACpD,MACA,KACA,OACA,UACA,KACA,cACA,MACF,CAAC,OAGa,OAAqC,CAAC,EAAU,CAC9D,IAAM,EAAW,KAAK,SACtB,OAAO,MAAM,EAAO,EAAC,EAAD,IAAc,EAAO,CAAE,EAE/C",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "3CD313A52C95A57264756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/facades/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{G as $c,H as _c,I as Y,J as a,K as W,L as Uc,M as z,N as $,P as xc,Q as A,R as E,S as j}from"../http/index.js";import{V as M}from"../chunk-3ram01pg.js";import{W as Wc}from"../chunk-5yz4jjwj.js";import{sc as mc}from"../chunk-qpm7mvjd.js";import{tc as o,vc as Z,wc as Cc}from"../chunk-2wsmhvhf.js";import{xc as jc}from"../chunk-catb1gz8.js";import{zc as D}from"../chunk-wnq14j8v.js";import{Bc as Qc}from"../chunk-ebcx322z.js";import{AsyncLocalStorage as Nc}from"async_hooks";class m extends D{service;static _name="BroadcastingServiceContainer";publishCb;context=new Nc;constructor(c){super();this.service=c}onPublish(c){this.publishCb=c}publish(...c){let[f,s,l]=c;this.publishCb(f,s,l)}async handleMessage(c,f){let s=JSON.parse(f);if(s.type==="subscribe"){let l=Object.entries(this.service.channels).sort(([i],[w])=>i.length-w.length);for(let[i,w]of l){let b=new URLPattern({pathname:i});if(b.test({pathname:s.topic})){let y=b.exec({pathname:s.topic})?.pathname.groups,O=new w;if(await O.subscribe.call(O,y))c.subscribe(s.topic);break}}}if(s.type==="broadcast")c.publish(s.topic,JSON.stringify({topic:s.topic,data:s.payload}));if(s.type==="unsubscribe")c.unsubscribe(s.topic)}run(c,f){let s=c.get("Cookie"),l=new Map;if(s){let i=s.split(";");for(let w of i){let[b,y]=w.split("=");l.set(b.trim(),y.trim())}}this.context.run({headers:c,cookies:l},f)}}class X{static async user(){let c=z.getStore(),f=m.use().context.getStore(),s="",l="";if(c?.req)s=c.req.cookies.get("access_token"),l=c.req.headers.get("User-Agent");if(f?.cookies)l=f.headers.get("User-Agent"),s=f.cookies.get("access_token");let i=c?.user;if(!i)i=(await j.use().getSession(s,l))?.user,c?.setUser(i);if(i)return i;return null}static async guard(c){let f=await X.user();if(!f)throw new A;try{if(!await c(f))throw new A}catch(s){throw new A}}static async guardSafe(c){let f=await X.user();if(!f)return!1;try{return await c(f)}catch(s){return!1}}static async authenticate(c){await j.use().authenticate(c)}static async createMagicLink(c){return await j.use().createMagicLinkToken(c)}}class I{static getSupportedLocales(){return M.use().supportedLocales}static getDefaultLocale(){return M.use().service.defaultLocale}static locale(){return M.use().detectLocale(z.getStore().req)}static setLocale(c=I.locale()){let f=M.use(),s=c;if(!f.supportedLocales.includes(c))s=f.service.defaultLocale;return z.getStore().setCookie("i18n-locale",s,{expires:new Date(Date.now()+31536000000)}),s}}var Lc=Qc(mc(),1);import{Buffer as Gc}from"buffer";class V extends D{service;static _name="FileStorageServiceContainer";constructor(c){super();this.service=c}}class pc{static async put(c){return V.use().service.driver.put(c)}static async metadata(c){let f=Gc.from(await c.arrayBuffer());try{return await Lc.default(f).metadata()}catch{return{}}}static async fetch(c){return V.use().service.driver.fetch(c)}static list(c){return V.use().service.driver.list(c)}static delete(){}}function Fc(c){return Object.fromEntries(Object.entries(c).filter(([,f])=>{return f!==null&&f!==void 0}))}class K extends Error{constructor(){super("Adapter not found");this.name="AdapterNotFound"}}class e{createSession(){throw new K}deleteSession(){throw new K}findSession(){throw new K}findUserByEmailAddress(){throw new K}updateSession(){throw new K}createUser(){throw new K}}class nc extends ${schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class zc extends ${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:{required:"Password is required","min:8":"Password must be at least 8 characters"}}}class Tc extends ${schema={email:{required:"Email is required",email:"Invalid email"}}}class Dc extends ${schema={password:{required:"Password is required",password:"Invalid password"}}}class B extends $c{provider=j.use()?.provider;async me(){let c=await X.user();if(!c)throw new xc;return c}async verifyEmail(c=new $){let f=await c.input(),s=j.use()?.provider,l=await s.adapter.findUserByVerificationToken(f.get("token"));if(!l)return{email:null};if(await s.adapter.verifyUser(l.email),l)return{email:l.email};return{email:null}}async signInWithMagicLink(c=new $){let f=j.use(),s=f.provider,l=c.search.get("token"),i=decodeURIComponent(c.search.get("email")),w=null;try{w=await s.adapter.findUserMagicLinkToken({email:i,token:l})}catch(y){return console.log(y),{error:JSON.stringify(y)}}if(!w)return{error:"Invalid token"};await s.adapter.verifyUser(i),await s.adapter.deleteMagicLinkToken(i);let b=await f.createOrUpdateSession({email:i});return c.ctx().setCookie("access_token",b.token,{expires:b.absoluteExpiresAt}),await s.onSignIn(b),{session:b}}async signInWithPin(c=new $){let f=j.use(),s=f.provider,l=await c.input(),{email:i,pin:w}=l.toJSON();if(!await s.adapter.findUserMagicLinkToken({email:i,pin:w}))throw new W({pin:["Invalid pin"]});await s.adapter.deleteMagicLinkToken(i),await s.adapter.verifyUser(i);let y=await f.createOrUpdateSession({email:i});return c.ctx().setCookie("access_token",y.token,{expires:y.absoluteExpiresAt}),await s.onSignIn(y),{session:y}}async signIn(c=new nc){let f=await c.input(),{email:s,password:l}=f.toJSON(),i=j.use().provider,w=await i.adapter.findUserByEmailAddress(s,i.verifyEmail);if(!w)throw new W({invalid_credentials:["Invalid credentials"]});if(!await i.verifyPassword(l,w.password))throw new W({invalid_credentials:["Invalid credentials"]});let y=await j.use().createOrUpdateSession({email:w.email,id:w.id});c.ctx().setCookie("access_token",y.token,{expires:y.absoluteExpiresAt}),await i.onSignIn(w);let{password:O,...g}=w;return g}async signUp(c=new zc){let f=await c.input(),{email:s,password:l,name:i,invitationId:w}=f.toJSON(),b=j.use().provider;if(await b.adapter.findUserByEmailAddress(s,!1))throw new W({email:["Email address already exists"]});let O=await b.hashPassword(l),g=M.use().detectLocale(c),L;if(w){if(L=await b.adapter.findInvitation(w,s),L)await b.adapter.deleteInvitationById(w)}let p,F;if(L)p=await b.adapter.createUser({email:s,name:i,password:O,emailVerifiedAt:new Date,locale:g}),await b.adapter.createAccount({organizationId:L.organizationId,userId:p.id,organizationRole:L.role});else F=await b.generateEmailVerificationToken(s),p=await b.adapter.createUser({email:s,name:i,password:O,verificationToken:F,locale:g});return await b.onSignUp(p,F),p}async signOut(c=new $){let f=c.cookies.get("access_token"),s=await X.user(),l=j.use().provider;return await l.adapter.deleteSession({token:f}),c.ctx().setCookie("access_token","",{expires:new Date(0)}),await l.onSignOut(s),{}}async forgotPassword(c=new Tc){let f=await c.input(),{email:s}=f.toJSON(),l=j.use().provider,i=await l.adapter.findUserByEmailAddress(s,l.verifyEmail);if(!i)return{};let w=await l.generateForgotPasswordToken(i);return await l.adapter.createPasswordResetToken({user:i,token:w}),await l.onForgotPassword(i,w),{}}async resetPassword(c=new Dc){let f=j.use().provider,s=await c.input(),{password:l,token:i}=s.toJSON(),w=await f.adapter.findPasswordResetToken({token:i});if(!w)throw new W({token:["Invalid token"]});if(E.Instant.from(w.createdAt.toISOString()).add({hours:24}).until(E.Now.instant()).sign>=0)throw new W({token:["Token expired"]});await f.adapter.deletePasswordResetToken({token:i});let y=await f.adapter.findUserByEmailAddress(w.user.email,f.verifyEmail);if(!y)throw new W({email:["User not found"]});let O=await f.hashPassword(l);return await f.adapter.updateUserPassword({id:y.id,password:O}),await f.adapter.deleteAllUserSessions(y.id),await f.onResetPassword(y),{}}async changePassword(c=new $){let f=j.use().provider,s=await X.user(),l=await c.input(),{oldPassword:i,newPassword:w}=l.toJSON(),{password:b}=await f.adapter.findUserByEmailAddress(s.email,f.verifyEmail);if(!await f.verifyPassword(i,b))throw new W({oldPassword:["Incorrect password"]});let O=await f.hashPassword(w);return await f.adapter.updateUserPassword({id:s.id,password:O}),await f.adapter.deleteAllUserSessions(s.id),{}}async oauthRedirect(c=new $){let{provider:f}=c.params,s=j.use().provider.oauthProviders[f];if(!s)throw new Error(`Invalid provider: ${f}`);return{destination:await s.getRedirectUrl(c)}}async oauthCallback(c=new $){let{provider:f}=c.params,s=j.use(),l=s.provider,i=l.oauthProviders[f],{email:w,name:b,username:y,providerId:O}=await i.onCallback(c);if(!y&&!w)throw new Error("Email or username is required");let g=w??`${y}:${f}`,L=await l.adapter.findUserByEmailAddress(g,!1),p=M.use().detectLocale(c);if(!L)L=await l.adapter.createUser({email:g,name:b,locale:p,emailVerifiedAt:new Date}),await l.adapter.createSocialAccount({provider:f,userId:L.id,email:g,username:y,providerId:O,expiresAt:new Date,accessToken:"",refreshToken:""});let F=await s.createOrUpdateSession({email:L.email,id:L.id});return c.ctx().setCookie("access_token",F.token,{expires:F.expiresAt}),await l.onSignIn(L),{destination:l.redirectPath}}async createMagicLinkToken(c=new $){let f=await c.input(),{email:s}=f.toJSON(),l=j.use(),i=l.provider,{user:w,pin:b,token:y}=await l.createMagicLinkToken(s);return await i.onMagicLinkCreated(w,{email:s,pin:b,token:y}),{email:s}}}class Bc extends a{routes={"/:provider":this.redirect([B,"oauthRedirect"]),"/:provider/callback":this.redirect([B,"oauthCallback"])}}class cc extends a{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[B,"signInWithMagicLink"]),"/oauth":Bc}}class fc extends Y{middlewares=["cache:private"];routes={"/sign-in":this.post(B,"signIn"),"/sign-up":this.post(B,"signUp"),"/sign-out":this.post(B,"signOut"),"/forgot-password":this.post(B,"forgotPassword"),"/reset-password":this.post(B,"resetPassword"),"/change-password":this.post(B,"changePassword"),"/verify-email":this.post(B,"verifyEmail"),"/me":this.get(B,"me").middleware(["auth"]),"/magic-link":this.post(B,"createMagicLinkToken"),"/sign-in-with-pin":this.post(B,"signInWithPin")}}class Hc extends jc{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;adapter=new e;oauthProviders={};boot(){}async verifyPassword(c,f){return await Bun.password.verify(c,f)}async hashPassword(c){return await Bun.password.hash(c)}async generateForgotPasswordToken(c){let f=new Bun.CryptoHasher("sha256");return f.update(`${c.email}${Date.now()}`),f.digest("hex")}generateEmailVerificationToken(c){if(!this.verifyEmail)return"";let f=new Bun.CryptoHasher("sha256");return f.update(`${c}${Date.now()}`),f.digest("hex")}generateMagicLinkToken(c){let f=new Bun.CryptoHasher("sha256");return f.update(`${c}${Date.now()}`),f.digest("hex")}extendSession(c){return{}}onSignUp(c,f){}onSignIn(c){}onSignOut(c){}onForgotPassword(c,f){}onResetPassword(c){}onMagicLinkCreated(c,f){return}}class sc extends Y{routes={"/resize":this.file(async()=>{let c=new $,f=new URL(c.rawRequest.url),s=f.searchParams.get("url"),l=Number(f.searchParams.get("w")),i=Number(f.searchParams.get("h")),w=f.searchParams.get("fit")??"cover",b=Number(f.searchParams.get("q"));if(!s)return new Response(JSON.stringify({error:"url query parameter is required"}),{headers:{"Content-Type":"application/json"},status:404});let O=`${s.startsWith("http")?"":`http://localhost:${process.env.PORT||5173}`}${s}`,g=await fetch(O);if(!g.ok)return new Response(JSON.stringify({error:"Image not found",info:O}),{headers:{"Content-Type":"application/json"},status:404});let L=Buffer.from(await g.arrayBuffer()),p=await Jc.use().service.driver.resize(L,{height:i,width:l,fit:w,quality:b});return g.headers.delete("Content-Type"),g.headers.delete("Content-Length"),new Response(p,{headers:{"Content-Type":"image/webp","Content-Length":`${p.byteLength}`,...g.headers.toJSON()}})})}}class Jc extends D{service;static _name="ImageOptimizationServiceContainer";constructor(c){super();this.service=c}}import{mkdir as ic,exists as lc,readdir as Sc}from"fs/promises";class R{static channel(c,f){let s=m.use().service.channels[c];if(!s)return console.error(`Channel ${c} not found`),{publish:()=>{}};let l=new s;return{publish:(i,w=!1)=>{let b=Z(c,f);m.use().publish(b,JSON.stringify({topic:b,data:l.publish(i)}),w)}}}}class _ extends D{service;static _name="LoggingServiceContainer";writer;isReady=!1;logsDirPath=`${process.env.ROOT_DIR}/storage/logs`;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;currentLogFilePath;constructor(c){super();this.service=c;this.boot().then(()=>{this.isReady=!0})}async boot(){if(!process.env.ROOT_DIR)return;if(!await lc(`${process.env.ROOT_DIR}/storage`))await ic(`${process.env.ROOT_DIR}/storage`);if(!await lc(this.logsDirPath))await ic(this.logsDirPath);this.newLogFile()}async newLogFile(){if(!await lc(this.logsDirPath))await ic(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let s=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.service.onLogFileClosed(s),this.fileSize=0,this.writerSize=0}let f=(await Sc(this.logsDirPath)).sort().reverse()[0];if(f){let s=Bun.file(`${this.logsDirPath}/${f}`);if(s.size<this.service.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${f}`,this.writer=s.writer(),this.writer.write(await s.text()),this.writer.write(`
|
|
3
|
-
`),this.writer.flush(),this.fileSize=
|
|
4
|
-
`),R.channel("/logs/live",{}).publish(JSON.stringify(w)),this.service.onLogCreated(w),this.tryFlush()}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 wc extends Y{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let c=Bun.file(_.use().currentLogFilePath);return new Response(await c.text(),{headers:{"Content-Type":"text/plain"}})})}}function Ic(c){let f=new Map;for(let s of c)if(typeof s==="string"){let[l,i=""]=s.split(":");if(l.startsWith("-")){if(f.has(l.replace("-","")))f.delete(l.replace("-",""))}else f.set(l,i.split(",").filter(Boolean))}else f.set(s,[]);return f}class k extends D{service;static _name="MiddlewareServiceContainer";constructor(c){super();this.service=c}runMiddleware(c){let f=new $;return Array.from(Ic(c).entries()).map(([s,l])=>{if(typeof s==="string"){let i=this.service.aliases[s];if(i){let w=new i(f);return()=>w.run.call(w,...l)}}else{if(_c(s)){let i=new s(f);return i.run.bind(i)}return s}}).filter(Boolean).reduce((s,l)=>{return async()=>{return{...await s(),...await l()}}},()=>Promise.resolve({}))()}}function Vc(c){return"run"in c}function Ec(c){return Object.hasOwn(c,"get")||Object.hasOwn(c,"post")||Object.hasOwn(c,"put")||Object.hasOwn(c,"delete")}function kc(c){return Object.hasOwn(c,"first")&&Object.hasOwn(c,"second")}function oc(c){if("__brand"in c)return c.__brand==="ApiRouter";return!1}function bc(c,f="",s=[]){let l={};function i(w,b,y,O){let g=w==="/"?"":w,L=f==="/"?"":f,p=(`${L}${g}`===""?"/":`${L}${g}`).replaceAll("//","/");if(!l[p])l[p]={};l[p][b.toUpperCase()]={exec:y,middleware:[...s,...O]},l[p].OPTIONS={exec:()=>{let n=new $().ctx().headers;return new Response(null,{headers:n,status:204})},middleware:[]}}for(let[w,b]of Object.entries(c)){if(Vc(b)){let y=b,O=y.method,g=y.middlewares,L=y.run.bind(y);i(w,O,L,g)}if(Ec(b))for(let[y,O]of Object.entries(b)){let g=O.middlewares,L=O.run.bind(O);i(w,y,L,g)}if(oc(b)){let y=new b,O=bc(y.routes,`${f}${w}`,y.middlewares);for(let[g,L]of Object.entries(O))l[g.replaceAll("//","/")]=L}if(kc(b)){let{first:y,second:O}=b;for(let[g,L]of Object.entries(y)){let p=L.middlewares,F=L.run.bind(L),[n,...x]=w.split("/").reverse();if(!n.startsWith(":"))throw new Error("Resource route must end with a dynamic segment");i(x.reverse().join("/"),g,F,p)}for(let[g,L]of Object.entries(O)){let p=L.middlewares,F=L.run.bind(L);i(w,g,F,p)}}}return Object.fromEntries(Object.entries(l).sort(([w],[b])=>{let y=w.split("/").length+w.split(":").length,O=b.split("/").length+b.split(":").length;return y-O}))}function yc(c){return c.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function d(c){let f={};for(let[s,l]of Object.entries(c))if("run"in l){let i=l;if("children"in i){let w=new i.children,b=d(w.routes);for(let[y,{exec:O,middleware:g}]of Object.entries(b)){let L=s==="/"?y:`${s}${y}`,p=y==="/"&&s!=="/"?s:L,F=(n)=>i.run.call(i,n,s);f[yc(p)]={exec:[F,...O],middleware:[...i.middlewares,...g],viewPath:i.viewPath}}}else{let w=(b)=>i.run.call(i,b,s);f[yc(s)]={exec:[w],middleware:i.middlewares,viewPath:i.viewPath}}}else{let i=new l,w=d(i.routes);for(let[b,{exec:y,middleware:O,viewPath:g}]of Object.entries(w)){let L=s==="/"?b:`${s}${b}`,p=b==="/"&&s!=="/"?s:L;f[yc(p)]={exec:y,middleware:[...i.middlewares,...O],viewPath:g}}}return Object.fromEntries(Object.entries(f).sort(([s],[l])=>{let i=s.split("/").length+s.split(":").length,w=l.split("/").length+l.split(":").length;return i-w}))}import{renderToReadableStream as Rc}from"react-dom/server.browser";import{createElement as Mc,Fragment as dc}from"react";function Ac(c){return c.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function C(c){let f={};for(let[s,l]of Object.entries(c))if("run"in l){let i=l.viewPath;if("children"in l){f[s]=[i];let w=new l.children,b=C(w.routes);for(let[y,O]of Object.entries(b)){let g=s==="/"?y:`${s}${y}`,L=y==="/"&&s!=="/"?s:g;f[L]=[i,...O]}if(f[s].length===1)delete f[s]}else f[s]=[i]}else{let i=new l,w=C(i.routes);for(let[b,y]of Object.entries(w)){let O=s==="/"?b:`${s}${b}`,g=b==="/"&&s!=="/"?s:O;f[g]=y}}return Object.fromEntries(Object.entries(f).map(([s,l])=>[Ac(s),l]))}function P(c){let f=[];for(let[s,l]of Object.entries(c))if("run"in l){let i=l.viewPath;if(i==="__")continue;if(i==="REDIRECT")continue;if("children"in l){let w=new l.children,b=P(w.routes);f.push([i,b])}else f.push([i,[]])}else{let i=new l,w=P(i.routes);f.push(...w)}return f}function gc(c){let f=[];for(let[s,l]of c)f.push(s,...gc(l).flat());return Array.from(new Set(f))}class v{static debug(c,f){_.use().log("debug",c,f)}static info(c,f){_.use().log("info",c,f)}static notice(c,f){_.use().log("notice",c,f)}static warning(c,f){_.use().log("warning",c,f)}static error(c,f){_.use().log("error",c,f)}static critical(c,f){_.use().log("critical",c,f)}static alert(c,f){_.use().log("alert",c,f)}static emergency(c,f){_.use().log("emergency",c,f)}}class Oc extends D{service;static _name="ViewRouterServiceContainer";flatViewRoutes={};routeManifest={};componentTree=[];flatComponentTree=[];root=null;constructor(c){super();this.service=c;let f={"/":c.rootRouter,"/auth":cc};this.flatViewRoutes=d(f),this.routeManifest=C(f),this.componentTree=P(f),this.flatComponentTree=gc(this.componentTree),this.root=c.root}boot(){}async onRequestEnd(c){if(!c.cookies.has("session_id"))c.ctx().setCookie("session_id",Bun.randomUUIDv7(),{httpOnly:!0,secure:!0,sameSite:"Strict",expires:new Date(Date.now()+31536000000)});return await this.service.onRequestEnd(c)}async render(c){let{csrfTokenHMAC:f,currentPathName:s,headers:l,i18n:i,params:w,pathname:b,prefetchedData:y,url:O,user:g,viewData:L,breadcrumbs:p}=c,F={kind:"view",data:{pageData:{[b]:L},__csrf:f.toString("base64"),prefetchedData:y,i18n:i,auth:{user:g},routeManifest:this.routeManifest,breadcrumbs:p,router:{pathname:s,params:w,currentPath:b,searchParams:O.search,is404:!s?!0:!1},componentTree:[["404",[]],...this.componentTree]},head:{}},n=this.root,x=this.routeManifest[s];return async(U)=>{let{bootstrapModules:J,loaders:N,getStyles:q,viewImportMap:G,cssManifest:H}=U;F.data.cssManifest=H;let Q=await Rc(Mc(dc,{children:[...await q(x),Mc(n,{data:F.data,viewImportMap:G,key:"root"})]}),{bootstrapScriptContent:`window.__GEMI_DATA__ = ${JSON.stringify(F.data)}; window.loaders=${N}`,bootstrapModules:J});return new Response(Q,{status:!s?404:200,headers:l})}}async handleViewRequest(c){let f=new URL(c.url),s=f.pathname.endsWith(".json"),l=f.pathname.replace(".json",""),i=[],w=[],b=null,y={};try{for(let[g,L]of Object.entries(this.flatViewRoutes)){let p=new Wc({pathname:g});if(p.test({pathname:l})){b=g,y=p.exec({pathname:l})?.pathname.groups,i=L.exec,w=L.middleware;break}}}catch(g){throw g}let O=new $(c,y,"view",b);return await z.run(O,async()=>{I.setLocale();let g=null,L=z.getStore(),p=L.req;try{await k.use().runMiddleware(w);let F=await Promise.all([...i.map((T)=>T(p)),...Array.from(L.prefetchPromiseQueue).map((T)=>T())]),n=L.cookies,x=L.headers,U=L.prefetchedResources;g={data:F,cookies:n,headers:x,user:L.user,prefetchedData:Object.fromEntries(U.entries()),currentPathName:p.routePath,params:p.params};let{params:J,currentPathName:N,user:q}=g,G={},H={};for(let T of F){let[S,r]=Object.entries(T)?.[0]??[];if(!S||!r)continue;H[`${S}:${N}`]=r.breadcrumb,G[S]=r}let Q=M.use(),Zc=Q.isEnabled,u={};if(Zc){let T=Q.detectLocale(new $(c,J)),S=Q.getPageTranslations(T,N);u={supportedLocales:Q.supportedLocales,currentLocale:T,dictionary:{[T]:S}}}if(s)return x.set("Content-Type","application/json"),n.forEach((T)=>x.append("Set-Cookie",T.toString())),await this.service.onRequestEnd(p),new Response(JSON.stringify({data:{[l]:G},breadcrumbs:H,prefetchedData:g.prefetchedData,i18n:u,is404:!N}),{headers:x});x.set("Content-Type","text/html");for(let T of n)x.append("Set-Cookie",T.toString());let Kc=Bun.CSRF.generate(process.env.SECRET);x.append("Set-Cookie",`csrf_token=${Kc}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(p)}catch(T){v.error(T?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(T)})}return await this.render({csrfTokenHMAC:Buffer.from(""),currentPathName:N,headers:x,i18n:u,params:J,pathname:f.pathname,prefetchedData:g.prefetchedData,url:f,user:q,viewData:G,breadcrumbs:H})}catch(F){if(F.kind===o)if(s){let{status:n=400,data:x,directive:U,headers:J}=F.payload.api;return new Response(JSON.stringify({data:x,directive:U}),{headers:J,status:n})}else{let{status:n=400,error:x}=F.payload.view;return new Response(x?.message,{...F.payload.view,status:n})}else throw this.service.onRequestFail(p,F),F}})}}class Xc extends Y{routes={"/api-routes":this.get(()=>{let c=t.use().flatRoutes,f=[];for(let[s,l]of Object.entries(c))for(let[i,w]of Object.entries(l)){let{exec:b,middleware:y}=w;f.push({path:s,method:i,middleware:y})}return f}),"/view-routes":this.get(()=>{let c=Oc.use().flatViewRoutes,f=[];for(let[s,{middleware:l,viewPath:i}]of Object.entries(c))f.push({path:s,method:"GET",viewPath:i,middleware:l});return f})}}class t extends D{service;static _name="ApiRouterServiceContainer";flatRoutes={};constructor(c){super();this.service=c;this.flatRoutes=bc({"/":this.service.rootRouter.bind(this.service),"/auth":fc,"/__gemi__/services/i18n":Uc,"/__gemi__/services/logs":wc,"/__gemi__/services/image":sc,"/__gemi__/debug":Xc})}getRouteHandlerAndParams(c){let s=new URL(c.url).pathname.replace("/api",""),l={},i;for(let[w]of Object.entries(this.flatRoutes))try{let b=new URLPattern({pathname:w});if(b.test({pathname:s})){i=w,l=b.exec({pathname:s})?.pathname.groups;break}}catch(b){console.error(b)}return{params:l,path:i}}async runRouteMiddleware(c,f){let l=this.flatRoutes[c][f.rawRequest.method].middleware;try{await k.use().runMiddleware(l)}catch(i){if(i.kind===o){if(f.rawRequest.url.includes("/api")){let{status:w=400,data:b,headers:y}=i.payload.api;return new Response(JSON.stringify(b),{status:w,headers:{"Content-Type":"application/json",...y}})}}else throw this.service.onRequestFail(f,i),console.error(i),i}}async getRouteData(c){let f=this.flatRoutes[c],s=z.getStore(),l=f[s.req.rawRequest.method].exec??(()=>Promise.resolve({})),i={};try{i=await l()}catch(w){if(w.kind===o){let{status:b=400,data:y,headers:O}=w.payload.api;return new Response(JSON.stringify(y),{status:b,headers:{"Content-Type":"application/json",...O}})}throw this.service.onRequestFail(s.req,w),console.error(w),w}return i}async handleApiRequest(c){let{params:f,path:s}=this.getRouteHandlerAndParams(c),l=this.flatRoutes[s];if(!l||!l[c.method])return new Response(JSON.stringify({error:{message:"Not found"}}),{status:404});let i=new $(c,f,"api",s);if(!c.url.includes("/__gemi__"))this.service.onRequestStart(i);return await z.run(i,async()=>{let w=z.getStore();w.setRequest(i);let b=await this.runRouteMiddleware(s,i);if(b instanceof Response)return b;let y=await this.getRouteData(s);if(y instanceof Response)return y;let O=w.headers;if(O.append("Content-Type","application/json"),w.cookies.forEach((g)=>O.append("Set-Cookie",g.toString())),w.destroy(),!c.url.includes("/__gemi__"))this.service.onRequestEnd(i);return new Response(JSON.stringify(y),{headers:O})})}}class h{static prepare(c,...f){let s={params:{},search:{}},[l={}]=f,{search:i,params:w}={...s,...l},b=z.getStore();if(b.req.kind==="api")throw new Error("Query.prefetch() cannot be called from an API request");let y=b.req.rawRequest,O=new URL(y.url),g=new URLSearchParams(Fc(i));g.delete("json"),g.sort();let L=[`${Z(c,w)}`,g.toString()].filter((J)=>J.length>0).join("?"),p=`${O.origin}/${L}`,F=new Request(p,{headers:y.headers}),n=new $(F,w),x=(J)=>{b.prefetchedResources.set(Z(c,w),{[g.toString()]:J})},U=()=>{return z.run(n,async()=>{let J=await t.use().getRouteData(c);return x(J),J})};return{instant:U,prefetch:()=>{b.prefetchPromiseQueue.add(U)}}}static instant(c,...f){return h.prepare(c,...f).instant()}static prefetch(c,...f){return h.prepare(c,...f).prefetch()}}class Yc{static absolute(c,...f){return`${process.env.HOST_NAME}${Z(String(c),f[0]??{})}`}static relative(c,...f){return Z(String(c),f[0]??{})}}export{Yc as Url,Cc as Redirect,h as Query,v as Log,I as I18n,pc as FileStorage,R as Broadcast,X as Auth};export{m as y,V as z,_ as A,Hc as B,Jc as C,k as D,Oc as E,t as F};
|
|
2
|
+
import{G as xc,H as _c,I as M,J as a,K as W,L as z,M as F,O as jc,P as d,Q as V,R as x}from"../http/index.js";import{U as B}from"../chunk-9aswnsye.js";import{V as Wc}from"../chunk-mtbjk5px.js";import{qc as Nc}from"../chunk-pvxzx61f.js";import{rc as k,tc as X,uc as Cc}from"../chunk-fe1gn043.js";import{vc as $c}from"../chunk-3q85w7aa.js";import{xc as D}from"../chunk-nxrhps23.js";import{zc as Kc}from"../chunk-6fy0y9na.js";import{AsyncLocalStorage as Zc}from"async_hooks";class N extends D{service;static _name="BroadcastingServiceContainer";publishCb;context=new Zc;constructor(c){super();this.service=c}onPublish(c){this.publishCb=c}publish(...c){let[s,f,i]=c;this.publishCb(s,f,i)}async handleMessage(c,s){let f=JSON.parse(s);if(f.type==="subscribe"){let i=Object.entries(this.service.channels).sort(([l],[w])=>l.length-w.length);for(let[l,w]of i){let b=new URLPattern({pathname:l});if(b.test({pathname:f.topic})){let y=b.exec({pathname:f.topic})?.pathname.groups,g=new w;if(await g.subscribe.call(g,y))c.subscribe(f.topic);break}}}if(f.type==="broadcast")c.publish(f.topic,JSON.stringify({topic:f.topic,data:f.payload}));if(f.type==="unsubscribe")c.unsubscribe(f.topic)}run(c,s){let f=c.get("Cookie"),i=new Map;if(f){let l=f.split(";");for(let w of l){let[b,y]=w.split("=");i.set(b.trim(),y.trim())}}this.context.run({headers:c,cookies:i},s)}}class U{static async user(){let c=z.getStore(),s=N.use().context.getStore(),f="",i="";if(c?.req)f=c.req.cookies.get("access_token"),i=c.req.headers.get("User-Agent");if(s?.cookies)i=s.headers.get("User-Agent"),f=s.cookies.get("access_token");let l=c?.user;if(!l)l=(await x.use().getSession(f,i))?.user,c?.setUser(l);if(l)return l;return null}static async guard(c){let s=await U.user();if(!s)throw new d;try{if(!await c(s))throw new d}catch(f){throw new d}}static async guardSafe(c){let s=await U.user();if(!s)return!1;try{return await c(s)}catch(f){return!1}}static async authenticate(c){await x.use().authenticate(c)}static async createMagicLink(c){return await x.use().createMagicLinkToken(c)}}class G{static getSupportedLocales(){return B.use().supportedLocales}static getDefaultLocale(){return B.use().service.defaultLocale}static locale(){return B.use().detectLocale(z.getStore().req)}static setLocale(c=G.locale()){let s=B.use(),f=c;if(!s.supportedLocales.includes(c))f=s.service.defaultLocale;return z.getStore().setCookie("i18n-locale",f,{expires:new Date(Date.now()+31536000000)}),f}}var Oc=Kc(Nc(),1);import{Buffer as Hc}from"buffer";class I extends D{service;static _name="FileStorageServiceContainer";constructor(c){super();this.service=c}}class Lc{static async put(c){return I.use().service.driver.put(c)}static async metadata(c){let s=Hc.from(await c.arrayBuffer());try{return await Oc.default(s).metadata()}catch{return{}}}static async fetch(c){return I.use().service.driver.fetch(c)}static list(c){return I.use().service.driver.list(c)}static delete(){}}function Fc(c){return Object.fromEntries(Object.entries(c).filter(([,s])=>{return s!==null&&s!==void 0}))}class Y extends Error{constructor(){super("Adapter not found");this.name="AdapterNotFound"}}class e{createSession(){throw new Y}deleteSession(){throw new Y}findSession(){throw new Y}findUserByEmailAddress(){throw new Y}updateSession(){throw new Y}createUser(){throw new Y}}class zc extends F{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class Tc extends F{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:{required:"Password is required","min:8":"Password must be at least 8 characters"}}}class Dc extends F{schema={email:{required:"Email is required",email:"Invalid email"}}}class Bc extends F{schema={password:{required:"Password is required",password:"Invalid password"}}}class o extends xc{provider=x.use()?.provider;async me(){let c=await U.user();if(!c)throw new jc;return c}async verifyEmail(c=new F){let s=await c.input(),f=x.use()?.provider,i=await f.adapter.findUserByVerificationToken(s.get("token"));if(!i)return{email:null};if(await f.adapter.verifyUser(i.email),i)return{email:i.email};return{email:null}}async signInWithMagicLink(c=new F){let s=x.use(),f=s.provider,i=c.search.get("token"),l=decodeURIComponent(c.search.get("email")),w=null;try{w=await f.adapter.findUserMagicLinkToken({email:l,token:i})}catch(y){return console.log(y),{error:JSON.stringify(y)}}if(!w)return{error:"Invalid token"};await f.adapter.verifyUser(l),await f.adapter.deleteMagicLinkToken(l);let b=await s.createOrUpdateSession({email:l});return c.ctx().setCookie("access_token",b.token,{expires:b.absoluteExpiresAt}),await f.onSignIn(b),{session:b}}async signInWithPin(c=new F){let s=x.use(),f=s.provider,i=await c.input(),{email:l,pin:w}=i.toJSON();if(!await f.adapter.findUserMagicLinkToken({email:l,pin:w}))throw new W({pin:["Invalid pin"]});await f.adapter.deleteMagicLinkToken(l),await f.adapter.verifyUser(l);let y=await s.createOrUpdateSession({email:l});return c.ctx().setCookie("access_token",y.token,{expires:y.absoluteExpiresAt}),await f.onSignIn(y),{session:y}}async signIn(c=new zc){let s=await c.input(),{email:f,password:i}=s.toJSON(),l=x.use().provider,w=await l.adapter.findUserByEmailAddress(f,l.verifyEmail);if(!w)throw new W({invalid_credentials:["Invalid credentials"]});if(!await l.verifyPassword(i,w.password))throw new W({invalid_credentials:["Invalid credentials"]});let y=await x.use().createOrUpdateSession({email:w.email,id:w.id});c.ctx().setCookie("access_token",y.token,{expires:y.absoluteExpiresAt}),await l.onSignIn(w);let{password:g,...n}=w;return n}async signUp(c=new Tc){let s=await c.input(),{email:f,password:i,name:l,invitationId:w}=s.toJSON(),b=x.use().provider;if(await b.adapter.findUserByEmailAddress(f,!1))throw new W({email:["Email address already exists"]});let g=await b.hashPassword(i),n=B.use().detectLocale(c),p;if(w){if(p=await b.adapter.findInvitation(w,f),p)await b.adapter.deleteInvitationById(w)}let O,L;if(p)O=await b.adapter.createUser({email:f,name:l,password:g,emailVerifiedAt:new Date,locale:n}),await b.adapter.createAccount({organizationId:p.organizationId,userId:O.id,organizationRole:p.role});else L=await b.generateEmailVerificationToken(f),O=await b.adapter.createUser({email:f,name:l,password:g,verificationToken:L,locale:n});return await b.onSignUp(O,L),O}async signOut(c=new F){let s=c.cookies.get("access_token"),f=await U.user(),i=x.use().provider;return await i.adapter.deleteSession({token:s}),c.ctx().setCookie("access_token","",{expires:new Date(0)}),await i.onSignOut(f),{}}async forgotPassword(c=new Dc){let s=await c.input(),{email:f}=s.toJSON(),i=x.use().provider,l=await i.adapter.findUserByEmailAddress(f,i.verifyEmail);if(!l)return{};let w=await i.generateForgotPasswordToken(l);return await i.adapter.createPasswordResetToken({user:l,token:w}),await i.onForgotPassword(l,w),{}}async resetPassword(c=new Bc){let s=x.use().provider,f=await c.input(),{password:i,token:l}=f.toJSON(),w=await s.adapter.findPasswordResetToken({token:l});if(!w)throw new W({token:["Invalid token"]});if(V.Instant.from(w.createdAt.toISOString()).add({hours:24}).until(V.Now.instant()).sign>=0)throw new W({token:["Token expired"]});await s.adapter.deletePasswordResetToken({token:l});let y=await s.adapter.findUserByEmailAddress(w.user.email,s.verifyEmail);if(!y)throw new W({email:["User not found"]});let g=await s.hashPassword(i);return await s.adapter.updateUserPassword({id:y.id,password:g}),await s.adapter.deleteAllUserSessions(y.id),await s.onResetPassword(y),{}}async changePassword(c=new F){let s=x.use().provider,f=await U.user(),i=await c.input(),{oldPassword:l,newPassword:w}=i.toJSON(),{password:b}=await s.adapter.findUserByEmailAddress(f.email,s.verifyEmail);if(!await s.verifyPassword(l,b))throw new W({oldPassword:["Incorrect password"]});let g=await s.hashPassword(w);return await s.adapter.updateUserPassword({id:f.id,password:g}),await s.adapter.deleteAllUserSessions(f.id),{}}async oauthRedirect(c=new F){let{provider:s}=c.params,f=x.use().provider.oauthProviders[s];if(!f)throw new Error(`Invalid provider: ${s}`);return{destination:await f.getRedirectUrl(c)}}async oauthCallback(c=new F){let{provider:s}=c.params,f=x.use(),i=f.provider,l=i.oauthProviders[s],{email:w,name:b,username:y,providerId:g}=await l.onCallback(c);if(!y&&!w)throw new Error("Email or username is required");let n=w??`${y}:${s}`,p=await i.adapter.findUserByEmailAddress(n,!1),O=B.use().detectLocale(c);if(!p)p=await i.adapter.createUser({email:n,name:b,locale:O,emailVerifiedAt:new Date}),await i.adapter.createSocialAccount({provider:s,userId:p.id,email:n,username:y,providerId:g,expiresAt:new Date,accessToken:"",refreshToken:""});let L=await f.createOrUpdateSession({email:p.email,id:p.id});return c.ctx().setCookie("access_token",L.token,{expires:L.expiresAt}),await i.onSignIn(p),{destination:i.redirectPath}}async createMagicLinkToken(c=new F){let s=await c.input(),{email:f}=s.toJSON(),i=x.use(),l=i.provider,{user:w,pin:b,token:y}=await i.createMagicLinkToken(f);return await l.onMagicLinkCreated(w,{email:f,pin:b,token:y}),{email:f}}}class oc extends a{routes={"/:provider":this.redirect([o,"oauthRedirect"]),"/:provider/callback":this.redirect([o,"oauthCallback"])}}class cc extends a{routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[o,"signInWithMagicLink"]),"/oauth":oc}}class sc extends M{middlewares=["cache:private"];routes={"/sign-in":this.post(o,"signIn"),"/sign-up":this.post(o,"signUp"),"/sign-out":this.post(o,"signOut"),"/forgot-password":this.post(o,"forgotPassword"),"/reset-password":this.post(o,"resetPassword"),"/change-password":this.post(o,"changePassword"),"/verify-email":this.post(o,"verifyEmail"),"/me":this.get(o,"me").middleware(["auth"]),"/magic-link":this.post(o,"createMagicLinkToken"),"/sign-in-with-pin":this.post(o,"signInWithPin")}}class Qc extends $c{basePath="/auth";verifyEmail=!0;redirectPath="/dashboard";sessionExpiresInHours=24;sessionAbsoluteExpiresInHours=672;adapter=new e;oauthProviders={};boot(){}async verifyPassword(c,s){return await Bun.password.verify(c,s)}async hashPassword(c){return await Bun.password.hash(c)}async generateForgotPasswordToken(c){let s=new Bun.CryptoHasher("sha256");return s.update(`${c.email}${Date.now()}`),s.digest("hex")}generateEmailVerificationToken(c){if(!this.verifyEmail)return"";let s=new Bun.CryptoHasher("sha256");return s.update(`${c}${Date.now()}`),s.digest("hex")}generateMagicLinkToken(c){let s=new Bun.CryptoHasher("sha256");return s.update(`${c}${Date.now()}`),s.digest("hex")}extendSession(c){return{}}onSignUp(c,s){}onSignIn(c){}onSignOut(c){}onForgotPassword(c,s){}onResetPassword(c){}onMagicLinkCreated(c,s){return}}class fc extends M{middlewares=["cache:private,0,no-store"];routes={"/translations/:locale/:scope*":this.get(async()=>{let c=new F,s=`/${c.params.scope??""}`,i=c.params.locale??B.use().detectLocale(c),l=B.use().getPageTranslations(i,s);return c.ctx().setCookie("i18n-locale",i,{expires:new Date(Date.now()+31536000000)}),{[i]:l}})}}class ic extends M{routes={"/resize":this.file(async()=>{let c=new F,s=new URL(c.rawRequest.url),f=s.searchParams.get("url"),i=Number(s.searchParams.get("w")),l=Number(s.searchParams.get("h")),w=s.searchParams.get("fit")??"cover",b=Number(s.searchParams.get("q"));if(!f)return new Response(JSON.stringify({error:"url query parameter is required"}),{headers:{"Content-Type":"application/json"},status:404});let g=`${f.startsWith("http")?"":`http://localhost:${process.env.PORT||5173}`}${f}`,n=await fetch(g);if(!n.ok)return new Response(JSON.stringify({error:"Image not found",info:g}),{headers:{"Content-Type":"application/json"},status:404});let p=Buffer.from(await n.arrayBuffer()),O=await Jc.use().service.driver.resize(p,{height:l,width:i,fit:w,quality:b});return n.headers.delete("Content-Type"),n.headers.delete("Content-Length"),new Response(O,{headers:{"Content-Type":"image/webp","Content-Length":`${O.byteLength}`,...n.headers.toJSON()}})})}}class Jc extends D{service;static _name="ImageOptimizationServiceContainer";constructor(c){super();this.service=c}}import{mkdir as lc,exists as wc,readdir as Sc}from"fs/promises";class R{static channel(c,s){let f=N.use().service.channels[c];if(!f)return console.error(`Channel ${c} not found`),{publish:()=>{}};let i=new f;return{publish:(l,w=!1)=>{let b=X(c,s);N.use().publish(b,JSON.stringify({topic:b,data:i.publish(l)}),w)}}}}class _ extends D{service;static _name="LoggingServiceContainer";writer;isReady=!1;logsDirPath=`${process.env.ROOT_DIR}/storage/logs`;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;currentLogFilePath;constructor(c){super();this.service=c;this.boot().then(()=>{this.isReady=!0})}async boot(){if(!process.env.ROOT_DIR)return;if(!await wc(`${process.env.ROOT_DIR}/storage`))await lc(`${process.env.ROOT_DIR}/storage`);if(!await wc(this.logsDirPath))await lc(this.logsDirPath);this.newLogFile()}async newLogFile(){if(!await wc(this.logsDirPath))await lc(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let f=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.service.onLogFileClosed(f),this.fileSize=0,this.writerSize=0}let s=(await Sc(this.logsDirPath)).sort().reverse()[0];if(s){let f=Bun.file(`${this.logsDirPath}/${s}`);if(f.size<this.service.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${s}`,this.writer=f.writer(),this.writer.write(await f.text()),this.writer.write(`
|
|
3
|
+
`),this.writer.flush(),this.fileSize=f.size}if(!this.writer){let f=`${new Date(Date.now()).toISOString()}.log`.replaceAll(":","-");this.currentLogFilePath=`${this.logsDirPath}/${f}`;let i=Bun.file(`${this.logsDirPath}/${f}`);this.writer=i.writer(),this.fileSize=0,this.writerSize=0}this.isCreatingFile=!1}async log(c,s,f={}){if(!this.isReady)await new Promise((y)=>{let g=setInterval(()=>{if(this.isReady)y({}),clearInterval(g)},100)});let i=z.getStore(),l={};if(i)l={url:i.req.rawRequest.url,method:i.req.rawRequest.method,headers:i.req.rawRequest.headers,body:i.req.rawRequest.body};let w={timestamp:new Date(Date.now()).toISOString(),env:"production",level:c,message:s,metadata:{...l,...f}},b="";try{b=JSON.stringify(w)}catch(y){throw new Error("Metadata must be a valid JSON object")}this.writerSize+=b.length,this.fileSize+=b.length,this.writer.write(b),this.writer.write(`
|
|
4
|
+
`),R.channel("/logs/live",{}).publish(JSON.stringify(w)),this.service.onLogCreated(w),this.tryFlush()}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 bc extends M{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let c=Bun.file(_.use().currentLogFilePath);return new Response(await c.text(),{headers:{"Content-Type":"text/plain"}})})}}function Gc(c){let s=new Map;for(let f of c)if(typeof f==="string"){let[i,l=""]=f.split(":");if(i.startsWith("-")){if(s.has(i.replace("-","")))s.delete(i.replace("-",""))}else s.set(i,l.split(",").filter(Boolean))}else s.set(f,[]);return s}class E extends D{service;static _name="MiddlewareServiceContainer";constructor(c){super();this.service=c}runMiddleware(c){let s=new F;return Array.from(Gc(c).entries()).map(([f,i])=>{if(typeof f==="string"){let l=this.service.aliases[f];if(l){let w=new l(s);return()=>w.run.call(w,...i)}}else{if(_c(f)){let l=new f(s);return l.run.bind(l)}return f}}).filter(Boolean).reduce((f,i)=>{return async()=>{return{...await f(),...await i()}}},()=>Promise.resolve({}))()}}function Ic(c){return"run"in c}function Vc(c){return Object.hasOwn(c,"get")||Object.hasOwn(c,"post")||Object.hasOwn(c,"put")||Object.hasOwn(c,"delete")}function Ec(c){return Object.hasOwn(c,"first")&&Object.hasOwn(c,"second")}function kc(c){if("__brand"in c)return c.__brand==="ApiRouter";return!1}function yc(c,s="",f=[]){let i={};function l(w,b,y,g){let n=w==="/"?"":w,p=s==="/"?"":s,O=(`${p}${n}`===""?"/":`${p}${n}`).replaceAll("//","/");if(!i[O])i[O]={};i[O][b.toUpperCase()]={exec:y,middleware:[...f,...g]},i[O].OPTIONS={exec:()=>{let j=new F().ctx().headers;return new Response(null,{headers:j,status:204})},middleware:[]}}for(let[w,b]of Object.entries(c)){if(Ic(b)){let y=b,g=y.method,n=y.middlewares,p=y.run.bind(y);l(w,g,p,n)}if(Vc(b))for(let[y,g]of Object.entries(b)){let n=g.middlewares,p=g.run.bind(g);l(w,y,p,n)}if(kc(b)){let y=new b,g=yc(y.routes,`${s}${w}`,y.middlewares);for(let[n,p]of Object.entries(g))i[n.replaceAll("//","/")]=p}if(Ec(b)){let{first:y,second:g}=b;for(let[n,p]of Object.entries(y)){let O=p.middlewares,L=p.run.bind(p),[j,...$]=w.split("/").reverse();if(!j.startsWith(":"))throw new Error("Resource route must end with a dynamic segment");l($.reverse().join("/"),n,L,O)}for(let[n,p]of Object.entries(g)){let O=p.middlewares,L=p.run.bind(p);l(w,n,L,O)}}}return Object.fromEntries(Object.entries(i).sort(([w],[b])=>{let y=w.split("/").length+w.split(":").length,g=b.split("/").length+b.split(":").length;return y-g}))}function nc(c){return c.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function A(c){let s={};for(let[f,i]of Object.entries(c))if("run"in i){let l=i;if("children"in l){let w=new l.children,b=A(w.routes);for(let[y,{exec:g,middleware:n}]of Object.entries(b)){let p=f==="/"?y:`${f}${y}`,O=y==="/"&&f!=="/"?f:p,L=(j)=>l.run.call(l,j,f);s[nc(O)]={exec:[L,...g],middleware:[...l.middlewares,...n],viewPath:l.viewPath}}}else{let w=(b)=>l.run.call(l,b,f);s[nc(f)]={exec:[w],middleware:l.middlewares,viewPath:l.viewPath}}}else{let l=new i,w=A(l.routes);for(let[b,{exec:y,middleware:g,viewPath:n}]of Object.entries(w)){let p=f==="/"?b:`${f}${b}`,O=b==="/"&&f!=="/"?f:p;s[nc(O)]={exec:y,middleware:[...l.middlewares,...g],viewPath:n}}}return Object.fromEntries(Object.entries(s).sort(([f],[i])=>{let l=f.split("/").length+f.split(":").length,w=i.split("/").length+i.split(":").length;return l-w}))}import{renderToReadableStream as Rc}from"react-dom/server.browser";import{createElement as Mc,Fragment as Ac}from"react";function dc(c){return c.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function C(c){let s={};for(let[f,i]of Object.entries(c))if("run"in i){let l=i.viewPath;if("children"in i){s[f]=[l];let w=new i.children,b=C(w.routes);for(let[y,g]of Object.entries(b)){let n=f==="/"?y:`${f}${y}`,p=y==="/"&&f!=="/"?f:n;s[p]=[l,...g]}if(s[f].length===1)delete s[f]}else s[f]=[l]}else{let l=new i,w=C(l.routes);for(let[b,y]of Object.entries(w)){let g=f==="/"?b:`${f}${b}`,n=b==="/"&&f!=="/"?f:g;s[n]=y}}return Object.fromEntries(Object.entries(s).map(([f,i])=>[dc(f),i]))}function t(c){let s=[];for(let[f,i]of Object.entries(c))if("run"in i){let l=i.viewPath;if(l==="__")continue;if(l==="REDIRECT")continue;if("children"in i){let w=new i.children,b=t(w.routes);s.push([l,b])}else s.push([l,[]])}else{let l=new i,w=t(l.routes);s.push(...w)}return s}function gc(c){let s=[];for(let[f,i]of c)s.push(f,...gc(i).flat());return Array.from(new Set(s))}class P{static debug(c,s){_.use().log("debug",c,s)}static info(c,s){_.use().log("info",c,s)}static notice(c,s){_.use().log("notice",c,s)}static warning(c,s){_.use().log("warning",c,s)}static error(c,s){_.use().log("error",c,s)}static critical(c,s){_.use().log("critical",c,s)}static alert(c,s){_.use().log("alert",c,s)}static emergency(c,s){_.use().log("emergency",c,s)}}class pc extends D{service;static _name="ViewRouterServiceContainer";flatViewRoutes={};routeManifest={};componentTree=[];flatComponentTree=[];root=null;constructor(c){super();this.service=c;let s={"/":c.rootRouter,"/auth":cc};this.flatViewRoutes=A(s),this.routeManifest=C(s),this.componentTree=t(s),this.flatComponentTree=gc(this.componentTree),this.root=c.root}boot(){}async onRequestEnd(c){if(!c.cookies.has("session_id"))c.ctx().setCookie("session_id",Bun.randomUUIDv7(),{httpOnly:!0,secure:!0,sameSite:"Strict",expires:new Date(Date.now()+31536000000)});return await this.service.onRequestEnd(c)}async render(c){let{csrfTokenHMAC:s,currentPathName:f,headers:i,i18n:l,params:w,pathname:b,prefetchedData:y,url:g,user:n,viewData:p,breadcrumbs:O}=c,L={kind:"view",data:{pageData:{[b]:p},__csrf:s.toString("base64"),prefetchedData:y,i18n:l,auth:{user:n},routeManifest:this.routeManifest,breadcrumbs:O,router:{pathname:f,params:w,currentPath:b,searchParams:g.search,is404:!f?!0:!1},componentTree:[["404",[]],...this.componentTree]},head:{}},j=this.root,$=this.routeManifest[f];return async(m)=>{let{bootstrapModules:J,loaders:Z,getStyles:q,viewImportMap:H,cssManifest:Q}=m;L.data.cssManifest=Q;let K=await Rc(Mc(Ac,{children:[...await q($),Mc(j,{data:L.data,viewImportMap:H,key:"root"})]}),{bootstrapScriptContent:`window.__GEMI_DATA__ = ${JSON.stringify(L.data)}; window.loaders=${Z}`,bootstrapModules:J});return new Response(K,{status:!f?404:200,headers:i})}}async handleViewRequest(c){let s=new URL(c.url),f=s.pathname.endsWith(".json"),i=s.pathname.replace(".json",""),l=[],w=[],b=null,y={};try{for(let[n,p]of Object.entries(this.flatViewRoutes)){let O=new Wc({pathname:n});if(O.test({pathname:i})){b=n,y=O.exec({pathname:i})?.pathname.groups,l=p.exec,w=p.middleware;break}}}catch(n){throw n}let g=new F(c,y,"view",b);return await z.run(g,async()=>{G.setLocale();let n=null,p=z.getStore(),O=p.req;try{await E.use().runMiddleware(w);let L=await Promise.all([...l.map((T)=>T(O)),...Array.from(p.prefetchPromiseQueue).map((T)=>T())]),j=p.cookies,$=p.headers,m=p.prefetchedResources;n={data:L,cookies:j,headers:$,user:p.user,prefetchedData:Object.fromEntries(m.entries()),currentPathName:O.routePath,params:O.params};let{params:J,currentPathName:Z,user:q}=n,H={},Q={};for(let T of L){let[S,r]=Object.entries(T)?.[0]??[];if(!S||!r)continue;Q[`${S}:${Z}`]=r.breadcrumb,H[S]=r}let K=B.use(),Xc=K.isEnabled,u={};if(Xc){let T=K.detectLocale(new F(c,J)),S=K.getPageTranslations(T,Z);u={supportedLocales:K.supportedLocales,currentLocale:T,dictionary:{[T]:S}}}if(f)return $.set("Content-Type","application/json"),j.forEach((T)=>$.append("Set-Cookie",T.toString())),await this.service.onRequestEnd(O),new Response(JSON.stringify({data:{[i]:H},breadcrumbs:Q,prefetchedData:n.prefetchedData,i18n:u,is404:!Z}),{headers:$});$.set("Content-Type","text/html");for(let T of j)$.append("Set-Cookie",T.toString());let Yc=Bun.CSRF.generate(process.env.SECRET);$.append("Set-Cookie",`csrf_token=${Yc}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(O)}catch(T){P.error(T?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(T)})}return await this.render({csrfTokenHMAC:Buffer.from(""),currentPathName:Z,headers:$,i18n:u,params:J,pathname:s.pathname,prefetchedData:n.prefetchedData,url:s,user:q,viewData:H,breadcrumbs:Q})}catch(L){if(L.kind===k)if(f){let{status:j=400,data:$,directive:m,headers:J}=L.payload.api;return new Response(JSON.stringify({data:$,directive:m}),{headers:J,status:j})}else{let{status:j=400,error:$}=L.payload.view;return new Response($?.message,{...L.payload.view,status:j})}else throw this.service.onRequestFail(O,L),L}})}}class mc extends M{routes={"/api-routes":this.get(()=>{let c=v.use().flatRoutes,s=[];for(let[f,i]of Object.entries(c))for(let[l,w]of Object.entries(i)){let{exec:b,middleware:y}=w;s.push({path:f,method:l,middleware:y})}return s}),"/view-routes":this.get(()=>{let c=pc.use().flatViewRoutes,s=[];for(let[f,{middleware:i,viewPath:l}]of Object.entries(c))s.push({path:f,method:"GET",viewPath:l,middleware:i});return s})}}class v extends D{service;static _name="ApiRouterServiceContainer";flatRoutes={};constructor(c){super();this.service=c;this.flatRoutes=yc({"/":this.service.rootRouter.bind(this.service),"/auth":sc,"/__gemi__/services/i18n":fc,"/__gemi__/services/logs":bc,"/__gemi__/services/image":ic,"/__gemi__/debug":mc})}getRouteHandlerAndParams(c){let f=new URL(c.url).pathname.replace("/api",""),i={},l;for(let[w]of Object.entries(this.flatRoutes))try{let b=new URLPattern({pathname:w});if(b.test({pathname:f})){l=w,i=b.exec({pathname:f})?.pathname.groups;break}}catch(b){console.error(b)}return{params:i,path:l}}async runRouteMiddleware(c,s){let i=this.flatRoutes[c][s.rawRequest.method].middleware;try{await E.use().runMiddleware(i)}catch(l){if(l.kind===k){if(s.rawRequest.url.includes("/api")){let{status:w=400,data:b,headers:y}=l.payload.api;return new Response(JSON.stringify(b),{status:w,headers:{"Content-Type":"application/json",...y}})}}else throw this.service.onRequestFail(s,l),console.error(l),l}}async getRouteData(c){let s=this.flatRoutes[c],f=z.getStore(),i=s[f.req.rawRequest.method].exec??(()=>Promise.resolve({})),l={};try{l=await i()}catch(w){if(w.kind===k){let{status:b=400,data:y,headers:g}=w.payload.api;return new Response(JSON.stringify(y),{status:b,headers:{"Content-Type":"application/json",...g}})}throw this.service.onRequestFail(f.req,w),console.error(w),w}return l}async handleApiRequest(c){let{params:s,path:f}=this.getRouteHandlerAndParams(c),i=this.flatRoutes[f];if(!i||!i[c.method])return new Response(JSON.stringify({error:{message:"Not found"}}),{status:404});let l=new F(c,s,"api",f);if(!c.url.includes("/__gemi__"))this.service.onRequestStart(l);return await z.run(l,async()=>{let w=z.getStore();w.setRequest(l);let b=await this.runRouteMiddleware(f,l);if(b instanceof Response)return b;let y=await this.getRouteData(f);if(y instanceof Response)return y;let g=w.headers;if(g.append("Content-Type","application/json"),w.cookies.forEach((n)=>g.append("Set-Cookie",n.toString())),w.destroy(),!c.url.includes("/__gemi__"))this.service.onRequestEnd(l);return new Response(JSON.stringify(y),{headers:g})})}}class h{static prepare(c,...s){let f={params:{},search:{}},[i={}]=s,{search:l,params:w}={...f,...i},b=z.getStore();if(b.req.kind==="api")throw new Error("Query.prefetch() cannot be called from an API request");let y=b.req.rawRequest,g=new URL(y.url),n=new URLSearchParams(Fc(l));n.delete("json"),n.sort();let p=[`${X(c,w)}`,n.toString()].filter((J)=>J.length>0).join("?"),O=`${g.origin}/${p}`,L=new Request(O,{headers:y.headers}),j=new F(L,w),$=(J)=>{b.prefetchedResources.set(X(c,w),{[n.toString()]:J})},m=()=>{return z.run(j,async()=>{let J=await v.use().getRouteData(c);return $(J),J})};return{instant:m,prefetch:()=>{b.prefetchPromiseQueue.add(m)}}}static instant(c,...s){return h.prepare(c,...s).instant()}static prefetch(c,...s){return h.prepare(c,...s).prefetch()}}class Uc{static absolute(c,...s){return`${process.env.HOST_NAME}${X(String(c),s[0]??{})}`}static relative(c,...s){return X(String(c),s[0]??{})}}export{Uc as Url,Cc as Redirect,h as Query,P as Log,G as I18n,Lc as FileStorage,R as Broadcast,U as Auth};export{N as y,I as z,_ as A,Qc as B,Jc as C,E as D,pc as E,v as F};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=D86968DEFFB8914B64756E2164756E21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../services/pubsub/BroadcastingServiceContainer.ts", "../facades/Auth.ts", "../facades/I18n.ts", "../facades/FileStorage.ts", "../services/file-storage/FileStorageServiceContainer.ts", "../utils/omitNullishValues.ts", "../auth/adapters/blank.ts", "../auth/AuthenticationServiceProvider.ts", "../services/image-optimization/ImageOptimizationServiceContainer.ts", "../services/logging/LoggingServiceContainer.ts", "../facades/Broadcast.ts", "../services/logging/LoggingRouter.ts", "../services/middleware/MiddlewareServiceContainer.ts", "../services/router/createFlatApiRoutes.ts", "../services/router/createFlatViewRoutes.ts", "../services/router/ViewRouterServiceContainer.ts", "../services/router/createRouteManifest.ts", "../services/router/createComponentTree.ts", "../client/helpers/flattenComponentTree.ts", "../facades/Log.ts", "../services/router/ApiRouterServiceContainer.ts", "../facades/Prefetch.ts", "../facades/Url.ts"],
|
|
3
|
+
"sources": ["../services/pubsub/BroadcastingServiceContainer.ts", "../facades/Auth.ts", "../facades/I18n.ts", "../facades/FileStorage.ts", "../services/file-storage/FileStorageServiceContainer.ts", "../utils/omitNullishValues.ts", "../auth/adapters/blank.ts", "../auth/AuthenticationServiceProvider.ts", "../i18n/I18nRouter.ts", "../services/image-optimization/ImageOptimizationServiceContainer.ts", "../services/logging/LoggingServiceContainer.ts", "../facades/Broadcast.ts", "../services/logging/LoggingRouter.ts", "../services/middleware/MiddlewareServiceContainer.ts", "../services/router/createFlatApiRoutes.ts", "../services/router/createFlatViewRoutes.ts", "../services/router/ViewRouterServiceContainer.ts", "../services/router/createRouteManifest.ts", "../services/router/createComponentTree.ts", "../client/helpers/flattenComponentTree.ts", "../facades/Log.ts", "../services/router/ApiRouterServiceContainer.ts", "../facades/Prefetch.ts", "../facades/Url.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ServerWebSocket } from \"bun\";\nimport { ServiceContainer } from \"../ServiceContainer\";\nimport { BroadcastingServiceProvider } from \"./BroadcastingServiceProvider\";\nimport type { PublishArgs } from \"./types\";\nimport { AsyncLocalStorage } from \"async_hooks\";\n\ntype PublishCallback = (...args: PublishArgs) => void;\n\nexport class BroadcastingServiceContainer extends ServiceContainer {\n static _name = \"BroadcastingServiceContainer\";\n\n publishCb: PublishCallback;\n context = new AsyncLocalStorage<{\n headers: Headers;\n cookies: Map<string, string>;\n }>();\n\n constructor(public service: BroadcastingServiceProvider) {\n super();\n }\n\n onPublish(cb: PublishCallback) {\n this.publishCb = cb;\n }\n\n publish(...args: PublishArgs) {\n const [topic, data, compress] = args;\n this.publishCb(topic, data, compress);\n }\n\n async handleMessage(\n ws: ServerWebSocket<{ headers: Headers }>,\n message: string | Buffer,\n ) {\n const messageData = JSON.parse(message as string);\n if (messageData.type === \"subscribe\") {\n const sortedChannels = Object.entries(this.service.channels).sort(\n ([keyA], [keyB]) => keyA.length - keyB.length,\n );\n for (const [pathname, Channel] of sortedChannels) {\n const urlPattern = new URLPattern({ pathname });\n if (urlPattern.test({ pathname: messageData.topic })) {\n const params = urlPattern.exec({ pathname: messageData.topic })\n ?.pathname.groups!;\n const instance = new Channel();\n const canSubscribe = await instance.subscribe.call(instance, params);\n if (canSubscribe) {\n ws.subscribe(messageData.topic);\n }\n\n break;\n }\n }\n }\n if (messageData.type === \"broadcast\") {\n ws.publish(\n messageData.topic,\n JSON.stringify({ topic: messageData.topic, data: messageData.payload }),\n );\n }\n if (messageData.type === \"unsubscribe\") {\n ws.unsubscribe(messageData.topic);\n }\n }\n\n run(headers: Headers, fn: VoidFunction) {\n const cookie = headers.get(\"Cookie\");\n const cookies = new Map();\n if (cookie) {\n const cookieArray = cookie.split(\";\");\n for (const c of cookieArray) {\n const [key, value] = c.split(\"=\");\n cookies.set(key.trim(), value.trim());\n }\n }\n this.context.run({ headers, cookies }, fn);\n }\n}\n",
|
|
6
6
|
"import type { User } from \"../auth/adapters/types\";\nimport { AuthenticationServiceContainer } from \"../auth/AuthenticationServiceContainer\";\nimport { InsufficientPermissionsError } from \"../http/errors\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { BroadcastingServiceContainer } from \"../services/pubsub/BroadcastingServiceContainer\";\n\nexport class Auth {\n static async user(): Promise<User | null> {\n const requestContextStore = RequestContext.getStore();\n const broadcastingContextStore =\n BroadcastingServiceContainer.use().context.getStore();\n\n let accessToken = \"\";\n let userAgent = \"\";\n\n if (requestContextStore?.req) {\n accessToken = requestContextStore.req.cookies.get(\"access_token\");\n userAgent = requestContextStore.req.headers.get(\"User-Agent\");\n }\n\n if (broadcastingContextStore?.cookies) {\n userAgent = broadcastingContextStore.headers.get(\"User-Agent\");\n accessToken = broadcastingContextStore.cookies.get(\"access_token\");\n }\n\n let user = requestContextStore?.user;\n\n if (!user) {\n const container = AuthenticationServiceContainer.use();\n // TODO: extend session if its expired\n const session = await container.getSession(accessToken, userAgent);\n\n user = session?.user;\n requestContextStore?.setUser(user);\n }\n\n if (user) {\n return user;\n }\n\n return null;\n }\n\n static async guard(\n fn: (user: User) => Promise<boolean> | boolean,\n ): Promise<void> {\n const user = await Auth.user();\n\n if (!user) {\n throw new InsufficientPermissionsError();\n }\n\n try {\n if (!(await fn(user))) {\n throw new InsufficientPermissionsError();\n }\n } catch (err) {\n throw new InsufficientPermissionsError();\n }\n }\n\n static async guardSafe(\n fn: (user: User) => Promise<boolean> | boolean,\n ): Promise<boolean> {\n const user = await Auth.user();\n\n if (!user) {\n return false;\n }\n try {\n return await fn(user);\n } catch (err) {\n return false;\n }\n }\n\n static async authenticate(email: string) {\n const container = AuthenticationServiceContainer.use();\n await container.authenticate(email);\n }\n\n static async createMagicLink(email: string) {\n const container = AuthenticationServiceContainer.use();\n return await container.createMagicLinkToken(email);\n }\n}\n",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"export function omitNullishValues<T>(input: T) {\n return Object.fromEntries(\n Object.entries(input).filter(([, value]) => {\n return value !== null && value !== undefined;\n }),\n ) as T;\n}\n",
|
|
11
11
|
"import type { IAuthenticationAdapter } from \"./types\";\n\nclass AdapterNotFound extends Error {\n constructor() {\n super(\"Adapter not found\");\n this.name = \"AdapterNotFound\";\n }\n}\n\nexport class BlankAdapter implements IAuthenticationAdapter {\n // @ts-ignore\n createSession() {\n throw new AdapterNotFound();\n }\n\n // @ts-ignore\n deleteSession() {\n throw new AdapterNotFound();\n }\n\n // @ts-ignore\n findSession() {\n throw new AdapterNotFound();\n }\n\n // @ts-ignore\n findUserByEmailAddress() {\n throw new AdapterNotFound();\n }\n\n // @ts-ignore\n updateSession() {\n throw new AdapterNotFound();\n }\n\n // @ts-ignore\n createUser() {\n throw new AdapterNotFound();\n }\n}\n",
|
|
12
12
|
"import { Temporal } from \"temporal-polyfill\";\n\nimport { Controller } from \"../http/Controller\";\nimport { HttpRequest } from \"../http/HttpRequest\";\nimport { ApiRouter } from \"../http/ApiRouter\";\nimport { ViewRouter } from \"../http/ViewRouter\";\nimport { Auth } from \"../facades\";\nimport type {\n IAuthenticationAdapter,\n Invitation,\n User,\n} from \"./adapters/types\";\nimport { BlankAdapter } from \"./adapters/blank\";\nimport { AuthorizationError } from \"../http/errors\";\nimport { ValidationError } from \"../http\";\nimport { ServiceProvider } from \"../services/ServiceProvider\";\nimport { AuthenticationServiceContainer } from \"./AuthenticationServiceContainer\";\nimport { I18nServiceContainer } from \"../i18n/I18nServiceContainer\";\nimport type { OAuthProvider } from \"./oauth/OAuthProvider\";\n\nclass SignInRequest extends HttpRequest<\n {\n email: string;\n password: string;\n },\n Record<string, string>\n> {\n schema = {\n email: {\n required: \"Email is required\",\n string: \"Invalid email\",\n email: \"Invalid email\",\n },\n password: {\n required: \"Password is required\",\n },\n };\n}\n\nclass SignUpRequest extends HttpRequest<\n {\n name: string;\n email: string;\n password: string;\n invitationId?: string;\n },\n Record<string, string>\n> {\n schema = {\n name: {\n string: \"Invalid name\",\n required: \"Name is required\",\n \"min:2\": \"Name must be at least 3 characters\",\n },\n email: {\n string: \"Invalid email\",\n required: \"Email is required\",\n email: \"Invalid email\",\n },\n password: {\n required: \"Password is required\",\n \"min:8\": \"Password must be at least 8 characters\",\n },\n };\n}\n\nclass ForgotPasswordRequest extends HttpRequest<\n {\n email: string;\n },\n Record<string, string>\n> {\n schema = {\n email: {\n required: \"Email is required\",\n email: \"Invalid email\",\n },\n };\n}\n\nclass ResetPasswordRequest extends HttpRequest<\n {\n password: string;\n token: string;\n },\n Record<string, string>\n> {\n schema = {\n password: {\n required: \"Password is required\",\n password: \"Invalid password\",\n },\n };\n}\n\nclass AuthController extends Controller {\n provider = AuthenticationServiceContainer.use()?.provider;\n\n async me() {\n const user = await Auth.user();\n\n if (!user) {\n throw new AuthorizationError();\n }\n\n return user;\n }\n\n async verifyEmail(req = new HttpRequest<{ token: string }>()) {\n const input = await req.input();\n const authProvider = AuthenticationServiceContainer.use()?.provider;\n\n const user = await authProvider.adapter.findUserByVerificationToken(\n input.get(\"token\"),\n );\n\n if (!user) {\n return { email: null };\n }\n\n await authProvider.adapter.verifyUser(user.email);\n\n if (user) {\n return {\n email: user.email,\n };\n }\n\n return { email: null };\n }\n\n async signInWithMagicLink(req = new HttpRequest()) {\n const container = AuthenticationServiceContainer.use();\n const authProvider = container.provider;\n const token = req.search.get(\"token\");\n const email = decodeURIComponent(req.search.get(\"email\"));\n\n let magicLink = null;\n\n try {\n magicLink = await authProvider.adapter.findUserMagicLinkToken({\n email,\n token,\n });\n } catch (err) {\n console.log(err);\n return { error: JSON.stringify(err) };\n }\n\n if (!magicLink) {\n return { error: \"Invalid token\" };\n }\n\n await authProvider.adapter.verifyUser(email);\n await authProvider.adapter.deleteMagicLinkToken(email);\n const session = await container.createOrUpdateSession({ email });\n\n req.ctx().setCookie(\"access_token\", session.token, {\n expires: session.absoluteExpiresAt,\n });\n\n await authProvider.onSignIn(session);\n\n return { session };\n }\n\n async signInWithPin(req = new HttpRequest<{ email: string; pin: string }>()) {\n const container = AuthenticationServiceContainer.use();\n const authProvider = container.provider;\n const input = await req.input();\n const { email, pin } = input.toJSON();\n\n const magicLinkToken = await authProvider.adapter.findUserMagicLinkToken({\n email,\n pin,\n });\n\n if (!magicLinkToken) {\n throw new ValidationError({\n pin: [\"Invalid pin\"],\n });\n }\n\n await authProvider.adapter.deleteMagicLinkToken(email);\n await authProvider.adapter.verifyUser(email);\n\n const session = await container.createOrUpdateSession({ email });\n\n req.ctx().setCookie(\"access_token\", session.token, {\n expires: session.absoluteExpiresAt,\n });\n\n await authProvider.onSignIn(session);\n\n return { session };\n }\n\n async signIn(req = new SignInRequest()) {\n const input = await req.input();\n const { email, password } = input.toJSON();\n\n const authProvider = AuthenticationServiceContainer.use().provider;\n\n const user = await authProvider.adapter.findUserByEmailAddress(\n email,\n authProvider.verifyEmail,\n );\n\n if (!user) {\n throw new ValidationError({\n invalid_credentials: [\"Invalid credentials\"],\n });\n }\n\n const isPasswordValid = await authProvider.verifyPassword(\n password,\n user.password,\n );\n\n if (!isPasswordValid) {\n throw new ValidationError({\n invalid_credentials: [\"Invalid credentials\"],\n });\n }\n\n const session =\n await AuthenticationServiceContainer.use().createOrUpdateSession({\n email: user.email,\n id: user.id,\n });\n\n req.ctx().setCookie(\"access_token\", session.token, {\n expires: session.absoluteExpiresAt,\n });\n\n await authProvider.onSignIn(user);\n\n const { password: _, ...rest } = user;\n\n return rest;\n }\n\n async signUp(req = new SignUpRequest()) {\n const input = await req.input();\n const { email, password, name, invitationId } = input.toJSON();\n\n const authProvider = AuthenticationServiceContainer.use().provider;\n const user = await authProvider.adapter.findUserByEmailAddress(\n email,\n false,\n );\n\n if (user) {\n throw new ValidationError({\n email: [\"Email address already exists\"],\n });\n }\n\n const hashedPassword = await authProvider.hashPassword(password);\n\n const locale = I18nServiceContainer.use().detectLocale(req);\n\n let invitation: Invitation;\n if (invitationId) {\n invitation = await authProvider.adapter.findInvitation(\n invitationId,\n email,\n );\n\n if (invitation) {\n await authProvider.adapter.deleteInvitationById(invitationId);\n }\n }\n\n let newUser: User;\n let verificationToken: string;\n\n if (invitation) {\n newUser = await authProvider.adapter.createUser({\n email,\n name,\n password: hashedPassword,\n emailVerifiedAt: new Date(),\n locale,\n });\n await authProvider.adapter.createAccount({\n organizationId: invitation.organizationId,\n userId: newUser.id,\n organizationRole: invitation.role,\n });\n } else {\n verificationToken =\n await authProvider.generateEmailVerificationToken(email);\n\n newUser = await authProvider.adapter.createUser({\n email,\n name,\n password: hashedPassword,\n verificationToken,\n locale,\n });\n }\n\n await authProvider.onSignUp(newUser, verificationToken);\n\n return newUser;\n }\n\n async signOut(req = new HttpRequest()) {\n const token = req.cookies.get(\"access_token\");\n\n const user = await Auth.user();\n\n const authProvider = AuthenticationServiceContainer.use().provider;\n\n await authProvider.adapter.deleteSession({ token });\n\n req.ctx().setCookie(\"access_token\", \"\", {\n expires: new Date(0),\n });\n\n await authProvider.onSignOut(user);\n\n return {};\n }\n\n async forgotPassword(req = new ForgotPasswordRequest()) {\n const input = await req.input();\n const { email } = input.toJSON();\n\n const authProvider = AuthenticationServiceContainer.use().provider;\n\n const user = await authProvider.adapter.findUserByEmailAddress(\n email,\n authProvider.verifyEmail,\n );\n\n if (!user) {\n return {};\n }\n\n const token = await authProvider.generateForgotPasswordToken(user);\n\n // TODO: Do not create token if already there is one that is valid\n // Prevent token spamming\n await authProvider.adapter.createPasswordResetToken({\n user,\n token,\n });\n\n await authProvider.onForgotPassword(user, token);\n\n return {};\n }\n\n async resetPassword(req = new ResetPasswordRequest()) {\n const authProvider = AuthenticationServiceContainer.use().provider;\n const input = await req.input();\n const { password, token } = input.toJSON();\n\n const passwordResetToken =\n await authProvider.adapter.findPasswordResetToken({ token });\n\n if (!passwordResetToken) {\n throw new ValidationError({\n token: [\"Invalid token\"],\n });\n }\n\n const isTokenExpired = Temporal.Instant.from(\n passwordResetToken.createdAt.toISOString(),\n )\n .add({ hours: 24 })\n .until(Temporal.Now.instant()).sign;\n\n if (isTokenExpired >= 0) {\n throw new ValidationError({\n token: [\"Token expired\"],\n });\n }\n\n await authProvider.adapter.deletePasswordResetToken({ token });\n\n const user = await authProvider.adapter.findUserByEmailAddress(\n passwordResetToken.user.email,\n authProvider.verifyEmail,\n );\n\n if (!user) {\n throw new ValidationError({\n email: [\"User not found\"],\n });\n }\n\n const hashedPassword = await authProvider.hashPassword(password);\n\n await authProvider.adapter.updateUserPassword({\n id: user.id,\n password: hashedPassword,\n });\n\n await authProvider.adapter.deleteAllUserSessions(user.id);\n\n await authProvider.onResetPassword(user);\n\n return {};\n }\n\n async changePassword(\n req = new HttpRequest<{ oldPassword: string; newPassword: string }>(),\n ) {\n const authProvider = AuthenticationServiceContainer.use().provider;\n const user = await Auth.user();\n const input = await req.input();\n const { oldPassword, newPassword } = input.toJSON();\n\n const { password } = await authProvider.adapter.findUserByEmailAddress(\n user.email,\n authProvider.verifyEmail,\n );\n\n const isPasswordValid = await authProvider.verifyPassword(\n oldPassword,\n password,\n );\n\n if (!isPasswordValid) {\n throw new ValidationError({\n oldPassword: [\"Incorrect password\"],\n });\n }\n\n const hashedPassword = await authProvider.hashPassword(newPassword);\n\n await authProvider.adapter.updateUserPassword({\n id: user.id,\n password: hashedPassword,\n });\n\n await authProvider.adapter.deleteAllUserSessions(user.id);\n return {};\n }\n\n async oauthRedirect(req = new HttpRequest()) {\n const { provider } = req.params;\n const oauthProvider =\n AuthenticationServiceContainer.use().provider.oauthProviders[\n provider as string\n ];\n\n if (!oauthProvider) {\n throw new Error(`Invalid provider: ${provider}`);\n }\n\n return {\n destination: await oauthProvider.getRedirectUrl(req),\n };\n }\n\n async oauthCallback(req = new HttpRequest()) {\n const { provider } = req.params;\n const container = AuthenticationServiceContainer.use();\n const authProvider = container.provider;\n const oauthProvider = authProvider.oauthProviders[provider as string];\n const { email, name, username, providerId } =\n await oauthProvider.onCallback(req);\n\n if (!username && !email) {\n throw new Error(\"Email or username is required\");\n }\n\n const identifier = email ?? `${username}:${provider}`;\n\n let user = await authProvider.adapter.findUserByEmailAddress(\n identifier,\n false,\n );\n\n const locale = I18nServiceContainer.use().detectLocale(req);\n\n if (!user) {\n user = await authProvider.adapter.createUser({\n email: identifier,\n name,\n locale,\n emailVerifiedAt: new Date(),\n });\n\n // TODO: fix missing fields\n await authProvider.adapter.createSocialAccount({\n provider,\n userId: user.id,\n email: identifier,\n username,\n providerId,\n expiresAt: new Date(),\n accessToken: \"\",\n refreshToken: \"\",\n });\n }\n\n const session = await container.createOrUpdateSession({\n email: user.email,\n id: user.id,\n });\n\n req.ctx().setCookie(\"access_token\", session.token, {\n expires: session.expiresAt,\n });\n\n await authProvider.onSignIn(user);\n\n return {\n destination: authProvider.redirectPath,\n };\n }\n\n async createMagicLinkToken(req = new HttpRequest<{ email: string }>()) {\n const input = await req.input();\n const { email } = input.toJSON();\n const container = AuthenticationServiceContainer.use();\n const provider = container.provider;\n const { user, pin, token } = await container.createMagicLinkToken(email);\n\n await provider.onMagicLinkCreated(user, { email, pin, token });\n\n return {\n email,\n };\n }\n}\n\nclass OAuthViewRouter extends ViewRouter {\n routes = {\n \"/:provider\": this.redirect([AuthController, \"oauthRedirect\"]),\n \"/:provider/callback\": this.redirect([AuthController, \"oauthCallback\"]),\n };\n}\n\nexport class AuthViewRouter extends ViewRouter {\n routes = {\n \"/sign-in/magic-link\": this.view(\"auth/MagicLinkSignIn\", [\n AuthController,\n \"signInWithMagicLink\",\n ]),\n \"/oauth\": OAuthViewRouter,\n };\n}\n\nexport class AuthApiRouter extends ApiRouter {\n middlewares = [\"cache:private\"];\n routes = {\n \"/sign-in\": this.post(AuthController, \"signIn\"),\n \"/sign-up\": this.post(AuthController, \"signUp\"),\n \"/sign-out\": this.post(AuthController, \"signOut\"),\n \"/forgot-password\": this.post(AuthController, \"forgotPassword\"),\n \"/reset-password\": this.post(AuthController, \"resetPassword\"),\n \"/change-password\": this.post(AuthController, \"changePassword\"),\n \"/verify-email\": this.post(AuthController, \"verifyEmail\"),\n \"/me\": this.get(AuthController, \"me\").middleware([\"auth\"]),\n \"/magic-link\": this.post(AuthController, \"createMagicLinkToken\"),\n \"/sign-in-with-pin\": this.post(AuthController, \"signInWithPin\"),\n };\n}\n\nexport class AuthenticationServiceProvider extends ServiceProvider {\n basePath = \"/auth\";\n verifyEmail = true;\n redirectPath = \"/dashboard\";\n\n sessionExpiresInHours = 24;\n sessionAbsoluteExpiresInHours = 24 * 7 * 4;\n\n // @ts-ignore\n adapter: IAuthenticationAdapter = new BlankAdapter();\n\n oauthProviders: Record<string, OAuthProvider> = {};\n\n boot() {}\n\n async verifyPassword(password: string, hash: string): Promise<boolean> {\n return await Bun.password.verify(password, hash);\n }\n\n async hashPassword(password: string): Promise<string> {\n return await Bun.password.hash(password);\n }\n\n async generateForgotPasswordToken(user: User): Promise<string> {\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(`${user.email}${Date.now()}`);\n return hasher.digest(\"hex\");\n }\n\n generateEmailVerificationToken(email: string): Promise<string> | string {\n if (!this.verifyEmail) {\n return \"\";\n }\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(`${email}${Date.now()}`);\n return hasher.digest(\"hex\");\n }\n\n generateMagicLinkToken(email: string): Promise<string> | string {\n const hasher = new Bun.CryptoHasher(\"sha256\");\n hasher.update(`${email}${Date.now()}`);\n return hasher.digest(\"hex\");\n }\n\n extendSession<T extends User>(_user: T): Promise<any> | any {\n return {};\n }\n\n onSignUp<T extends User>(\n _user: T,\n _verificationToken?: string,\n ): Promise<void> | void {}\n onSignIn(_session: any): Promise<void> | void {}\n onSignOut(_session: any): Promise<void> | void {}\n onForgotPassword(\n _user: any,\n _verificationToken: string,\n ): Promise<void> | void {}\n onResetPassword(_session: any): Promise<void> | void {}\n onMagicLinkCreated(\n _session: any,\n _args: { email: string; token: string; pin: string },\n ): Promise<void> | void {\n return;\n }\n}\n",
|
|
13
|
+
"import { ApiRouter, HttpRequest } from \"../http\";\nimport { I18nServiceContainer } from \"./I18nServiceContainer\";\n\nexport class I18nRouter extends ApiRouter {\n middlewares = [\"cache:private,0,no-store\"];\n routes = {\n \"/translations/:locale/:scope*\": this.get(async () => {\n const req = new HttpRequest<any, any>();\n\n const scope = `/${req.params.scope ?? \"\"}`;\n const forcedLocale = req.params.locale;\n\n const locale =\n forcedLocale ?? I18nServiceContainer.use().detectLocale(req);\n\n const translations = I18nServiceContainer.use().getPageTranslations(\n locale,\n scope,\n );\n\n req.ctx().setCookie(\"i18n-locale\", locale, {\n expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),\n });\n\n return {\n [locale]: translations,\n };\n }),\n };\n}\n",
|
|
13
14
|
"import { ApiRouter, HttpRequest } from \"../../http\";\nimport { ServiceContainer } from \"../ServiceContainer\";\nimport type { ImageOptimizationServiceProvider } from \"./ImageOptimizationServiceProvider\";\n\nexport class ImageOptimizationRouter extends ApiRouter {\n routes = {\n \"/resize\": this.file(async () => {\n const req = new HttpRequest();\n const url = new URL(req.rawRequest.url);\n const rawImageUrl = url.searchParams.get(\"url\");\n const width = Number(url.searchParams.get(\"w\"));\n const height = Number(url.searchParams.get(\"h\"));\n const fit = url.searchParams.get(\"fit\") ?? \"cover\";\n const quality = Number(url.searchParams.get(\"q\"));\n\n if (!rawImageUrl) {\n return new Response(\n JSON.stringify({\n error: \"url query parameter is required\",\n }),\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n status: 404,\n },\n );\n }\n const prefix = rawImageUrl.startsWith(\"http\")\n ? \"\"\n : `http://localhost:${process.env.PORT || 5173}`;\n const fullImageUrl = `${prefix}${rawImageUrl}`;\n const res = await fetch(fullImageUrl);\n if (!res.ok) {\n return new Response(\n JSON.stringify({\n error: \"Image not found\",\n info: fullImageUrl,\n }),\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n status: 404,\n },\n );\n }\n\n const imageBuffer = Buffer.from(await res.arrayBuffer());\n\n const buffer =\n await ImageOptimizationServiceContainer.use().service.driver.resize(\n imageBuffer,\n { height, width, fit: fit as any, quality },\n );\n\n res.headers.delete(\"Content-Type\");\n res.headers.delete(\"Content-Length\");\n return new Response(buffer, {\n headers: {\n \"Content-Type\": \"image/webp\",\n \"Content-Length\": `${buffer.byteLength}`,\n ...res.headers.toJSON(),\n },\n });\n }),\n };\n}\n\nexport class ImageOptimizationServiceContainer extends ServiceContainer {\n static _name = \"ImageOptimizationServiceContainer\";\n\n constructor(public service: ImageOptimizationServiceProvider) {\n super();\n }\n}\n",
|
|
14
15
|
"import type { FileSink } from \"bun\";\nimport { mkdir, exists, readdir } from \"fs/promises\";\nimport { ServiceContainer } from \"../ServiceContainer\";\nimport { LoggingServiceProvider } from \"./LoggingServiceProvider\";\nimport { Broadcast } from \"../../facades/Broadcast\";\nimport { RequestContext } from \"../../http/requestContext\";\nimport type { LogEntry, LogLevel } from \"./types\";\n\nexport class LoggingServiceContainer extends ServiceContainer {\n static _name = \"LoggingServiceContainer\";\n\n writer: FileSink;\n isReady: boolean = false;\n\n private logsDirPath: string = `${process.env.ROOT_DIR}/storage/logs`;\n private flushTimeout: Timer;\n private fileSize: number = 0;\n private writerSize: number = 0;\n private isCreatingFile: boolean = false;\n public currentLogFilePath: string;\n\n constructor(public service: LoggingServiceProvider) {\n super();\n this.boot().then(() => {\n this.isReady = true;\n });\n }\n\n async boot() {\n if (!process.env.ROOT_DIR) {\n return;\n }\n if (!(await exists(`${process.env.ROOT_DIR}/storage`))) {\n await mkdir(`${process.env.ROOT_DIR}/storage`);\n }\n if (!(await exists(this.logsDirPath))) {\n await mkdir(this.logsDirPath);\n }\n this.newLogFile();\n }\n\n async newLogFile() {\n if (!(await exists(this.logsDirPath))) {\n await mkdir(this.logsDirPath);\n }\n this.isCreatingFile = true;\n if (this.currentLogFilePath) {\n this.writer.flush();\n this.writer.end();\n this.writer = null;\n const file = new File(\n [await Bun.file(this.currentLogFilePath).arrayBuffer()],\n this.currentLogFilePath.split(\"/\").pop(),\n { type: \"text/plain\" },\n );\n this.service.onLogFileClosed(file);\n this.fileSize = 0;\n this.writerSize = 0;\n }\n\n const logFiles = await readdir(this.logsDirPath);\n\n const lastLogFile = logFiles.sort().reverse()[0];\n\n if (lastLogFile) {\n const _file = Bun.file(`${this.logsDirPath}/${lastLogFile}`);\n if (_file.size < this.service.maxFileSize) {\n this.currentLogFilePath = `${this.logsDirPath}/${lastLogFile}`;\n\n this.writer = _file.writer();\n this.writer.write(await _file.text());\n this.writer.write(\"\\n\");\n this.writer.flush();\n this.fileSize = _file.size;\n }\n }\n\n if (!this.writer) {\n const logFileName =\n `${new Date(Date.now()).toISOString()}.log`.replaceAll(\":\", \"-\");\n this.currentLogFilePath = `${this.logsDirPath}/${logFileName}`;\n const file = Bun.file(`${this.logsDirPath}/${logFileName}`);\n this.writer = file.writer();\n this.fileSize = 0;\n this.writerSize = 0;\n }\n this.isCreatingFile = false;\n }\n\n async log(\n level: LogLevel,\n message: string,\n metadata: Record<string, any> = {},\n ) {\n if (!this.isReady) {\n await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (this.isReady) {\n resolve({});\n clearInterval(interval);\n }\n }, 100);\n });\n }\n\n const reqCtx = RequestContext.getStore();\n let requestMetadata = {};\n if (reqCtx) {\n requestMetadata = {\n url: reqCtx.req.rawRequest.url,\n method: reqCtx.req.rawRequest.method,\n headers: reqCtx.req.rawRequest.headers,\n body: reqCtx.req.rawRequest.body,\n };\n }\n\n const logObject: LogEntry = {\n timestamp: new Date(Date.now()).toISOString(),\n env: process.env.NODE_ENV,\n level,\n message,\n metadata: { ...requestMetadata, ...metadata },\n };\n\n let log = \"\";\n try {\n log = JSON.stringify(logObject);\n } catch (err) {\n throw new Error(\"Metadata must be a valid JSON object\");\n }\n this.writerSize += log.length;\n this.fileSize += log.length;\n\n this.writer.write(log);\n this.writer.write(\"\\n\");\n Broadcast.channel(\"/logs/live\", {}).publish(JSON.stringify(logObject));\n this.service.onLogCreated(logObject);\n this.tryFlush();\n }\n\n async tryFlush() {\n if (this.fileSize > this.service.maxFileSize) {\n if (!this.isCreatingFile) {\n await this.newLogFile();\n }\n }\n if (this.writerSize > this.service.maxFileSize / 2) {\n await this.writer.flush();\n this.writerSize = 0;\n await this.newLogFile();\n } else {\n clearTimeout(this.flushTimeout);\n this.flushTimeout = setTimeout(async () => {\n await this.writer.flush();\n this.writerSize = 0;\n }, 100);\n }\n }\n}\n",
|
|
15
16
|
"import { KernelContext } from \"../kernel/KernelContext\";\nimport { BroadcastingServiceContainer } from \"../services/pubsub/BroadcastingServiceContainer\";\nimport { applyParams } from \"../utils/applyParams\";\n\nexport class Broadcast {\n static channel<T>(route: T, params: any) {\n const channel =\n BroadcastingServiceContainer.use().service.channels[route as any];\n if (!channel) {\n console.error(`Channel ${route} not found`);\n return {\n publish: () => {},\n };\n }\n const instance = new channel();\n return {\n publish: (\n data: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer,\n compress: boolean = false,\n ) => {\n const topic = applyParams(route as any, params);\n BroadcastingServiceContainer.use().publish(\n topic,\n JSON.stringify({ topic, data: instance.publish(data) }),\n compress,\n );\n },\n };\n }\n}\n",
|
|
@@ -22,11 +23,11 @@
|
|
|
22
23
|
"import type { ComponentTree } from \"../../client/types\";\nimport type { ViewRoutes } from \"../../http/ViewRouter\";\n\nexport function createComponentTree(routes: ViewRoutes): ComponentTree {\n const componentTree: ComponentTree = [];\n\n for (const [_, routeHandler] of Object.entries(routes)) {\n if (\"run\" in routeHandler) {\n const viewPath = routeHandler.viewPath;\n if (viewPath === \"__\") {\n continue;\n }\n if (viewPath === \"REDIRECT\") {\n continue;\n }\n\n if (\"children\" in routeHandler) {\n const router = new routeHandler.children();\n const branch = createComponentTree(router.routes);\n componentTree.push([viewPath, branch]);\n } else {\n componentTree.push([viewPath, []]);\n }\n } else {\n const router = new routeHandler();\n const branch = createComponentTree(router.routes);\n componentTree.push(...branch);\n }\n }\n\n return componentTree;\n}\n",
|
|
23
24
|
"import type { ComponentTree } from \"../types\";\n\nexport function flattenComponentTree(componentTree: ComponentTree): string[] {\n let out: string[] = [];\n for (const [root, branches] of componentTree) {\n out.push(root, ...flattenComponentTree(branches).flat());\n }\n return Array.from(new Set(out));\n}\n",
|
|
24
25
|
"import { LoggingServiceContainer } from \"../services/logging/LoggingServiceContainer\";\n\nexport class Log {\n static debug(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"debug\", message, metadata);\n }\n\n static info(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"info\", message, metadata);\n }\n\n static notice(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"notice\", message, metadata);\n }\n\n static warning(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"warning\", message, metadata);\n }\n\n static error(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"error\", message, metadata);\n }\n\n static critical(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"critical\", message, metadata);\n }\n\n static alert(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"alert\", message, metadata);\n }\n\n static emergency(message: string, metadata?: Record<string, any>) {\n LoggingServiceContainer.use().log(\"emergency\", message, metadata);\n }\n}\n",
|
|
25
|
-
"import { AuthApiRouter } from \"../../auth/AuthenticationServiceProvider\";\nimport { ApiRouter, HttpRequest } from \"../../http\";\nimport { GEMI_REQUEST_BREAKER_ERROR } from \"../../http/Error\";\nimport { I18nRouter } from \"../../
|
|
26
|
+
"import { AuthApiRouter } from \"../../auth/AuthenticationServiceProvider\";\nimport { ApiRouter, HttpRequest } from \"../../http\";\nimport { GEMI_REQUEST_BREAKER_ERROR } from \"../../http/Error\";\nimport { I18nRouter } from \"../../i18n/I18nRouter\";\nimport { RequestContext } from \"../../http/requestContext\";\nimport { ImageOptimizationRouter } from \"../image-optimization/ImageOptimizationServiceContainer\";\nimport { LoggingRouter } from \"../logging/LoggingRouter\";\nimport { MiddlewareServiceContainer } from \"../middleware/MiddlewareServiceContainer\";\nimport { ServiceContainer } from \"../ServiceContainer\";\nimport type { ApiRouterServiceProvider } from \"./ApiRouterServiceProvider\";\nimport { createFlatApiRoutes, type FlatApiRoutes } from \"./createFlatApiRoutes\";\nimport { ViewRouterServiceContainer } from \"./ViewRouterServiceContainer\";\n\nclass DebugRouter extends ApiRouter {\n routes = {\n \"/api-routes\": this.get(() => {\n const flatroutes = ApiRouterServiceContainer.use().flatRoutes;\n const out = [];\n for (const [path, methods] of Object.entries(flatroutes)) {\n for (const [method, handler] of Object.entries(methods)) {\n const { exec, middleware } = handler;\n out.push({ path, method, middleware });\n }\n }\n return out;\n }),\n \"/view-routes\": this.get(() => {\n const flatroutes = ViewRouterServiceContainer.use().flatViewRoutes;\n const out = [];\n for (const [path, { middleware, viewPath }] of Object.entries(\n flatroutes,\n )) {\n out.push({ path, method: \"GET\", viewPath, middleware });\n }\n return out;\n }),\n };\n}\n\nexport class ApiRouterServiceContainer extends ServiceContainer {\n static _name = \"ApiRouterServiceContainer\";\n\n flatRoutes: FlatApiRoutes = {};\n\n constructor(public service: ApiRouterServiceProvider) {\n super();\n this.flatRoutes = createFlatApiRoutes({\n \"/\": this.service.rootRouter.bind(this.service),\n \"/auth\": AuthApiRouter,\n \"/__gemi__/services/i18n\": I18nRouter,\n \"/__gemi__/services/logs\": LoggingRouter,\n \"/__gemi__/services/image\": ImageOptimizationRouter,\n \"/__gemi__/debug\": DebugRouter,\n });\n }\n\n public getRouteHandlerAndParams(req: Request) {\n const url = new URL(req.url);\n\n const apiPath = url.pathname.replace(\"/api\", \"\");\n\n let params: Record<string, any> = {};\n let path: string;\n for (const [_path] of Object.entries(this.flatRoutes)) {\n try {\n const pattern = new URLPattern({ pathname: _path });\n if (pattern.test({ pathname: apiPath })) {\n path = _path;\n params = pattern.exec({ pathname: apiPath })?.pathname.groups!;\n break;\n }\n } catch (err) {\n console.error(err);\n // Do something\n }\n }\n return { params, path };\n }\n\n async runRouteMiddleware(path: string, httpRequest: HttpRequest) {\n const routeHandler = this.flatRoutes[path];\n const middlewares = routeHandler[httpRequest.rawRequest.method].middleware;\n try {\n await MiddlewareServiceContainer.use().runMiddleware(middlewares);\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n if (httpRequest.rawRequest.url.includes(\"/api\")) {\n const { status = 400, data, headers } = err.payload.api;\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n });\n }\n } else {\n this.service.onRequestFail(httpRequest, err);\n console.error(err);\n throw err;\n }\n }\n }\n\n async getRouteData(path: string): Promise<any> {\n const routeHandler = this.flatRoutes[path];\n\n const ctx = RequestContext.getStore();\n const exec =\n routeHandler[ctx.req.rawRequest.method].exec ??\n (() => Promise.resolve({}));\n\n let data = {};\n try {\n data = await exec();\n } catch (err) {\n if (err.kind === GEMI_REQUEST_BREAKER_ERROR) {\n const { status = 400, data, headers } = err.payload.api;\n\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n });\n }\n this.service.onRequestFail(ctx.req, err);\n console.error(err);\n throw err;\n }\n\n return data;\n }\n\n async handleApiRequest(req: Request) {\n const { params, path } = this.getRouteHandlerAndParams(req);\n\n const routeHandler = this.flatRoutes[path];\n\n if (!routeHandler || !routeHandler[req.method]) {\n return new Response(JSON.stringify({ error: { message: \"Not found\" } }), {\n status: 404,\n });\n }\n\n const httpRequest = new HttpRequest(req, params, \"api\", path);\n if (!req.url.includes(\"/__gemi__\")) {\n this.service.onRequestStart(httpRequest);\n }\n return await RequestContext.run(httpRequest, async () => {\n const ctx = RequestContext.getStore();\n ctx.setRequest(httpRequest);\n const middlewareResponse = await this.runRouteMiddleware(\n path,\n httpRequest,\n );\n\n if (middlewareResponse instanceof Response) {\n return middlewareResponse;\n }\n const data = await this.getRouteData(path);\n\n if (data instanceof Response) {\n return data;\n }\n\n const headers = ctx.headers;\n\n headers.append(\"Content-Type\", \"application/json\");\n\n ctx.cookies.forEach((cookie) =>\n headers.append(\"Set-Cookie\", cookie.toString()),\n );\n\n ctx.destroy();\n\n if (!req.url.includes(\"/__gemi__\")) {\n this.service.onRequestEnd(httpRequest);\n }\n return new Response(JSON.stringify(data), {\n headers,\n });\n });\n }\n}\n",
|
|
26
27
|
"import type { RPC } from \"../client/rpc\";\nimport type { UrlParser } from \"../client/types\";\nimport type { ApiRouterHandler } from \"../http/ApiRouter\";\nimport { HttpRequest } from \"../http/HttpRequest\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { applyParams } from \"../utils/applyParams\";\nimport { omitNullishValues } from \"../utils/omitNullishValues\";\nimport { ApiRouterServiceContainer } from \"../services/router/ApiRouterServiceContainer\";\n\ntype GetRPC = {\n [K in keyof RPC as K extends `GET:${infer P}` ? P : never]: RPC[K];\n};\n\ntype Data<T extends keyof GetRPC> =\n GetRPC[T] extends ApiRouterHandler<any, infer Data, any>\n ? Awaited<Data>\n : never;\n\ntype Input<T extends keyof GetRPC> =\n GetRPC[T] extends ApiRouterHandler<infer Input, any, any> ? Input : never;\n\nexport class Query {\n private static prepare<T extends keyof GetRPC>(\n path: T,\n ...args: [\n options?: {\n search?: Partial<Input<T>>;\n params?: Partial<UrlParser<T>>;\n },\n ]\n ) {\n const defaultOptions = { params: {}, search: {} };\n const [options = {}] = args;\n const { search, params } = { ...defaultOptions, ...options };\n const ctx = RequestContext.getStore();\n\n if (ctx.req.kind === \"api\") {\n throw new Error(\"Query.prefetch() cannot be called from an API request\");\n }\n\n const req = ctx.req.rawRequest;\n const url = new URL(req.url);\n const searchParams = new URLSearchParams(\n omitNullishValues(search as Record<string, string>),\n );\n searchParams.delete(\"json\");\n searchParams.sort();\n const pathnameWithSearchParams = [\n `${applyParams(path, params)}`,\n searchParams.toString(),\n ]\n .filter((s) => s.length > 0)\n .join(\"?\");\n\n const urlStr = `${url.origin}/${pathnameWithSearchParams}`;\n const newReq = new Request(urlStr, { headers: req.headers });\n const httpRequest = new HttpRequest(newReq, params);\n const store = (data: any) => {\n ctx.prefetchedResources.set(applyParams(path, params), {\n [searchParams.toString()]: data,\n });\n };\n\n const trigger = () => {\n return RequestContext.run(httpRequest, async () => {\n const data: Data<T> =\n await ApiRouterServiceContainer.use().getRouteData(path);\n store(data);\n return data;\n });\n };\n\n return {\n instant: trigger,\n prefetch: () => {\n ctx.prefetchPromiseQueue.add(trigger);\n },\n };\n }\n\n static instant<T extends keyof GetRPC>(\n path: T,\n ...args: [\n options?: { search?: Partial<Input<T>>; params?: Partial<UrlParser<T>> },\n ]\n ) {\n return Query.prepare(path, ...args).instant();\n }\n\n static prefetch<T extends keyof GetRPC>(\n path: T,\n ...args: [\n options?: { search?: Partial<Input<T>>; params?: Partial<UrlParser<T>> },\n ]\n ) {\n return Query.prepare(path, ...args).prefetch();\n }\n}\n",
|
|
27
28
|
"import type { UrlParser, ViewPaths } from \"../client/types\";\nimport { applyParams } from \"../utils/applyParams\";\n\nexport class Url {\n static absolute<T extends ViewPaths>(\n key: T,\n ...args: UrlParser<T> extends Record<string, never>\n ? []\n : [params: UrlParser<T>]\n ) {\n return `${process.env.HOST_NAME}${applyParams(String(key), args[0] ?? {})}`;\n }\n\n static relative<T extends ViewPaths>(\n key: T,\n ...args: UrlParser<T> extends Record<string, never>\n ? []\n : [params: UrlParser<T>]\n ) {\n return applyParams(String(key), args[0] ?? {});\n }\n}\n"
|
|
28
29
|
],
|
|
29
|
-
"mappings": "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",
|
|
30
|
-
"debugId": "
|
|
30
|
+
"mappings": "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",
|
|
31
|
+
"debugId": "D86968DEFFB8914B64756E2164756E21",
|
|
31
32
|
"names": []
|
|
32
33
|
}
|
|
@@ -28,7 +28,7 @@ export declare class HttpRequest<T extends Body = Record<string, never>, Params
|
|
|
28
28
|
routePath: string;
|
|
29
29
|
params: Params;
|
|
30
30
|
constructor(req?: Request, params?: any, kind?: HttpRequestKind, routePath?: string);
|
|
31
|
-
locale():
|
|
31
|
+
locale(): string;
|
|
32
32
|
ctx(): {
|
|
33
33
|
cookies: Set<import("./Cookie").Cookie>;
|
|
34
34
|
headers: Headers;
|