@absolutejs/auth 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -327,4 +327,4 @@ if(mr!==undefined)error=context.response=mr}`,N()}}return Y.resolve(),U+=`
327
327
  return mapResponse(${$}error,set${W.mapResponseContext})}`,Function("inject",U)({app:z,mapResponse:z["~adapter"].handler.mapResponse,ERROR_CODE:m5,ElysiaCustomStatusResponse:K1,ELYSIA_TRACE:A?Jw:void 0,ELYSIA_REQUEST_ID:A?l5:void 0,...W.inject})},Uw=(z,w)=>{for(let[U,W]of Object.entries(z.schema.properties))w[U]??=W.default},TW=(z)=>{let{mapResponse:w,mapEarlyResponse:U}=z["~adapter"].handler;return async(W)=>{let X=W.url,A=X.indexOf("/",11),Z=X.indexOf("?",A+1),$=Z===-1?X.substring(A):X.substring(A,Z),Y={cookie:{},status:200,headers:{}},Q=Object.assign({},z.singleton.decorator,{set:Y,store:z.singleton.store,request:W,path:$,qi:Z,error:yW,redirect:cW});try{if(z.event.request)for(let x=0;x<z.event.request.length;x++){let T=z.event.request[x].fn,F=T(Q);if(F instanceof Promise)F=await F;if(F=U(F,Y),F)return Q.response=F}let J=z.router.dynamic.find(W.method,$)??z.router.dynamic.find("ALL",$);if(!J)throw new Qw;let{handle:N,hooks:S,validator:G,content:O,route:B}=J.store,C;if(W.method!=="GET"&&W.method!=="HEAD")if(O)switch(O){case"application/json":C=await W.json();break;case"text/plain":C=await W.text();break;case"application/x-www-form-urlencoded":C=v5(await W.text());break;case"application/octet-stream":C=await W.arrayBuffer();break;case"multipart/form-data":C={};let x=await W.formData();for(let T of x.keys()){if(C[T])continue;let F=x.getAll(T);if(F.length===1)C[T]=F[0];else C[T]=F}break}else{let x=W.headers.get("content-type");if(x){let T=x.indexOf(";");if(T!==-1)x=x.slice(0,T);if(Q.contentType=x,S.parse)for(let F=0;F<S.parse.length;F++){let W0=S.parse[F].fn,G0=W0(Q,x);if(G0 instanceof Promise)G0=await G0;if(G0){C=G0;break}}if(delete Q.contentType,C===void 0)switch(x){case"application/json":C=await W.json();break;case"text/plain":C=await W.text();break;case"application/x-www-form-urlencoded":C=v5(await W.text());break;case"application/octet-stream":C=await W.arrayBuffer();break;case"multipart/form-data":C={};let F=await W.formData();for(let W0 of F.keys()){if(C[W0])continue;let G0=F.getAll(W0);if(G0.length===1)C[W0]=G0[0];else C[W0]=G0}break}}}Q.route=B,Q.body=C,Q.params=J?.params||void 0,Q.query=Z===-1?{}:v5(X.substring(Z+1)),Q.headers={};for(let[x,T]of W.headers.entries())Q.headers[x]=T;let i=Object.assign({},z.config?.cookie,G?.cookie?.config),N0=W.headers.get("cookie");Q.cookie=await eW(Q.set,N0,i?{secrets:i.secrets!==void 0?typeof i.secrets==="string"?i.secrets:i.secrets.join(","):void 0,sign:i.sign===!0?!0:i.sign!==void 0?typeof i.sign==="string"?i.sign:i.sign.join(","):void 0}:void 0);let U0=G?.createHeaders?.();if(U0)Uw(U0,Q.headers);let D0=G?.createParams?.();if(D0)Uw(D0,Q.params);let K0=G?.createQuery?.();if(K0)Uw(K0,Q.query);if(S.transform)for(let x=0;x<S.transform.length;x++){let T=S.transform[x],F=T.fn(Q);if(T.subType==="derive")if(F instanceof Promise)Object.assign(Q,await F);else Object.assign(Q,F);else if(F instanceof Promise)await F}if(G){if(U0){let x=structuredClone(Q.headers);for(let[T,F]of W.headers)x[T]=F;if(G.headers.Check(x)===!1)throw new r("header",G.headers,x)}else if(G.headers?.Decode)Q.headers=G.headers.Decode(Q.headers);if(D0?.Check(Q.params)===!1)throw new r("params",G.params,Q.params);else if(G.params?.Decode)Q.params=G.params.Decode(Q.params);if(K0?.Check(Q.query)===!1)throw new r("query",G.query,Q.query);else if(G.query?.Decode)Q.query=G.query.Decode(Q.query);if(G.createCookie?.()){let x={};for(let[T,F]of Object.entries(Q.cookie))x[T]=F.value;if(G.cookie.Check(x)===!1)throw new r("cookie",G.cookie,x);else if(G.cookie?.Decode)x=G.cookie.Decode(x)}if(G.createBody?.()?.Check(C)===!1)throw new r("body",G.body,C);else if(G.body?.Decode)Q.body=G.body.Decode(C)}if(S.beforeHandle)for(let x=0;x<S.beforeHandle.length;x++){let T=S.beforeHandle[x],F=T.fn(Q);if(T.subType==="resolve"){if(F instanceof K1){let W0=U(F,Q.set);if(W0)return Q.response=W0}if(F instanceof Promise)Object.assign(Q,await F);else Object.assign(Q,F);continue}else if(F instanceof Promise)F=await F;if(F!==void 0){if(Q.response=F,S.afterHandle)for(let G0=0;G0<S.afterHandle.length;G0++){let H0=S.afterHandle[G0].fn(Q);if(H0 instanceof Promise)H0=await H0;if(H0)F=H0}let W0=U(F,Q.set);if(W0)return Q.response=W0}}let g=typeof N==="function"?N(Q):N;if(g instanceof Promise)g=await g;if(S.afterHandle)if(!S.afterHandle.length){let x=g instanceof K1?g.code:Y.status?typeof Y.status==="string"?p5[Y.status]:Y.status:200,T=G?.createResponse?.()?.[x];if(T?.Check(g)===!1)throw new r("response",T,g);else if(T?.Decode)g=T.Decode(g)}else{Q.response=g;for(let x=0;x<S.afterHandle.length;x++){let T=S.afterHandle[x].fn(Q);if(T instanceof Promise)T=await T;let F=U(T,Q.set);if(F!==void 0){let W0=G?.response?.[F.status];if(W0?.Check(F)===!1)throw new r("response",W0,F);else if(W0?.Decode)g=W0.Decode(g);return Q.response=F}}}if(Q.set.cookie&&i?.sign){let x=!i.secrets?void 0:typeof i.secrets==="string"?i.secrets:i.secrets[0];if(i.sign===!0)for(let[T,F]of Object.entries(Q.set.cookie))Q.set.cookie[T].value=await u5(F.value,"${secret}");else{let T=G?.cookie?.schema?.properties;for(let F of i.sign){if(!(F in T))continue;if(Q.set.cookie[F]?.value)Q.set.cookie[F].value=await u5(Q.set.cookie[F].value,x)}}}return w(Q.response=g,Q.set)}catch(J){let N=J instanceof E5&&J.error?J.error:J;return z.handleError(Q,N)}finally{if(z.event.afterResponse)for(let J of z.event.afterResponse)await J.fn(Q)}}},kG=(z)=>{let{mapResponse:w}=z["~adapter"].handler;return async(U,W)=>{let X=Object.assign(U,{error:W,code:W.code});if(X.set=U.set,z.event.error)for(let A=0;A<z.event.error.length;A++){let Z=z.event.error[A].fn(X);if(Z instanceof Promise)Z=await Z;if(Z!==void 0&&Z!==null)return U.response=w(Z,U.set)}return new Response(typeof W.cause==="string"?W.cause:W.message,{headers:U.set.headers,status:W.status??500})}};class b0{config;server=null;dependencies={};_routes={};_types={Prefix:"",Singleton:{},Definitions:{},Metadata:{}};_ephemeral={};_volatile={};singleton={decorator:{},store:{},derive:{},resolve:{}};get store(){return this.singleton.store}get decorator(){return this.singleton.decorator}definitions={typebox:E.Module({}),type:{},error:{}};extender={macros:[],higherOrderFunctions:[]};validator={global:null,scoped:null,local:null,getCandidate(){return s4(s4(this.global,this.scoped),this.local)}};event={};telemetry={stack:void 0};router={"~http":void 0,get http(){if(!this["~http"])this["~http"]=new j6({lazy:!0});return this["~http"]},"~dynamic":void 0,get dynamic(){if(!this["~dynamic"])this["~dynamic"]=new j6;return this["~dynamic"]},static:{http:{static:{},map:{},all:""},ws:{}},history:[]};routeTree=new Map;get routes(){return this.router.history}getGlobalRoutes(){return this.router.history}inference={body:!1,cookie:!1,headers:!1,query:!1,set:!1,server:!1,request:!1,route:!1};getServer(){return this.server}getParent(){return null}"~parser"={};_promisedModules;get promisedModules(){if(!this._promisedModules)this._promisedModules=new hW;return this._promisedModules}constructor(z={}){if(z.tags)if(!z.detail)z.detail={tags:z.tags};else z.detail.tags=z.tags;if(z.nativeStaticResponse===void 0)z.nativeStaticResponse=!0;if(this.config={},this.applyConfig(z??{}),this["~adapter"]=z.adapter??(typeof Bun!=="undefined"?CG:y5),z?.analytic&&(z?.name||z?.seed!==void 0))this.telemetry.stack=new Error().stack}"~adapter";env(z,w=kW){if(j2(z,{modules:this.definitions.typebox,dynamic:!0,additionalProperties:!0,coerce:!0}).Check(w)===!1){let U=new r("env",z,w);throw new Error(U.all.map((W)=>W.summary).join(`
328
328
  `))}return this}wrap(z){return this.extender.higherOrderFunctions.push({checksum:r4(JSON.stringify({name:this.config.name,seed:this.config.seed,content:z.toString()})),fn:z}),this}applyMacro(z){if(this.extender.macros.length){let w=XG({globalHook:this.event,localHook:z}),U={events:{global:this.event,local:z},get onParse(){return w("parse")},get onTransform(){return w("transform")},get onBeforeHandle(){return w("beforeHandle")},get onAfterHandle(){return w("afterHandle")},get mapResponse(){return w("mapResponse")},get onAfterResponse(){return w("afterResponse")},get onError(){return w("error")}};for(let W of this.extender.macros)WG(W.fn(U),z,w)}}applyConfig(z){return this.config={prefix:"",aot:kW.ELYSIA_AOT!=="false",normalize:!0,...z,cookie:{path:"/",...z?.cookie},experimental:z?.experimental??{},seed:z?.seed===void 0?"":z?.seed},this}get models(){let z={};for(let w of Object.keys(this.definitions.type))z[w]=j2(this.definitions.typebox.Import(w));return z.modules=this.definitions.typebox,z}add(z,w,U,W,{allowMeta:X=!1,skipPrefix:A=!1}={allowMeta:!1,skipPrefix:!1}){if(W=zw(ZG(W)),w!==""&&w.charCodeAt(0)!==47)w="/"+w;if(this.config.prefix&&!A)w=this.config.prefix+w;if(W?.type)switch(W.type){case"text":W.type="text/plain";break;case"json":W.type="application/json";break;case"formdata":W.type="multipart/form-data";break;case"urlencoded":W.type="application/x-www-form-urlencoded";break;case"arrayBuffer":W.type="application/octet-stream";break;default:break}let Z=this.definitions.type,$=!this.config.aot,Y={...this.validator.getCandidate()},Q={body:W?.body??Y?.body,headers:W?.headers??Y?.headers,params:W?.params??Y?.params,query:W?.query??Y?.query,cookie:W?.cookie??Y?.cookie,response:W?.response??Y?.response},J=()=>Q.cookie?dW({modules:S,validator:Q.cookie,defaultConfig:this.config.cookie,config:Q.cookie?.config??{},dynamic:$,models:Z}):void 0,N=this.config.normalize,S=this.definitions.typebox,G=this.config.precompile===!0||typeof this.config.precompile==="object"&&this.config.precompile.schema===!0?{body:j2(Q.body,{modules:S,dynamic:$,models:Z,normalize:N,additionalCoerce:_W()}),headers:j2(Q.headers,{modules:S,dynamic:$,models:Z,additionalProperties:!this.config.normalize,coerce:!0,additionalCoerce:y6()}),params:j2(Q.params,{modules:S,dynamic:$,models:Z,coerce:!0,additionalCoerce:y6()}),query:j2(Q.query,{modules:S,dynamic:$,models:Z,normalize:N,coerce:!0,additionalCoerce:y6()}),cookie:J(),response:HW(Q.response,{modules:S,dynamic:$,models:Z,normalize:N})}:{createBody(){if(this.body)return this.body;return this.body=j2(Q.body,{modules:S,dynamic:$,models:Z,normalize:N,additionalCoerce:_W()})},createHeaders(){if(this.headers)return this.headers;return this.headers=j2(Q.headers,{modules:S,dynamic:$,models:Z,additionalProperties:!N,coerce:!0,additionalCoerce:y6()})},createParams(){if(this.params)return this.params;return this.params=j2(Q.params,{modules:S,dynamic:$,models:Z,coerce:!0,additionalCoerce:y6()})},createQuery(){if(this.query)return this.query;return this.query=j2(Q.query,{modules:S,dynamic:$,models:Z,coerce:!0,additionalCoerce:y6()})},createCookie(){if(this.cookie)return this.cookie;return this.cookie=J()},createResponse(){if(this.response)return this.response;return this.response=HW(Q.response,{modules:S,dynamic:$,models:Z,normalize:N})}};if(W=z6(W,zw(Y)),W.tags)if(!W.detail)W.detail={tags:W.tags};else W.detail.tags=W.tags;if(w1(this.config.detail))W.detail=F2(Object.assign({},this.config.detail),W.detail);this.applyMacro(W);let O=zw(z6(this.event,W));if(this.config.aot===!1){this.router.dynamic.add(z,w,{validator:G,hooks:O,content:W?.type,handle:U,route:w});let H0=a4(w,{dynamic:!0});if(w!==H0)this.router.dynamic.add(z,H0,{validator:G,hooks:O,content:W?.type,handle:U,route:w});if(this.config.strictPath===!1){let h0=D4(w);this.router.dynamic.add(z,h0,{validator:G,hooks:O,content:W?.type,handle:U,route:w});let U6=a4(h0);if(h0!==U6)this.router.dynamic.add(z,h0,{validator:G,hooks:O,content:W?.type,handle:U,route:w})}this.router.history.push({method:z,path:w,composed:null,handler:U,hooks:O});return}let B=this.config.precompile===!0||typeof this.config.precompile==="object"&&this.config.precompile.compose===!0,C=ez(this.inference),i=this["~adapter"].handler,N0=typeof U!=="function"&&typeof i.createStaticHandler==="function"?i.createStaticHandler(U,O,this.setHeaders):void 0,U0=typeof U!=="function"?i.createNativeStaticHandler?.(U,O,this.setHeaders):void 0;if(this.config.nativeStaticResponse===!0&&U0&&(z==="GET"||z==="ALL"))this.router.static.http.static[w]=U0();let D0=(H0=!1)=>VG({app:this,path:w,method:z,hooks:O,validator:G,handler:typeof U!=="function"&&typeof i.createStaticHandler!=="function"?()=>U:U,allowMeta:X,inference:C,asManifest:H0}),K0;if(this.routeTree.has(z+w))for(let H0=0;H0<this.router.history.length;H0++){let h0=this.router.history[H0];if(h0.path===w&&h0.method===z){K0=H0;break}}else this.routeTree.set(z+w,this.router.history.length);let g=this.router.history,x=K0??this.router.history.length,T=B?D0():(H0)=>{let h0=(g[x].composed=D0())(H0);return D0=void 0,h0};if(B)D0=void 0;let F=z==="$INTERNALWS";if(K0!==void 0)this.router.history[K0]=Object.assign({method:z,path:w,composed:T,handler:U,hooks:O},W.webSocket?{websocket:W.websocket}:{});else this.router.history.push(Object.assign({method:z,path:w,composed:T,handler:U,hooks:O},W.webSocket?{websocket:W.websocket}:{}));let W0=this.router.static.http,G0={handler:B?T:void 0,compile(){return this.handler=D0()}};if(F){if(this.router.http.add("ws",w,G0),!this.config.strictPath)this.router.http.add("ws",D4(w),G0);let H0=a4(w,{dynamic:!0});if(H0!==w)this.router.http.add("ws",H0,G0);return}if(w.indexOf(":")===-1&&w.indexOf("*")===-1){if(!W0.map[w])W0.map[w]={code:""};let H0=N0?"":"c";if(z==="ALL")W0.map[w].all=`default:return ht[${x}].composed(${H0})
329
329
  `;else W0.map[w].code=`case '${z}':return ht[${x}].composed(${H0})
330
- ${W0.map[w].code}`;if(!this.config.strictPath&&this.config.nativeStaticResponse===!0&&U0&&(z==="GET"||z==="ALL"))this.router.static.http.static[D4(w)]=U0()}else{if(this.router.http.add(z,w,G0),!this.config.strictPath){let h0=D4(w);if(this.config.nativeStaticResponse===!0&&N0&&(z==="GET"||z==="ALL"))this.router.static.http.static[h0]=N0();this.router.http.add(z,h0,G0)}let H0=a4(w,{dynamic:!0});if(w!==H0){if(this.router.http.add(z,H0,G0),this.config.nativeStaticResponse===!0&&N0&&(z==="GET"||z==="ALL"))this.router.static.http.static[H0]=N0();this.router.http.add(z,H0,G0)}}}setHeaders;headers(z){if(!z)return this;if(!this.setHeaders)this.setHeaders={};return this.setHeaders=F2(this.setHeaders,z),this}onStart(z){return this.on("start",z),this}onRequest(z){return this.on("request",z),this}onParse(z,w){if(!w){if(typeof z==="string")return this.on("parse",this["~parser"][z]);return this.on("parse",z)}return this.on(z,"parse",w)}parser(z,w){return this["~parser"][z]=w,this}onTransform(z,w){if(!w)return this.on("transform",z);return this.on(z,"transform",w)}resolve(z,w){if(!w)w=z,z={as:"local"};let U={subType:"resolve",fn:w};return this.onBeforeHandle(z,U)}mapResolve(z,w){if(!w)w=z,z={as:"local"};let U={subType:"mapResolve",fn:w};return this.onBeforeHandle(z,U)}onBeforeHandle(z,w){if(!w)return this.on("beforeHandle",z);return this.on(z,"beforeHandle",w)}onAfterHandle(z,w){if(!w)return this.on("afterHandle",z);return this.on(z,"afterHandle",w)}mapResponse(z,w){if(!w)return this.on("mapResponse",z);return this.on(z,"mapResponse",w)}onAfterResponse(z,w){if(!w)return this.on("afterResponse",z);return this.on(z,"afterResponse",w)}trace(z,w){if(!w)w=z,z={as:"local"};if(!Array.isArray(w))w=[w];for(let U of w)this.on(z,"trace",FG(U));return this}error(z,w){switch(typeof z){case"string":return w.prototype[m5]=z,this.definitions.error[z]=w,this;case"function":return this.definitions.error=z(this.definitions.error),this}for(let[U,W]of Object.entries(z))W.prototype[m5]=U,this.definitions.error[U]=W;return this}onError(z,w){if(!w)return this.on("error",z);return this.on(z,"error",w)}onStop(z){return this.on("stop",z),this}on(z,w,U){let W;switch(typeof z){case"string":W=z,U=w;break;case"object":if(W=w,!Array.isArray(w)&&typeof w==="object")U=w;break}if(Array.isArray(U))U=W2(U);else if(typeof U==="function")U=[{fn:U}];else U=[U];let X=U;for(let A of X)if(A.scope=typeof z==="string"?"local":z?.as??"local",W==="resolve"||W==="derive")A.subType=W;if(W!=="trace")rW({[W]:X.map((A)=>A.fn)},this.inference);for(let A of X){let Z=wG(A,"global",{skipIfHasType:!0});switch(W){case"start":this.event.start??=[],this.event.start.push(Z);break;case"request":this.event.request??=[],this.event.request.push(Z);break;case"parse":this.event.parse??=[],this.event.parse.push(Z);break;case"transform":this.event.transform??=[],this.event.transform.push(Z);break;case"derive":this.event.transform??=[],this.event.transform.push(W2(Z,"derive"));break;case"beforeHandle":this.event.beforeHandle??=[],this.event.beforeHandle.push(Z);break;case"resolve":this.event.beforeHandle??=[],this.event.beforeHandle.push(W2(Z,"resolve"));break;case"afterHandle":this.event.afterHandle??=[],this.event.afterHandle.push(Z);break;case"mapResponse":this.event.mapResponse??=[],this.event.mapResponse.push(Z);break;case"afterResponse":this.event.afterResponse??=[],this.event.afterResponse.push(Z);break;case"trace":this.event.trace??=[],this.event.trace.push(Z);break;case"error":this.event.error??=[],this.event.error.push(Z);break;case"stop":this.event.stop??=[],this.event.stop.push(Z);break}}return this}propagate(){return L2(this.event.parse),L2(this.event.transform),L2(this.event.beforeHandle),L2(this.event.afterHandle),L2(this.event.mapResponse),L2(this.event.afterResponse),L2(this.event.trace),L2(this.event.error),this}as(z){let w={plugin:"scoped",scoped:"scoped",global:"global"}[z];if(L2(this.event.parse,w),L2(this.event.transform,w),L2(this.event.beforeHandle,w),L2(this.event.afterHandle,w),L2(this.event.mapResponse,w),L2(this.event.afterResponse,w),L2(this.event.trace,w),L2(this.event.error,w),z==="plugin")this.validator.scoped=s4(this.validator.scoped,this.validator.local),this.validator.local=null;else if(z==="global")this.validator.global=s4(this.validator.global,s4(this.validator.scoped,this.validator.local)),this.validator.scoped=null,this.validator.local=null;return this}group(z,w,U){let W=new b0({...this.config,prefix:""});W.singleton={...this.singleton},W.definitions={...this.definitions},W.getServer=()=>this.getServer(),W.inference=ez(this.inference),W.extender={...this.extender};let X=typeof w==="object",A=(X?U:w)(W);if(this.singleton=F2(this.singleton,W.singleton),this.definitions=F2(this.definitions,W.definitions),A.event.request?.length)this.event.request=[...this.event.request||[],...A.event.request||[]];if(A.event.mapResponse?.length)this.event.mapResponse=[...this.event.mapResponse||[],...A.event.mapResponse||[]];return this.model(A.definitions.type),Object.values(W.router.history).forEach(({method:Z,path:$,handler:Y,hooks:Q})=>{if($=(X?"":this.config.prefix)+z+$,X){let J=w,N=Q;this.add(Z,$,Y,z6(J,{...N||{},error:!N.error?A.event.error:Array.isArray(N.error)?[...N.error||{},...A.event.error||{}]:[N.error,...A.event.error||{}]}))}else this.add(Z,$,Y,z6(Q,{error:A.event.error}),{skipPrefix:!0})}),this}guard(z,w){if(!w){if(typeof z==="object"){this.applyMacro(z);let X=z.as??"local";if(this.validator[X]={body:z.body??this.validator[X]?.body,headers:z.headers??this.validator[X]?.headers,params:z.params??this.validator[X]?.params,query:z.query??this.validator[X]?.query,response:z.response??this.validator[X]?.response,cookie:z.cookie??this.validator[X]?.cookie},z.parse)this.on({as:X},"parse",z.parse);if(z.transform)this.on({as:X},"transform",z.transform);if(z.derive)this.on({as:X},"derive",z.derive);if(z.beforeHandle)this.on({as:X},"beforeHandle",z.beforeHandle);if(z.resolve)this.on({as:X},"resolve",z.resolve);if(z.afterHandle)this.on({as:X},"afterHandle",z.afterHandle);if(z.mapResponse)this.on({as:X},"mapResponse",z.mapResponse);if(z.afterResponse)this.on({as:X},"afterResponse",z.afterResponse);if(z.error)this.on({as:X},"error",z.error);if(z.detail)if(this.config.detail)this.config.detail=F2(Object.assign({},this.config.detail),z.detail);else this.config.detail=z.detail;if(z?.tags)if(!this.config.detail)this.config.detail={tags:z.tags};else this.config.detail.tags=z.tags;return this}return this.guard({},z)}let U=new b0({...this.config,prefix:""});U.singleton={...this.singleton},U.definitions={...this.definitions},U.inference=ez(this.inference),U.extender={...this.extender};let W=w(U);if(this.singleton=F2(this.singleton,U.singleton),this.definitions=F2(this.definitions,U.definitions),W.getServer=()=>this.server,W.event.request?.length)this.event.request=[...this.event.request||[],...W.event.request||[]];if(W.event.mapResponse?.length)this.event.mapResponse=[...this.event.mapResponse||[],...W.event.mapResponse||[]];return this.model(W.definitions.type),Object.values(U.router.history).forEach(({method:X,path:A,handler:Z,hooks:$})=>{this.add(X,A,Z,z6(z,{...$||{},error:!$.error?W.event.error:Array.isArray($.error)?[...$.error||{},...W.event.error||[]]:[$.error,...W.event.error||[]]}))}),this}use(z,w){if(Array.isArray(z)){let U=this;for(let W of z)U=U.use(W);return U}if(w?.scoped)return this.guard({},(U)=>U.use(z));if(Array.isArray(z)){let U=this;for(let W of z)U=this.use(W);return U}if(z instanceof Promise)return this.promisedModules.add(z.then((U)=>{if(typeof U==="function")return U(this);if(U instanceof b0)return this._use(U).compile();if(U.constructor.name==="Elysia")return this._use(U).compile();if(typeof U.default==="function")return U.default(this);if(U.default instanceof b0)return this._use(U.default);if(U.constructor.name==="Elysia")return this._use(U.default);if(U.constructor.name==="_Elysia")return this._use(U.default);try{return this._use(U.default)}catch(W){throw console.error('Invalid plugin type. Expected Elysia instance, function, or module with "default" as Elysia instance or function that returns Elysia instance.'),W}}).then((U)=>{if(U&&typeof U.compile==="function")U.compile();return U})),this;return this._use(z)}propagatePromiseModules(z){if(z.promisedModules.size<=0)return this;for(let w of z.promisedModules.promises)this.promisedModules.add(w.then((U)=>{if(!U)return;let W=this._use(U);if(W instanceof Promise)return W.then((X)=>{if(X)X.compile();else U.compile()});return U.compile()}));return this}_use(z){if(typeof z==="function"){let X=z(this);if(X instanceof Promise)return this.promisedModules.add(X.then((A)=>{if(A instanceof b0){A.getServer=()=>this.getServer(),A.getGlobalRoutes=()=>this.getGlobalRoutes(),A.model(this.definitions.type),A.error(this.definitions.error);for(let{method:Z,path:$,handler:Y,hooks:Q}of Object.values(A.router.history))this.add(Z,$,Y,z6(Q,{error:A.event.error}));if(A.compile(),A===this)return;return this.propagatePromiseModules(A),A}if(typeof A==="function")return A(this);if(typeof A.default==="function")return A.default(this);return this._use(A)}).then((A)=>{if(A&&typeof A.compile==="function")A.compile();return A})),this;return X}this.propagatePromiseModules(z);let{name:w,seed:U}=z.config;if(z.getParent=()=>this,z.getServer=()=>this.getServer(),z.getGlobalRoutes=()=>this.getGlobalRoutes(),z.model(this.definitions.type),z.error(this.definitions.error),this["~parser"]={...z["~parser"],...this["~parser"]},this.headers(z.setHeaders),w){if(!(w in this.dependencies))this.dependencies[w]=[];let X=U!==void 0?r4(w+JSON.stringify(U)):0;if(!this.dependencies[w].some(({checksum:A})=>X===A))this.extender.macros=this.extender.macros.concat(z.extender.macros),this.extender.higherOrderFunctions=this.extender.higherOrderFunctions.concat(z.extender.higherOrderFunctions)}else this.extender.macros=this.extender.macros.concat(z.extender.macros),this.extender.higherOrderFunctions=this.extender.higherOrderFunctions.concat(z.extender.higherOrderFunctions);bW(this.extender.macros),bW(this.extender.higherOrderFunctions);let W=[];for(let X=0;X<this.extender.higherOrderFunctions.length;X++){let A=this.extender.higherOrderFunctions[X];if(A.checksum){if(W.includes(A.checksum))this.extender.higherOrderFunctions.splice(X,1),X--;W.push(A.checksum)}}this.inference={body:this.inference.body||z.inference.body,cookie:this.inference.cookie||z.inference.cookie,headers:this.inference.headers||z.inference.headers,query:this.inference.query||z.inference.query,set:this.inference.set||z.inference.set,server:this.inference.server||z.inference.server,request:this.inference.request||z.inference.request,route:this.inference.route||z.inference.route},this.decorate(z.singleton.decorator),this.state(z.singleton.store),this.model(z.definitions.type),this.error(z.definitions.error),z.extender.macros=this.extender.macros.concat(z.extender.macros);for(let{method:X,path:A,handler:Z,hooks:$}of Object.values(z.router.history))this.add(X,A,Z,z6($,{error:z.event.error}));if(w){if(!(w in this.dependencies))this.dependencies[w]=[];let X=U!==void 0?r4(w+JSON.stringify(U)):0;if(this.dependencies[w].some(({checksum:A})=>X===A))return this;this.dependencies[w].push(this.config?.analytic?{name:z.config.name,seed:z.config.seed,checksum:X,dependencies:z.dependencies,stack:z.telemetry.stack,routes:z.router.history,decorators:z.singleton,store:z.singleton.store,error:z.definitions.error,derive:z.event.transform?.filter((A)=>A?.subType==="derive").map((A)=>({fn:A.toString(),stack:new Error().stack??""})),resolve:z.event.transform?.filter((A)=>A?.subType==="resolve").map((A)=>({fn:A.toString(),stack:new Error().stack??""}))}:{name:z.config.name,seed:z.config.seed,checksum:X,dependencies:z.dependencies}),this.event=SW(this.event,DW(z.event),X)}else this.event=SW(this.event,DW(z.event));return this.validator.global=z6(this.validator.global,{...z.validator.global}),this.validator.local=z6(this.validator.local,{...z.validator.scoped}),this}macro(z){if(typeof z==="function"){let w={checksum:r4(JSON.stringify({name:this.config.name,seed:this.config.seed,content:z.toString()})),fn:z};this.extender.macros.push(w)}else if(typeof z==="object"){for(let U of Object.keys(z))if(typeof z[U]==="object"){let W={...z[U]};z[U]=(X)=>{if(X===!0)return W}}let w={checksum:r4(JSON.stringify({name:this.config.name,seed:this.config.seed,content:Object.entries(z).map(([U,W])=>`${U}+${W}`).join(",")})),fn:()=>z};this.extender.macros.push(w)}return this}mount(z,w){if(z instanceof b0||typeof z==="function"||z.length===0||z==="/"){let X=typeof z==="function"?z:z instanceof b0?z.compile().fetch:w instanceof b0?w.compile().fetch:w,A=({request:Z,path:$})=>X(new Request(GW(Z.url,$),{method:Z.method,headers:Z.headers,signal:Z.signal,credentials:Z.credentials,referrerPolicy:Z.referrerPolicy,duplex:Z.duplex,redirect:Z.redirect,mode:Z.mode,keepalive:Z.keepalive,integrity:Z.integrity,body:Z.body}));return this.all("/*",A,{parse:"none"}),this}if(!w)return this;let U=z.length-(z.endsWith("*")?1:0);if(w instanceof b0)w=w.compile().fetch;let W=({request:X,path:A})=>w(new Request(GW(X.url,A.slice(U)||"/"),{method:X.method,headers:X.headers,signal:X.signal,credentials:X.credentials,referrerPolicy:X.referrerPolicy,duplex:X.duplex,redirect:X.redirect,mode:X.mode,keepalive:X.keepalive,integrity:X.integrity,body:X.body}));return this.all(z,W,{parse:"none"}),this.all(z+(z.endsWith("/")?"*":"/*"),W,{parse:"none"}),this}get(z,w,U){return this.add("GET",z,w,U),this}post(z,w,U){return this.add("POST",z,w,U),this}put(z,w,U){return this.add("PUT",z,w,U),this}patch(z,w,U){return this.add("PATCH",z,w,U),this}delete(z,w,U){return this.add("DELETE",z,w,U),this}options(z,w,U){return this.add("OPTIONS",z,w,U),this}all(z,w,U){return this.add("ALL",z,w,U),this}head(z,w,U){return this.add("HEAD",z,w,U),this}connect(z,w,U){return this.add("CONNECT",z,w,U),this}route(z,w,U,W){return this.add(z.toUpperCase(),w,U,W,W?.config),this}ws(z,w){if(this["~adapter"].ws)this["~adapter"].ws(this,z,w);else console.warn("Current adapter doesn't support WebSocket");return this}state(z,w,U){if(w===void 0)U=z,z={as:"append"},w="";else if(U===void 0){if(typeof z==="string")U=w,w=z,z={as:"append"};else if(typeof z==="object")U=w,w=""}let{as:W}=z;if(typeof w!=="string")return this;switch(typeof U){case"object":if(w){if(w in this.singleton.store)this.singleton.store[w]=F2(this.singleton.store[w],U,{override:W==="override"});else this.singleton.store[w]=U;return this}if(U===null)return this;return this.singleton.store=F2(this.singleton.store,U,{override:W==="override"}),this;case"function":if(w){if(W==="override"||!(w in this.singleton.store))this.singleton.store[w]=U}else this.singleton.store=U(this.singleton.store);return this;default:if(W==="override"||!(w in this.singleton.store))this.singleton.store[w]=U;return this}}decorate(z,w,U){if(w===void 0)U=z,z={as:"append"},w="";else if(U===void 0){if(typeof z==="string")U=w,w=z,z={as:"append"};else if(typeof z==="object")U=w,w=""}let{as:W}=z;if(typeof w!=="string")return this;switch(typeof U){case"object":if(w){if(w in this.singleton.decorator)this.singleton.decorator[w]=F2(this.singleton.decorator[w],U,{override:W==="override"});else this.singleton.decorator[w]=U;return this}if(U===null)return this;return this.singleton.decorator=F2(this.singleton.decorator,U,{override:W==="override"}),this;case"function":if(w){if(W==="override"||!(w in this.singleton.decorator))this.singleton.decorator[w]=U}else this.singleton.decorator=U(this.singleton.decorator);return this;default:if(W==="override"||!(w in this.singleton.decorator))this.singleton.decorator[w]=U;return this}}derive(z,w){if(!w)w=z,z={as:"local"};let U={subType:"derive",fn:w};return this.onTransform(z,U)}model(z,w){let U=(W)=>Xw(W,[{from:E.Number(),to:(X)=>E.Numeric(X),untilObjectFound:!0},{from:E.Boolean(),to:(X)=>E.BooleanString(X),untilObjectFound:!0}]);switch(typeof z){case"object":let W={},X=Object.entries(z);for(let[$,Y]of X){if($ in this.definitions.type)continue;W[$]=this.definitions.type[$]=U(Y),W[$].$id??=`#/components/schemas/${$}`}return this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,...W}),this;case"function":let A=U(z(this.definitions.type));return this.definitions.type=A,this.definitions.typebox=E.Module(A),this;case"string":if(!w)break;let Z={...w,id:w.$id??`#/components/schemas/${z}`};return this.definitions.type[z]=w,this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,...Z}),this}return this.definitions.type[z]=w,this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,[z]:w}),this}mapDerive(z,w){if(!w)w=z,z={as:"local"};let U={subType:"mapDerive",fn:w};return this.onTransform(z,U)}affix(z,w,U){if(U==="")return this;let W=["_","-"," "],X=(Y)=>Y[0].toUpperCase()+Y.slice(1),A=z==="prefix"?(Y,Q)=>W.includes(Y.at(-1)??"")?Y+Q:Y+X(Q):W.includes(U.at(-1)??"")?(Y,Q)=>Q+Y:(Y,Q)=>Q+X(Y),Z=(Y)=>{let Q={};switch(Y){case"decorator":for(let J in this.singleton.decorator)Q[A(U,J)]=this.singleton.decorator[J];this.singleton.decorator=Q;break;case"state":for(let J in this.singleton.store)Q[A(U,J)]=this.singleton.store[J];this.singleton.store=Q;break;case"model":for(let J in this.definitions.type)Q[A(U,J)]=this.definitions.type[J];this.definitions.type=Q;break;case"error":for(let J in this.definitions.error)Q[A(U,J)]=this.definitions.error[J];this.definitions.error=Q;break}},$=Array.isArray(w)?w:[w];for(let Y of $.some((Q)=>Q==="all")?["decorator","state","model","error"]:$)Z(Y);return this}prefix(z,w){return this.affix("prefix",z,w)}suffix(z,w){return this.affix("suffix",z,w)}compile(){if(this["~adapter"].isWebStandard){if(this.fetch=this.config.aot?ww(this):TW(this),typeof this.server?.reload==="function")this.server.reload({...this.server||{},fetch:this.fetch});return this}if(typeof this.server?.reload==="function")this.server.reload(this.server||{});return this._handle=ww(this),this}handle=async(z)=>this.fetch(z);fetch=(z)=>{return(this.fetch=this.config.aot?ww(this):TW(this))(z)};handleError=async(z,w)=>{return(this.handleError=this.config.aot?WX(this):kG(this))(z,w)};outerErrorHandler=(z)=>new Response(z.message||z.name||"Error",{status:z?.status??500});listen=(z,w)=>{return this["~adapter"].listen(this)(z,w),this};stop=async(z)=>{if(!this.server)throw new Error("Elysia isn't running. Call `app.listen` to start the server.");if(this.server){if(this.server.stop(z),this.server=null,this.event.stop?.length)for(let w=0;w<this.event.stop.length;w++)this.event.stop[w].fn(this)}};get modules(){return this.promisedModules}}var U8={AmazonCognito:Z8,AniList:$8,Apple:Q8,Atlassian:J8,Auth0:B8,Authentik:M8,Bitbucket:q8,Box:L8,Coinbase:N8,Discord:G8,Dribbble:H8,Dropbox:_8,Facebook:S8,Figma:D8,FortyTwo:e8,GitHub:P8,GitLab:O8,Google:R8,Intuit:C8,Kakao:b8,KeyCloak:K8,Lichess:F8,Line:j8,Linear:E8,LinkedIn:I8,MicrosoftEntraId:x8,MyAnimeList:V8,Notion:k8,Okta:T8,Osu:g8,Patreon:f8,Reddit:d8,Roblox:h8,Salesforce:c8,Shikimori:i8,Slack:y8,Spotify:v8,Strava:n8,Tiltify:u8,Tumblr:m8,Twitch:t8,Twitter:o8,VK:p8,WorkOS:l8,Yahoo:s8,Yandex:r8,Zoom:a8},XX=Object.keys(U8).reduce((z,w)=>{return z[w.toLowerCase()]=w,z},{});var r5=(z)=>("refreshAccessToken"in z)&&typeof z.refreshAccessToken==="function",AX=(z)=>("revokeAccessToken"in z)&&typeof z.revokeAccessToken==="function",t6=(z)=>Object.keys(U8).map((w)=>w.toLowerCase()).includes(z.toLowerCase()),ZX=(z)=>!0,$X=(z)=>z!==null&&z!==void 0&&z.trim()!=="";var YX=86400000;var W8=1800;var QX=({clientProviders:z,authorizeRoute:w="authorize",onAuthorize:U})=>new b0().get(`/${w}/:provider`,({error:W,redirect:X,cookie:{state:A,code_verifier:Z,auth_provider:$,redirect_url:Y},params:{provider:Q},headers:J})=>{if(Q===void 0)return W("Bad Request","Provider is required");if(!t6(Q))return W("Bad Request","Invalid provider");try{let N=Q.toLowerCase(),{providerInstance:S,scopes:G,searchParams:O}=z[N],B=J.referer??"/";Y.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:B}),$.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:Q});let C=Xz();A.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:C});let i=S.createAuthorizationURL.toString().includes("codeVerifier"),N0=i?Wz():void 0;i&&Z.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:N0??""});let U0=i?S.createAuthorizationURL(C,N0,G):S.createAuthorizationURL(C,G);return O.forEach(([D0,K0])=>{U0.searchParams.set(D0,K0)}),U?.(),X(U0.toString())}catch(N){if(N instanceof Error)return W("Internal Server Error",`Failed to authorize: ${N.message}`);return W("Internal Server Error",`Unknown error: ${N}`)}});var C4=()=>{let z={};return new b0({name:"sessionStore"}).state({session:z})};var JX=({clientProviders:z,callbackRoute:w="authorize/callback",onCallback:U})=>new b0().use(C4()).get(`/${w}`,async({error:W,redirect:X,store:{session:A},cookie:{state:Z,code_verifier:$,redirect_url:Y,user_session_id:Q,auth_provider:J},query:{code:N,state:S}})=>{if(!$X(N)||Z.value===void 0)return W("Bad Request","Invalid callback request");if(S!==Z.value)return W("Bad Request","Invalid state mismatch");if(J.value===void 0)return W("Unauthorized","No auth provider found");if(!t6(J.value))return W("Unauthorized","Invalid provider");let G=J.value.toLowerCase(),{providerInstance:O}=z[G];try{Z.remove();let B=O.validateAuthorizationCode.toString().includes("codeVerifier"),C=$.value;if(B&&C===void 0)return W("Bad Request","Code verifier not found and is required");let i=C??"",N0=await(B?O.validateAuthorizationCode(N,i):O.validateAuthorizationCode(N));if(B)$.remove();let U0=Object.fromEntries(Object.entries($z(N0.idToken())).map(([g,x])=>[g,typeof x==="string"?x:void 0])),D0=J.value;console.log("in route user_session_id before",Q.value),await U?.({authProvider:D0,decodedIdToken:U0,session:A,user_session_id:Q}),console.log("in route user_session_id after",Q.value);let K0=Y.value??"/";return X(K0)}catch(B){if(B instanceof Error)return W("Internal Server Error",`${B.message} - ${B.stack??""}`);return W("Internal Server Error",`Failed to validate authorization code: Unknown error: ${B}`)}});var BX=({logoutRoute:z="logout",onLogout:w})=>new b0().post(`/${z}`,async({error:U,cookie:{user_session_id:W,auth_provider:X}})=>{if(X.value===void 0)return U("Unauthorized","No auth provider found");try{return w?.(),W.remove(),X.remove(),new Response("Succesfuly Logged Out",{status:204})}catch(A){if(A instanceof Error)return U("Internal Server Error",`Failed to logout: ${A.message}`);return U("Internal Server Error",`Failed to logout: Unknown error: ${A}`)}});var MX=()=>new b0().use(C4()).derive(({store:{session:z},cookie:{user_session_id:w},error:U})=>({protectRoute:async(W,X)=>{if(w.value===void 0)return X?.()??U("Unauthorized","No session ID found");if(z[w.value]===void 0)return X?.()??U("Unauthorized","No session found");return W()}})).as("plugin");var qX=({clientProviders:z,refreshRoute:w="refresh",onRefresh:U})=>new b0().post(`/${w}`,async({error:W,cookie:{user_refresh_token:X,auth_provider:A}})=>{if(X.value===void 0)return W("Unauthorized","No refresh token found");if(A.value===void 0)return W("Unauthorized","No auth provider found");let Z=A.value.toLowerCase(),{providerInstance:$}=z[Z];if(!r5($))return W("Not Implemented","Provider is not refreshable");try{return await $.refreshAccessToken(X.value),U?.(),new Response("Token refreshed",{status:204})}catch(Y){if(Y instanceof Error)return W("Internal Server Error",`Failed to refresh token: ${Y.message}`);return W("Internal Server Error",`Faile to refresh token: Unknown error: ${Y}`)}});var LX=({clientProviders:z,revokeRoute:w="revoke",onRevoke:U})=>new b0().post(`/${w}/access-token`,async({error:W,cookie:{user_refresh_token:X,auth_provider:A}})=>{if(X.value===void 0)return W("Unauthorized","No refresh token found");if(A.value===void 0)return W("Unauthorized","No auth provider found");let Z=A.value.toLowerCase(),{providerInstance:$}=z[Z];if(!AX($))return W("Not Implemented","Provider does not support revocation");try{return await $.revokeAccessToken(X.value),U?.(),new Response("Token revoked",{status:204})}catch(Y){if(Y instanceof Error)return W("Internal Server Error",`Failed to revoke token: ${Y.message}`);return W("Internal Server Error",`Failed to revoke token: Unknown error: ${Y}`)}});var NX=({clientProviders:z,statusRoute:w="auth-status",onStatus:U})=>new b0().use(C4()).get(`/${w}`,async({error:W,cookie:{user_session_id:X,auth_provider:A},store:{session:Z}})=>{try{if(X.value===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});if(A.value===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});let $=A.value.toLowerCase(),{providerInstance:Y}=z[$];if(!r5(Y))return W("Not Implemented","Provider is not refreshable");let Q=Z[X.value];if(Q===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});let{user:J}=Q;return U?.(),new Response(JSON.stringify({isLoggedIn:!0,user:J}),{headers:{"Content-Type":"application/json"}})}catch($){if($ instanceof Error)return W("Internal Server Error",`Error: ${$.message} - ${$.stack??""}`);return W("Internal Server Error",`Unknown Error: ${$}`)}});var uf=async({authProvider:z,decodedIdToken:w,user_session_id:U,session:W,getUser:X,createUser:A})=>{let Z=await X?.({authProvider:z,decodedIdToken:w});if(Z=Z??await A?.({authProvider:z,decodedIdToken:w}),!ZX(Z))throw new Error("Internal Server Error - Invalid user schema");let $=crypto.randomUUID();W[$]={expiresAt:Date.now()+YX,user:Z},console.log("in func user_session_id before set",U.value),U.set({httpOnly:!0,sameSite:"lax",secure:!0,value:$}),console.log("in func user_session_id after set",U.value)},mf=(z)=>z;var Xd=({config:z,authorizeRoute:w,callbackRoute:U,logoutRoute:W,statusRoute:X,refreshRoute:A,revokeRoute:Z,onAuthorize:$,onCallback:Y,onStatus:Q,onRefresh:J,onLogout:N,onRevoke:S})=>{let G=Object.keys(z).reduce((O,B)=>{if(!Object.prototype.hasOwnProperty.call(z,B))return O;if(!t6(B))return console.error(`Provider ${B} is not supported`),O;let C=z[B];if(!C)return O;let i=B.toLowerCase(),N0=XX[i];if(!t6(N0))return console.error(`Provider ${B} is not supported`),O;let U0=U8[N0],{credentials:D0,scopes:K0=[],searchParams:g=[]}=C,x=new U0(...D0);return O[i]={providerInstance:x,scopes:K0,searchParams:g},O},{});return new b0().error("OAUTH2_REQUEST_ERROR",F4).error("ARCTIC_FETCH_ERROR",$6).use(BX({logoutRoute:W,onLogout:N})).use(LX({clientProviders:G,onRevoke:S,revokeRoute:Z})).use(NX({clientProviders:G,onStatus:Q,statusRoute:X})).use(qX({clientProviders:G,onRefresh:J,refreshRoute:A})).use(QX({authorizeRoute:w,clientProviders:G,onAuthorize:$})).use(JX({callbackRoute:U,clientProviders:G,onCallback:Y})).use(MX()).as("plugin")};export{uf as instantiateUserSession,mf as createAuthConfig,Xd as absoluteAuth};
330
+ ${W0.map[w].code}`;if(!this.config.strictPath&&this.config.nativeStaticResponse===!0&&U0&&(z==="GET"||z==="ALL"))this.router.static.http.static[D4(w)]=U0()}else{if(this.router.http.add(z,w,G0),!this.config.strictPath){let h0=D4(w);if(this.config.nativeStaticResponse===!0&&N0&&(z==="GET"||z==="ALL"))this.router.static.http.static[h0]=N0();this.router.http.add(z,h0,G0)}let H0=a4(w,{dynamic:!0});if(w!==H0){if(this.router.http.add(z,H0,G0),this.config.nativeStaticResponse===!0&&N0&&(z==="GET"||z==="ALL"))this.router.static.http.static[H0]=N0();this.router.http.add(z,H0,G0)}}}setHeaders;headers(z){if(!z)return this;if(!this.setHeaders)this.setHeaders={};return this.setHeaders=F2(this.setHeaders,z),this}onStart(z){return this.on("start",z),this}onRequest(z){return this.on("request",z),this}onParse(z,w){if(!w){if(typeof z==="string")return this.on("parse",this["~parser"][z]);return this.on("parse",z)}return this.on(z,"parse",w)}parser(z,w){return this["~parser"][z]=w,this}onTransform(z,w){if(!w)return this.on("transform",z);return this.on(z,"transform",w)}resolve(z,w){if(!w)w=z,z={as:"local"};let U={subType:"resolve",fn:w};return this.onBeforeHandle(z,U)}mapResolve(z,w){if(!w)w=z,z={as:"local"};let U={subType:"mapResolve",fn:w};return this.onBeforeHandle(z,U)}onBeforeHandle(z,w){if(!w)return this.on("beforeHandle",z);return this.on(z,"beforeHandle",w)}onAfterHandle(z,w){if(!w)return this.on("afterHandle",z);return this.on(z,"afterHandle",w)}mapResponse(z,w){if(!w)return this.on("mapResponse",z);return this.on(z,"mapResponse",w)}onAfterResponse(z,w){if(!w)return this.on("afterResponse",z);return this.on(z,"afterResponse",w)}trace(z,w){if(!w)w=z,z={as:"local"};if(!Array.isArray(w))w=[w];for(let U of w)this.on(z,"trace",FG(U));return this}error(z,w){switch(typeof z){case"string":return w.prototype[m5]=z,this.definitions.error[z]=w,this;case"function":return this.definitions.error=z(this.definitions.error),this}for(let[U,W]of Object.entries(z))W.prototype[m5]=U,this.definitions.error[U]=W;return this}onError(z,w){if(!w)return this.on("error",z);return this.on(z,"error",w)}onStop(z){return this.on("stop",z),this}on(z,w,U){let W;switch(typeof z){case"string":W=z,U=w;break;case"object":if(W=w,!Array.isArray(w)&&typeof w==="object")U=w;break}if(Array.isArray(U))U=W2(U);else if(typeof U==="function")U=[{fn:U}];else U=[U];let X=U;for(let A of X)if(A.scope=typeof z==="string"?"local":z?.as??"local",W==="resolve"||W==="derive")A.subType=W;if(W!=="trace")rW({[W]:X.map((A)=>A.fn)},this.inference);for(let A of X){let Z=wG(A,"global",{skipIfHasType:!0});switch(W){case"start":this.event.start??=[],this.event.start.push(Z);break;case"request":this.event.request??=[],this.event.request.push(Z);break;case"parse":this.event.parse??=[],this.event.parse.push(Z);break;case"transform":this.event.transform??=[],this.event.transform.push(Z);break;case"derive":this.event.transform??=[],this.event.transform.push(W2(Z,"derive"));break;case"beforeHandle":this.event.beforeHandle??=[],this.event.beforeHandle.push(Z);break;case"resolve":this.event.beforeHandle??=[],this.event.beforeHandle.push(W2(Z,"resolve"));break;case"afterHandle":this.event.afterHandle??=[],this.event.afterHandle.push(Z);break;case"mapResponse":this.event.mapResponse??=[],this.event.mapResponse.push(Z);break;case"afterResponse":this.event.afterResponse??=[],this.event.afterResponse.push(Z);break;case"trace":this.event.trace??=[],this.event.trace.push(Z);break;case"error":this.event.error??=[],this.event.error.push(Z);break;case"stop":this.event.stop??=[],this.event.stop.push(Z);break}}return this}propagate(){return L2(this.event.parse),L2(this.event.transform),L2(this.event.beforeHandle),L2(this.event.afterHandle),L2(this.event.mapResponse),L2(this.event.afterResponse),L2(this.event.trace),L2(this.event.error),this}as(z){let w={plugin:"scoped",scoped:"scoped",global:"global"}[z];if(L2(this.event.parse,w),L2(this.event.transform,w),L2(this.event.beforeHandle,w),L2(this.event.afterHandle,w),L2(this.event.mapResponse,w),L2(this.event.afterResponse,w),L2(this.event.trace,w),L2(this.event.error,w),z==="plugin")this.validator.scoped=s4(this.validator.scoped,this.validator.local),this.validator.local=null;else if(z==="global")this.validator.global=s4(this.validator.global,s4(this.validator.scoped,this.validator.local)),this.validator.scoped=null,this.validator.local=null;return this}group(z,w,U){let W=new b0({...this.config,prefix:""});W.singleton={...this.singleton},W.definitions={...this.definitions},W.getServer=()=>this.getServer(),W.inference=ez(this.inference),W.extender={...this.extender};let X=typeof w==="object",A=(X?U:w)(W);if(this.singleton=F2(this.singleton,W.singleton),this.definitions=F2(this.definitions,W.definitions),A.event.request?.length)this.event.request=[...this.event.request||[],...A.event.request||[]];if(A.event.mapResponse?.length)this.event.mapResponse=[...this.event.mapResponse||[],...A.event.mapResponse||[]];return this.model(A.definitions.type),Object.values(W.router.history).forEach(({method:Z,path:$,handler:Y,hooks:Q})=>{if($=(X?"":this.config.prefix)+z+$,X){let J=w,N=Q;this.add(Z,$,Y,z6(J,{...N||{},error:!N.error?A.event.error:Array.isArray(N.error)?[...N.error||{},...A.event.error||{}]:[N.error,...A.event.error||{}]}))}else this.add(Z,$,Y,z6(Q,{error:A.event.error}),{skipPrefix:!0})}),this}guard(z,w){if(!w){if(typeof z==="object"){this.applyMacro(z);let X=z.as??"local";if(this.validator[X]={body:z.body??this.validator[X]?.body,headers:z.headers??this.validator[X]?.headers,params:z.params??this.validator[X]?.params,query:z.query??this.validator[X]?.query,response:z.response??this.validator[X]?.response,cookie:z.cookie??this.validator[X]?.cookie},z.parse)this.on({as:X},"parse",z.parse);if(z.transform)this.on({as:X},"transform",z.transform);if(z.derive)this.on({as:X},"derive",z.derive);if(z.beforeHandle)this.on({as:X},"beforeHandle",z.beforeHandle);if(z.resolve)this.on({as:X},"resolve",z.resolve);if(z.afterHandle)this.on({as:X},"afterHandle",z.afterHandle);if(z.mapResponse)this.on({as:X},"mapResponse",z.mapResponse);if(z.afterResponse)this.on({as:X},"afterResponse",z.afterResponse);if(z.error)this.on({as:X},"error",z.error);if(z.detail)if(this.config.detail)this.config.detail=F2(Object.assign({},this.config.detail),z.detail);else this.config.detail=z.detail;if(z?.tags)if(!this.config.detail)this.config.detail={tags:z.tags};else this.config.detail.tags=z.tags;return this}return this.guard({},z)}let U=new b0({...this.config,prefix:""});U.singleton={...this.singleton},U.definitions={...this.definitions},U.inference=ez(this.inference),U.extender={...this.extender};let W=w(U);if(this.singleton=F2(this.singleton,U.singleton),this.definitions=F2(this.definitions,U.definitions),W.getServer=()=>this.server,W.event.request?.length)this.event.request=[...this.event.request||[],...W.event.request||[]];if(W.event.mapResponse?.length)this.event.mapResponse=[...this.event.mapResponse||[],...W.event.mapResponse||[]];return this.model(W.definitions.type),Object.values(U.router.history).forEach(({method:X,path:A,handler:Z,hooks:$})=>{this.add(X,A,Z,z6(z,{...$||{},error:!$.error?W.event.error:Array.isArray($.error)?[...$.error||{},...W.event.error||[]]:[$.error,...W.event.error||[]]}))}),this}use(z,w){if(Array.isArray(z)){let U=this;for(let W of z)U=U.use(W);return U}if(w?.scoped)return this.guard({},(U)=>U.use(z));if(Array.isArray(z)){let U=this;for(let W of z)U=this.use(W);return U}if(z instanceof Promise)return this.promisedModules.add(z.then((U)=>{if(typeof U==="function")return U(this);if(U instanceof b0)return this._use(U).compile();if(U.constructor.name==="Elysia")return this._use(U).compile();if(typeof U.default==="function")return U.default(this);if(U.default instanceof b0)return this._use(U.default);if(U.constructor.name==="Elysia")return this._use(U.default);if(U.constructor.name==="_Elysia")return this._use(U.default);try{return this._use(U.default)}catch(W){throw console.error('Invalid plugin type. Expected Elysia instance, function, or module with "default" as Elysia instance or function that returns Elysia instance.'),W}}).then((U)=>{if(U&&typeof U.compile==="function")U.compile();return U})),this;return this._use(z)}propagatePromiseModules(z){if(z.promisedModules.size<=0)return this;for(let w of z.promisedModules.promises)this.promisedModules.add(w.then((U)=>{if(!U)return;let W=this._use(U);if(W instanceof Promise)return W.then((X)=>{if(X)X.compile();else U.compile()});return U.compile()}));return this}_use(z){if(typeof z==="function"){let X=z(this);if(X instanceof Promise)return this.promisedModules.add(X.then((A)=>{if(A instanceof b0){A.getServer=()=>this.getServer(),A.getGlobalRoutes=()=>this.getGlobalRoutes(),A.model(this.definitions.type),A.error(this.definitions.error);for(let{method:Z,path:$,handler:Y,hooks:Q}of Object.values(A.router.history))this.add(Z,$,Y,z6(Q,{error:A.event.error}));if(A.compile(),A===this)return;return this.propagatePromiseModules(A),A}if(typeof A==="function")return A(this);if(typeof A.default==="function")return A.default(this);return this._use(A)}).then((A)=>{if(A&&typeof A.compile==="function")A.compile();return A})),this;return X}this.propagatePromiseModules(z);let{name:w,seed:U}=z.config;if(z.getParent=()=>this,z.getServer=()=>this.getServer(),z.getGlobalRoutes=()=>this.getGlobalRoutes(),z.model(this.definitions.type),z.error(this.definitions.error),this["~parser"]={...z["~parser"],...this["~parser"]},this.headers(z.setHeaders),w){if(!(w in this.dependencies))this.dependencies[w]=[];let X=U!==void 0?r4(w+JSON.stringify(U)):0;if(!this.dependencies[w].some(({checksum:A})=>X===A))this.extender.macros=this.extender.macros.concat(z.extender.macros),this.extender.higherOrderFunctions=this.extender.higherOrderFunctions.concat(z.extender.higherOrderFunctions)}else this.extender.macros=this.extender.macros.concat(z.extender.macros),this.extender.higherOrderFunctions=this.extender.higherOrderFunctions.concat(z.extender.higherOrderFunctions);bW(this.extender.macros),bW(this.extender.higherOrderFunctions);let W=[];for(let X=0;X<this.extender.higherOrderFunctions.length;X++){let A=this.extender.higherOrderFunctions[X];if(A.checksum){if(W.includes(A.checksum))this.extender.higherOrderFunctions.splice(X,1),X--;W.push(A.checksum)}}this.inference={body:this.inference.body||z.inference.body,cookie:this.inference.cookie||z.inference.cookie,headers:this.inference.headers||z.inference.headers,query:this.inference.query||z.inference.query,set:this.inference.set||z.inference.set,server:this.inference.server||z.inference.server,request:this.inference.request||z.inference.request,route:this.inference.route||z.inference.route},this.decorate(z.singleton.decorator),this.state(z.singleton.store),this.model(z.definitions.type),this.error(z.definitions.error),z.extender.macros=this.extender.macros.concat(z.extender.macros);for(let{method:X,path:A,handler:Z,hooks:$}of Object.values(z.router.history))this.add(X,A,Z,z6($,{error:z.event.error}));if(w){if(!(w in this.dependencies))this.dependencies[w]=[];let X=U!==void 0?r4(w+JSON.stringify(U)):0;if(this.dependencies[w].some(({checksum:A})=>X===A))return this;this.dependencies[w].push(this.config?.analytic?{name:z.config.name,seed:z.config.seed,checksum:X,dependencies:z.dependencies,stack:z.telemetry.stack,routes:z.router.history,decorators:z.singleton,store:z.singleton.store,error:z.definitions.error,derive:z.event.transform?.filter((A)=>A?.subType==="derive").map((A)=>({fn:A.toString(),stack:new Error().stack??""})),resolve:z.event.transform?.filter((A)=>A?.subType==="resolve").map((A)=>({fn:A.toString(),stack:new Error().stack??""}))}:{name:z.config.name,seed:z.config.seed,checksum:X,dependencies:z.dependencies}),this.event=SW(this.event,DW(z.event),X)}else this.event=SW(this.event,DW(z.event));return this.validator.global=z6(this.validator.global,{...z.validator.global}),this.validator.local=z6(this.validator.local,{...z.validator.scoped}),this}macro(z){if(typeof z==="function"){let w={checksum:r4(JSON.stringify({name:this.config.name,seed:this.config.seed,content:z.toString()})),fn:z};this.extender.macros.push(w)}else if(typeof z==="object"){for(let U of Object.keys(z))if(typeof z[U]==="object"){let W={...z[U]};z[U]=(X)=>{if(X===!0)return W}}let w={checksum:r4(JSON.stringify({name:this.config.name,seed:this.config.seed,content:Object.entries(z).map(([U,W])=>`${U}+${W}`).join(",")})),fn:()=>z};this.extender.macros.push(w)}return this}mount(z,w){if(z instanceof b0||typeof z==="function"||z.length===0||z==="/"){let X=typeof z==="function"?z:z instanceof b0?z.compile().fetch:w instanceof b0?w.compile().fetch:w,A=({request:Z,path:$})=>X(new Request(GW(Z.url,$),{method:Z.method,headers:Z.headers,signal:Z.signal,credentials:Z.credentials,referrerPolicy:Z.referrerPolicy,duplex:Z.duplex,redirect:Z.redirect,mode:Z.mode,keepalive:Z.keepalive,integrity:Z.integrity,body:Z.body}));return this.all("/*",A,{parse:"none"}),this}if(!w)return this;let U=z.length-(z.endsWith("*")?1:0);if(w instanceof b0)w=w.compile().fetch;let W=({request:X,path:A})=>w(new Request(GW(X.url,A.slice(U)||"/"),{method:X.method,headers:X.headers,signal:X.signal,credentials:X.credentials,referrerPolicy:X.referrerPolicy,duplex:X.duplex,redirect:X.redirect,mode:X.mode,keepalive:X.keepalive,integrity:X.integrity,body:X.body}));return this.all(z,W,{parse:"none"}),this.all(z+(z.endsWith("/")?"*":"/*"),W,{parse:"none"}),this}get(z,w,U){return this.add("GET",z,w,U),this}post(z,w,U){return this.add("POST",z,w,U),this}put(z,w,U){return this.add("PUT",z,w,U),this}patch(z,w,U){return this.add("PATCH",z,w,U),this}delete(z,w,U){return this.add("DELETE",z,w,U),this}options(z,w,U){return this.add("OPTIONS",z,w,U),this}all(z,w,U){return this.add("ALL",z,w,U),this}head(z,w,U){return this.add("HEAD",z,w,U),this}connect(z,w,U){return this.add("CONNECT",z,w,U),this}route(z,w,U,W){return this.add(z.toUpperCase(),w,U,W,W?.config),this}ws(z,w){if(this["~adapter"].ws)this["~adapter"].ws(this,z,w);else console.warn("Current adapter doesn't support WebSocket");return this}state(z,w,U){if(w===void 0)U=z,z={as:"append"},w="";else if(U===void 0){if(typeof z==="string")U=w,w=z,z={as:"append"};else if(typeof z==="object")U=w,w=""}let{as:W}=z;if(typeof w!=="string")return this;switch(typeof U){case"object":if(w){if(w in this.singleton.store)this.singleton.store[w]=F2(this.singleton.store[w],U,{override:W==="override"});else this.singleton.store[w]=U;return this}if(U===null)return this;return this.singleton.store=F2(this.singleton.store,U,{override:W==="override"}),this;case"function":if(w){if(W==="override"||!(w in this.singleton.store))this.singleton.store[w]=U}else this.singleton.store=U(this.singleton.store);return this;default:if(W==="override"||!(w in this.singleton.store))this.singleton.store[w]=U;return this}}decorate(z,w,U){if(w===void 0)U=z,z={as:"append"},w="";else if(U===void 0){if(typeof z==="string")U=w,w=z,z={as:"append"};else if(typeof z==="object")U=w,w=""}let{as:W}=z;if(typeof w!=="string")return this;switch(typeof U){case"object":if(w){if(w in this.singleton.decorator)this.singleton.decorator[w]=F2(this.singleton.decorator[w],U,{override:W==="override"});else this.singleton.decorator[w]=U;return this}if(U===null)return this;return this.singleton.decorator=F2(this.singleton.decorator,U,{override:W==="override"}),this;case"function":if(w){if(W==="override"||!(w in this.singleton.decorator))this.singleton.decorator[w]=U}else this.singleton.decorator=U(this.singleton.decorator);return this;default:if(W==="override"||!(w in this.singleton.decorator))this.singleton.decorator[w]=U;return this}}derive(z,w){if(!w)w=z,z={as:"local"};let U={subType:"derive",fn:w};return this.onTransform(z,U)}model(z,w){let U=(W)=>Xw(W,[{from:E.Number(),to:(X)=>E.Numeric(X),untilObjectFound:!0},{from:E.Boolean(),to:(X)=>E.BooleanString(X),untilObjectFound:!0}]);switch(typeof z){case"object":let W={},X=Object.entries(z);for(let[$,Y]of X){if($ in this.definitions.type)continue;W[$]=this.definitions.type[$]=U(Y),W[$].$id??=`#/components/schemas/${$}`}return this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,...W}),this;case"function":let A=U(z(this.definitions.type));return this.definitions.type=A,this.definitions.typebox=E.Module(A),this;case"string":if(!w)break;let Z={...w,id:w.$id??`#/components/schemas/${z}`};return this.definitions.type[z]=w,this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,...Z}),this}return this.definitions.type[z]=w,this.definitions.typebox=E.Module({...this.definitions.typebox.$defs,[z]:w}),this}mapDerive(z,w){if(!w)w=z,z={as:"local"};let U={subType:"mapDerive",fn:w};return this.onTransform(z,U)}affix(z,w,U){if(U==="")return this;let W=["_","-"," "],X=(Y)=>Y[0].toUpperCase()+Y.slice(1),A=z==="prefix"?(Y,Q)=>W.includes(Y.at(-1)??"")?Y+Q:Y+X(Q):W.includes(U.at(-1)??"")?(Y,Q)=>Q+Y:(Y,Q)=>Q+X(Y),Z=(Y)=>{let Q={};switch(Y){case"decorator":for(let J in this.singleton.decorator)Q[A(U,J)]=this.singleton.decorator[J];this.singleton.decorator=Q;break;case"state":for(let J in this.singleton.store)Q[A(U,J)]=this.singleton.store[J];this.singleton.store=Q;break;case"model":for(let J in this.definitions.type)Q[A(U,J)]=this.definitions.type[J];this.definitions.type=Q;break;case"error":for(let J in this.definitions.error)Q[A(U,J)]=this.definitions.error[J];this.definitions.error=Q;break}},$=Array.isArray(w)?w:[w];for(let Y of $.some((Q)=>Q==="all")?["decorator","state","model","error"]:$)Z(Y);return this}prefix(z,w){return this.affix("prefix",z,w)}suffix(z,w){return this.affix("suffix",z,w)}compile(){if(this["~adapter"].isWebStandard){if(this.fetch=this.config.aot?ww(this):TW(this),typeof this.server?.reload==="function")this.server.reload({...this.server||{},fetch:this.fetch});return this}if(typeof this.server?.reload==="function")this.server.reload(this.server||{});return this._handle=ww(this),this}handle=async(z)=>this.fetch(z);fetch=(z)=>{return(this.fetch=this.config.aot?ww(this):TW(this))(z)};handleError=async(z,w)=>{return(this.handleError=this.config.aot?WX(this):kG(this))(z,w)};outerErrorHandler=(z)=>new Response(z.message||z.name||"Error",{status:z?.status??500});listen=(z,w)=>{return this["~adapter"].listen(this)(z,w),this};stop=async(z)=>{if(!this.server)throw new Error("Elysia isn't running. Call `app.listen` to start the server.");if(this.server){if(this.server.stop(z),this.server=null,this.event.stop?.length)for(let w=0;w<this.event.stop.length;w++)this.event.stop[w].fn(this)}};get modules(){return this.promisedModules}}var U8={AmazonCognito:Z8,AniList:$8,Apple:Q8,Atlassian:J8,Auth0:B8,Authentik:M8,Bitbucket:q8,Box:L8,Coinbase:N8,Discord:G8,Dribbble:H8,Dropbox:_8,Facebook:S8,Figma:D8,FortyTwo:e8,GitHub:P8,GitLab:O8,Google:R8,Intuit:C8,Kakao:b8,KeyCloak:K8,Lichess:F8,Line:j8,Linear:E8,LinkedIn:I8,MicrosoftEntraId:x8,MyAnimeList:V8,Notion:k8,Okta:T8,Osu:g8,Patreon:f8,Reddit:d8,Roblox:h8,Salesforce:c8,Shikimori:i8,Slack:y8,Spotify:v8,Strava:n8,Tiltify:u8,Tumblr:m8,Twitch:t8,Twitter:o8,VK:p8,WorkOS:l8,Yahoo:s8,Yandex:r8,Zoom:a8},XX=Object.keys(U8).reduce((z,w)=>{return z[w.toLowerCase()]=w,z},{});var r5=(z)=>("refreshAccessToken"in z)&&typeof z.refreshAccessToken==="function",AX=(z)=>("revokeAccessToken"in z)&&typeof z.revokeAccessToken==="function",t6=(z)=>Object.keys(U8).map((w)=>w.toLowerCase()).includes(z.toLowerCase()),ZX=(z)=>!0,$X=(z)=>z!==null&&z!==void 0&&z.trim()!=="";var YX=86400000;var W8=1800;var QX=({clientProviders:z,authorizeRoute:w="authorize",onAuthorize:U})=>new b0().get(`/${w}/:provider`,({error:W,redirect:X,cookie:{state:A,code_verifier:Z,auth_provider:$,redirect_url:Y},params:{provider:Q},headers:J})=>{if(Q===void 0)return W("Bad Request","Provider is required");if(!t6(Q))return W("Bad Request","Invalid provider");try{let N=Q.toLowerCase(),{providerInstance:S,scopes:G,searchParams:O}=z[N],B=J.referer??"/";Y.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:B}),$.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:Q});let C=Xz();A.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:C});let i=S.createAuthorizationURL.toString().includes("codeVerifier"),N0=i?Wz():void 0;i&&Z.set({httpOnly:!0,maxAge:W8,path:"/",sameSite:"lax",secure:!0,value:N0??""});let U0=i?S.createAuthorizationURL(C,N0,G):S.createAuthorizationURL(C,G);return O.forEach(([D0,K0])=>{U0.searchParams.set(D0,K0)}),U?.(),X(U0.toString())}catch(N){if(N instanceof Error)return W("Internal Server Error",`${N.message} - ${N.stack??""}`);return W("Internal Server Error",`Unknown error: ${N}`)}});var C4=()=>{let z={};return new b0({name:"sessionStore"}).state({session:z})};var JX=({clientProviders:z,callbackRoute:w="authorize/callback",onCallback:U})=>new b0().use(C4()).get(`/${w}`,async({error:W,redirect:X,store:{session:A},cookie:{state:Z,code_verifier:$,redirect_url:Y,user_session_id:Q,auth_provider:J},query:{code:N,state:S}})=>{if(!$X(N)||Z.value===void 0)return W("Bad Request","Invalid callback request");if(S!==Z.value)return W("Bad Request","Invalid state mismatch");if(J.value===void 0)return W("Unauthorized","No auth provider found");if(!t6(J.value))return W("Unauthorized","Invalid provider");let G=J.value.toLowerCase(),{providerInstance:O}=z[G];try{Z.remove();let B=O.validateAuthorizationCode.toString().includes("codeVerifier"),C=$.value;if(B&&C===void 0)return W("Bad Request","Code verifier not found and is required");let i=C??"",N0=await(B?O.validateAuthorizationCode(N,i):O.validateAuthorizationCode(N));if(B)$.remove();let U0=Object.fromEntries(Object.entries($z(N0.idToken())).map(([g,x])=>[g,typeof x==="string"?x:void 0])),D0=J.value;await U?.({authProvider:D0,decodedIdToken:U0,session:A,user_session_id:Q});let K0=Y.value??"/";return X(K0)}catch(B){if(B instanceof Error)return W("Internal Server Error",`${B.message} - ${B.stack??""}`);return W("Internal Server Error",`Failed to validate authorization code: Unknown error: ${B}`)}});var BX=({logoutRoute:z="logout",onLogout:w})=>new b0().post(`/${z}`,async({error:U,cookie:{user_session_id:W,auth_provider:X}})=>{if(X.value===void 0)return U("Unauthorized","No auth provider found");try{return w?.(),W.remove(),X.remove(),new Response("Succesfuly Logged Out",{status:204})}catch(A){if(A instanceof Error)return U("Internal Server Error",`Failed to logout: ${A.message}`);return U("Internal Server Error",`Failed to logout: Unknown error: ${A}`)}});var MX=()=>new b0().use(C4()).derive(({store:{session:z},cookie:{user_session_id:w},error:U})=>({protectRoute:async(W,X)=>{if(w.value===void 0)return X?.()??U("Unauthorized","No session ID found");if(z[w.value]===void 0)return X?.()??U("Unauthorized","No session found");return W()}})).as("plugin");var qX=({clientProviders:z,refreshRoute:w="refresh",onRefresh:U})=>new b0().post(`/${w}`,async({error:W,cookie:{user_refresh_token:X,auth_provider:A}})=>{if(X.value===void 0)return W("Unauthorized","No refresh token found");if(A.value===void 0)return W("Unauthorized","No auth provider found");let Z=A.value.toLowerCase(),{providerInstance:$}=z[Z];if(!r5($))return W("Not Implemented","Provider is not refreshable");try{return await $.refreshAccessToken(X.value),U?.(),new Response("Token refreshed",{status:204})}catch(Y){if(Y instanceof Error)return W("Internal Server Error",`Failed to refresh token: ${Y.message}`);return W("Internal Server Error",`Faile to refresh token: Unknown error: ${Y}`)}});var LX=({clientProviders:z,revokeRoute:w="revoke",onRevoke:U})=>new b0().post(`/${w}/access-token`,async({error:W,cookie:{user_refresh_token:X,auth_provider:A}})=>{if(X.value===void 0)return W("Unauthorized","No refresh token found");if(A.value===void 0)return W("Unauthorized","No auth provider found");let Z=A.value.toLowerCase(),{providerInstance:$}=z[Z];if(!AX($))return W("Not Implemented","Provider does not support revocation");try{return await $.revokeAccessToken(X.value),U?.(),new Response("Token revoked",{status:204})}catch(Y){if(Y instanceof Error)return W("Internal Server Error",`Failed to revoke token: ${Y.message}`);return W("Internal Server Error",`Failed to revoke token: Unknown error: ${Y}`)}});var NX=({clientProviders:z,statusRoute:w="auth-status",onStatus:U})=>new b0().use(C4()).get(`/${w}`,async({error:W,cookie:{user_session_id:X,auth_provider:A},store:{session:Z}})=>{try{if(X.value===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});if(A.value===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});let $=A.value.toLowerCase(),{providerInstance:Y}=z[$];if(!r5(Y))return W("Not Implemented","Provider is not refreshable");let Q=Z[X.value];if(Q===void 0)return new Response(JSON.stringify({isLoggedIn:!1,user:null}),{headers:{"Content-Type":"application/json"}});let{user:J}=Q;return U?.(),new Response(JSON.stringify({isLoggedIn:!0,user:J}),{headers:{"Content-Type":"application/json"}})}catch($){if($ instanceof Error)return W("Internal Server Error",`Error: ${$.message} - ${$.stack??""}`);return W("Internal Server Error",`Unknown Error: ${$}`)}});var uf=async({authProvider:z,decodedIdToken:w,user_session_id:U,session:W,getUser:X,createUser:A})=>{let Z=await X?.({authProvider:z,decodedIdToken:w});if(Z=Z??await A?.({authProvider:z,decodedIdToken:w}),!ZX(Z))throw new Error("Internal Server Error - Invalid user schema");let $=crypto.randomUUID();W[$]={expiresAt:Date.now()+YX,user:Z},U.set({httpOnly:!0,sameSite:"lax",secure:!0,value:$})},mf=(z)=>z;var Xd=({config:z,authorizeRoute:w,callbackRoute:U,logoutRoute:W,statusRoute:X,refreshRoute:A,revokeRoute:Z,onAuthorize:$,onCallback:Y,onStatus:Q,onRefresh:J,onLogout:N,onRevoke:S})=>{let G=Object.keys(z).reduce((O,B)=>{if(!Object.prototype.hasOwnProperty.call(z,B))return O;if(!t6(B))return console.error(`Provider ${B} is not supported`),O;let C=z[B];if(!C)return O;let i=B.toLowerCase(),N0=XX[i];if(!t6(N0))return console.error(`Provider ${B} is not supported`),O;let U0=U8[N0],{credentials:D0,scopes:K0=[],searchParams:g=[]}=C,x=new U0(...D0);return O[i]={providerInstance:x,scopes:K0,searchParams:g},O},{});return new b0().error("OAUTH2_REQUEST_ERROR",F4).error("ARCTIC_FETCH_ERROR",$6).use(BX({logoutRoute:W,onLogout:N})).use(LX({clientProviders:G,onRevoke:S,revokeRoute:Z})).use(NX({clientProviders:G,onStatus:Q,statusRoute:X})).use(qX({clientProviders:G,onRefresh:J,refreshRoute:A})).use(QX({authorizeRoute:w,clientProviders:G,onAuthorize:$})).use(JX({callbackRoute:U,clientProviders:G,onCallback:Y})).use(MX()).as("plugin")};export{uf as instantiateUserSession,mf as createAuthConfig,Xd as absoluteAuth};
@@ -31,7 +31,7 @@ export declare const authorize: ({ clientProviders, authorizeRoute, onAuthorize
31
31
  response: {
32
32
  200: import("undici-types").Response;
33
33
  400: "Provider is required" | "Invalid provider";
34
- 500: `Failed to authorize: ${string}` | `Unknown error: ${string}`;
34
+ 500: `${string} - ${string}` | `Unknown error: ${string}`;
35
35
  422: {
36
36
  type: "validation";
37
37
  on: string;
@@ -29,9 +29,9 @@ export declare const callback: <UserType>({ clientProviders, callbackRoute, onCa
29
29
  headers: unknown;
30
30
  response: {
31
31
  200: import("undici-types").Response;
32
+ 500: `${string} - ${string}` | `Failed to validate authorization code: Unknown error: ${string}`;
32
33
  400: "Invalid callback request" | "Invalid state mismatch" | "Code verifier not found and is required";
33
34
  401: "Invalid provider" | "No auth provider found";
34
- 500: `${string} - ${string}` | `Failed to validate authorization code: Unknown error: ${string}`;
35
35
  };
36
36
  };
37
37
  };
@@ -92,7 +92,7 @@ export declare const absoluteAuth: <UserType>({ config, authorizeRoute, callback
92
92
  response: {
93
93
  200: import("undici-types").Response;
94
94
  400: "Provider is required" | "Invalid provider";
95
- 500: `Failed to authorize: ${string}` | `Unknown error: ${string}`;
95
+ 500: `${string} - ${string}` | `Unknown error: ${string}`;
96
96
  422: {
97
97
  type: "validation";
98
98
  on: string;
@@ -115,9 +115,9 @@ export declare const absoluteAuth: <UserType>({ config, authorizeRoute, callback
115
115
  headers: unknown;
116
116
  response: {
117
117
  200: import("undici-types").Response;
118
+ 500: `${string} - ${string}` | `Failed to validate authorization code: Unknown error: ${string}`;
118
119
  400: "Invalid callback request" | "Invalid state mismatch" | "Code verifier not found and is required";
119
120
  401: "Invalid provider" | "No auth provider found";
120
- 500: `${string} - ${string}` | `Failed to validate authorization code: Unknown error: ${string}`;
121
121
  };
122
122
  };
123
123
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.2",
2
+ "version": "0.2.3",
3
3
  "name": "@absolutejs/auth",
4
4
  "description": "An authorization library for absolutejs",
5
5
  "repository": {
@@ -27,13 +27,13 @@
27
27
  "oauth"
28
28
  ],
29
29
  "types": "dist/src/index.d.ts",
30
- "dependencies": {
31
- "arctic": "3.6.0"
32
- },
30
+ "dependencies": {},
33
31
  "peerDependencies": {
32
+ "arctic": ">= 3.6.0",
34
33
  "elysia": ">= 1.2.0"
35
34
  },
36
35
  "devDependencies": {
36
+ "arctic": "3.6.0",
37
37
  "@elysiajs/static": "1.2.0",
38
38
  "@neondatabase/serverless": "1.0.0",
39
39
  "@types/bun": "1.2.9",