gemi 0.138.0 → 0.140.0
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/ai/Agent.d.ts +53 -1
- package/dist/ai/Agent.d.ts.map +1 -1
- package/dist/ai/FallbackProvider.d.ts.map +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +21 -21
- package/dist/ai/index.js.map +6 -6
- package/dist/ai/providers/call.d.ts +21 -1
- package/dist/ai/providers/call.d.ts.map +1 -1
- package/dist/ai/providers/http.d.ts +13 -0
- package/dist/ai/providers/http.d.ts.map +1 -1
- package/dist/ai/runtime.d.ts +10 -1
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/bun/plugin.js +1 -1
- package/dist/bun/preload.js +1 -1
- package/dist/{chunk-qvx8473q.js → chunk-0c553zfq.js} +3 -3
- package/dist/{chunk-qvx8473q.js.map → chunk-0c553zfq.js.map} +1 -1
- package/dist/{chunk-78zfqt54.js → chunk-18y8n1r3.js} +2 -2
- package/dist/{chunk-78zfqt54.js.map → chunk-18y8n1r3.js.map} +1 -1
- package/dist/{chunk-a2fhbstt.js → chunk-1cdz01em.js} +3 -3
- package/dist/{chunk-a2fhbstt.js.map → chunk-1cdz01em.js.map} +1 -1
- package/dist/{chunk-fwmmy0jn.js → chunk-1fe07ge4.js} +1 -1
- package/dist/{chunk-y6gr3stt.js → chunk-23mcs80p.js} +3 -3
- package/dist/{chunk-y6gr3stt.js.map → chunk-23mcs80p.js.map} +1 -1
- package/dist/{chunk-bg0e39dk.js → chunk-3v4esxbd.js} +2 -2
- package/dist/{chunk-bg0e39dk.js.map → chunk-3v4esxbd.js.map} +1 -1
- package/dist/{chunk-ted0qjps.js → chunk-3wpxqcw7.js} +1 -1
- package/dist/{chunk-5benn2ys.js → chunk-5013raxj.js} +3 -3
- package/dist/{chunk-5benn2ys.js.map → chunk-5013raxj.js.map} +1 -1
- package/dist/{chunk-f9w78tbd.js → chunk-5aj27bgc.js} +2 -2
- package/dist/{chunk-f9w78tbd.js.map → chunk-5aj27bgc.js.map} +1 -1
- package/dist/chunk-5gkzbhts.js +5 -0
- package/dist/{chunk-fs4ntgdr.js.map → chunk-5gkzbhts.js.map} +1 -1
- package/dist/{chunk-qk6vmvr2.js → chunk-6d9f4vw0.js} +4 -4
- package/dist/{chunk-qk6vmvr2.js.map → chunk-6d9f4vw0.js.map} +1 -1
- package/dist/{chunk-skmdmqv7.js → chunk-6hs102jh.js} +2 -2
- package/dist/{chunk-skmdmqv7.js.map → chunk-6hs102jh.js.map} +1 -1
- package/dist/{chunk-zvzvgrrn.js → chunk-6jd0e1dz.js} +2 -2
- package/dist/{chunk-zvzvgrrn.js.map → chunk-6jd0e1dz.js.map} +1 -1
- package/dist/{chunk-kpb8xvrv.js → chunk-6qydm38w.js} +2 -2
- package/dist/{chunk-kpb8xvrv.js.map → chunk-6qydm38w.js.map} +1 -1
- package/dist/{chunk-85k70cme.js → chunk-6zz3kez5.js} +3 -3
- package/dist/{chunk-85k70cme.js.map → chunk-6zz3kez5.js.map} +1 -1
- package/dist/{chunk-z88axcxg.js → chunk-7dwgex81.js} +9 -9
- package/dist/chunk-7dwgex81.js.map +27 -0
- package/dist/{chunk-yhp70t40.js → chunk-7hdfbp2x.js} +2 -2
- package/dist/{chunk-yhp70t40.js.map → chunk-7hdfbp2x.js.map} +1 -1
- package/dist/{chunk-vz5rrcnh.js → chunk-7p64zc6a.js} +2 -2
- package/dist/{chunk-vz5rrcnh.js.map → chunk-7p64zc6a.js.map} +1 -1
- package/dist/{chunk-nbfksexg.js → chunk-8gfgsmxk.js} +2 -2
- package/dist/{chunk-nbfksexg.js.map → chunk-8gfgsmxk.js.map} +1 -1
- package/dist/{chunk-c6c7p43e.js → chunk-8r9kna46.js} +2 -2
- package/dist/{chunk-c6c7p43e.js.map → chunk-8r9kna46.js.map} +1 -1
- package/dist/{chunk-7d26eqv1.js → chunk-98dxtkbt.js} +2 -2
- package/dist/{chunk-7d26eqv1.js.map → chunk-98dxtkbt.js.map} +1 -1
- package/dist/{chunk-n7576zsr.js → chunk-9b4ypfcw.js} +3 -3
- package/dist/{chunk-n7576zsr.js.map → chunk-9b4ypfcw.js.map} +1 -1
- package/dist/{chunk-aj2sr77y.js → chunk-9yfg4nqq.js} +2 -2
- package/dist/{chunk-aj2sr77y.js.map → chunk-9yfg4nqq.js.map} +1 -1
- package/dist/{chunk-c83e4ghx.js → chunk-apfk702c.js} +2 -2
- package/dist/{chunk-c83e4ghx.js.map → chunk-apfk702c.js.map} +1 -1
- package/dist/{chunk-7t7jh8t2.js → chunk-b3tmkge9.js} +2 -2
- package/dist/{chunk-7t7jh8t2.js.map → chunk-b3tmkge9.js.map} +1 -1
- package/dist/{chunk-6qzyq0g5.js → chunk-b4qh3ywd.js} +2 -2
- package/dist/{chunk-6qzyq0g5.js.map → chunk-b4qh3ywd.js.map} +1 -1
- package/dist/{chunk-d368es1y.js → chunk-b9d021hx.js} +2 -2
- package/dist/{chunk-d368es1y.js.map → chunk-b9d021hx.js.map} +1 -1
- package/dist/{chunk-46bwknb5.js → chunk-c7ecv545.js} +3 -3
- package/dist/{chunk-46bwknb5.js.map → chunk-c7ecv545.js.map} +1 -1
- package/dist/{chunk-wbvb1hcx.js → chunk-ct3sgfpj.js} +2 -2
- package/dist/{chunk-wbvb1hcx.js.map → chunk-ct3sgfpj.js.map} +1 -1
- package/dist/{chunk-965gfa41.js → chunk-d0kw04ym.js} +2 -2
- package/dist/{chunk-965gfa41.js.map → chunk-d0kw04ym.js.map} +1 -1
- package/dist/{chunk-vmr4d6hc.js → chunk-d1whcvyn.js} +1 -1
- package/dist/{chunk-1y6hxv30.js → chunk-d7a092vd.js} +2 -2
- package/dist/{chunk-1y6hxv30.js.map → chunk-d7a092vd.js.map} +1 -1
- package/dist/{chunk-p1y58p84.js → chunk-dje31gme.js} +2 -2
- package/dist/{chunk-p1y58p84.js.map → chunk-dje31gme.js.map} +1 -1
- package/dist/{chunk-3jkem5gq.js → chunk-dptp6ceg.js} +2 -2
- package/dist/{chunk-3jkem5gq.js.map → chunk-dptp6ceg.js.map} +1 -1
- package/dist/{chunk-an1nja68.js → chunk-dvwdehnp.js} +2 -2
- package/dist/{chunk-an1nja68.js.map → chunk-dvwdehnp.js.map} +1 -1
- package/dist/{chunk-v4dp93qv.js → chunk-dzvp8ynr.js} +3 -3
- package/dist/{chunk-v4dp93qv.js.map → chunk-dzvp8ynr.js.map} +1 -1
- package/dist/{chunk-d492ae5e.js → chunk-e3y72vzw.js} +2 -2
- package/dist/{chunk-d492ae5e.js.map → chunk-e3y72vzw.js.map} +1 -1
- package/dist/{chunk-9s203ks3.js → chunk-e9eh5k8a.js} +2 -2
- package/dist/{chunk-9s203ks3.js.map → chunk-e9eh5k8a.js.map} +1 -1
- package/dist/{chunk-pv2mtg8n.js → chunk-e9xbdgb2.js} +2 -2
- package/dist/{chunk-pv2mtg8n.js.map → chunk-e9xbdgb2.js.map} +1 -1
- package/dist/{chunk-md6wfc1h.js → chunk-eve0hewa.js} +3 -3
- package/dist/{chunk-md6wfc1h.js.map → chunk-eve0hewa.js.map} +1 -1
- package/dist/{chunk-kzdkpz04.js → chunk-eydahc2f.js} +1 -1
- package/dist/{chunk-z969a4nt.js → chunk-eyqsvzej.js} +2 -2
- package/dist/{chunk-z969a4nt.js.map → chunk-eyqsvzej.js.map} +1 -1
- package/dist/{chunk-cedmppcy.js → chunk-gp4s95kn.js} +2 -2
- package/dist/{chunk-cedmppcy.js.map → chunk-gp4s95kn.js.map} +1 -1
- package/dist/{chunk-es3mah07.js → chunk-gx202f9t.js} +2 -2
- package/dist/{chunk-es3mah07.js.map → chunk-gx202f9t.js.map} +1 -1
- package/dist/{chunk-ant9ck0r.js → chunk-gy307m19.js} +2 -2
- package/dist/{chunk-ant9ck0r.js.map → chunk-gy307m19.js.map} +1 -1
- package/dist/{chunk-h0ydk8cc.js → chunk-j9hf1jyd.js} +2 -2
- package/dist/{chunk-h0ydk8cc.js.map → chunk-j9hf1jyd.js.map} +1 -1
- package/dist/{chunk-7vxeqxxr.js → chunk-jrvg80jw.js} +2 -2
- package/dist/{chunk-7vxeqxxr.js.map → chunk-jrvg80jw.js.map} +1 -1
- package/dist/{chunk-8dmhbj4m.js → chunk-k732d7x5.js} +2 -2
- package/dist/{chunk-8dmhbj4m.js.map → chunk-k732d7x5.js.map} +1 -1
- package/dist/{chunk-4jc7wbet.js → chunk-kc2z9z3m.js} +2 -2
- package/dist/{chunk-4jc7wbet.js.map → chunk-kc2z9z3m.js.map} +1 -1
- package/dist/{chunk-xwmy6fby.js → chunk-kddgfct7.js} +3 -3
- package/dist/{chunk-xwmy6fby.js.map → chunk-kddgfct7.js.map} +1 -1
- package/dist/{chunk-qfhcec6q.js → chunk-ks7msv3e.js} +2 -2
- package/dist/{chunk-qfhcec6q.js.map → chunk-ks7msv3e.js.map} +1 -1
- package/dist/{chunk-9wc53ywv.js → chunk-me6mmvbq.js} +2 -2
- package/dist/{chunk-9wc53ywv.js.map → chunk-me6mmvbq.js.map} +1 -1
- package/dist/{chunk-c0m8pcbd.js → chunk-mj55jdwp.js} +1 -1
- package/dist/chunk-mxqnrn1k.js +10 -0
- package/dist/{chunk-4wyhf6j2.js.map → chunk-mxqnrn1k.js.map} +4 -4
- package/dist/{chunk-n1n7qb34.js → chunk-ny01tp0y.js} +4 -4
- package/dist/{chunk-n1n7qb34.js.map → chunk-ny01tp0y.js.map} +1 -1
- package/dist/{chunk-8ef5c93d.js → chunk-p131vmpy.js} +2 -2
- package/dist/{chunk-8ef5c93d.js.map → chunk-p131vmpy.js.map} +1 -1
- package/dist/{chunk-g22q8j2s.js → chunk-pfgbkhmm.js} +2 -2
- package/dist/{chunk-g22q8j2s.js.map → chunk-pfgbkhmm.js.map} +1 -1
- package/dist/{chunk-n2czjpz9.js → chunk-pxavt1j3.js} +2 -2
- package/dist/{chunk-n2czjpz9.js.map → chunk-pxavt1j3.js.map} +1 -1
- package/dist/{chunk-jys3n8xv.js → chunk-qdz4dqbf.js} +3 -3
- package/dist/{chunk-jys3n8xv.js.map → chunk-qdz4dqbf.js.map} +1 -1
- package/dist/{chunk-gqcmnyc8.js → chunk-qvtmn7mn.js} +2 -2
- package/dist/{chunk-gqcmnyc8.js.map → chunk-qvtmn7mn.js.map} +1 -1
- package/dist/{chunk-gq4fr0zn.js → chunk-r1x5ms0y.js} +3 -3
- package/dist/{chunk-gq4fr0zn.js.map → chunk-r1x5ms0y.js.map} +1 -1
- package/dist/{chunk-w17p2k8g.js → chunk-r6thf4ge.js} +3 -3
- package/dist/{chunk-w17p2k8g.js.map → chunk-r6thf4ge.js.map} +1 -1
- package/dist/{chunk-z0jazehw.js → chunk-rw4z3n9b.js} +2 -2
- package/dist/{chunk-z0jazehw.js.map → chunk-rw4z3n9b.js.map} +1 -1
- package/dist/{chunk-e440f645.js → chunk-rwrcsfzv.js} +2 -2
- package/dist/{chunk-e440f645.js.map → chunk-rwrcsfzv.js.map} +1 -1
- package/dist/{chunk-27xv8kty.js → chunk-s58hbczk.js} +2 -2
- package/dist/{chunk-27xv8kty.js.map → chunk-s58hbczk.js.map} +1 -1
- package/dist/{chunk-8p4t8x9c.js → chunk-t6n490ha.js} +2 -2
- package/dist/{chunk-8p4t8x9c.js.map → chunk-t6n490ha.js.map} +1 -1
- package/dist/{chunk-80fjsb26.js → chunk-t7qp951h.js} +3 -3
- package/dist/{chunk-80fjsb26.js.map → chunk-t7qp951h.js.map} +1 -1
- package/dist/{chunk-038xtqpm.js → chunk-tbhtx2t0.js} +2 -2
- package/dist/{chunk-chyt9th4.js.map → chunk-tbhtx2t0.js.map} +1 -1
- package/dist/{chunk-974p7em0.js → chunk-tghh8r2q.js} +2 -2
- package/dist/{chunk-974p7em0.js.map → chunk-tghh8r2q.js.map} +1 -1
- package/dist/{chunk-p2c7z2nr.js → chunk-v2cv3wcw.js} +2 -2
- package/dist/{chunk-p2c7z2nr.js.map → chunk-v2cv3wcw.js.map} +1 -1
- package/dist/{chunk-rqb52m93.js → chunk-vp4x2c0k.js} +2 -2
- package/dist/{chunk-rqb52m93.js.map → chunk-vp4x2c0k.js.map} +1 -1
- package/dist/{chunk-chyt9th4.js → chunk-vtqvq9ca.js} +2 -2
- package/dist/{chunk-038xtqpm.js.map → chunk-vtqvq9ca.js.map} +1 -1
- package/dist/{chunk-eqzxvfvt.js → chunk-x4g0r9d3.js} +2 -2
- package/dist/{chunk-eqzxvfvt.js.map → chunk-x4g0r9d3.js.map} +1 -1
- package/dist/{chunk-zj8y4ak5.js → chunk-y7v30zd8.js} +1 -1
- package/dist/{chunk-vtc1khbm.js → chunk-ygyjtrzb.js} +2 -2
- package/dist/{chunk-vtc1khbm.js.map → chunk-ygyjtrzb.js.map} +1 -1
- package/dist/{chunk-26yghzet.js → chunk-yxhg3wjf.js} +2 -2
- package/dist/{chunk-26yghzet.js.map → chunk-yxhg3wjf.js.map} +1 -1
- package/dist/{chunk-ghbzre7k.js → chunk-yxjfghq3.js} +3 -3
- package/dist/{chunk-ghbzre7k.js.map → chunk-yxjfghq3.js.map} +1 -1
- package/dist/config/index.js +1 -1
- package/dist/console/run.js +2 -2
- package/dist/console/run.js.map +1 -1
- package/dist/container/index.js +2 -2
- package/dist/container/index.js.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/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 +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +2 -2
- package/dist/i18n/dictionaryRuntime.js.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +1 -1
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +1 -1
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/mcp/McpRegistry.d.ts +25 -1
- package/dist/services/mcp/McpRegistry.d.ts.map +1 -1
- package/dist/services/mcp/http/McpHttpServer.d.ts.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/stats/route-table.js +1 -1
- package/dist/support/index.js +2 -2
- package/dist/support/index.js.map +1 -1
- package/dist/vitest/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4wyhf6j2.js +0 -10
- package/dist/chunk-fs4ntgdr.js +0 -5
- package/dist/chunk-z88axcxg.js.map +0 -27
- /package/dist/{chunk-fwmmy0jn.js.map → chunk-1fe07ge4.js.map} +0 -0
- /package/dist/{chunk-ted0qjps.js.map → chunk-3wpxqcw7.js.map} +0 -0
- /package/dist/{chunk-vmr4d6hc.js.map → chunk-d1whcvyn.js.map} +0 -0
- /package/dist/{chunk-kzdkpz04.js.map → chunk-eydahc2f.js.map} +0 -0
- /package/dist/{chunk-c0m8pcbd.js.map → chunk-mj55jdwp.js.map} +0 -0
- /package/dist/{chunk-zj8y4ak5.js.map → chunk-y7v30zd8.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Zg as tG}from"./chunk-n7576zsr.js";import{rh as rG}from"./chunk-5benn2ys.js";import{Ah as Y8,Dh as j8,Eh as z8,Fh as uZ,Gh as RQ,Hh as jG,Ih as s9,Jh as h,Ph as C,Qh as f8,Rh as jZ,Sh as F8,Th as J6,Vh as P$,Wh as g,Xh as k4,ji as W6,qi as zZ,sh as $3,ui as eX,vi as d$,wh as ZG,wi as u$,xh as _W,xi as AG,yh as xW,zh as K8,zi as EG}from"./chunk-md6wfc1h.js";import{Ci as d1,Di as Z0,Ei as l1,Fi as SW}from"./chunk-p2c7z2nr.js";import{Gi as v3,Hi as GG,Li as F5,Mi as p4,Ni as T}from"./chunk-yhp70t40.js";import{Qi as nX,Ti as y3}from"./chunk-v4dp93qv.js";import{Xi as N5,_i as MG}from"./chunk-y6gr3stt.js";import{qj as H$,vj as u1}from"./chunk-pv2mtg8n.js";import{Jj as RX}from"./chunk-ant9ck0r.js";import{Kj as l$,Nj as IG}from"./chunk-7d26eqv1.js";import{Oj as D1}from"./chunk-qfhcec6q.js";import{Pj as e3,Qj as i0,Rj as T1,Sj as nG,Tj as oG,Vj as yZ,Wj as CG,dk as aG}from"./chunk-ghbzre7k.js";import{sk as N1}from"./chunk-c6c7p43e.js";import{Ck as B9,xk as tQ}from"./chunk-e440f645.js";import{Jk as rQ,Ok as s}from"./chunk-z0jazehw.js";import{Pk as dZ,Sk as L}from"./chunk-xwmy6fby.js";import{_k as G9}from"./chunk-c83e4ghx.js";import{$k as fG}from"./chunk-z969a4nt.js";import{jl as Y9}from"./chunk-aj2sr77y.js";import{ll as JG}from"./chunk-f9w78tbd.js";import{ql as c4}from"./chunk-038xtqpm.js";function s3($){return typeof $==="function"&&$.prototype!==void 0}function l0($){return typeof $==="string"?[$]:$}function n3($,Z){let J=Z?"attachment":"inline",W=$.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${J}; filename="${W}"; filename*=UTF-8''${encodeURIComponent($)}`}function GK($){return"total"in $&&"partial"in $&&"body"in $}function m9(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function oZ($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":z8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function KK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(GK($))return{body:$.body,start:$.start,end:$.end,total:$.total,partial:$.partial,type:$.type,name:$.name,download:$.download??!1,etag:$.etag,lastModified:$.lastModified,status:$.status??200,extraHeaders:$.headers??{}};let Z=$.file,J=Z instanceof Blob?Z:null,W=$.total??J?.size??-1;return{body:Z,start:$.start??0,end:$.end??W-1,total:W,partial:$.partial??!1,type:$.type??J?.type??"",name:$.name??Z?.name,download:$.download??!1,etag:$.etag,lastModified:$.lastModified,status:$.status??200,extraHeaders:$.headers??{}}}async function X8($,Z){if($ instanceof Response)return $;if(!$)return m9();let J=await KK($),{body:W,start:Y,end:j,total:z,partial:X}=J;if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return m9()}let{range:Q}=Z;if(Q){if(z<=0)return oZ(Math.max(z,0));if(!X){if(W instanceof Blob){let F=Y8(Q,z);if(!F)return oZ(z);W=W.slice(F.start,F.end+1),Y=F.start,j=F.end,X=!0}}}let G=Boolean(Q)&&X,K=G?206:J.status,B=new Headers;if(B.set("Accept-Ranges","bytes"),B.set("Content-Type",J.type||"application/octet-stream"),B.set("X-Content-Type-Options","nosniff"),G)B.set("Content-Range",j8(Y,j,z)),B.set("Content-Length",String(j-Y+1));else if(z>=0)B.set("Content-Length",String(z));if(J.name)B.set("Content-Disposition",n3(J.name,J.download));if(J.etag)B.set("ETag",J.etag);if(J.lastModified)B.set("Last-Modified",J.lastModified.toUTCString());for(let[F,D]of Object.entries(J.extraHeaders))B.set(F,D);if((Z.method??"GET").toUpperCase()==="HEAD"){if(W&&"cancel"in W&&typeof W.cancel==="function")await W.cancel();return new Response(null,{status:K,headers:B})}return new Response(W,{status:K,headers:B})}class e$ extends Z0{limit;constructor($){super("The request body is too large.",{status:413});this.limit=$}}var h9={b:1,k:1024,kb:1024,m:1048576,mb:1048576,g:1073741824,gb:1073741824};function rZ($){if(typeof $==="number"){if(Number.isFinite($)&&$>=0)return Math.floor($);if($===1/0)return 1/0}else{let Z=$.trim().toLowerCase();if(Z==="none"||Z==="off")return 1/0;let J=/^(\d+(?:\.\d+)?)\s*([a-z]*)$/.exec(Z);if(J&&(J[2]===""||(J[2]in h9)))return Math.floor(Number(J[1])*(h9[J[2]]??1))}throw Error(`Invalid body limit ${JSON.stringify($)}. Use a byte count or a size such as "64kb", "1mb" or "none".`)}var aZ=new WeakMap;function c9($){return aZ.has($)}function d9($){return aZ.get($)?.limit??null}function u9($){let Z=aZ.get($);return Z?Z.read>Z.limit:!1}function FK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function G8($,Z){let J=FK($);if(J!==null&&J>Z)throw new e$(Z)}function o3($,Z,J={}){let W=aZ.get($);if(W)W.limit=Z;else{let Y={limit:Z,read:0,stream:void 0,used:!1};aZ.set($,Y),VK($,Y)}if(J.checkDeclared!==!1)G8($,Z)}function BK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function Q8($,Z){if(Z.stream!==void 0)return Z.stream;let J=BK($);if(!J)return Z.stream=null;let W;return Z.stream=new ReadableStream({async pull(Y){W??=J.getReader();let{done:j,value:z}=await W.read();if(j){Y.close();return}if(Z.read+=z.byteLength,Z.read>Z.limit){let X=new e$(Z.limit);Y.error(X),W.cancel(X).catch(()=>{});return}Y.enqueue(z)},cancel(Y){return W?W.cancel(Y):J.cancel(Y)}},{highWaterMark:0}),Z.stream}async function t$($,Z){if(G8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=Q8($,Z);if(!J)return new Uint8Array(0);let W=J.getReader(),Y=[],j=0;for(;;){let{done:Q,value:G}=await W.read();if(Q)break;Y.push(G),j+=G.byteLength}let z=new Uint8Array(j),X=0;for(let Q of Y)z.set(Q,X),X+=Q.byteLength;return z}function p9($){return $.headers.get("Content-Type")??""}function VK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>Q8($,Z)}),J("bodyUsed",{get:()=>Z.used||Boolean(Z.stream?.locked)||Reflect.get(Object.getPrototypeOf($),"bodyUsed",$)}),J("bytes",{value:()=>t$($,Z)}),J("arrayBuffer",{value:async()=>{let W=await t$($,Z);return W.buffer.slice(W.byteOffset,W.byteOffset+W.byteLength)}}),J("text",{value:async()=>new TextDecoder().decode(await t$($,Z))}),J("json",{value:async()=>JSON.parse(new TextDecoder().decode(await t$($,Z)))}),J("blob",{value:async()=>new Blob([await t$($,Z)],{type:p9($)})}),J("formData",{value:async()=>new Response(await t$($,Z),{headers:{"Content-Type":p9($)}}).formData()}),J("clone",{value:()=>{G8($,Z.limit);let W=Q8($,Z),Y=null;if(W){let[j,z]=W.tee();Z.stream=j,Y=z}return new Request($.url,{method:$.method,headers:$.headers,body:Y,signal:$.signal,duplex:"half"})}})}function l9($){return s3($)}class l{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];constructor($,Z,J){this.method=$;this.handler=Z;this.methodName=J;this.handler=Z,this.methodName=J,this.method=$}get source(){if(!l9(this.handler)||typeof this.methodName!=="string")return;return{controller:this.handler,methodName:this.methodName}}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run($){if(l9(this.handler)){let Z=new this.handler;return Z[this.methodName].bind(Z)()}return this.handler()}middleware($){return this.middlewares=l0($),this}}class n9{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=l0($),this}async run(){let $=new C,Z=$.headers.toJSON();for(let J of s9($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if(u9($.rawRequest))throw new e$(d9($.rawRequest));throw J}}}class o9{constructor(...$){return new l(...$)}}class a9 extends l{__internal_brand="StreamHandler";async run($){let Z=T.getStore(),J=Z?.req?.rawRequest,W=K8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);return await X8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof F8)return oZ(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class r9{constructor(...$){return new a9(...$)}}class t9{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new l("GET",$,"list"),post:new l("POST",$,"store")},this.second={get:new l("GET",$,"show"),put:new l("PUT",$,"update"),delete:new l("DELETE",$,"delete")}}middleware($){if($.list)this.first.get.middleware($.list);if($.store)this.first.post.middleware($.store);if($.show)this.second.get.middleware($.show);if($.update)this.second.put.middleware($.update);if($.delete)this.second.delete.middleware($.delete);return this}}class T0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new l("GET",$,Z)}post($,Z){return new l("POST",$,Z)}put($,Z){return new l("PUT",$,Z)}patch($,Z){return new l("PATCH",$,Z)}delete($,Z){return new l("DELETE",$,Z)}resource($){return new t9($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${i9($)}.`);return OK($,this)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${i9($)}.`);return DK($,this)}file($,Z){return new o9("GET",$,Z)}stream($,Z){return new r9("GET",$,Z)}proxy($,Z={}){return new n9($,Z)}}function i9($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function OK($,Z){let J={stream:new l("POST",$,"stream"),attach:new l("POST",$,"attach"),stop:new l("POST",$,"stop"),upload:new l("POST",$,"upload")};return class extends T0{static __internal_brand="AgentRoute";static controller=$;static handlers=J;constructor(){super();this.middlewares=[...Z?.middlewares??[]]}routes={"/":J.stream,"/attach":J.attach,"/stop":J.stop,"/files":J.upload};static middleware(Y){if(Y.stream)J.stream.middleware(Y.stream);if(Y.attach)J.attach.middleware(Y.attach);if(Y.stop)J.stop.middleware(Y.stop);if(Y.upload)J.upload.middleware(Y.upload);return this}}}function DK($,Z){let J={start:new l("POST",$,"voiceStart"),update:new l("PATCH",$,"voiceUpdate"),end:new l("DELETE",$,"voiceEnd")};return class extends T0{static __internal_brand="VoiceRoute";static controller=$;static handlers=J;constructor(){super();this.middlewares=[...Z?.middlewares??[]]}routes={"/":J.start,"/:sessionId":{patch:J.update,delete:J.end}};static middleware(Y){if(Y.start)J.start.middleware(Y.start);if(Y.update)J.update.middleware(Y.update);if(Y.end)J.end.middleware(Y.end);return this}}}var p1="access_token";function L$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function a3($,Z){let J=L$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var UK=/^[A-Za-z0-9_-]+$/,LK=/^:[A-Za-z_][A-Za-z0-9_]*$/,e9=/^[A-Za-z0-9_-]{1,128}$/,HK=/^[A-Za-z0-9_.:-]+$/;class p extends Error{constructor($){super($);this.name="InvalidChannelError"}}function $W($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function $Z($){if(typeof $!=="string"||$.length===0)throw new p("A channel pattern must be a non-empty string.");if($.length>255)throw new p(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(LK.test(W)){let Y=W.slice(1);if(J.has(Y))throw new p(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new p(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!UK.test(W))throw new p(`The channel pattern "${$}" has an invalid segment "${W}". Segments are separated by dots and are either letters, digits, "_" and "-", or a param such as ":siteId".`)}return Z}function tZ($,Z={}){let J=$Z($),W=new Set,Y=J.map((j)=>{if(!j.startsWith(":"))return j;let z=j.slice(1);W.add(z);let X=Z[z];if(X===void 0||X===null)throw new p(`The channel "${$}" needs the param "${z}".`);let Q=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof Q!=="string"||!e9.test(Q))throw new p(`The param "${z}" of the channel "${$}" must be 1 to 128 letters, digits, "_" or "-". Use a public id in a channel name.`);return Q}).join(".");for(let j of Object.keys(Z))if(!W.has(j))throw new p(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new p(`The topic built from "${$}" is longer than 255 characters.`);return Y}function B8($){if($Z($).some((J)=>J.startsWith(":")))throw new p(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function ZW($){if(typeof $!=="string"||$.length===0||$.length>64||!HK.test($))throw new p(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function JW($,Z){if($===Z)return!0;if($===G0)return Z.startsWith(`${G0}.`)&&Z.split(".").length===2;let J=$.split("."),W=Z.split(".");if(J.length!==W.length)return!1;return J.every((Y,j)=>Y===W[j]||Y.startsWith(":")&&e9.test(W[j]))}var G0="user";function ZZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return tZ(`${G0}.:id`,{id:Z})}class r{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class r3 extends r{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');return o3(this.req.rawRequest,rZ(Z)),{}}}function IK($){let Z=new Map;for(let J of $)if(typeof J==="string"){let[W,Y=""]=J.split(":");if(W.startsWith("-")){if(Z.has(W.replace("-","")))Z.delete(W.replace("-",""))}else Z.set(W,Y.split(",").filter(Boolean))}else Z.set(J,[]);return Z}var PK={"body-limit":r3};class c1{config;static token="middleware";defaultBodyLimit;constructor($){this.config=$;this.defaultBodyLimit=$.bodyLimit===null||$.bodyLimit===void 0?null:rZ($.bodyLimit)}get aliases(){return{...PK,...this.config.aliases}}applyDefaultBodyLimit($){if(this.defaultBodyLimit!==null&&!c9($))o3($,this.defaultBodyLimit,{checkDeclared:!1})}assertGlobalMiddleware(){for(let $ of this.config.global){if(typeof $!=="string")continue;let[Z]=$.split(":");if(Z.startsWith("-"))throw Error(`Global middleware "${$}" cancels an alias, but nothing is inherited into the global list. Remove it.`);if(!this.aliases[Z])throw Error(`Global middleware "${Z}" is not a registered alias. Add it to \`aliases\` in the middleware config, or list the class itself.`)}}runGlobalMiddleware(){return this.runMiddleware(this.config.global)}runMiddleware($){let Z=new C,J=this.aliases,W=[];for(let[Y,j]of IK($).entries())if(typeof Y==="string"){let z=J[Y];if(z){let X=new z(Z);W.push({run:()=>X.run.call(X,...j),runsOnRefusal:WW(z)})}}else if(s3(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:WW(Y)})}else W.push({run:Y,runsOnRefusal:!1});return(async()=>{let Y={};for(let j=0;j<W.length;j++)try{Y={...Y,...await W[j].run()}}catch(z){throw await MK(W.slice(j+1)),z}return Y})()}}function WW($){return $?.runsOnRefusal===!0}async function MK($){for(let Z of $){if(!Z.runsOnRefusal)continue;try{await Z.run()}catch(J){console.error(J)}}}class t3{visibility;authorizer;middlewares=[];constructor($,Z){this.visibility=$;this.authorizer=Z}middleware($){return this.middlewares=[...this.middlewares,...l0($)],this}events(...$){return this}}class XW{static __brand="ChannelRouter";channels={};public(){return new t3("public")}private($){return new t3("private",$)}async authorize($,Z,J={},W={}){try{xK(this)}catch(Q){return console.error("[gemi] The channel router is invalid, so every subscription is refused.",Q),{ok:!1,code:"error"}}let Y=Object.hasOwn(this.channels,Z)?this.channels[Z]:void 0;if(!QW(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===G0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=tZ(Z,J??{})}catch(Q){if(Q instanceof p)return{ok:!1,code:"invalid_params"};throw Q}let z=Object.fromEntries(Object.entries(J??{}).map(([Q,G])=>[Q,String(G)])),X=new C($,z,"api",Z);return T.exit(()=>e3.exit(()=>T.run(X,async()=>{let Q=T.getStore();try{if(Y.middlewares.length>0)await L(c1).runMiddleware(Y.middlewares);if(Z===G0){let G=await YW(X);if(!G)return{ok:!1,code:"denied"};if(j=ZZ(G),Y.visibility==="private"&&Y.authorizer){if(await jW(Y.authorizer,X,z)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}if(Y.visibility==="private"){if((Y.authorizer?await jW(Y.authorizer,X,z):await YW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(_K(G))return{ok:!1,code:"denied"};return console.error(`[gemi] Authorizing the channel "${Z}" threw, so the subscription was refused.`,G),{ok:!1,code:"error"}}finally{Q.destroy()}},W.carried)))}}async function TK($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;GW(Y);let j=W.as,z,X=null;if(j instanceof Request)z=j;else if(j&&typeof j==="object"&&j.rawRequest instanceof Request)z=j.rawRequest;else z=new Request("http://localhost/__gemi/socket"),X=j?{user:j}:null;return(await Y.authorize(z,Z,J,{carried:X})).ok}function QW($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function YW($){if(!T.getStore().user&&L$($)===null)return null;try{return await w0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function jW($,Z,J){if(NK($))return new $().authorize(Z,J);return $(Z,J)}function NK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function _K($){return $?.kind===d1||u1($)||H$($)}var zW=new WeakSet;function xK($){if(zW.has($))return;GW($),zW.add($)}function GW($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!QW(Y))throw new p(`The channel "${W}" is not declared with this.public() or this.private().`);let j=$Z(W);if(j[0].startsWith(":"))throw new p(`The channel pattern "${W}" starts with a param. Start it with a literal segment, such as "site.:siteId", so it cannot overlap another channel.`);if(W!==G0&&j.length===2&&j[0]===G0)throw new p(`The channel pattern "${W}" can build user.<id>, which belongs to the "user" channel (the signed-in user's own). Declare "user" and emit with Broadcast.toUser(user), or name this channel differently.`);if(W!==G0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new p(`The private channel "${W}" has params but no authorization, so every signed-in user could join every one of them. Pass a callback or a policy that checks the params: this.private((req, params) => ...).`);J.push({pattern:W,segments:W===G0?[G0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(CK(J[W].segments,J[Y].segments))throw new p(`The channel patterns "${J[W].pattern}" and "${J[Y].pattern}" can build the same topic, so a subscriber could join one's topics through the other's authorization. Make them differ in a literal segment.`)}function CK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class V8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class O8{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class D8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}class KW{static __brand="McpRouter";routes={};scopes;param($){return new V8($.as,$.input,$.bind)}fromTool($,Z={}){return new D8($,Z)}fromApiRoute($,Z,J){return new O8($,Z,J)}}function K0($,Z){return $.replace(/:([^/]+[*?]?)/g,(J,W)=>{let Y=W.endsWith("?")||W.endsWith("*"),j=Y?W.slice(0,-1):W,z=Z[j];if(z===void 0){if(Y)return"";if(import.meta.env.DEV)throw Error(`Missing parameter: ${j}`);console.error(`Missing parameter: ${j} in URL: ${$}`)}return String(z)}).replace(/\/\//g,"/").replace(/\/$/,"")}class U8 extends Z0{constructor($,Z=307){super("Redirect error");this.name="RedirectError",this.payload={api:{status:200,data:{},directive:{kind:"Redirect",path:$}},view:{status:Z,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:$}}}}}class P1{static to($,...Z){let[J={}]=Z,{search:W={},params:Y={},permanent:j,status:z}={params:{},status:307,permanent:!1,...J},X=new URLSearchParams(W).toString();throw new U8([K0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new U8($,Z)}}var FW=Symbol.for("gemi.HttpResponse");class I${kind;body;status;headers;[FW]=!0;constructor($,Z,J,W){this.kind=$;this.body=Z;this.status=J;this.headers=W}static json($,Z={}){let J=Z.status??200;return SK(J),new I$("json",$,J,new Headers(Z.headers))}static error($,Z,J={}){if(!Number.isInteger($)||$<400||$>599)throw RangeError(`HttpResponse.error: status must be an integer from 400 to 599, got ${$}.`);return I$.json({error:Z},{...J,status:$})}get ok(){return this.status>=200&&this.status<300}toResponse($,Z){let J=$,W=this.serialize(J);for(let Y of Z)J.append("Set-Cookie",Y);this.headers.forEach((Y,j)=>{if(j.toLowerCase()!=="set-cookie")J.set(j,Y)});for(let Y of this.headers.getSetCookie())J.append("Set-Cookie",Y);if(this.status>=400&&!this.headers.has("Cache-Control"))J.set("Cache-Control","no-store");return new Response(W,{status:this.status,headers:J})}serialize($){switch(this.kind){case"json":return $.set("Content-Type","application/json"),JSON.stringify(this.body)??null}}}function SK($){if(!Number.isInteger($)||$<200||$>599)throw RangeError(`HttpResponse: status must be an integer from 200 to 599, got ${$}.`);if($===204||$===205||$===304)throw RangeError(`HttpResponse.json: a ${$} response has no body.`)}function JZ($){return typeof $==="object"&&$!==null&&$[FW]===!0}function AK($,Z,J={}){return I$.error($,Z,J)}class BW{kind="redirect";viewPath="REDIRECT";middlewares=[];featureGates=[];handler;constructor($){if(!$)this.handler=()=>({});else if(typeof $==="function")this.handler=$;else{let[Z,J]=$;this.handler=(W)=>{return new Z()[J](W)}}}async run($,Z){let{destination:J,permanent:W=!1,status:Y=307}=await this.handler($);if(!J)throw Error(`Redirect destination is required see ${Z}`);return P1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function L8($,Z){if($ instanceof Response)return $;let J=$ instanceof Blob,W=J?$:$.file,Y=J?$.name:$.name??$.file?.name,j=(J?$.type:$.type??$.file?.type)||"",z=J?!1:$.download??!1,X=J?200:$.status??200;if(!J)for(let[Q,G]of Object.entries($.headers??{}))Z.set(Q,G);if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return new Response("Not found",{status:404})}if(Z.set("Content-Type",j||"application/octet-stream"),W instanceof Blob)Z.set("Content-Length",String(W.size));if(Y)Z.set("Content-Disposition",n3(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class VW{kind="file";viewPath="FILE";middlewares=[];featureGates=[];handler;constructor($){if(!$)this.handler=()=>null;else if(typeof $==="function")this.handler=$;else{let[Z,J]=$;this.handler=(W)=>{return new Z()[J](W)}}}async run($,Z){let J=await this.handler($);if(!J)throw Error(`File route handler must return a file see ${Z}`);return{FILE:J}}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function OW($,Z){if(JZ($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class DW{viewPath;middlewares=[];featureGates=[];staticOptions=null;handler;constructor($,Z){this.viewPath=$;if(!Z)this.handler=()=>({});else if(typeof Z==="function")this.handler=Z;else{let[J,W]=Z;this.handler=(Y)=>{return new J()[W](Y)}}}async run($,Z){let J=OW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=l0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class UW{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends M1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends M1{routes=J??{}}}else this.children=class extends M1{routes=Z},this.handler=()=>({})}async run($,Z){let J=OW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}alwaysRun(){return this.alwaysRuns=!0,this}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class M1{middlewares=[];featureGates=[];routes={};view($,Z){return new DW($,Z)}file($){return new VW($)}redirect($){return new BW($)}layout($,Z,J){return new UW($,Z,J)}}function EK($){return $}function fK(){return{aliases:{},global:[],bodyLimit:null}}var Y1="redirect";function j1($,Z="/"){if(typeof $!=="string"||!$.startsWith("/"))return Z;if(/[\u0000-\u001f\u007f\\]/.test($)||$.startsWith("//"))return Z;try{let J=new URL($,"http://gemi.invalid");if(J.origin!=="http://gemi.invalid")return Z;let W=`${J.search}${J.hash}`.replaceAll("/","%2F"),Y=`${J.pathname}${W}`.replaceAll(":","%3A");return Y.startsWith("//")?Z:Y}catch{return Z}}function WZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function RK($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(L(s).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function bK($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function $6($,Z){let J=Z||L(A).config.signInPath,W=/^[a-z][a-z\d+.-]*:/i.test(J);if(W?!/^https?:\/\//i.test(J):!J.startsWith("/"))throw Error(`\`auth.signInPath\` must be a path like "/auth/sign-in", or an http(s) URL for sign-in hosted elsewhere. Got "${J}". A route's own \`"auth:<path>"\` cannot carry a URL, because the alias parser splits it on the colon.`);let Y=new URL(J,"http://gemi.invalid");if($?.kind==="view"){let j=RK($,!W);if(W||!bK(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(Y1,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class LW extends r{async run($){let Z=T.getStore(),J=Z.req;if(Z.user)return{};let W=await a3(L(A),J);if(!W)throw new P$({redirectTo:$6(J,$)});return Z.setUser(W),{}}}var I8="gemi_same_site",H8="private, no-cache, no-store, max-age=0, must-revalidate";class Z6 extends r{run(){let $=T.getStore(),Z=$?.req;if(!Z||$.user)return{};let J=Z.rawRequest;if(Z.kind!=="view"||J.method!=="GET"&&J.method!=="HEAD")return{};let W=new URL(J.url);if(/\.(json|og)$/.test(W.pathname))return{};if(W.searchParams.has(I8))return{};if(L$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(I8,"1"),new HW(`${W.pathname}${W.search}`)}}class HW extends Z0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=wK($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":H8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":H8}},viewData:{status:200,data:{},headers:{"Cache-Control":H8},directive:{kind:"Redirect",path:$}},view:{status:200,headers:J,body:`<!doctype html><html><head><meta charset="utf-8"><meta name="robots" content="noindex"><meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0;url=${Z}"><title>Redirecting</title></head><body><p><a href="${Z}">Continue</a></p></body></html>`}}}}function wK($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}class IW extends r{async run(...$){let[Z="public",J="864000",...W]=$,Y=`${Z}, max-age=${J}${W.length>0?", ":""}${W.join(", ")}`;if($.length===0)Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="public")Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="private")Y="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",Y);return{}}}var PW={"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"};class MW extends r{static runsOnRefusal=!0;config={origins:{"":{"Access-Control-Allow-Methods":"GET, HEAD, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"}}};run(){let $=this.req,Z=$.rawRequest.headers.get("Origin");if(Z&&this.config.origins[Z]){$.ctx().setHeaders("Access-Control-Allow-Origin",Z);let J={...PW,...this.config.origins[Z]};for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}else if(Z&&this.config.origins["*"]){$.ctx().setHeaders("Access-Control-Allow-Origin","*");let J={...PW,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var kK="Rate limit exceeded";class i1 extends Z0{result;retryAfter;constructor($,Z=kK){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?P8($):{}};this.payload={api:{status:429,data:{error:{...l1("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function P8($){let Z={"X-RateLimit-Limit":String($.limit),"X-RateLimit-Remaining":String($.remaining),"X-RateLimit-Reset":String(Math.ceil($.resetAt/1000))};if(!$.allowed)Z["Retry-After"]=String(Math.max(1,Math.ceil($.retryAfter/1000)));return Z}class z1{config;static token="ratelimiter";constructor($){this.config=$}get driver(){return this.config.driver}async consume($,Z={}){let J=Z.limit??this.config.limit,W=Z.window??this.config.window,Y=Z.cost??1;if(TW("window",W),TW("limit",J),!Number.isFinite(Y)||Y<0)throw Error(`Rate limiter cost must be zero or greater, got ${Y}`);return await this.config.driver.consume({key:$,limit:J,window:W*1000,cost:Y})}async enforce($,Z={},J){let W=await this.consume($,Z);if(!W.allowed)throw new i1(W,typeof J==="function"?J(W):J);return W}}function TW($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}class CW extends r{async run($,Z){let J=qK();if(!J)return{};let W=await J.consume(this.key(),{limit:NW($)??this.config.limit,window:NW(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(P8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new i1(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=_W(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${YZ(this.req)}:${this.req.routePath??"*"}`}}function qK(){try{let $=L();return $.bound(z1)?$.make(z1):null}catch{return null}}function YZ($){let Z=xW($.rawRequest);if(Z!==void 0)return Z;let J=$.headers.get("x-forwarded-for");if(J){let[W]=J.split(",");if(W?.trim())return W.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function NW($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class AW extends r{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new M8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new M8;return{}}}class M8 extends Z0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:SW("csrf","Invalid CSRF token",403)}},view:{}}}class EW{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class fW{all($,Z){return!0}}class T8{options;param;refuse;answers=new WeakMap;constructor($){this.options=$;this.param=$.param,this.refuse=$.refuse??"not_found"}refusal(){return this.refuse==="forbidden"?new jZ:new J6}authorize($,Z){if(typeof Z==="number"&&Number.isFinite(Z))Z=String(Z);if(typeof Z!=="string"||Z==="")return Promise.reject(this.refusal());let J=this.answers.get($.rawRequest);if(!J)J=new Map,this.answers.set($.rawRequest,J);let W=J.get(Z);if(!W)W=this.decide($,Z),J.set(Z,W);return W}async allows($,Z){try{return await this.authorize($,Z),!0}catch(J){if(this.isRefusal(J))return!1;throw J}}fromRoute($=new C,Z=this.param){if(Z===void 0)throw Error('This resource policy has no `param`. Give `defineResourcePolicy` one, or name it: `fromRoute(req, "pageId")`, or `alias:pageId` on the middleware.');return this.authorize($,$.params?.[Z])}get middleware(){if(!this.middlewareClass){let $=(Z,J)=>this.fromRoute(Z,J||void 0);this.middlewareClass=class extends r{async run(J){await $(this.req,J)}}}return this.middlewareClass}middlewareClass;forAgent($){return{authorize:async(Z,{threadId:J,body:W})=>{let Y;if(J!==void 0){if(Y=$.thread?await $.thread(J,Z):null,Y===null||Y===void 0)throw this.refusal()}if(W!==void 0){let j=await $.body(W,Z);if(await this.authorize(Z,j),J!==void 0&&String(Y)!==String(j))throw this.refusal();return}if(J!==void 0)await this.authorize(Z,Y)}}}async decide($,Z){let J=await this.options.load(Z,$);if(J===null||J===void 0||!await this.options.allow(J,$))throw this.refusal();return J}isRefusal($){return this.refuse==="forbidden"?$ instanceof jZ:$ instanceof J6}}function yK($){return new T8($)}async function Y6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await aK($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return oK(z,Z,J,$.url)}async function oK($,Z,J,W){let Y=$.getReader(),j=[],z=0;try{for(;;){let{done:G,value:K}=await Y.read();if(G)break;if(z+K.byteLength>Z){if(!J)throw new W6(W,Z);j.push(K.subarray(0,Z-z)),z=Z;break}j.push(K),z+=K.byteLength}}finally{Y.cancel().catch(()=>{})}let X=new Uint8Array(z),Q=0;for(let G of j)X.set(G,Q),Q+=G.byteLength;return X}async function aK($){let Z=$.getReader(),J=await Z.read(),W=J.done?new Uint8Array:J.value,Y=new ReadableStream({start(j){if(J.done)j.close();else j.enqueue(W)},async pull(j){let z=await Z.read();if(z.done)j.close();else j.enqueue(z.value)},cancel(j){return Z.cancel(j)}});return[W,Y]}function j6($){return new TextDecoder("utf-8").decode($)}var rK={"&":"&","<":"<",">":">",'"':""","'":"'"};function M$($){return $.replace(/[&<>"']/g,(Z)=>rK[Z])}var tK={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function N8($){if(!$.includes("&"))return $;return $.replace(/&(#x[0-9a-fA-F]{1,6}|#[0-9]{1,7}|[a-zA-Z]{2,4});/g,(Z,J)=>{if(J[0]!=="#")return tK[J]??Z;let W=J[1]==="x"?parseInt(J.slice(2),16):parseInt(J.slice(1),10);return W>0&&W<=1114111?String.fromCodePoint(W):Z})}function _8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function RW($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(N8($.slice(W)));return}if(Y>W)Z.text(N8($.slice(W,Y)));if($.startsWith("<!--",Y)){let j=$.indexOf("-->",Y+4);if(j===-1)return;W=j+3}else if($.startsWith("<![CDATA[",Y)){let j=$.indexOf("]]>",Y+9);if(j===-1)return;Z.text($.slice(Y+9,j)),W=j+3}else if($.startsWith("<?",Y)){let j=$.indexOf("?>",Y+2);if(j===-1)return;W=j+2}else if($.startsWith("<!",Y)){let j=$.indexOf(">",Y+2);if(j===-1)return;let z=$.indexOf("[",Y+2);if(z!==-1&&z<j){let X=$.indexOf("]",z+1);if(X===-1)return;let Q=$.indexOf(">",X+1);if(Q===-1)return;W=Q+1}else W=j+1}else if($[Y+1]==="/"){let j=$.indexOf(">",Y+2);if(j===-1)return;Z.close(_8($.slice(Y+2,j).trim())),W=j+1}else{let j=eK($,Y+1);if(j===-1)return;let z=$.slice(Y+1,j),X=z.endsWith("/");if(X)z=z.slice(0,-1);let Q=z.search(/[\s]|$/),G=_8(z.slice(0,Q));if(G){if(Z.open(G,$F(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function eK($,Z){let J=null;for(let W=Z;W<$.length;W++){let Y=$[W];if(J){if(Y===J)J=null}else if(Y==='"'||Y==="'")J=Y;else if(Y===">")return W}return-1}function $F($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[_8(W[1])]=N8(W[2]??W[3]??"");return Z}class J0 extends Error{url;status;constructor($,Z=null,J=null){super($);this.url=Z;this.status=J;this.name="SitemapError"}}var yW="http://www.sitemaps.org/schemas/sitemap/0.9",ZF="http://www.w3.org/1999/xhtml",S8=`<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
import{_g as tG}from"./chunk-9b4ypfcw.js";import{sh as rG}from"./chunk-5013raxj.js";import{Ah as K8,Ai as EG,Bh as Y8,Eh as j8,Fh as z8,Gh as uZ,Hh as RQ,Ih as jG,Jh as s9,Kh as h,Qh as C,Rh as f8,Sh as jZ,Th as F8,Uh as J6,Wh as P$,Xh as g,Yh as k4,ki as W6,ri as zZ,th as $3,vi as eX,wi as d$,xh as ZG,xi as u$,yh as _W,yi as AG,zh as xW}from"./chunk-eve0hewa.js";import{Di as d1,Ei as Z0,Fi as l1,Gi as SW}from"./chunk-v2cv3wcw.js";import{Hi as v3,Ii as GG,Mi as F5,Ni as p4,Oi as T}from"./chunk-7hdfbp2x.js";import{Ri as nX,Ui as y3}from"./chunk-dzvp8ynr.js";import{$i as MG,Yi as N5}from"./chunk-23mcs80p.js";import{rj as H$,wj as u1}from"./chunk-e9xbdgb2.js";import{Kj as RX}from"./chunk-gy307m19.js";import{Lj as l$,Oj as IG}from"./chunk-98dxtkbt.js";import{Pj as D1}from"./chunk-ks7msv3e.js";import{Qj as e3,Rj as i0,Sj as T1,Tj as nG,Uj as oG,Wj as yZ,Xj as CG,ek as aG}from"./chunk-yxjfghq3.js";import{tk as N1}from"./chunk-8r9kna46.js";import{Dk as B9,yk as tQ}from"./chunk-rwrcsfzv.js";import{Kk as rQ,Pk as s}from"./chunk-rw4z3n9b.js";import{Qk as dZ,Tk as L}from"./chunk-kddgfct7.js";import{$k as G9}from"./chunk-apfk702c.js";import{al as fG}from"./chunk-eyqsvzej.js";import{kl as Y9}from"./chunk-9yfg4nqq.js";import{ml as JG}from"./chunk-5aj27bgc.js";import{rl as c4}from"./chunk-tbhtx2t0.js";function s3($){return typeof $==="function"&&$.prototype!==void 0}function l0($){return typeof $==="string"?[$]:$}function n3($,Z){let J=Z?"attachment":"inline",W=$.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${J}; filename="${W}"; filename*=UTF-8''${encodeURIComponent($)}`}function GK($){return"total"in $&&"partial"in $&&"body"in $}function m9(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function oZ($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":z8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function KK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(GK($))return{body:$.body,start:$.start,end:$.end,total:$.total,partial:$.partial,type:$.type,name:$.name,download:$.download??!1,etag:$.etag,lastModified:$.lastModified,status:$.status??200,extraHeaders:$.headers??{}};let Z=$.file,J=Z instanceof Blob?Z:null,W=$.total??J?.size??-1;return{body:Z,start:$.start??0,end:$.end??W-1,total:W,partial:$.partial??!1,type:$.type??J?.type??"",name:$.name??Z?.name,download:$.download??!1,etag:$.etag,lastModified:$.lastModified,status:$.status??200,extraHeaders:$.headers??{}}}async function X8($,Z){if($ instanceof Response)return $;if(!$)return m9();let J=await KK($),{body:W,start:Y,end:j,total:z,partial:X}=J;if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return m9()}let{range:Q}=Z;if(Q){if(z<=0)return oZ(Math.max(z,0));if(!X){if(W instanceof Blob){let F=Y8(Q,z);if(!F)return oZ(z);W=W.slice(F.start,F.end+1),Y=F.start,j=F.end,X=!0}}}let G=Boolean(Q)&&X,K=G?206:J.status,B=new Headers;if(B.set("Accept-Ranges","bytes"),B.set("Content-Type",J.type||"application/octet-stream"),B.set("X-Content-Type-Options","nosniff"),G)B.set("Content-Range",j8(Y,j,z)),B.set("Content-Length",String(j-Y+1));else if(z>=0)B.set("Content-Length",String(z));if(J.name)B.set("Content-Disposition",n3(J.name,J.download));if(J.etag)B.set("ETag",J.etag);if(J.lastModified)B.set("Last-Modified",J.lastModified.toUTCString());for(let[F,D]of Object.entries(J.extraHeaders))B.set(F,D);if((Z.method??"GET").toUpperCase()==="HEAD"){if(W&&"cancel"in W&&typeof W.cancel==="function")await W.cancel();return new Response(null,{status:K,headers:B})}return new Response(W,{status:K,headers:B})}class e$ extends Z0{limit;constructor($){super("The request body is too large.",{status:413});this.limit=$}}var h9={b:1,k:1024,kb:1024,m:1048576,mb:1048576,g:1073741824,gb:1073741824};function rZ($){if(typeof $==="number"){if(Number.isFinite($)&&$>=0)return Math.floor($);if($===1/0)return 1/0}else{let Z=$.trim().toLowerCase();if(Z==="none"||Z==="off")return 1/0;let J=/^(\d+(?:\.\d+)?)\s*([a-z]*)$/.exec(Z);if(J&&(J[2]===""||(J[2]in h9)))return Math.floor(Number(J[1])*(h9[J[2]]??1))}throw Error(`Invalid body limit ${JSON.stringify($)}. Use a byte count or a size such as "64kb", "1mb" or "none".`)}var aZ=new WeakMap;function c9($){return aZ.has($)}function d9($){return aZ.get($)?.limit??null}function u9($){let Z=aZ.get($);return Z?Z.read>Z.limit:!1}function FK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function G8($,Z){let J=FK($);if(J!==null&&J>Z)throw new e$(Z)}function o3($,Z,J={}){let W=aZ.get($);if(W)W.limit=Z;else{let Y={limit:Z,read:0,stream:void 0,used:!1};aZ.set($,Y),VK($,Y)}if(J.checkDeclared!==!1)G8($,Z)}function BK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function Q8($,Z){if(Z.stream!==void 0)return Z.stream;let J=BK($);if(!J)return Z.stream=null;let W;return Z.stream=new ReadableStream({async pull(Y){W??=J.getReader();let{done:j,value:z}=await W.read();if(j){Y.close();return}if(Z.read+=z.byteLength,Z.read>Z.limit){let X=new e$(Z.limit);Y.error(X),W.cancel(X).catch(()=>{});return}Y.enqueue(z)},cancel(Y){return W?W.cancel(Y):J.cancel(Y)}},{highWaterMark:0}),Z.stream}async function t$($,Z){if(G8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=Q8($,Z);if(!J)return new Uint8Array(0);let W=J.getReader(),Y=[],j=0;for(;;){let{done:Q,value:G}=await W.read();if(Q)break;Y.push(G),j+=G.byteLength}let z=new Uint8Array(j),X=0;for(let Q of Y)z.set(Q,X),X+=Q.byteLength;return z}function p9($){return $.headers.get("Content-Type")??""}function VK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>Q8($,Z)}),J("bodyUsed",{get:()=>Z.used||Boolean(Z.stream?.locked)||Reflect.get(Object.getPrototypeOf($),"bodyUsed",$)}),J("bytes",{value:()=>t$($,Z)}),J("arrayBuffer",{value:async()=>{let W=await t$($,Z);return W.buffer.slice(W.byteOffset,W.byteOffset+W.byteLength)}}),J("text",{value:async()=>new TextDecoder().decode(await t$($,Z))}),J("json",{value:async()=>JSON.parse(new TextDecoder().decode(await t$($,Z)))}),J("blob",{value:async()=>new Blob([await t$($,Z)],{type:p9($)})}),J("formData",{value:async()=>new Response(await t$($,Z),{headers:{"Content-Type":p9($)}}).formData()}),J("clone",{value:()=>{G8($,Z.limit);let W=Q8($,Z),Y=null;if(W){let[j,z]=W.tee();Z.stream=j,Y=z}return new Request($.url,{method:$.method,headers:$.headers,body:Y,signal:$.signal,duplex:"half"})}})}function l9($){return s3($)}class l{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];constructor($,Z,J){this.method=$;this.handler=Z;this.methodName=J;this.handler=Z,this.methodName=J,this.method=$}get source(){if(!l9(this.handler)||typeof this.methodName!=="string")return;return{controller:this.handler,methodName:this.methodName}}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run($){if(l9(this.handler)){let Z=new this.handler;return Z[this.methodName].bind(Z)()}return this.handler()}middleware($){return this.middlewares=l0($),this}}class n9{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=l0($),this}async run(){let $=new C,Z=$.headers.toJSON();for(let J of s9($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if(u9($.rawRequest))throw new e$(d9($.rawRequest));throw J}}}class o9{constructor(...$){return new l(...$)}}class a9 extends l{__internal_brand="StreamHandler";async run($){let Z=T.getStore(),J=Z?.req?.rawRequest,W=K8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);return await X8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof F8)return oZ(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class r9{constructor(...$){return new a9(...$)}}class t9{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new l("GET",$,"list"),post:new l("POST",$,"store")},this.second={get:new l("GET",$,"show"),put:new l("PUT",$,"update"),delete:new l("DELETE",$,"delete")}}middleware($){if($.list)this.first.get.middleware($.list);if($.store)this.first.post.middleware($.store);if($.show)this.second.get.middleware($.show);if($.update)this.second.put.middleware($.update);if($.delete)this.second.delete.middleware($.delete);return this}}class T0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new l("GET",$,Z)}post($,Z){return new l("POST",$,Z)}put($,Z){return new l("PUT",$,Z)}patch($,Z){return new l("PATCH",$,Z)}delete($,Z){return new l("DELETE",$,Z)}resource($){return new t9($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${i9($)}.`);return OK($,this)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${i9($)}.`);return DK($,this)}file($,Z){return new o9("GET",$,Z)}stream($,Z){return new r9("GET",$,Z)}proxy($,Z={}){return new n9($,Z)}}function i9($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function OK($,Z){let J={stream:new l("POST",$,"stream"),attach:new l("POST",$,"attach"),stop:new l("POST",$,"stop"),upload:new l("POST",$,"upload")};return class extends T0{static __internal_brand="AgentRoute";static controller=$;static handlers=J;constructor(){super();this.middlewares=[...Z?.middlewares??[]]}routes={"/":J.stream,"/attach":J.attach,"/stop":J.stop,"/files":J.upload};static middleware(Y){if(Y.stream)J.stream.middleware(Y.stream);if(Y.attach)J.attach.middleware(Y.attach);if(Y.stop)J.stop.middleware(Y.stop);if(Y.upload)J.upload.middleware(Y.upload);return this}}}function DK($,Z){let J={start:new l("POST",$,"voiceStart"),update:new l("PATCH",$,"voiceUpdate"),end:new l("DELETE",$,"voiceEnd")};return class extends T0{static __internal_brand="VoiceRoute";static controller=$;static handlers=J;constructor(){super();this.middlewares=[...Z?.middlewares??[]]}routes={"/":J.start,"/:sessionId":{patch:J.update,delete:J.end}};static middleware(Y){if(Y.start)J.start.middleware(Y.start);if(Y.update)J.update.middleware(Y.update);if(Y.end)J.end.middleware(Y.end);return this}}}var p1="access_token";function L$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function a3($,Z){let J=L$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var UK=/^[A-Za-z0-9_-]+$/,LK=/^:[A-Za-z_][A-Za-z0-9_]*$/,e9=/^[A-Za-z0-9_-]{1,128}$/,HK=/^[A-Za-z0-9_.:-]+$/;class p extends Error{constructor($){super($);this.name="InvalidChannelError"}}function $W($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function $Z($){if(typeof $!=="string"||$.length===0)throw new p("A channel pattern must be a non-empty string.");if($.length>255)throw new p(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(LK.test(W)){let Y=W.slice(1);if(J.has(Y))throw new p(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new p(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!UK.test(W))throw new p(`The channel pattern "${$}" has an invalid segment "${W}". Segments are separated by dots and are either letters, digits, "_" and "-", or a param such as ":siteId".`)}return Z}function tZ($,Z={}){let J=$Z($),W=new Set,Y=J.map((j)=>{if(!j.startsWith(":"))return j;let z=j.slice(1);W.add(z);let X=Z[z];if(X===void 0||X===null)throw new p(`The channel "${$}" needs the param "${z}".`);let Q=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof Q!=="string"||!e9.test(Q))throw new p(`The param "${z}" of the channel "${$}" must be 1 to 128 letters, digits, "_" or "-". Use a public id in a channel name.`);return Q}).join(".");for(let j of Object.keys(Z))if(!W.has(j))throw new p(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new p(`The topic built from "${$}" is longer than 255 characters.`);return Y}function B8($){if($Z($).some((J)=>J.startsWith(":")))throw new p(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function ZW($){if(typeof $!=="string"||$.length===0||$.length>64||!HK.test($))throw new p(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function JW($,Z){if($===Z)return!0;if($===G0)return Z.startsWith(`${G0}.`)&&Z.split(".").length===2;let J=$.split("."),W=Z.split(".");if(J.length!==W.length)return!1;return J.every((Y,j)=>Y===W[j]||Y.startsWith(":")&&e9.test(W[j]))}var G0="user";function ZZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return tZ(`${G0}.:id`,{id:Z})}class r{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class r3 extends r{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');return o3(this.req.rawRequest,rZ(Z)),{}}}function IK($){let Z=new Map;for(let J of $)if(typeof J==="string"){let[W,Y=""]=J.split(":");if(W.startsWith("-")){if(Z.has(W.replace("-","")))Z.delete(W.replace("-",""))}else Z.set(W,Y.split(",").filter(Boolean))}else Z.set(J,[]);return Z}var PK={"body-limit":r3};class c1{config;static token="middleware";defaultBodyLimit;constructor($){this.config=$;this.defaultBodyLimit=$.bodyLimit===null||$.bodyLimit===void 0?null:rZ($.bodyLimit)}get aliases(){return{...PK,...this.config.aliases}}applyDefaultBodyLimit($){if(this.defaultBodyLimit!==null&&!c9($))o3($,this.defaultBodyLimit,{checkDeclared:!1})}assertGlobalMiddleware(){for(let $ of this.config.global){if(typeof $!=="string")continue;let[Z]=$.split(":");if(Z.startsWith("-"))throw Error(`Global middleware "${$}" cancels an alias, but nothing is inherited into the global list. Remove it.`);if(!this.aliases[Z])throw Error(`Global middleware "${Z}" is not a registered alias. Add it to \`aliases\` in the middleware config, or list the class itself.`)}}runGlobalMiddleware(){return this.runMiddleware(this.config.global)}runMiddleware($){let Z=new C,J=this.aliases,W=[];for(let[Y,j]of IK($).entries())if(typeof Y==="string"){let z=J[Y];if(z){let X=new z(Z);W.push({run:()=>X.run.call(X,...j),runsOnRefusal:WW(z)})}}else if(s3(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:WW(Y)})}else W.push({run:Y,runsOnRefusal:!1});return(async()=>{let Y={};for(let j=0;j<W.length;j++)try{Y={...Y,...await W[j].run()}}catch(z){throw await MK(W.slice(j+1)),z}return Y})()}}function WW($){return $?.runsOnRefusal===!0}async function MK($){for(let Z of $){if(!Z.runsOnRefusal)continue;try{await Z.run()}catch(J){console.error(J)}}}class t3{visibility;authorizer;middlewares=[];constructor($,Z){this.visibility=$;this.authorizer=Z}middleware($){return this.middlewares=[...this.middlewares,...l0($)],this}events(...$){return this}}class XW{static __brand="ChannelRouter";channels={};public(){return new t3("public")}private($){return new t3("private",$)}async authorize($,Z,J={},W={}){try{xK(this)}catch(Q){return console.error("[gemi] The channel router is invalid, so every subscription is refused.",Q),{ok:!1,code:"error"}}let Y=Object.hasOwn(this.channels,Z)?this.channels[Z]:void 0;if(!QW(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===G0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=tZ(Z,J??{})}catch(Q){if(Q instanceof p)return{ok:!1,code:"invalid_params"};throw Q}let z=Object.fromEntries(Object.entries(J??{}).map(([Q,G])=>[Q,String(G)])),X=new C($,z,"api",Z);return T.exit(()=>e3.exit(()=>T.run(X,async()=>{let Q=T.getStore();try{if(Y.middlewares.length>0)await L(c1).runMiddleware(Y.middlewares);if(Z===G0){let G=await YW(X);if(!G)return{ok:!1,code:"denied"};if(j=ZZ(G),Y.visibility==="private"&&Y.authorizer){if(await jW(Y.authorizer,X,z)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}if(Y.visibility==="private"){if((Y.authorizer?await jW(Y.authorizer,X,z):await YW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(_K(G))return{ok:!1,code:"denied"};return console.error(`[gemi] Authorizing the channel "${Z}" threw, so the subscription was refused.`,G),{ok:!1,code:"error"}}finally{Q.destroy()}},W.carried)))}}async function TK($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;GW(Y);let j=W.as,z,X=null;if(j instanceof Request)z=j;else if(j&&typeof j==="object"&&j.rawRequest instanceof Request)z=j.rawRequest;else z=new Request("http://localhost/__gemi/socket"),X=j?{user:j}:null;return(await Y.authorize(z,Z,J,{carried:X})).ok}function QW($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function YW($){if(!T.getStore().user&&L$($)===null)return null;try{return await w0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function jW($,Z,J){if(NK($))return new $().authorize(Z,J);return $(Z,J)}function NK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function _K($){return $?.kind===d1||u1($)||H$($)}var zW=new WeakSet;function xK($){if(zW.has($))return;GW($),zW.add($)}function GW($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!QW(Y))throw new p(`The channel "${W}" is not declared with this.public() or this.private().`);let j=$Z(W);if(j[0].startsWith(":"))throw new p(`The channel pattern "${W}" starts with a param. Start it with a literal segment, such as "site.:siteId", so it cannot overlap another channel.`);if(W!==G0&&j.length===2&&j[0]===G0)throw new p(`The channel pattern "${W}" can build user.<id>, which belongs to the "user" channel (the signed-in user's own). Declare "user" and emit with Broadcast.toUser(user), or name this channel differently.`);if(W!==G0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new p(`The private channel "${W}" has params but no authorization, so every signed-in user could join every one of them. Pass a callback or a policy that checks the params: this.private((req, params) => ...).`);J.push({pattern:W,segments:W===G0?[G0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(CK(J[W].segments,J[Y].segments))throw new p(`The channel patterns "${J[W].pattern}" and "${J[Y].pattern}" can build the same topic, so a subscriber could join one's topics through the other's authorization. Make them differ in a literal segment.`)}function CK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class V8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class O8{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class D8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}class KW{static __brand="McpRouter";routes={};scopes;param($){return new V8($.as,$.input,$.bind)}fromTool($,Z={}){return new D8($,Z)}fromApiRoute($,Z,J){return new O8($,Z,J)}}function K0($,Z){return $.replace(/:([^/]+[*?]?)/g,(J,W)=>{let Y=W.endsWith("?")||W.endsWith("*"),j=Y?W.slice(0,-1):W,z=Z[j];if(z===void 0){if(Y)return"";if(import.meta.env.DEV)throw Error(`Missing parameter: ${j}`);console.error(`Missing parameter: ${j} in URL: ${$}`)}return String(z)}).replace(/\/\//g,"/").replace(/\/$/,"")}class U8 extends Z0{constructor($,Z=307){super("Redirect error");this.name="RedirectError",this.payload={api:{status:200,data:{},directive:{kind:"Redirect",path:$}},view:{status:Z,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:$}}}}}class P1{static to($,...Z){let[J={}]=Z,{search:W={},params:Y={},permanent:j,status:z}={params:{},status:307,permanent:!1,...J},X=new URLSearchParams(W).toString();throw new U8([K0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new U8($,Z)}}var FW=Symbol.for("gemi.HttpResponse");class I${kind;body;status;headers;[FW]=!0;constructor($,Z,J,W){this.kind=$;this.body=Z;this.status=J;this.headers=W}static json($,Z={}){let J=Z.status??200;return SK(J),new I$("json",$,J,new Headers(Z.headers))}static error($,Z,J={}){if(!Number.isInteger($)||$<400||$>599)throw RangeError(`HttpResponse.error: status must be an integer from 400 to 599, got ${$}.`);return I$.json({error:Z},{...J,status:$})}get ok(){return this.status>=200&&this.status<300}toResponse($,Z){let J=$,W=this.serialize(J);for(let Y of Z)J.append("Set-Cookie",Y);this.headers.forEach((Y,j)=>{if(j.toLowerCase()!=="set-cookie")J.set(j,Y)});for(let Y of this.headers.getSetCookie())J.append("Set-Cookie",Y);if(this.status>=400&&!this.headers.has("Cache-Control"))J.set("Cache-Control","no-store");return new Response(W,{status:this.status,headers:J})}serialize($){switch(this.kind){case"json":return $.set("Content-Type","application/json"),JSON.stringify(this.body)??null}}}function SK($){if(!Number.isInteger($)||$<200||$>599)throw RangeError(`HttpResponse: status must be an integer from 200 to 599, got ${$}.`);if($===204||$===205||$===304)throw RangeError(`HttpResponse.json: a ${$} response has no body.`)}function JZ($){return typeof $==="object"&&$!==null&&$[FW]===!0}function AK($,Z,J={}){return I$.error($,Z,J)}class BW{kind="redirect";viewPath="REDIRECT";middlewares=[];featureGates=[];handler;constructor($){if(!$)this.handler=()=>({});else if(typeof $==="function")this.handler=$;else{let[Z,J]=$;this.handler=(W)=>{return new Z()[J](W)}}}async run($,Z){let{destination:J,permanent:W=!1,status:Y=307}=await this.handler($);if(!J)throw Error(`Redirect destination is required see ${Z}`);return P1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function L8($,Z){if($ instanceof Response)return $;let J=$ instanceof Blob,W=J?$:$.file,Y=J?$.name:$.name??$.file?.name,j=(J?$.type:$.type??$.file?.type)||"",z=J?!1:$.download??!1,X=J?200:$.status??200;if(!J)for(let[Q,G]of Object.entries($.headers??{}))Z.set(Q,G);if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return new Response("Not found",{status:404})}if(Z.set("Content-Type",j||"application/octet-stream"),W instanceof Blob)Z.set("Content-Length",String(W.size));if(Y)Z.set("Content-Disposition",n3(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class VW{kind="file";viewPath="FILE";middlewares=[];featureGates=[];handler;constructor($){if(!$)this.handler=()=>null;else if(typeof $==="function")this.handler=$;else{let[Z,J]=$;this.handler=(W)=>{return new Z()[J](W)}}}async run($,Z){let J=await this.handler($);if(!J)throw Error(`File route handler must return a file see ${Z}`);return{FILE:J}}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function OW($,Z){if(JZ($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class DW{viewPath;middlewares=[];featureGates=[];staticOptions=null;handler;constructor($,Z){this.viewPath=$;if(!Z)this.handler=()=>({});else if(typeof Z==="function")this.handler=Z;else{let[J,W]=Z;this.handler=(Y)=>{return new J()[W](Y)}}}async run($,Z){let J=OW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=l0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class UW{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends M1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends M1{routes=J??{}}}else this.children=class extends M1{routes=Z},this.handler=()=>({})}async run($,Z){let J=OW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}alwaysRun(){return this.alwaysRuns=!0,this}middleware($){return this.middlewares=l0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class M1{middlewares=[];featureGates=[];routes={};view($,Z){return new DW($,Z)}file($){return new VW($)}redirect($){return new BW($)}layout($,Z,J){return new UW($,Z,J)}}function EK($){return $}function fK(){return{aliases:{},global:[],bodyLimit:null}}var Y1="redirect";function j1($,Z="/"){if(typeof $!=="string"||!$.startsWith("/"))return Z;if(/[\u0000-\u001f\u007f\\]/.test($)||$.startsWith("//"))return Z;try{let J=new URL($,"http://gemi.invalid");if(J.origin!=="http://gemi.invalid")return Z;let W=`${J.search}${J.hash}`.replaceAll("/","%2F"),Y=`${J.pathname}${W}`.replaceAll(":","%3A");return Y.startsWith("//")?Z:Y}catch{return Z}}function WZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function RK($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(L(s).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function bK($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function $6($,Z){let J=Z||L(A).config.signInPath,W=/^[a-z][a-z\d+.-]*:/i.test(J);if(W?!/^https?:\/\//i.test(J):!J.startsWith("/"))throw Error(`\`auth.signInPath\` must be a path like "/auth/sign-in", or an http(s) URL for sign-in hosted elsewhere. Got "${J}". A route's own \`"auth:<path>"\` cannot carry a URL, because the alias parser splits it on the colon.`);let Y=new URL(J,"http://gemi.invalid");if($?.kind==="view"){let j=RK($,!W);if(W||!bK(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(Y1,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class LW extends r{async run($){let Z=T.getStore(),J=Z.req;if(Z.user)return{};let W=await a3(L(A),J);if(!W)throw new P$({redirectTo:$6(J,$)});return Z.setUser(W),{}}}var I8="gemi_same_site",H8="private, no-cache, no-store, max-age=0, must-revalidate";class Z6 extends r{run(){let $=T.getStore(),Z=$?.req;if(!Z||$.user)return{};let J=Z.rawRequest;if(Z.kind!=="view"||J.method!=="GET"&&J.method!=="HEAD")return{};let W=new URL(J.url);if(/\.(json|og)$/.test(W.pathname))return{};if(W.searchParams.has(I8))return{};if(L$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(I8,"1"),new HW(`${W.pathname}${W.search}`)}}class HW extends Z0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=wK($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":H8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":H8}},viewData:{status:200,data:{},headers:{"Cache-Control":H8},directive:{kind:"Redirect",path:$}},view:{status:200,headers:J,body:`<!doctype html><html><head><meta charset="utf-8"><meta name="robots" content="noindex"><meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0;url=${Z}"><title>Redirecting</title></head><body><p><a href="${Z}">Continue</a></p></body></html>`}}}}function wK($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}class IW extends r{async run(...$){let[Z="public",J="864000",...W]=$,Y=`${Z}, max-age=${J}${W.length>0?", ":""}${W.join(", ")}`;if($.length===0)Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="public")Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="private")Y="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",Y);return{}}}var PW={"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"};class MW extends r{static runsOnRefusal=!0;config={origins:{"":{"Access-Control-Allow-Methods":"GET, HEAD, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"}}};run(){let $=this.req,Z=$.rawRequest.headers.get("Origin");if(Z&&this.config.origins[Z]){$.ctx().setHeaders("Access-Control-Allow-Origin",Z);let J={...PW,...this.config.origins[Z]};for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}else if(Z&&this.config.origins["*"]){$.ctx().setHeaders("Access-Control-Allow-Origin","*");let J={...PW,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var kK="Rate limit exceeded";class i1 extends Z0{result;retryAfter;constructor($,Z=kK){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?P8($):{}};this.payload={api:{status:429,data:{error:{...l1("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function P8($){let Z={"X-RateLimit-Limit":String($.limit),"X-RateLimit-Remaining":String($.remaining),"X-RateLimit-Reset":String(Math.ceil($.resetAt/1000))};if(!$.allowed)Z["Retry-After"]=String(Math.max(1,Math.ceil($.retryAfter/1000)));return Z}class z1{config;static token="ratelimiter";constructor($){this.config=$}get driver(){return this.config.driver}async consume($,Z={}){let J=Z.limit??this.config.limit,W=Z.window??this.config.window,Y=Z.cost??1;if(TW("window",W),TW("limit",J),!Number.isFinite(Y)||Y<0)throw Error(`Rate limiter cost must be zero or greater, got ${Y}`);return await this.config.driver.consume({key:$,limit:J,window:W*1000,cost:Y})}async enforce($,Z={},J){let W=await this.consume($,Z);if(!W.allowed)throw new i1(W,typeof J==="function"?J(W):J);return W}}function TW($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}class CW extends r{async run($,Z){let J=qK();if(!J)return{};let W=await J.consume(this.key(),{limit:NW($)??this.config.limit,window:NW(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(P8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new i1(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=_W(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${YZ(this.req)}:${this.req.routePath??"*"}`}}function qK(){try{let $=L();return $.bound(z1)?$.make(z1):null}catch{return null}}function YZ($){let Z=xW($.rawRequest);if(Z!==void 0)return Z;let J=$.headers.get("x-forwarded-for");if(J){let[W]=J.split(",");if(W?.trim())return W.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function NW($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class AW extends r{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new M8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new M8;return{}}}class M8 extends Z0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:SW("csrf","Invalid CSRF token",403)}},view:{}}}class EW{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class fW{all($,Z){return!0}}class T8{options;param;refuse;answers=new WeakMap;constructor($){this.options=$;this.param=$.param,this.refuse=$.refuse??"not_found"}refusal(){return this.refuse==="forbidden"?new jZ:new J6}authorize($,Z){if(typeof Z==="number"&&Number.isFinite(Z))Z=String(Z);if(typeof Z!=="string"||Z==="")return Promise.reject(this.refusal());let J=this.answers.get($.rawRequest);if(!J)J=new Map,this.answers.set($.rawRequest,J);let W=J.get(Z);if(!W)W=this.decide($,Z),J.set(Z,W);return W}async allows($,Z){try{return await this.authorize($,Z),!0}catch(J){if(this.isRefusal(J))return!1;throw J}}fromRoute($=new C,Z=this.param){if(Z===void 0)throw Error('This resource policy has no `param`. Give `defineResourcePolicy` one, or name it: `fromRoute(req, "pageId")`, or `alias:pageId` on the middleware.');return this.authorize($,$.params?.[Z])}get middleware(){if(!this.middlewareClass){let $=(Z,J)=>this.fromRoute(Z,J||void 0);this.middlewareClass=class extends r{async run(J){await $(this.req,J)}}}return this.middlewareClass}middlewareClass;forAgent($){return{authorize:async(Z,{threadId:J,body:W})=>{let Y;if(J!==void 0){if(Y=$.thread?await $.thread(J,Z):null,Y===null||Y===void 0)throw this.refusal()}if(W!==void 0){let j=await $.body(W,Z);if(await this.authorize(Z,j),J!==void 0&&String(Y)!==String(j))throw this.refusal();return}if(J!==void 0)await this.authorize(Z,Y)}}}async decide($,Z){let J=await this.options.load(Z,$);if(J===null||J===void 0||!await this.options.allow(J,$))throw this.refusal();return J}isRefusal($){return this.refuse==="forbidden"?$ instanceof jZ:$ instanceof J6}}function yK($){return new T8($)}async function Y6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await aK($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return oK(z,Z,J,$.url)}async function oK($,Z,J,W){let Y=$.getReader(),j=[],z=0;try{for(;;){let{done:G,value:K}=await Y.read();if(G)break;if(z+K.byteLength>Z){if(!J)throw new W6(W,Z);j.push(K.subarray(0,Z-z)),z=Z;break}j.push(K),z+=K.byteLength}}finally{Y.cancel().catch(()=>{})}let X=new Uint8Array(z),Q=0;for(let G of j)X.set(G,Q),Q+=G.byteLength;return X}async function aK($){let Z=$.getReader(),J=await Z.read(),W=J.done?new Uint8Array:J.value,Y=new ReadableStream({start(j){if(J.done)j.close();else j.enqueue(W)},async pull(j){let z=await Z.read();if(z.done)j.close();else j.enqueue(z.value)},cancel(j){return Z.cancel(j)}});return[W,Y]}function j6($){return new TextDecoder("utf-8").decode($)}var rK={"&":"&","<":"<",">":">",'"':""","'":"'"};function M$($){return $.replace(/[&<>"']/g,(Z)=>rK[Z])}var tK={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function N8($){if(!$.includes("&"))return $;return $.replace(/&(#x[0-9a-fA-F]{1,6}|#[0-9]{1,7}|[a-zA-Z]{2,4});/g,(Z,J)=>{if(J[0]!=="#")return tK[J]??Z;let W=J[1]==="x"?parseInt(J.slice(2),16):parseInt(J.slice(1),10);return W>0&&W<=1114111?String.fromCodePoint(W):Z})}function _8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function RW($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(N8($.slice(W)));return}if(Y>W)Z.text(N8($.slice(W,Y)));if($.startsWith("<!--",Y)){let j=$.indexOf("-->",Y+4);if(j===-1)return;W=j+3}else if($.startsWith("<![CDATA[",Y)){let j=$.indexOf("]]>",Y+9);if(j===-1)return;Z.text($.slice(Y+9,j)),W=j+3}else if($.startsWith("<?",Y)){let j=$.indexOf("?>",Y+2);if(j===-1)return;W=j+2}else if($.startsWith("<!",Y)){let j=$.indexOf(">",Y+2);if(j===-1)return;let z=$.indexOf("[",Y+2);if(z!==-1&&z<j){let X=$.indexOf("]",z+1);if(X===-1)return;let Q=$.indexOf(">",X+1);if(Q===-1)return;W=Q+1}else W=j+1}else if($[Y+1]==="/"){let j=$.indexOf(">",Y+2);if(j===-1)return;Z.close(_8($.slice(Y+2,j).trim())),W=j+1}else{let j=eK($,Y+1);if(j===-1)return;let z=$.slice(Y+1,j),X=z.endsWith("/");if(X)z=z.slice(0,-1);let Q=z.search(/[\s]|$/),G=_8(z.slice(0,Q));if(G){if(Z.open(G,$F(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function eK($,Z){let J=null;for(let W=Z;W<$.length;W++){let Y=$[W];if(J){if(Y===J)J=null}else if(Y==='"'||Y==="'")J=Y;else if(Y===">")return W}return-1}function $F($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[_8(W[1])]=N8(W[2]??W[3]??"");return Z}class J0 extends Error{url;status;constructor($,Z=null,J=null){super($);this.url=Z;this.status=J;this.name="SitemapError"}}var yW="http://www.sitemaps.org/schemas/sitemap/0.9",ZF="http://www.w3.org/1999/xhtml",S8=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
3
|
`,bW=`<urlset xmlns="${yW}" xmlns:xhtml="${ZF}">
|
|
4
4
|
`,wW=`</urlset>
|
|
5
5
|
`,T$=50000,eZ=52428800,kW=2048,JF=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),WF=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,YF="application/xml; charset=utf-8",qW=new TextEncoder;function A8($,Z){let J;try{J=new URL($)}catch{throw new J0(`Sitemap: ${Z} "${$}" is not an absolute URL.`)}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new J0(`Sitemap: ${Z} "${$}" is not an http(s) URL.`);let W=J.href;if(W.length>kW)throw new J0(`Sitemap: ${Z} is over ${kW} characters: "${W.slice(0,80)}\u2026".`);return W}function vW($,Z){if($ instanceof Date){if(Number.isNaN($.getTime()))throw new J0(`Sitemap: lastmod of ${Z} is an invalid Date.`);return $.toISOString()}if(!WF.test($))throw new J0(`Sitemap: lastmod "${$}" of ${Z} is not a W3C datetime (e.g. "2026-10-07" or "2026-10-07T12:00:00Z").`);return $}function jF($){let Z=A8($.loc,"loc"),J=`<url><loc>${M$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${M$(vW($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!JF.has($.changefreq))throw new J0(`Sitemap: changefreq "${$.changefreq}" of ${Z} is not one the protocol knows.`);J+=`<changefreq>${$.changefreq}</changefreq>`}if($.priority!=null){let W=$.priority;if(!Number.isFinite(W)||W<0||W>1)throw new J0(`Sitemap: priority ${W} of ${Z} is not between 0 and 1.`);J+=`<priority>${Number(W.toFixed(4))}</priority>`}for(let W of $.alternates??[]){let Y=W.hrefLang?.trim();if(!Y)throw new J0(`Sitemap: an alternate of ${Z} has no hrefLang.`);let j=A8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${M$(Y)}" href="${M$(j)}"/>`}return`${J}</url>
|
|
@@ -20,7 +20,7 @@ c.remove(e==='dark'?'light':'dark');c.add(e);d.style.colorScheme=e}catch(x){}}($
|
|
|
20
20
|
`)),Z.onSettle((K)=>{if(X||K.status!=="resolved")return;z.enqueue(Y.encode(`${JSON.stringify([K.path,K.variantKey,K.data])}
|
|
21
21
|
`))});let G=setTimeout(()=>Q(!0),J);Z.allSettled().then(()=>Q(!1),()=>Q(!1))},cancel(){j(!1)}})}import{Fragment as vT,createContext as OD,createElement as gT,lazy as mT,use as hT,useContext as pT}from"react";function qQ($){return{islands:[],render:$,instances:new WeakMap,count:0}}var h3="gemi-slot",yQ="data-slot",vQ="data-gemi-slot";var DD=Symbol.for("gemi.staticRender"),gQ=globalThis[DD]??=OD(null);import{createHash as dQ}from"crypto";var Z9='var r=document,i=window,a=history;i.__gemi_nav?.d();var L=new AbortController,h=(t,e,n,s)=>t.addEventListener(e,n,{signal:L.signal,...s}),q=i.__gemi_nav={d:()=>L.abort()},v=(t,e)=>{if(!t.g)t.g=1,import(e.s).then((n)=>{if(t.isConnected)t.r=n.h(t,n.m[e.e])}).catch((n)=>console.error(n))},D=(t)=>{let e=t.getElementById("gemi-islands");return e?JSON.parse(e.textContent):{i:[]}},R=(t,e)=>{for(let n of t.querySelectorAll("gemi-island")){let s=e.i[n.dataset.island];if(!s||n.o)continue;if(s.l=="eager")v(n,s);else if(s.l=="idle"||!i.IntersectionObserver||!n.children.length)(i.requestIdleCallback||setTimeout)(()=>v(n,s));else{let l=new IntersectionObserver((m)=>{if(m.some((d)=>d.isIntersecting))l.disconnect(),v(n,s)});for(let m of n.children)l.observe(m)}}},O=\'meta[name="gemi-static"]\',A="style:not([data-gemi-fonts])",T=A+",link[rel=stylesheet]",K=`head>${A},body>${A},link[rel=stylesheet]`,I=\'meta[name]:not([name=viewport]),meta[property],link[rel~=canonical],link[rel~=alternate],link[rel~=icon],link[rel=preload][as=font],style[data-gemi-fonts],script[type="application/ld+json"]\',w=(t)=>t.querySelector(O)?.content,C=(t)=>[...t.querySelectorAll(K)].map((e)=>e.outerHTML).join(),c=(t)=>t.href.split("#")[0],p=r.createElement("div");p.setAttribute("aria-live","polite");p.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap";r.body.append(p);var _=(t)=>{q.p={url:location.href,title:r.title,initial:t},r.dispatchEvent(new CustomEvent("gemi:page-load",{detail:q.p}))},f=new Map,k=(t)=>{let e=f.get(t);if(!e||Date.now()-e[0]>30000){let n=fetch(t,{headers:{accept:"text/html","x-gemi-navigate":"1"},signal:AbortSignal.timeout(1e4)}).then((s)=>{if(!s.ok||!/^text\\/html/.test(s.headers.get("content-type"))||new URL(s.url||t).origin!=location.origin)throw s;return s.text().then((l)=>[s.url||t,l])});e=[Date.now(),n],n.catch(()=>f.get(t)==e&&f.delete(t))}if(f.delete(t),f.set(t,e),f.size>10)f.delete(f.keys().next().value);return e[1]},M=(t)=>{let e=t.target.closest?.("a[href]"),n=e?.getAttribute("target");if(!e||n&&n!="_self"||e.hasAttribute("download")||/(^|\\s)external(\\s|$)/i.test(e.getAttribute("rel"))||e.closest("[data-gemi-reload]"))return;let s=new URL(e.getAttribute("href"),r.baseURI);if(s.origin==location.origin&&!(s.href.includes("#")&&c(s)==c(location)))return s},y={},U=()=>Math.random().toString(36).slice(2),E=()=>a.state?.g||a.replaceState({...a.state,g:U()},""),P=c(location),b=0,N=(t)=>{if(!t.hasAttribute("tabindex"))t.setAttribute("tabindex","-1"),t.addEventListener("blur",()=>t.removeAttribute("tabindex"),{once:!0});t.focus({preventScroll:!0})},Y=(t)=>{let e=r.body,n=t.body,s=D(t),l=r.documentElement;r.title=t.title;for(let o of["lang","dir"]){let u=t.documentElement.getAttribute(o);if(u==null)l.removeAttribute(o);else l.setAttribute(o,u)}for(let o of r.head.querySelectorAll(I))o.remove();let m=new Set([...r.querySelectorAll("link[rel=modulepreload]")].map((o)=>o.getAttribute("href")));r.head.append(...t.head.querySelectorAll(I),...[...t.head.querySelectorAll("link[rel=modulepreload]")].filter((o)=>!m.has(o.getAttribute("href"))));let d=new Map([...e.querySelectorAll("[data-gemi-persist]")].map((o)=>[o.dataset.gemiPersist,o])),g=[...n.querySelectorAll("[data-gemi-persist]")].map((o)=>[o,d.get(o.dataset.gemiPersist)]).filter((o)=>o[1]);for(let o of[...e.querySelectorAll("gemi-island")].reverse())if(o.o=1,!g.some((u)=>u[1].contains(o)))try{o.r?.unmount()}catch(u){console.error(u)}for(let[o,u]of g)o.replaceWith(u);for(let o of[...e.childNodes])if(!o.matches?.(T))o.remove();for(let o of[...n.children])if(o.matches(T))o.remove();for(let o of[...e.attributes])e.removeAttribute(o.name);for(let o of n.attributes)e.setAttribute(o.name,o.value);e.append(...n.childNodes,p),R(e,s)},H=async(t,e)=>{let n=++b,s=!e&&y[a.state?.g];a.scrollRestoration="manual";try{let[l,m]=await k(c(t));if(n!=b)return;let d=new DOMParser().parseFromString(m,"text/html");if(w(d)==null||w(d)!=w(r)||C(d)!=C(r))throw 0;if(e){let o=new URL(l);o.hash=t.hash,a.pushState({g:U()},"",o.href)}P=c(location),Y(d);let g=e&&t.hash&&r.getElementById(decodeURIComponent(t.hash.slice(1)));if(g)g.scrollIntoView({behavior:"instant"});else i.scrollTo({left:s?.[0]||0,top:s?.[1]||0,behavior:"instant"});if(e)N(g||r.querySelector("h1")||r.querySelector("main")||r.body);p.textContent=r.title,_(!1)}catch{if(n!=b)return;if(e)location.assign(t.href);else location.reload()}};h(r,"click",(t)=>{if(t.defaultPrevented||t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let e=M(t);if(e&&r.dispatchEvent(new CustomEvent("gemi:before-navigate",{cancelable:!0,detail:{url:e.href}})))t.preventDefault(),E(),y[a.state.g]=[i.scrollX,i.scrollY],H(e,1)});h(i,"popstate",()=>{if(b++,c(location)==P){let t=y[a.state?.g];if(t)i.scrollTo({left:t[0],top:t[1],behavior:"instant"})}else if(a.state?.g)H(new URL(location.href),0);else location.reload()});h(i,"hashchange",E);h(i,"scroll",()=>a.state?.g&&(y[a.state.g]=[i.scrollX,i.scrollY]),{passive:!0});var S,x=(t)=>{if(r.querySelector(O)?.dataset.prefetch=="none"||navigator.connection?.saveData)return;let e=M(t);if(e&&c(e)!=c(location))k(c(e))};h(r,"pointerover",(t)=>{clearTimeout(S),S=setTimeout(()=>x(t),65)});h(r,"pointerout",()=>clearTimeout(S));h(r,"focusin",x);h(r,"touchstart",x,{passive:!0});E();R(r,D(r));_(!0);';import{createHash as UD}from"crypto";import{existsSync as hQ,readFileSync as LD}from"fs";import{join as j9}from"path";var pQ=".script",HD=[".ts",".js"],ID="document-scripts.json",cQ="data-gemi-script",PD=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function MD($){if(typeof $!=="string"||!PD.test($))throw Error(`A static view's \`script\` is a path under app/views without the ".script.ts" suffix, e.g. "site/clicks". Got ${JSON.stringify($)}.`)}function TD($,Z){for(let J of HD){let W=j9($,"views",`${Z}${pQ}${J}`);if(hQ(W))return W}return null}async function mQ($){let Z=await Bun.build({entrypoints:[$],target:"browser",format:"iife",minify:!0,throw:!1});if(!Z.success||!Z.outputs[0]){let W=Z.logs.map((Y)=>String(Y)).join(`
|
|
22
22
|
`);throw Error(`The document script ${$} does not bundle.
|
|
23
|
-
${W}`)}let J=(await Z.outputs[0].text()).trim();if(/<\/script|<!--/i.test(J))throw Error(`The document script ${$} contains "</script" or "<!--", which would end the inline <script> it is put in. Write it "<\\/script" or build the string from parts.`);return J}function ND($){return`'sha256-${UD("sha256").update($).digest("base64")}'`}var J9,W9=new Map;function _D(){if(J9===void 0){let $=j9(Y9(),"dist","server",ID);J9=hQ($)?JSON.parse(LD($,"utf8")):null}return J9??null}async function z9($){MD($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=_D()?.[$];if(j!==void 0)return j;let z=W9.get($);if(z)return z}let J=j9(Y9(),"app"),W=TD(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${pQ}.ts (or .js).`);if(!Z)return mQ(W);let Y=mQ(W);return W9.set($,Y),Y.catch(()=>W9.delete($)),Y}async function nT($){return ND(await z9($))}var xD="gemi-islands",JN=`'sha256-${dQ("sha256").update(G9).digest("base64")}'`;function X9($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var Q9=($)=>$.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),WN=`'sha256-${dQ("sha256").update(Z9).digest("base64")}'`,CD='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',SD="gemi-static";function uQ($,Z,J,W,Y,j){let z=new Set,X=[];if(J)X=Z.islands.map((V)=>{let O=V.module?J(V.module):void 0;if(!O)return console.error(`[gemi] island ${V.module??"(unknown module)"}: no client build entry. Declare it as island(() => import("./Component")) so gemi's Vite plugin builds it.`),null;if(V.load==="eager"){for(let U of O.preload)z.add(U);if(V.preloadDynamic)for(let U of O.dynamicPreload??[])z.add(U)}return{s:O.src,e:V.export,l:V.load}});let Q=X.some((V)=>V!==null),G=j?`<script type="module" ${cQ}="${Q9(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return X9($,"</head>",G,!1);let B=(Y?`<meta name="${SD}" content="${Q9(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((V)=>`<link rel="modulepreload" href="${Q9(V)}"/>`).join("")+G,F=Y?Z9:G9,D=(Q?`<script type="application/json" id="${xD}">${X1({i:X})}</script>`:"")+`<script type="module">${W?CD+F:F}</script>`;return X9(X9($,"</head>",B,!1),"</body>",D,!0)}function AD($,Z){let J=/<(\/?)template\b[^>]*>/gi;J.lastIndex=Z;let W=0;for(let Y=J.exec($);Y;Y=J.exec($))if(W+=Y[1]?-1:1,W===0)return J.lastIndex;return-1}function lQ($){let Z=`<template ${vQ}="`;for(let J=$.lastIndexOf(Z);J!==-1;J=$.lastIndexOf(Z)){let W=AD($,J);if(W===-1)break;let Y=J+Z.length,j=$.slice(Y,$.indexOf('"',Y)),z=$.indexOf(">",Y)+1,X=$.slice(z,W-11);$=$.slice(0,J)+$.slice(W);let Q=`<${h3} ${yQ}="${j}" style="display:contents"></${h3}>`;$=$.split(Q).join(`<${h3} style="display:contents">${X}</${h3}>`)}return $}function iQ($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function sQ($,Z){if($.getSetCookie().length>0){if(Z.cacheControl&&Bun.env.NODE_ENV!=="production")console.warn(`[gemi] A static view with cacheControl "${Z.cacheControl}" set a cookie, so it was sent "private, no-store" instead. Static pages are cacheable only when nothing on them sets a cookie.`);$.set("Cache-Control","private, no-store");return}if(Z.cacheControl&&!$.has("Cache-Control"))$.set("Cache-Control",Z.cacheControl)}var ED=async()=>(await import("./chunk-w17p2k8g.js")).default,K9,p3=async(...$)=>{return K9??=import("react-dom/server.browser").catch((Z)=>{throw K9=void 0,Z}),(await K9).renderToReadableStream(...$)},oQ=1e4,aQ="no-locale",fD="no-theme";async function RD($,Z,J){let W=`${J==="italic"?"italic,":""}wght@${J==="italic"?"1,":""}${Z}`,z=(await(await fetch(`https://fonts.googleapis.com/css2?family=${$}:${W}&display=swap`,{headers:{"User-Agent":"Mozilla/5.0 Firefox/1.0"}})).text()).match(/url\(([^)]+)\)/)?.[1];return await fetch(z).then((X)=>X.arrayBuffer())}var V9="/assets";function bD($){return $===V9||$.startsWith(`${V9}/`)}function wD($){let Z=$.filter(bD);if(Z.length>0){let J=Z.length>1;throw Error(`View route path${J?"s":""} ${Z.map((W)=>`"${W}"`).join(", ")} use${J?"":"s"} the reserved "${V9}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function kD($){let Z=L(W1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function F9($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function qD($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class c3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];staticRoutes=[];root=null;shellReporter=bQ();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;theme;constructor($){let Z=ZQ();this.partialRendering=$.partialRendering??Z.partialRendering,this.localeRouting=$.localeRouting??Z.localeRouting,this.theme=$.theme??Z.theme,this.hooks={onRequestStart:$.onRequestStart??Z.onRequestStart,onRequestEnd:$.onRequestEnd??Z.onRequestEnd,onRequestFail:$.onRequestFail??Z.onRequestFail,onStreamComplete:$.onStreamComplete??Z.onStreamComplete};let J={"/":$.rootRouter,"/auth":xJ};this.flatViewRoutes=y4(J),wD(Object.keys(this.flatViewRoutes)),this.routeManifest=g4(J),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,W])=>W.at(-1)!=="FILE")),this.componentTree=h4(J),this.flatComponentTree=tJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,W])=>W.static).map(([W])=>W);for(let W of this.staticRoutes){let Y=this.flatViewRoutes[W].static?.layout;if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=L(s1);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)p4();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{d$.error(W?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(W)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(J)}catch(W){J(W)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:J,views:W,routeKey:Y}=$,j=()=>{let Q=new Set(Z?.preload??[]);for(let G of W)for(let K of J?.[G]??[])Q.add(K);return[...Q].map((G)=>q1("link",{key:`modulepreload:${G}`,rel:"modulepreload",href:G}))};if(!J)return j();let z=this.preloadCache.get(J);if(!z||z.clientEntry!==Z)z={clientEntry:Z,byRoute:new Map},this.preloadCache.set(J,z);let X=z.byRoute.get(Y);if(!X)X=j(),z.byRoute.set(Y,X);return X}async renderStatic($){let{req:Z,runInRequestScope:J,staticView:W,currentViews:Y,data:j,serverQueries:z,headers:X}=$,Q;if(W.layout){if(Q=$.viewImportMap[W.layout],!Q)throw Error(`The static layout "${W.layout}" was not found. It is a view path: a file at app/views/${W.layout}.tsx whose default export renders the document.`)}let G=await $.getStyles(Y,{static:!0,layout:W.layout});z.markRenderStart();let K=B9(),B=new AbortController,F=setTimeout(()=>B.abort(),oQ),D=(O)=>{if(Bun.env.NODE_ENV!=="production")console.error(O)},V=qQ(async(O,U)=>{let H=await p3(O,{signal:B.signal,identifierPrefix:U,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:D});return await H.allReady.catch(()=>{}),await new Response(H).text()});try{let O,U=typeof W.script==="function"?await J(()=>W.script(Z)):W.script;if(U)O={name:U,source:await z9(U)};let H;if(W.navigation){let x=W.navigation===!0?{}:W.navigation,E=x.version?String(await J(()=>x.version(Z))):"";H={identity:[W.layout??"",$.buildId??"",O?.name??"",E].join("|"),prefetch:x.prefetch==="none"?"none":"intent"}}let M=await p3(q1(gQ.Provider,{value:V,children:q1(nQ,{children:[...G,q1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:K,rootLayout:Q,key:"root"})]})}),{signal:B.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:D});await M.allReady.catch(()=>{});let P=lQ(await new Response(M).text());return new Response(uQ(P,V,$.resolveIsland,Bun.env.NODE_ENV!=="production",H,O),{status:200,headers:X})}finally{clearTimeout(F),J(()=>this.completeStream(Z,z.summarize(B.signal.aborted)))}}async render($){let{req:Z,runInRequestScope:J,csrfTokenHMAC:W,currentPathName:Y,headers:j,i18n:z,params:X,pathname:Q,serverQueries:G,userAgent:K,noStream:B,noTheme:F,url:D,user:V,viewData:O,breadcrumbs:U,urlLocaleSegment:H,meta:M,isOgRequest:P,appId:x,features:E,staticView:f}=$,S=this.theme===!1||F||f?null:{cookie:this.theme.cookie??qJ,default:this.theme.default??null,value:yD(Z,this.theme.cookie??qJ)},b=Q.replace(`/${H}`,""),I={kind:"view",data:{meta:M,pageData:{[b]:O},__csrf:W.toString("base64"),prefetchedData:{},i18n:z,auth:{user:V},routeManifest:this.clientRouteManifest,breadcrumbs:U,router:{urlLocaleSegment:H,pathname:Y,params:X,currentPath:Q,searchParams:D.search,is404:!Y?!0:!1,domain:Z.domain?kD(Z):null},appId:x,features:E,theme:S,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},_=this.root,y=this.routeManifest[Y];return async(O$)=>{let{bootstrapModules:P0=[],loaders:v1,getStyles:a,viewImportMap:q,cssManifest:M0,ogMap:i$,viewModules:u3,clientEntry:D$,modulePreloadManifest:g1,assetBase:m1,resolveIsland:s$,buildId:Q0}=O$,sZ=D$?[]:P0,l3=(b0)=>[b0,`window.loaders=${v1}`,...D$?[`import(${JSON.stringify(D$.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(P){let b0=null,a$=null;for(let r$ of y??[])if(typeof i$[r$]==="function")a$=r$,b0=i$[r$];if(!b0)return new Response("Not found",{status:404});let $K=Object.values(I.data.pageData)[0];try{await p3(q1(b0,$K[a$]),{onError:()=>{}})}catch(r$){let{fonts:ZK,...JK}=r$.satoriOptions,WK=await Promise.all(ZK.map((i3)=>{return RD(i3.name,i3.weight,i3.style).then((QK)=>({...i3,data:QK}))})),g9=new Headers(j);g9.set("Content-Type","image/png");let[YK,jK]=await Promise.all([ED(),k4("Rendering an OG image")]),zK=await YK(r$.jsx,{...JK,fonts:WK}),XK=await jK(Buffer.from(zK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(XK),{headers:g9})}return new Response("data")}if(f&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:f,currentViews:y,data:I.data,serverQueries:G,headers:j,getStyles:a,viewImportMap:q,viewModules:u3,resolveIsland:s$,buildId:Q0});if(I.data.cssManifest=M0,I.data.modulePreloadManifest=g1??{},m1&&m1!=="/")I.data.assetBase=m1;let n$=this.modulePreloadLinks({clientEntry:D$,modulePreloadManifest:g1,views:y??["404"],routeKey:Y??"404"}),nZ=await a(y);I.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let h1=new AbortController,U$=setTimeout(()=>h1.abort(),oQ),R=B6(K)||B,R0=Bun.env.NODE_ENV!=="production"&&!R&&Y&&this.shellReporter.shouldObserve(Y)?wQ():null,o$=B9();try{let b0=await p3(q1(nQ,{children:[...n$,...nZ,...S?[q1("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:jQ(X1({cookie:S.cookie,default:S.default}))}})]:[],q1(_,{data:I.data,viewImportMap:q,viewModules:u3,serverQueries:G,dictionarySink:o$,key:"root"})]}),{bootstrapScriptContent:l3(`window.__GEMI_DATA__ = ${X1(I.data)}`),bootstrapModules:sZ,signal:h1.signal,...R?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(a$){if(Bun.env.NODE_ENV!=="production")console.error(a$)}});if(b0.allReady.catch(()=>{}).finally(()=>clearTimeout(U$)),R)await b0.allReady.catch(()=>{});return new Response(m8(b0,G,{onShell:R?void 0:()=>G.markShell(),onChunk:R0?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,G.summarize(h1.signal.aborted)),R0)this.shellReporter.report(Y,R0.measure())})},o$),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(b0){if(clearTimeout(U$),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,G.summarize(h1.signal.aborted))),b0;let a$=await p3(q1("div"),{bootstrapScriptContent:l3(`window.error= ${X1(b0.message)}; window.stack_trace=${X1(b0.stack)};window.__GEMI_DATA__ = ${X1(I.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...sZ]:sZ});return new Response(m8(a$,G,{onClose:()=>J(()=>this.completeStream(Z,G.summarize(h1.signal.aborted)))}),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(H$(Z))return 404;if(Z?.kind===d1){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if(u1(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof k1&&(Z.status===403||Z.status===404))return Z.status;return null}async handleViewRequest($,Z){let J=new URL($.url),W=J.pathname.endsWith(".json"),Y=J.pathname.endsWith(".og"),j=J.pathname.replace(".json","").replace(".og",""),[,z,...X]=j.split("/"),Q=j,G=null,K=null,B=L(s),F=g3(this.flatViewRoutes,j),D=B.isLocaleAware&&this.localeRouting==="prefix"&&!F?.route.middleware.includes(aQ);if(D&&B.supportedLocales.includes(z))Q=`/${X.join("/")}`,G=z,K=z;if(D&&!Y&&K===null&&!(K===null&&F!==null)){let I=rQ(z,B.supportedLocales,B.defaultLocale);if(I){let _=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${I}${_}${W?".json":""}${J.search}`}})}}if(D&&!Y){let I=L(s).detectLocale(new C($,{},"view",Q));if(K===null&&I!==B.defaultLocale){let _=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${I}${_}${J.search}`}})}}Q=Q.replace("//","/");let O=[],U=[],H=null,M={},P=null,x=!1,E=!1,f=[],S;try{let I=g3(this.flatViewRoutes,Q);if(K&&I?.route.middleware.includes(aQ))I=null;if(I){if(H=I.routePath,M=I.params,O=I.route.exec,U=I.route.middleware,f=I.route.features,x=U.includes("no-stream"),E=U.includes(fD),S=I.route.static,W&&this.partialRendering){let _=$.headers.get(rJ),y=EQ({flatViewRoutes:this.flatViewRoutes,supportedLocales:L(s).supportedLocales,from:_,origin:J.origin,to:{segments:I.route.segments,params:M,search:J.search}});if(y.startIndex>0)O=O.slice(y.startIndex),P={from:_,carriedViews:y.carriedViews}}}}catch(I){throw I}if(S&&W)return new Response("Not found",{status:404});let b=new C($,M,"view",H);return this.hooks.onRequestStart(b),await T.run(b,async()=>{let I=null,_=T.getStore(),y=dZ.getStore(),O$=(q)=>dZ.run(y,()=>T.runWith(_,q));_.serverQueries=new pZ(m3($));let P0=new Set;_.serverQueries.onQueryFail((q)=>{P0.add(q.error);try{O$(()=>Promise.resolve(this.hooks.onRequestFail(a,q.error)).catch(()=>{}))}catch{}});let v1=iQ(S);if(K){let q=K.replaceAll("/","");V$.setLocale(q,{cookie:v1.locale})}else if(B.isLocaleAware&&!D)_.setLocale(B.defaultLocale);else V$.setLocale(void 0,{cookie:v1.locale});let a=_.req;if(v1.session)p4();try{let q=null;try{await L(c1).runMiddleware(U)}catch(R){if(q=this.viewRefusalStatus(a,R,P0),q===null)throw R}if(q!==null||f.length>0&&!await this.passesFeatureGates(f))H=null,O=[],a.routePath="";let M0=L(s),i$=M0.isEnabled,u3=M0.isLocaleAware,D$=new C($,a.params),g1={defaultLocale:M0.defaultLocale,timeZone:M0.detectTimeZone(D$)};if(u3){let R=null;if(K)R=K.replaceAll("/",""),_.setLocale(R);else if(!D)R=_.locale??M0.defaultLocale;else R=M0.detectLocale(D$),_.setLocale(R);let R0=i$?M0.getPageTranslations(R,a.routePath):{};g1={...g1,supportedLocales:M0.supportedLocales,currentLocale:R,dictionary:{[R]:R0},defaultLocale:M0.defaultLocale,...D?{}:{localeRouting:"off"}}}await tQ(g1.currentLocale??"");let m1;try{m1=await Promise.all(O.map((R)=>R(a)))}catch(R){if(q=this.viewRefusalStatus(a,R,P0),q===null)throw R;H=null,O=[],a.routePath="",m1=[]}let{cookies:s$,headers:Q0}=_;if(q!==null)Q0.set("Cache-Control","no-store");I={data:m1,cookies:s$,headers:Q0,user:_.user,prefetchedData:_.serverQueries.snapshotResolved(),currentPathName:H,params:a.params,urlLocaleSegment:G,meta:_.renderMeta(),appId:L(eJ).id,features:await L(s1).forClient()};let{params:sZ,user:l3}=I,n$={},nZ={};for(let R of m1??[]){let[R0,o$]=Object.entries(R)?.[0]??[];if(!R0||!o$)continue;nZ[`${R0}:${H}`]=o$.breadcrumb,n$[R0]=o$}let h1=n$.FILE;if(h1){for(let R of s$)Q0.append("Set-Cookie",R.toString());try{await this.onRequestEnd(a)}catch(R){d$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}return await L8(h1,Q0)}if(W){Q0.set("Content-Type","application/x-ndjson; charset=utf-8"),Q0.append("Vary",rJ),s$.forEach((R0)=>Q0.append("Set-Cookie",R0.toString())),await this.hooks.onRequestEnd(a);let R={meta:P&&!_.metadata.touched?null:I.meta,data:{[Q]:n$},breadcrumbs:nZ,prefetchedData:_.serverQueries.snapshotResolved(),i18n:g1,features:I.features,is404:!H,appId:I.appId,partial:P};return new Response(kQ(R,_.serverQueries,void 0,({aborted:R0})=>O$(()=>this.completeStream(a,_.serverQueries.summarize(R0)))),{headers:Q0})}if(Q0.set("Content-Type","text/html; charset=utf-8"),!x&&!(S&&H))Q0.append("Vary","User-Agent");let U$=Boolean(S&&H);if(!U$||v1.session)p4();for(let R of s$)Q0.append("Set-Cookie",R.toString());if(!U$||v1.csrf){let R=Bun.CSRF.generate(process.env.SECRET);Q0.append("Set-Cookie",`csrf_token=${R}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(a,{mintSession:!U$||v1.session})}catch(R){d$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}if(U$)sQ(Q0,S);return await this.render({req:a,runInRequestScope:O$,csrfTokenHMAC:Buffer.from(""),currentPathName:H,headers:Q0,i18n:g1,params:sZ,pathname:J.pathname,serverQueries:_.serverQueries,userAgent:$.headers.get("user-agent"),noStream:x,noTheme:E,url:J,user:l3,viewData:n$,breadcrumbs:nZ,urlLocaleSegment:G,meta:I.meta,appId:I.appId,features:I.features,isOgRequest:Y,staticView:H?S:void 0,refusedStatus:q??void 0})}catch(q){if(q.kind===d1){let M0=W?qD(q.payload.viewData??q.payload.api):F9(q.payload.view);for(let i$ of _.cookies)M0.headers.append("Set-Cookie",i$.toString());return M0}if(!P0.has(q))this.hooks.onRequestFail(a,q);if(u1(q))return console.error(q),W?cZ():F9($9());if(q instanceof k1&&q.status===403)return W?cZ():F9($9());throw q}},Z)}}function yD($,Z){let J=$.cookies?.get(Z);return YQ(J)?J:null}function O9(){let $=JSON.stringify({error:l1("not_found","Not found",404)});return new Response($,{status:404,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}class WG extends T0{routes={"/api-routes":this.get(()=>{let $=L(d4).flatRoutes,Z=[];for(let[J,W]of Object.entries($))for(let[Y,j]of Object.entries(W)){let{exec:z,middleware:X}=j;Z.push({path:J,method:Y,middleware:X})}return Z}),"/view-routes":this.get(()=>{let $=L(c3).flatViewRoutes,Z=[];for(let[J,{middleware:W,viewPath:Y}]of Object.entries($))Z.push({path:J,method:"GET",viewPath:Y,middleware:W});return Z})}}var vD=new Set([p1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),gD=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,mD=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function hD($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(vD.has(z)||z.startsWith("x-forwarded-"))throw Error(`dispatchAs: credentials may not set the "${Y}" header. The access token stays the initiator's, and the request's framing is dispatchAs's own.`);if(W&&z==="authorization")throw Error(`dispatchAs: credentials may not set "Authorization" on a call dispatched as an identity. The caller's token is for the MCP endpoint and is never passed on.`);$.set(Y,j)}for(let[Y,j]of Object.entries(J.cookies??{})){if(j===void 0||j===null)continue;if(Y===p1)throw Error(`dispatchAs: credentials may not set the "${p1}" cookie. The access token stays the initiator's.`);if(!gD.test(Y)||!mD.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function pD($,Z){let J=$.body.getReader(),W=!1,Y=()=>{if(W)return;W=!0;try{Z()}catch(z){console.error(z)}},j=new ReadableStream({async pull(z){let X;try{X=await J.read()}catch(Q){Y(),z.error(Q);return}if(X.done){Y();try{z.close()}catch{}return}try{z.enqueue(X.value)}catch{}},async cancel(z){try{await J.cancel(z)}finally{Y()}}},{highWaterMark:0});return new Response(j,{status:$.status,statusText:$.statusText,headers:$.headers})}function eQ($){let{status:Z=400,data:J,headers:W}=$,Y=new Headers({"Content-Type":"application/json",...W});if(!Y.has("Cache-Control"))Y.set("Cache-Control","no-store");return new Response(JSON.stringify(J),{status:Z,headers:Y})}function $G($,Z,J){let W=[];Z?.forEach((z,X)=>W.push([X,z]));let Y=[...typeof Z?.getSetCookie==="function"?Z.getSetCookie():[],...Array.from(J??[])];if(W.length===0&&Y.length===0)return $;let j=(z)=>{for(let[X,Q]of W){if(X.toLowerCase()==="set-cookie")continue;if(!z.has(X))z.set(X,Q)}for(let X of Y)z.append("Set-Cookie",X)};try{return j($.headers),$}catch{let z=new Headers($.headers);return j(z),new Response($.body,{status:$.status,statusText:$.statusText,headers:z})}}class d4{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=$Q();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=bJ({"/":$.rootRouter,"/auth":CJ,"/__gemi__/services/i18n":SJ,"/__gemi__/services/logs":RJ,"/__gemi__/services/image":fJ,"/__gemi__/debug":WG})}getRouteHandlerAndParams($){let Z=new URL($.url),J=JG(Z.pathname),W={},Y;for(let[j]of Object.entries(this.flatRoutes))try{let z=new URLPattern({pathname:j});if(z.test({pathname:J})){Y=j,W=z.exec({pathname:J})?.pathname.groups;break}}catch(z){console.error(z)}return{params:W,path:Y}}async runRouteMiddleware($,Z){let W=this.flatRoutes[$][Z.rawRequest.method].middleware;try{await L(c1).runMiddleware(W)}catch(Y){if(Y.kind===d1)return eQ(Y.payload.api);else{if(H$(Y))return O9();if(this.onRequestFail(Z,Y),console.error(Y),u1(Y))return cZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=T.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===d1)return eQ(j.payload.api);if(H$(j))return O9();if(this.onRequestFail(J.req,j),console.error(j),u1(j))return cZ();throw j}return Y}isFrameworkRoute($){return $.startsWith("/__gemi__")}async endRequest($,Z,J){let W=async()=>{try{if(!this.isFrameworkRoute(J))await this.onRequestEnd(Z)}catch(Y){d$.error(Y?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(Y)})}finally{$.destroy()}};if(!$.hasPendingWork()){await W();return}$.whenIdle().then(W).catch((Y)=>{console.error(Y)})}isOpenEndedBody($,Z){return $.method!=="HEAD"&&!Z.headers.has("Content-Length")&&Z.body!==null}async handleApiRequest($,Z){let{params:J,path:W}=this.getRouteHandlerAndParams($),Y=this.flatRoutes[W];if(!Y||!Y[$.method])return new Response(JSON.stringify({error:l1("not_found","Not found",404)}),{status:404});let j=new C($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await T.run(j,async()=>{let z=T.getStore(),X=!1,Q=async()=>{X=!0,await this.endRequest(z,j,W)};try{let G=L(s);if(G.isEnabled){let O=G.detectLocale(j);z.setLocale(O)}z.setRequest(j),L(c1).applyDefaultBodyLimit($);let K=await this.runRouteMiddleware(W,j);if(K instanceof Response){let O=$G(K,z.headers,z.cookies);return await Q(),O}let B=await this.getRouteData(W),F=z.headers,D=z.cookies;if(B instanceof Response){let O=$G(B,F,D);if(this.isOpenEndedBody($,O)){let U=pD(O,()=>this.endRequest(z,j,W));return X=!0,U}return await Q(),O}let V=(JZ(B)?B:I$.json(B)).toResponse(F,D);return await Q(),V}catch(G){if(!X)try{await Q()}catch(K){console.error(K)}throw G}},Z)}async dispatchAs($,Z,J,W,Y){let j=new URL($.rawRequest.url).origin,z=new URL(`${j}/api${J}`),X=`/api${J.split(/[?#]/)[0]}`;if(!J.startsWith("/")||z.origin!==j||z.pathname!==X||z.hash!==""||z.pathname.startsWith("/api/__gemi__")||z.pathname==="/api/auth"||z.pathname.startsWith("/api/auth/"))throw Error(`dispatchAs: "${J}" is not an app api path. Pass the route's own path, without "/api", with every param encoded.`);let Q=Y?.identity;if(Q!==void 0&&(typeof Q!=="object"||!Q?.user))throw Error("dispatchAs: identity needs the user to dispatch as.");let G=new Headers,K=[],B=Q?null:$.cookies.get(p1);if(B)K.push(`${p1}=${B}`);if(Y?.credentials)hD(G,K,Y.credentials,Q!==void 0);if(K.length>0)G.set("Cookie",K.join("; "));let F=Q?null:$.headers.get(p1);if(F)G.set(p1,F);let D=$.headers.get("User-Agent");if(D)G.set("User-Agent",D);let V;if(W instanceof FormData)V=W;else if(W!==void 0)G.set("Content-Type","application/json"),V=JSON.stringify(W);let O=new Request(z,{method:Z,headers:G,body:V,...Y?.signal?{signal:Y.signal}:{}});if(ZG(O,YZ($),Q?.grant,Y?.progress),$.domain)uZ(O,$.domain);let U=Q?{user:Q.user}:void 0;return T.exit(()=>e3.exit(()=>this.handleApiRequest(O,U)))}}import{timingSafeEqual as cD}from"crypto";import{isIP as dD}from"net";var s4="",L9="*",uD=60000,lD=1e4,U9=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,u4=16,D9=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,l4="x-forwarded-host";function YG($){return $.startsWith(":")}function i4($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&cD(J,W)}function iD($){if(!$)return null;if($===!0)return{header:l4,clientIpHeader:null,secret:null};return{header:($.hostHeader??l4).toLowerCase(),clientIpHeader:$.clientIpHeader?.toLowerCase()??null,secret:$.secret?{header:$.secret.header.toLowerCase(),value:$.secret.value}:null}}function sD($){if(!$||$===!0)return;let{hostHeader:Z,clientIpHeader:J,secret:W}=$;if(Z!==void 0&&(typeof Z!=="string"||!D9.test(Z)))throw Error(`\`route.domains.trustProxy.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(Z)}.`);if(J!==void 0){if(typeof J!=="string"||!D9.test(J))throw Error(`\`route.domains.trustProxy.clientIpHeader\` must be a single header name, e.g. "x-client-ip". Got ${JSON.stringify(J)}.`);if(!W)throw Error("`route.domains.trustProxy.clientIpHeader` needs `secret`: without proof the proxy sent it, any client that reaches the app directly picks its own address.");if(J.toLowerCase()===(Z??l4).toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `hostHeader`.");if(typeof W.header==="string"&&J.toLowerCase()===W.header.toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `secret.header`.")}if(!W)return;if(typeof W.header!=="string"||!D9.test(W.header))throw Error(`\`route.domains.trustProxy.secret.header\` must be a header name. Got "${W.header}".`);if(W.header.toLowerCase()===(Z??l4).toLowerCase())throw Error("`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.");if(typeof W.value!=="string"||W.value.length<u4)throw Error(`\`route.domains.trustProxy.secret.value\` must be at least ${u4} characters. A guessable one lets any client name its own host.`)}function L1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function nD($){try{let Z=new URL(`http://${$.trim()}`),J=Z.hostname.toLowerCase().replace(/\.$/,"");return J?Z.port?`${J}:${Z.port}`:J:null}catch{return null}}function oD($){let Z=L1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>U9.test(j)))throw Error(`\`route.domains.root\` must be a bare hostname, e.g. "example.com" \u2014 no scheme, port or path. Got "${$.root}".`);if($.custom&&($.custom.cacheTtlMs??0)<0)throw Error(`\`route.domains.custom.cacheTtlMs\` is ${$.custom.cacheTtlMs}; it cannot be negative. Use 0 to disable the cache.`);if($.ask&&$.ask.secret.length<u4)throw Error(`\`route.domains.ask.secret\` must be at least ${u4} characters. A guessable one is worse than leaving \`ask\` out.`);sD($.trustProxy);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),YG(z)){if(!/^:[A-Za-z_][A-Za-z0-9_]*$/.test(z))throw Error(`"${z}" is not a valid param subdomain. It must be a single \`:name\` label.`);if(Y)throw Error(`\`route.domains\` declares two param subdomains, "${Y.subdomain}" and "${z}"; a host could match either.`);Y=j;continue}if(j.exists)throw Error(`The subdomain "${z}" is fixed, so \`exists\` has no param to check. It only applies to a \`:param\` subdomain.`);if(!z.split(".").every((X)=>U9.test(X)))throw Error(`"${z}" is not a valid subdomain.`)}if($.custom&&!W.has($.custom.group))throw Error(`\`route.domains.custom.group\` is "${$.custom.group}", but no group declares that subdomain.`);if($.ask&&Y&&!Y.exists)throw Error(`\`route.domains.ask\` is set, so "${Y.subdomain}" needs an \`exists\` to say which tenants are real. Without one every host under the root would be approved for a certificate.`)}class H9{root;hostTrust;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeader;constructor($){oD($),this.root=L1($.root),this.hostTrust=iD($.trustProxy);for(let Z of $.groups??[])if(YG(Z.subdomain))this.param={...Z,name:Z.subdomain.slice(1)};else this.fixed.set(Z.subdomain.toLowerCase(),Z);this.custom=$.custom??null,this.cacheTtlMs=this.custom?.cacheTtlMs??uD,this.askSecret=$.ask?.secret??null,this.proxySecretHeader=this.hostTrust?.secret?.header??null}forwardedHost($){let Z=this.hostTrust;if(!Z)return null;if(Z.secret&&!i4($.headers.get(Z.secret.header),Z.secret.value))return null;return $.headers.get(Z.header)?.split(",")[0]?.trim()||null}trustedClientIp($){let Z=this.hostTrust;if(!Z?.clientIpHeader||!Z.secret)return null;if(!i4($.headers.get(Z.secret.header),Z.secret.value))return null;let J=$.headers.get(Z.clientIpHeader)?.split(",")[0]?.trim();return J&&dD(J)?J:null}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return L1(this.forwardedHost($))??L1(new URL($.url).host)}publicOrigin($){let Z=new URL($.url),J=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim(),W=J==="http"||J==="https"?J:Z.protocol.replace(/:$/,""),Y=this.forwardedHost($),j=Y&&L1(Y)?nD(Y):null;return`${W}://${j??Z.host}`}async resolve($){let Z=this.hostOf($);if(!Z)return null;let J=await this.match(Z,$);if(J)return J;if(this.custom?.fallback&&!this.isUnderRoot(Z))return{host:Z,group:L9,params:{},custom:!0};return null}async allows($,Z){let J=L1($);return J?await this.match(J,Z)!==null:!1}isUnderRoot($){return $===this.root||$.endsWith(`.${this.root}`)}async match($,Z){if($===this.root)return{host:$,group:s4,params:{},custom:!1};if($.endsWith(`.${this.root}`)){let W=$.slice(0,-(this.root.length+1)),Y=this.fixed.get(W);if(Y)return{host:$,group:Y.subdomain,params:{},custom:!1};if(this.param&&U9.test(W)){let j={[this.param.name]:W};if(this.param.exists&&!await this.param.exists(j,Z))return null;return{host:$,group:this.param.subdomain,params:j,custom:!1}}return null}if(!this.custom)return null;let J=await this.resolveCustom($);return J?{host:$,group:this.custom.group,params:J,custom:!0}:null}async resolveCustom($){let Z=Date.now(),J=this.cache.get($);if(J&&J.expiresAt>Z)return this.cache.delete($),this.cache.set($,J),J.value;let W=this.inFlight.get($);if(W)return W;let Y=(async()=>await this.custom.resolve($)??null)();this.inFlight.set($,Y);let j;try{j=await Y}finally{this.inFlight.delete($)}if(this.cacheTtlMs>0){if(this.cache.size>=lD)this.cache.delete(this.cache.keys().next().value);this.cache.delete($),this.cache.set($,{value:j,expiresAt:Date.now()+this.cacheTtlMs})}return j}forget($){if($===void 0)this.cache.clear();else{let Z=L1($);if(Z)this.cache.delete(Z)}}}var aD="/__gemi__/domains/ask";class W1{static token="router.domains";resolver;acceptsCustomDomains;groups=new Map;constructor($,Z){this.groups.set(s4,$);let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new H9(J);let W=(Y)=>({api:Y.api?new d4({...Z.api,...Y.api}):$.api,view:Y.view?new c3({...Z.view,...Y.view}):$.view});for(let Y of J.groups??[])this.groups.set(Y.subdomain,W(Y));if(J.custom?.fallback)this.groups.set(L9,W(J.custom.fallback))}async route($){if(!this.resolver)return this.dispatchers(null);if(this.resolver.proxySecretHeader)jG($,this.resolver.proxySecretHeader);let Z=await this.resolver.resolve($);if(!Z)return null;return uZ($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==aD)return null;if(!i4(Z.searchParams.get("secret"),this.resolver.askSecret))return null;let J=Z.searchParams.get("domain"),W=J?await this.resolver.allows(J,$):!1;return new Response(null,{status:W?200:404})}dispatchers($){return this.groups.get($?.group??s4)}viewDispatchers(){return Array.from(new Set(Array.from(this.groups.values(),($)=>$.view)))}viewGroups(){let $=new Set,Z=[];for(let[J,W]of this.groups){if($.has(W.view))continue;$.add(W.view),Z.push({group:J,view:W.view})}return Z}}function n4($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var zG=600000;function XG($,Z){return[X6($,Z),X6($,Z-1)]}class A{static token="auth";config;provider;constructor($={},Z=new u8){z5($.oauthProviders),this.config={...D1(X5($),$),emailCode:g8($.emailCode)},this.provider=Z}async oauthProvider($){return await KZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await M5(this.config.oauthProviders)}get userProvider(){return this.provider}accessTokenCookieOptions($,Z){return{expires:Z,secure:this.publicOrigin($).startsWith("https://"),httpOnly:!0,domain:this.cookieDomain($)}}publicOrigin($){let Z=L().bound(W1)?L(W1).resolver:null;return Z?Z.publicOrigin($.rawRequest):new URL($.rawRequest.url).origin}cookieDomain($){let Z=this.config.cookieDomain;if(!Z)return;let J=Z==="root"?L(W1).resolver?.root:L1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??L1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!b8($))return this.config.migrateLegacySession?this.convertLegacySession($,Z,this.config.migrateLegacySession):null;let J=await this.userProvider.findSession({token:$,userAgent:Z});if(!J?.user)return null;let W=Date.now(),Y=n4(J.expiresAt),j=n4(J.absoluteExpiresAt);if(Y<=W||j<=W)return await this.userProvider.deleteSession({token:$}),null;let X=await this.slideSession(J,W);return X.user.extension=await this.config.extendSession(X.user),X}async convertLegacySession($,Z,J){let W=T.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/zG),z=null,X=await this.userProvider.findSession({token:$,userAgent:Z});if(X?.user){if(!await J(X,{token:$,req:W,userAgent:Z}))return null;let G=X6($,j),K=X.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:G,userId:K,userAgent:Z,...this.freshLifetime(Y)}),!0}))z=G}if(!z){for(let G of XG($,j))if((await this.userProvider.findSession({token:G,userAgent:Z}))?.user){z=G;break}}if(!z)return null;let Q=await this.getSession(z,Z);if(Q)W.ctx().setCookie("access_token",z,this.accessTokenCookieOptions(W,new Date(Q.expiresAt)));return Q}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(b8($)||!this.config.migrateLegacySession){let Y=await this.userProvider.findSession({token:$,userAgent:Z});return await this.userProvider.deleteSession({token:$}),Y}let J=Math.floor(Date.now()/zG),W=XG($,J);return this.userProvider.withLegacySessionLock($,async()=>{let Y=await this.userProvider.findSession({token:$,userAgent:Z});for(let j of W){if(Y?.user)break;Y=await this.userProvider.findSession({token:j,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let j of W)await this.userProvider.deleteSession({token:j});return Y})}requestCarryingCookie($){let Z=T.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let J=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=J/2)return $;let W=new Date(Math.min(Z+J,new Date($.absoluteExpiresAt).getTime())),Y=await this.userProvider.updateSession({token:$.token,expiresAt:W}),j=this.requestCarryingCookie($.token);if(j)j.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(j,W));if(!Y)return $;return{...$,expiresAt:Y.expiresAt??W}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let J=await this.createOrUpdateSession({email:$,id:Z.id}),W=new C;if(W.ctx().setCookie("access_token",J.token,this.accessTokenCookieOptions(W,J.expiresAt)),J?.user)J.user.extension=await this.config.extendSession(J.user);return J}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),J=null;if(Z?.user)J=await this.config.extendSession(Z.user),Z.user.extension=J;return Z}async createOrUpdateSession($){let Z=new C,J=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!J)throw new P$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=nW(J),j=await this.userProvider.createSessionV2({token:Y,userId:J,userAgent:W,...this.freshLifetime(Date.now())}),z=await this.userProvider.findSession({token:Y,userAgent:W??""});return z?.user?z:j}async createMagicLinkToken($){let Z=await this.userProvider.findUserByEmailAddress($,!1);if(Z){let{pin:J,token:W}=await this.issueOneTimeCode($,6);return{user:Z,email:$,pin:J,token:W}}return{}}async issueOneTimeCode($,Z){await this.userProvider.deleteMagicLinkToken($);let J=await this.config.generateMagicLinkToken($),W=await this.config.generateCode($),Y=typeof W==="string"&&W!==""?W:Z5(Z);return await this.userProvider.createMagicLinkToken({email:$,token:Q6("link",$,J),pin:Q6("pin",$,Y)}),{email:$,pin:Y,token:J}}async verifyOneTimeCode($,Z,J={}){let{expiresInMinutes:W,maxAttempts:Y}=this.config.emailCode,j=await this.userProvider.findMagicLinkTokenByEmail($);if(!j)return Z3("pin",$,null,Z),{status:"invalid"};let z=n4(j.createdAt);if(z+W*60000<=Date.now())return Z3("pin",$,null,Z),{status:"expired"};if(!await Y5(j.id,z,Y,W))return await this.userProvider.claimMagicLinkToken(j.id),{status:"too_many_attempts"};if(!Z3("pin",$,j.pin,Z))return{status:"invalid"};if(J.claim!==!1&&!await this.userProvider.claimMagicLinkToken(j.id))return{status:"invalid"};return{status:"ok",row:j}}async verifyMagicLinkToken($,Z){let J=await this.userProvider.findMagicLinkTokenByEmail($),W=Z3("link",$,J?.token,Z);if(!J||!W)return!1;if(n4(J.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.userProvider.claimMagicLinkToken(J.id)}}class w0 extends g{static getFacadeAccessor(){return A}static async user(){let $=await w0.userOrNull();if($)return $;throw new P$({redirectTo:$6(T.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=T.getStore();if($?.user)return $.user;let Z=await a3(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=T.getStore()?.req;return j1(Z?.search.get(Y1),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await w0.user();if(!await $(Z))throw new jZ}static async guardSafe($){let Z=await w0.user();try{return await $(Z)}catch(J){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async oauthProviders(){return await this.getFacadeRoot().oauthProviderNames()}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class o4{static ensure($,Z={}){let J=T.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new pZ(m3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=o4.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){o4.ensure($,Z[0])}static noPrefetch(){let $=T.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new pZ(m3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function QG($,Z,J="/"){let W=new URL($.origin),Y=Z.host?Z.host:Z.subdomain?`${Z.subdomain}.${$.root}`:$.root,j=new URL(J.startsWith("/")?J:`/${J}`,W),z=rD(Y);if(!z)throw Error(`"${Y}" is not a hostname, so there is no URL for it. Give a bare host, optionally with a port \u2014 no scheme, path or credentials.`);if(j.hostname=z.hostname,z.port)j.port=z.port;return j.toString()}function rD($){try{let Z=new URL(`http://${$.trim()}`);return Z.host===$.trim().toLowerCase()&&Z.pathname==="/"?{hostname:Z.hostname,port:Z.port}:null}catch{return null}}class KG{static origin($){return GG($)}static absolute($,...Z){return`${v3()}${K0(String($),Z[0]??{})}`}static relative($,...Z){return K0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=L(W1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=T.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):v3();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return QG({root:W.root,origin:j},$,K0(String(Z),J[0]??{}))}}class FG{name="Meta";static description($){T.getStore().metadata.description($)}static title($){T.getStore().metadata.title($)}static openGraph($){T.getStore().metadata.openGraph($)}static htmlAttributes($){T.getStore().metadata.htmlAttributes($)}static canonical($){T.getStore().metadata.canonical($)}static alternates($){T.getStore().metadata.alternates($)}static fonts($){T.getStore().metadata.fonts($)}}var tD={set($,Z,J){T.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(T.getStore().req.cookies.has($))return!1;return T.getStore().setCookie($,Z,J),!0},delete($,Z){T.getStore().deleteCookie($,Z)}};class y1 extends g{static getFacadeAccessor(){return u$}static get client(){return this.getFacadeRoot().client}static get($){return y1.client.get($)}static set($,Z){return y1.client.set($,Z)}static del(...$){return y1.client.del(...$)}static exists($){return y1.client.exists($)}static incr($){return y1.client.incr($)}static expire($,Z){return y1.client.expire($,Z)}static ttl($){return y1.client.ttl($)}}function Ox($){return $}function BG(){return{store:"memory",ttl:null}}class I9{entries=new Map;maxEntries;now;constructor($={}){let Z=$.maxEntries??1e4;if(!Number.isInteger(Z)||Z<1)throw TypeError(`MemoryCacheStore maxEntries is a whole number of 1 or more; got ${Z}.`);this.maxEntries=Z,this.now=$.now??Date.now}get size(){return this.entries.size}async get($){let Z=this.live($);if(!Z)return null;return this.entries.delete($),this.entries.set($,Z),Z.value}async set($,Z,J){this.entries.delete($),this.entries.set($,{value:Z,expiresAt:J===null?null:this.now()+J});while(this.entries.size>this.maxEntries)this.entries.delete(this.entries.keys().next().value)}async delete($){let Z=this.live($)!==void 0;return this.entries.delete($),Z}async flush(){this.entries.clear()}live($){let Z=this.entries.get($);if(!Z)return;if(Z.expiresAt!==null&&Z.expiresAt<=this.now()){this.entries.delete($);return}return Z}}var eD="500";class P9{prefix;injectedClient;constructor($={}){this.injectedClient=$.client,this.prefix=$.prefix??"gemi:cache:"}async get($){let Z=await this.client.send("GET",[this.prefix+$]);return Z===null||Z===void 0?null:String(Z)}async set($,Z,J){let W=[this.prefix+$,Z];if(J!==null)W.push("PX",String(Math.max(1,Math.round(J))));await this.client.send("SET",W)}async delete($){return Number(await this.client.send("DEL",[this.prefix+$]))>0}async flush(){if(this.prefix==="")throw Error("RedisCacheStore refuses to flush with an empty prefix: that would delete every key in the database.");let $=this.client,Z=`${$U(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",eD]),[Y,j]=Array.isArray(W)?W:["0",[]];if(J=String(Y),Array.isArray(j)&&j.length>0)await $.send("UNLINK",j.map(String))}while(J!=="0")}get client(){if(this.injectedClient)return this.injectedClient;let $=L(),Z=$.bound(u$)?$.make(u$).client:void 0;if(!Z)throw Error("RedisCacheStore could not reach the Redis client. Register RedisServiceProvider on your application, or pass a client: new RedisCacheStore({ client }).");return Z}}function $U($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var ZU="k:",VG="tag:",JU="t:";class M9{async get($){let Z=await this.manager.read(await this.storeKey($));return Z.found?Z.value:void 0}async has($){return(await this.manager.read(await this.storeKey($))).found}async set($,Z,J){await this.manager.write(await this.storeKey($),Z,J)}async delete($){return this.manager.store.delete(await this.storeKey($))}async pull($){let Z=await this.storeKey($),J=await this.manager.read(Z);if(!J.found)return;return await this.manager.store.delete(Z),J.value}async remember($,Z,J){let[W,Y]=typeof Z==="function"?[void 0,Z]:[Z,J];if(typeof Y!=="function")throw TypeError("Cache.remember needs a function that computes the value.");return this.manager.rememberAt(await this.storeKey($),W,Y)}}class T9 extends M9{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=D1(BG(),$),this.config.ttl!==null&&this.config.ttl!==void 0)l$(this.config.ttl)}get manager(){return this}get store(){return this.builtStore??=this.buildStore()}tags(...$){let Z=[...new Set($.flat())].sort();if(Z.length===0)throw TypeError("Cache.tags needs at least one tag.");for(let J of Z)if(typeof J!=="string"||J==="")throw TypeError(`A cache tag is a non-empty string; got ${JSON.stringify(J)}.`);return new DG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return ZU+UG($)}async read($){let Z=await this.store.get($);if(Z===null)return{found:!1};try{return{found:!0,value:JSON.parse(Z)}}catch{return{found:!1}}}async write($,Z,J){if(Z===void 0)throw TypeError("Cache.set cannot store undefined: get() returns undefined for a miss. Store null instead.");let W=this.ttlMs(J);if(W===0){await this.store.delete($);return}let Y=JSON.stringify(Z);if(Y===void 0)throw TypeError(`Cache.set cannot store a ${typeof Z}: it has no JSON form.`);await this.store.set($,Y,W)}async rememberAt($,Z,J){let W=await this.read($);if(W.found)return W.value;let Y=this.inflight.get($);if(Y)return Y;let j=(async()=>{try{let z=await J();if(z!==void 0)await this.write($,z,Z);return z}finally{this.inflight.delete($)}})();return this.inflight.set($,j),j}async tagVersions($){return Promise.all($.map(async(Z)=>{let J=VG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=OG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(VG+Z,OG(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:l$(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new I9(this.config.memory);if($==="redis"){let Z=this.options.application;return new P9({...this.config.redis,client:Z?{send:(J,W)=>Z.make(u$).client.send(J,W)}:void 0})}if(typeof $==="function"){let Z=this.options.application;if(!Z)throw Error("A cache store factory needs the application: build CacheManager with { application }.");return $(Z)}if($&&typeof $==="object")return $;throw Error(`Unknown cache store ${JSON.stringify($)} in app/config/cache.ts: use "memory", "redis", a CacheStore, or a function returning one.`)}}class DG extends M9{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){UG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${JU}${Z.join(",")}:${$}`}}function UG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function OG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class LG extends g{static getFacadeAccessor(){return T9}static get($){return this.getFacadeRoot().get($)}static has($){return this.getFacadeRoot().has($)}static set($,Z,J){return this.getFacadeRoot().set($,Z,J)}static delete($){return this.getFacadeRoot().delete($)}static pull($){return this.getFacadeRoot().pull($)}static remember($,Z,J){let W=this.getFacadeRoot();return typeof Z==="function"?W.remember($,Z):W.remember($,Z,J)}static tags(...$){return this.getFacadeRoot().tags(...$)}static flush(){return this.getFacadeRoot().flush()}}class HG extends g{static getFacadeAccessor(){return z1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class PG extends g{static getFacadeAccessor(){return IG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class TG extends g{static getFacadeAccessor(){return MG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class NG extends g{static getFacadeAccessor(){return y3}static for($,Z,J){return this.getFacadeRoot().for($,Z,J)}static list($,Z){return this.getFacadeRoot().list($,Z)}static save($,Z,J){return this.getFacadeRoot().save($,Z,J)}static fake($={}){return this.getFacadeRoot().fake($)}static restore(){this.getFacadeRoot().restore()}}function cx($){return $}function _G(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function a4($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function N9($){let Z=new Map;if(!$)return Z;let J;try{J=new URLSearchParams($)}catch{return Z}for(let[W,Y]of J){let j=Number(Y);if(Y!==""&&Number.isSafeInteger(j)&&j>=0)Z.set(W,j)}return Z}var{SQL:WU}=globalThis.Bun;function YU(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var jU=async($)=>{let Z=new WU($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},zU=async($)=>{let Z;try{Z=(await import("./chunk-fwmmy0jn.js")).default}catch(W){throw Error("The change feed's database driver needs a Postgres client that can LISTEN: Bun 1.4 or later, or the `postgres` package (bun add postgres).",{cause:W})}let J=Z($,{max:1,idle_timeout:0,max_lifetime:null,fetch_types:!1,onnotice:()=>{}});return{listen:(W,Y,j)=>J.listen(W,Y,j),close:()=>J.end({timeout:1}).catch(()=>{})}},xG=($)=>YU()?jU($):zU($);var XU=/^[A-Za-z_][A-Za-z0-9_]*$/;class _9{headsTable;entriesTable;notifyChannel;sql;dialect;connection;url;retain;listener;sqliteTurn=Promise.resolve();constructor($,Z={}){if($.dialect!=="postgres"&&$.dialect!=="sqlite")throw Error(`The change feed's database driver supports Postgres and SQLite, not ${$.dialect}.`);let J=Z.headsTable??"gemi_change_heads",W=Z.entriesTable??"gemi_changes",Y=Z.notifyChannel??"gemi_changes";for(let z of[J,W,Y])if(!XU.test(z))throw Error(`"${z}" is not a plain identifier. Use letters, digits and underscores.`);let j=Z.retain??1000;if(!Number.isInteger(j)||j<1)throw Error(`The change feed's retain must be a whole number, 1 or more; got ${j}.`);this.headsTable=J,this.entriesTable=W,this.notifyChannel=Y,this.sql=$.sql,this.dialect=$.dialect,this.connection=$.name,this.url=$.url,this.retain=j,this.listener=Z.listener??xG}async createTable(){for(let $ of QU(this.headsTable,this.entriesTable))await this.sql.unsafe($)}joinsTransaction(){return this.transaction()!==void 0}publish($,Z){let J=this.transaction();if(!J){let Y=()=>this.sql.begin((z)=>this.append(z,$,Z));if(this.dialect!=="sqlite")return Y();let j=this.sqliteTurn.then(Y);return this.sqliteTurn=j.catch(()=>{}),j}let W=this.append(J,$,Z);return CG(W),W}async append($,Z,J){let W=$.unsafe(`"${this.headsTable}"`),Y=$.unsafe(`"${this.entriesTable}"`),[j]=await $`
|
|
23
|
+
${W}`)}let J=(await Z.outputs[0].text()).trim();if(/<\/script|<!--/i.test(J))throw Error(`The document script ${$} contains "</script" or "<!--", which would end the inline <script> it is put in. Write it "<\\/script" or build the string from parts.`);return J}function ND($){return`'sha256-${UD("sha256").update($).digest("base64")}'`}var J9,W9=new Map;function _D(){if(J9===void 0){let $=j9(Y9(),"dist","server",ID);J9=hQ($)?JSON.parse(LD($,"utf8")):null}return J9??null}async function z9($){MD($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=_D()?.[$];if(j!==void 0)return j;let z=W9.get($);if(z)return z}let J=j9(Y9(),"app"),W=TD(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${pQ}.ts (or .js).`);if(!Z)return mQ(W);let Y=mQ(W);return W9.set($,Y),Y.catch(()=>W9.delete($)),Y}async function nT($){return ND(await z9($))}var xD="gemi-islands",JN=`'sha256-${dQ("sha256").update(G9).digest("base64")}'`;function X9($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var Q9=($)=>$.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),WN=`'sha256-${dQ("sha256").update(Z9).digest("base64")}'`,CD='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',SD="gemi-static";function uQ($,Z,J,W,Y,j){let z=new Set,X=[];if(J)X=Z.islands.map((V)=>{let O=V.module?J(V.module):void 0;if(!O)return console.error(`[gemi] island ${V.module??"(unknown module)"}: no client build entry. Declare it as island(() => import("./Component")) so gemi's Vite plugin builds it.`),null;if(V.load==="eager"){for(let U of O.preload)z.add(U);if(V.preloadDynamic)for(let U of O.dynamicPreload??[])z.add(U)}return{s:O.src,e:V.export,l:V.load}});let Q=X.some((V)=>V!==null),G=j?`<script type="module" ${cQ}="${Q9(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return X9($,"</head>",G,!1);let B=(Y?`<meta name="${SD}" content="${Q9(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((V)=>`<link rel="modulepreload" href="${Q9(V)}"/>`).join("")+G,F=Y?Z9:G9,D=(Q?`<script type="application/json" id="${xD}">${X1({i:X})}</script>`:"")+`<script type="module">${W?CD+F:F}</script>`;return X9(X9($,"</head>",B,!1),"</body>",D,!0)}function AD($,Z){let J=/<(\/?)template\b[^>]*>/gi;J.lastIndex=Z;let W=0;for(let Y=J.exec($);Y;Y=J.exec($))if(W+=Y[1]?-1:1,W===0)return J.lastIndex;return-1}function lQ($){let Z=`<template ${vQ}="`;for(let J=$.lastIndexOf(Z);J!==-1;J=$.lastIndexOf(Z)){let W=AD($,J);if(W===-1)break;let Y=J+Z.length,j=$.slice(Y,$.indexOf('"',Y)),z=$.indexOf(">",Y)+1,X=$.slice(z,W-11);$=$.slice(0,J)+$.slice(W);let Q=`<${h3} ${yQ}="${j}" style="display:contents"></${h3}>`;$=$.split(Q).join(`<${h3} style="display:contents">${X}</${h3}>`)}return $}function iQ($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function sQ($,Z){if($.getSetCookie().length>0){if(Z.cacheControl&&Bun.env.NODE_ENV!=="production")console.warn(`[gemi] A static view with cacheControl "${Z.cacheControl}" set a cookie, so it was sent "private, no-store" instead. Static pages are cacheable only when nothing on them sets a cookie.`);$.set("Cache-Control","private, no-store");return}if(Z.cacheControl&&!$.has("Cache-Control"))$.set("Cache-Control",Z.cacheControl)}var ED=async()=>(await import("./chunk-r6thf4ge.js")).default,K9,p3=async(...$)=>{return K9??=import("react-dom/server.browser").catch((Z)=>{throw K9=void 0,Z}),(await K9).renderToReadableStream(...$)},oQ=1e4,aQ="no-locale",fD="no-theme";async function RD($,Z,J){let W=`${J==="italic"?"italic,":""}wght@${J==="italic"?"1,":""}${Z}`,z=(await(await fetch(`https://fonts.googleapis.com/css2?family=${$}:${W}&display=swap`,{headers:{"User-Agent":"Mozilla/5.0 Firefox/1.0"}})).text()).match(/url\(([^)]+)\)/)?.[1];return await fetch(z).then((X)=>X.arrayBuffer())}var V9="/assets";function bD($){return $===V9||$.startsWith(`${V9}/`)}function wD($){let Z=$.filter(bD);if(Z.length>0){let J=Z.length>1;throw Error(`View route path${J?"s":""} ${Z.map((W)=>`"${W}"`).join(", ")} use${J?"":"s"} the reserved "${V9}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function kD($){let Z=L(W1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function F9($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function qD($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class c3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];staticRoutes=[];root=null;shellReporter=bQ();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;theme;constructor($){let Z=ZQ();this.partialRendering=$.partialRendering??Z.partialRendering,this.localeRouting=$.localeRouting??Z.localeRouting,this.theme=$.theme??Z.theme,this.hooks={onRequestStart:$.onRequestStart??Z.onRequestStart,onRequestEnd:$.onRequestEnd??Z.onRequestEnd,onRequestFail:$.onRequestFail??Z.onRequestFail,onStreamComplete:$.onStreamComplete??Z.onStreamComplete};let J={"/":$.rootRouter,"/auth":xJ};this.flatViewRoutes=y4(J),wD(Object.keys(this.flatViewRoutes)),this.routeManifest=g4(J),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,W])=>W.at(-1)!=="FILE")),this.componentTree=h4(J),this.flatComponentTree=tJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,W])=>W.static).map(([W])=>W);for(let W of this.staticRoutes){let Y=this.flatViewRoutes[W].static?.layout;if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=L(s1);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)p4();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{d$.error(W?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(W)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(J)}catch(W){J(W)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:J,views:W,routeKey:Y}=$,j=()=>{let Q=new Set(Z?.preload??[]);for(let G of W)for(let K of J?.[G]??[])Q.add(K);return[...Q].map((G)=>q1("link",{key:`modulepreload:${G}`,rel:"modulepreload",href:G}))};if(!J)return j();let z=this.preloadCache.get(J);if(!z||z.clientEntry!==Z)z={clientEntry:Z,byRoute:new Map},this.preloadCache.set(J,z);let X=z.byRoute.get(Y);if(!X)X=j(),z.byRoute.set(Y,X);return X}async renderStatic($){let{req:Z,runInRequestScope:J,staticView:W,currentViews:Y,data:j,serverQueries:z,headers:X}=$,Q;if(W.layout){if(Q=$.viewImportMap[W.layout],!Q)throw Error(`The static layout "${W.layout}" was not found. It is a view path: a file at app/views/${W.layout}.tsx whose default export renders the document.`)}let G=await $.getStyles(Y,{static:!0,layout:W.layout});z.markRenderStart();let K=B9(),B=new AbortController,F=setTimeout(()=>B.abort(),oQ),D=(O)=>{if(Bun.env.NODE_ENV!=="production")console.error(O)},V=qQ(async(O,U)=>{let H=await p3(O,{signal:B.signal,identifierPrefix:U,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:D});return await H.allReady.catch(()=>{}),await new Response(H).text()});try{let O,U=typeof W.script==="function"?await J(()=>W.script(Z)):W.script;if(U)O={name:U,source:await z9(U)};let H;if(W.navigation){let x=W.navigation===!0?{}:W.navigation,E=x.version?String(await J(()=>x.version(Z))):"";H={identity:[W.layout??"",$.buildId??"",O?.name??"",E].join("|"),prefetch:x.prefetch==="none"?"none":"intent"}}let M=await p3(q1(gQ.Provider,{value:V,children:q1(nQ,{children:[...G,q1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:K,rootLayout:Q,key:"root"})]})}),{signal:B.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:D});await M.allReady.catch(()=>{});let P=lQ(await new Response(M).text());return new Response(uQ(P,V,$.resolveIsland,Bun.env.NODE_ENV!=="production",H,O),{status:200,headers:X})}finally{clearTimeout(F),J(()=>this.completeStream(Z,z.summarize(B.signal.aborted)))}}async render($){let{req:Z,runInRequestScope:J,csrfTokenHMAC:W,currentPathName:Y,headers:j,i18n:z,params:X,pathname:Q,serverQueries:G,userAgent:K,noStream:B,noTheme:F,url:D,user:V,viewData:O,breadcrumbs:U,urlLocaleSegment:H,meta:M,isOgRequest:P,appId:x,features:E,staticView:f}=$,S=this.theme===!1||F||f?null:{cookie:this.theme.cookie??qJ,default:this.theme.default??null,value:yD(Z,this.theme.cookie??qJ)},b=Q.replace(`/${H}`,""),I={kind:"view",data:{meta:M,pageData:{[b]:O},__csrf:W.toString("base64"),prefetchedData:{},i18n:z,auth:{user:V},routeManifest:this.clientRouteManifest,breadcrumbs:U,router:{urlLocaleSegment:H,pathname:Y,params:X,currentPath:Q,searchParams:D.search,is404:!Y?!0:!1,domain:Z.domain?kD(Z):null},appId:x,features:E,theme:S,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},_=this.root,y=this.routeManifest[Y];return async(O$)=>{let{bootstrapModules:P0=[],loaders:v1,getStyles:a,viewImportMap:q,cssManifest:M0,ogMap:i$,viewModules:u3,clientEntry:D$,modulePreloadManifest:g1,assetBase:m1,resolveIsland:s$,buildId:Q0}=O$,sZ=D$?[]:P0,l3=(b0)=>[b0,`window.loaders=${v1}`,...D$?[`import(${JSON.stringify(D$.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(P){let b0=null,a$=null;for(let r$ of y??[])if(typeof i$[r$]==="function")a$=r$,b0=i$[r$];if(!b0)return new Response("Not found",{status:404});let $K=Object.values(I.data.pageData)[0];try{await p3(q1(b0,$K[a$]),{onError:()=>{}})}catch(r$){let{fonts:ZK,...JK}=r$.satoriOptions,WK=await Promise.all(ZK.map((i3)=>{return RD(i3.name,i3.weight,i3.style).then((QK)=>({...i3,data:QK}))})),g9=new Headers(j);g9.set("Content-Type","image/png");let[YK,jK]=await Promise.all([ED(),k4("Rendering an OG image")]),zK=await YK(r$.jsx,{...JK,fonts:WK}),XK=await jK(Buffer.from(zK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(XK),{headers:g9})}return new Response("data")}if(f&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:f,currentViews:y,data:I.data,serverQueries:G,headers:j,getStyles:a,viewImportMap:q,viewModules:u3,resolveIsland:s$,buildId:Q0});if(I.data.cssManifest=M0,I.data.modulePreloadManifest=g1??{},m1&&m1!=="/")I.data.assetBase=m1;let n$=this.modulePreloadLinks({clientEntry:D$,modulePreloadManifest:g1,views:y??["404"],routeKey:Y??"404"}),nZ=await a(y);I.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let h1=new AbortController,U$=setTimeout(()=>h1.abort(),oQ),R=B6(K)||B,R0=Bun.env.NODE_ENV!=="production"&&!R&&Y&&this.shellReporter.shouldObserve(Y)?wQ():null,o$=B9();try{let b0=await p3(q1(nQ,{children:[...n$,...nZ,...S?[q1("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:jQ(X1({cookie:S.cookie,default:S.default}))}})]:[],q1(_,{data:I.data,viewImportMap:q,viewModules:u3,serverQueries:G,dictionarySink:o$,key:"root"})]}),{bootstrapScriptContent:l3(`window.__GEMI_DATA__ = ${X1(I.data)}`),bootstrapModules:sZ,signal:h1.signal,...R?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(a$){if(Bun.env.NODE_ENV!=="production")console.error(a$)}});if(b0.allReady.catch(()=>{}).finally(()=>clearTimeout(U$)),R)await b0.allReady.catch(()=>{});return new Response(m8(b0,G,{onShell:R?void 0:()=>G.markShell(),onChunk:R0?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,G.summarize(h1.signal.aborted)),R0)this.shellReporter.report(Y,R0.measure())})},o$),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(b0){if(clearTimeout(U$),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,G.summarize(h1.signal.aborted))),b0;let a$=await p3(q1("div"),{bootstrapScriptContent:l3(`window.error= ${X1(b0.message)}; window.stack_trace=${X1(b0.stack)};window.__GEMI_DATA__ = ${X1(I.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...sZ]:sZ});return new Response(m8(a$,G,{onClose:()=>J(()=>this.completeStream(Z,G.summarize(h1.signal.aborted)))}),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(H$(Z))return 404;if(Z?.kind===d1){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if(u1(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof k1&&(Z.status===403||Z.status===404))return Z.status;return null}async handleViewRequest($,Z){let J=new URL($.url),W=J.pathname.endsWith(".json"),Y=J.pathname.endsWith(".og"),j=J.pathname.replace(".json","").replace(".og",""),[,z,...X]=j.split("/"),Q=j,G=null,K=null,B=L(s),F=g3(this.flatViewRoutes,j),D=B.isLocaleAware&&this.localeRouting==="prefix"&&!F?.route.middleware.includes(aQ);if(D&&B.supportedLocales.includes(z))Q=`/${X.join("/")}`,G=z,K=z;if(D&&!Y&&K===null&&!(K===null&&F!==null)){let I=rQ(z,B.supportedLocales,B.defaultLocale);if(I){let _=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${I}${_}${W?".json":""}${J.search}`}})}}if(D&&!Y){let I=L(s).detectLocale(new C($,{},"view",Q));if(K===null&&I!==B.defaultLocale){let _=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${I}${_}${J.search}`}})}}Q=Q.replace("//","/");let O=[],U=[],H=null,M={},P=null,x=!1,E=!1,f=[],S;try{let I=g3(this.flatViewRoutes,Q);if(K&&I?.route.middleware.includes(aQ))I=null;if(I){if(H=I.routePath,M=I.params,O=I.route.exec,U=I.route.middleware,f=I.route.features,x=U.includes("no-stream"),E=U.includes(fD),S=I.route.static,W&&this.partialRendering){let _=$.headers.get(rJ),y=EQ({flatViewRoutes:this.flatViewRoutes,supportedLocales:L(s).supportedLocales,from:_,origin:J.origin,to:{segments:I.route.segments,params:M,search:J.search}});if(y.startIndex>0)O=O.slice(y.startIndex),P={from:_,carriedViews:y.carriedViews}}}}catch(I){throw I}if(S&&W)return new Response("Not found",{status:404});let b=new C($,M,"view",H);return this.hooks.onRequestStart(b),await T.run(b,async()=>{let I=null,_=T.getStore(),y=dZ.getStore(),O$=(q)=>dZ.run(y,()=>T.runWith(_,q));_.serverQueries=new pZ(m3($));let P0=new Set;_.serverQueries.onQueryFail((q)=>{P0.add(q.error);try{O$(()=>Promise.resolve(this.hooks.onRequestFail(a,q.error)).catch(()=>{}))}catch{}});let v1=iQ(S);if(K){let q=K.replaceAll("/","");V$.setLocale(q,{cookie:v1.locale})}else if(B.isLocaleAware&&!D)_.setLocale(B.defaultLocale);else V$.setLocale(void 0,{cookie:v1.locale});let a=_.req;if(v1.session)p4();try{let q=null;try{await L(c1).runMiddleware(U)}catch(R){if(q=this.viewRefusalStatus(a,R,P0),q===null)throw R}if(q!==null||f.length>0&&!await this.passesFeatureGates(f))H=null,O=[],a.routePath="";let M0=L(s),i$=M0.isEnabled,u3=M0.isLocaleAware,D$=new C($,a.params),g1={defaultLocale:M0.defaultLocale,timeZone:M0.detectTimeZone(D$)};if(u3){let R=null;if(K)R=K.replaceAll("/",""),_.setLocale(R);else if(!D)R=_.locale??M0.defaultLocale;else R=M0.detectLocale(D$),_.setLocale(R);let R0=i$?M0.getPageTranslations(R,a.routePath):{};g1={...g1,supportedLocales:M0.supportedLocales,currentLocale:R,dictionary:{[R]:R0},defaultLocale:M0.defaultLocale,...D?{}:{localeRouting:"off"}}}await tQ(g1.currentLocale??"");let m1;try{m1=await Promise.all(O.map((R)=>R(a)))}catch(R){if(q=this.viewRefusalStatus(a,R,P0),q===null)throw R;H=null,O=[],a.routePath="",m1=[]}let{cookies:s$,headers:Q0}=_;if(q!==null)Q0.set("Cache-Control","no-store");I={data:m1,cookies:s$,headers:Q0,user:_.user,prefetchedData:_.serverQueries.snapshotResolved(),currentPathName:H,params:a.params,urlLocaleSegment:G,meta:_.renderMeta(),appId:L(eJ).id,features:await L(s1).forClient()};let{params:sZ,user:l3}=I,n$={},nZ={};for(let R of m1??[]){let[R0,o$]=Object.entries(R)?.[0]??[];if(!R0||!o$)continue;nZ[`${R0}:${H}`]=o$.breadcrumb,n$[R0]=o$}let h1=n$.FILE;if(h1){for(let R of s$)Q0.append("Set-Cookie",R.toString());try{await this.onRequestEnd(a)}catch(R){d$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}return await L8(h1,Q0)}if(W){Q0.set("Content-Type","application/x-ndjson; charset=utf-8"),Q0.append("Vary",rJ),s$.forEach((R0)=>Q0.append("Set-Cookie",R0.toString())),await this.hooks.onRequestEnd(a);let R={meta:P&&!_.metadata.touched?null:I.meta,data:{[Q]:n$},breadcrumbs:nZ,prefetchedData:_.serverQueries.snapshotResolved(),i18n:g1,features:I.features,is404:!H,appId:I.appId,partial:P};return new Response(kQ(R,_.serverQueries,void 0,({aborted:R0})=>O$(()=>this.completeStream(a,_.serverQueries.summarize(R0)))),{headers:Q0})}if(Q0.set("Content-Type","text/html; charset=utf-8"),!x&&!(S&&H))Q0.append("Vary","User-Agent");let U$=Boolean(S&&H);if(!U$||v1.session)p4();for(let R of s$)Q0.append("Set-Cookie",R.toString());if(!U$||v1.csrf){let R=Bun.CSRF.generate(process.env.SECRET);Q0.append("Set-Cookie",`csrf_token=${R}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(a,{mintSession:!U$||v1.session})}catch(R){d$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}if(U$)sQ(Q0,S);return await this.render({req:a,runInRequestScope:O$,csrfTokenHMAC:Buffer.from(""),currentPathName:H,headers:Q0,i18n:g1,params:sZ,pathname:J.pathname,serverQueries:_.serverQueries,userAgent:$.headers.get("user-agent"),noStream:x,noTheme:E,url:J,user:l3,viewData:n$,breadcrumbs:nZ,urlLocaleSegment:G,meta:I.meta,appId:I.appId,features:I.features,isOgRequest:Y,staticView:H?S:void 0,refusedStatus:q??void 0})}catch(q){if(q.kind===d1){let M0=W?qD(q.payload.viewData??q.payload.api):F9(q.payload.view);for(let i$ of _.cookies)M0.headers.append("Set-Cookie",i$.toString());return M0}if(!P0.has(q))this.hooks.onRequestFail(a,q);if(u1(q))return console.error(q),W?cZ():F9($9());if(q instanceof k1&&q.status===403)return W?cZ():F9($9());throw q}},Z)}}function yD($,Z){let J=$.cookies?.get(Z);return YQ(J)?J:null}function O9(){let $=JSON.stringify({error:l1("not_found","Not found",404)});return new Response($,{status:404,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}class WG extends T0{routes={"/api-routes":this.get(()=>{let $=L(d4).flatRoutes,Z=[];for(let[J,W]of Object.entries($))for(let[Y,j]of Object.entries(W)){let{exec:z,middleware:X}=j;Z.push({path:J,method:Y,middleware:X})}return Z}),"/view-routes":this.get(()=>{let $=L(c3).flatViewRoutes,Z=[];for(let[J,{middleware:W,viewPath:Y}]of Object.entries($))Z.push({path:J,method:"GET",viewPath:Y,middleware:W});return Z})}}var vD=new Set([p1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),gD=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,mD=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function hD($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(vD.has(z)||z.startsWith("x-forwarded-"))throw Error(`dispatchAs: credentials may not set the "${Y}" header. The access token stays the initiator's, and the request's framing is dispatchAs's own.`);if(W&&z==="authorization")throw Error(`dispatchAs: credentials may not set "Authorization" on a call dispatched as an identity. The caller's token is for the MCP endpoint and is never passed on.`);$.set(Y,j)}for(let[Y,j]of Object.entries(J.cookies??{})){if(j===void 0||j===null)continue;if(Y===p1)throw Error(`dispatchAs: credentials may not set the "${p1}" cookie. The access token stays the initiator's.`);if(!gD.test(Y)||!mD.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function pD($,Z){let J=$.body.getReader(),W=!1,Y=()=>{if(W)return;W=!0;try{Z()}catch(z){console.error(z)}},j=new ReadableStream({async pull(z){let X;try{X=await J.read()}catch(Q){Y(),z.error(Q);return}if(X.done){Y();try{z.close()}catch{}return}try{z.enqueue(X.value)}catch{}},async cancel(z){try{await J.cancel(z)}finally{Y()}}},{highWaterMark:0});return new Response(j,{status:$.status,statusText:$.statusText,headers:$.headers})}function eQ($){let{status:Z=400,data:J,headers:W}=$,Y=new Headers({"Content-Type":"application/json",...W});if(!Y.has("Cache-Control"))Y.set("Cache-Control","no-store");return new Response(JSON.stringify(J),{status:Z,headers:Y})}function $G($,Z,J){let W=[];Z?.forEach((z,X)=>W.push([X,z]));let Y=[...typeof Z?.getSetCookie==="function"?Z.getSetCookie():[],...Array.from(J??[])];if(W.length===0&&Y.length===0)return $;let j=(z)=>{for(let[X,Q]of W){if(X.toLowerCase()==="set-cookie")continue;if(!z.has(X))z.set(X,Q)}for(let X of Y)z.append("Set-Cookie",X)};try{return j($.headers),$}catch{let z=new Headers($.headers);return j(z),new Response($.body,{status:$.status,statusText:$.statusText,headers:z})}}class d4{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=$Q();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=bJ({"/":$.rootRouter,"/auth":CJ,"/__gemi__/services/i18n":SJ,"/__gemi__/services/logs":RJ,"/__gemi__/services/image":fJ,"/__gemi__/debug":WG})}getRouteHandlerAndParams($){let Z=new URL($.url),J=JG(Z.pathname),W={},Y;for(let[j]of Object.entries(this.flatRoutes))try{let z=new URLPattern({pathname:j});if(z.test({pathname:J})){Y=j,W=z.exec({pathname:J})?.pathname.groups;break}}catch(z){console.error(z)}return{params:W,path:Y}}async runRouteMiddleware($,Z){let W=this.flatRoutes[$][Z.rawRequest.method].middleware;try{await L(c1).runMiddleware(W)}catch(Y){if(Y.kind===d1)return eQ(Y.payload.api);else{if(H$(Y))return O9();if(this.onRequestFail(Z,Y),console.error(Y),u1(Y))return cZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=T.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===d1)return eQ(j.payload.api);if(H$(j))return O9();if(this.onRequestFail(J.req,j),console.error(j),u1(j))return cZ();throw j}return Y}isFrameworkRoute($){return $.startsWith("/__gemi__")}async endRequest($,Z,J){let W=async()=>{try{if(!this.isFrameworkRoute(J))await this.onRequestEnd(Z)}catch(Y){d$.error(Y?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(Y)})}finally{$.destroy()}};if(!$.hasPendingWork()){await W();return}$.whenIdle().then(W).catch((Y)=>{console.error(Y)})}isOpenEndedBody($,Z){return $.method!=="HEAD"&&!Z.headers.has("Content-Length")&&Z.body!==null}async handleApiRequest($,Z){let{params:J,path:W}=this.getRouteHandlerAndParams($),Y=this.flatRoutes[W];if(!Y||!Y[$.method])return new Response(JSON.stringify({error:l1("not_found","Not found",404)}),{status:404});let j=new C($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await T.run(j,async()=>{let z=T.getStore(),X=!1,Q=async()=>{X=!0,await this.endRequest(z,j,W)};try{let G=L(s);if(G.isEnabled){let O=G.detectLocale(j);z.setLocale(O)}z.setRequest(j),L(c1).applyDefaultBodyLimit($);let K=await this.runRouteMiddleware(W,j);if(K instanceof Response){let O=$G(K,z.headers,z.cookies);return await Q(),O}let B=await this.getRouteData(W),F=z.headers,D=z.cookies;if(B instanceof Response){let O=$G(B,F,D);if(this.isOpenEndedBody($,O)){let U=pD(O,()=>this.endRequest(z,j,W));return X=!0,U}return await Q(),O}let V=(JZ(B)?B:I$.json(B)).toResponse(F,D);return await Q(),V}catch(G){if(!X)try{await Q()}catch(K){console.error(K)}throw G}},Z)}async dispatchAs($,Z,J,W,Y){let j=new URL($.rawRequest.url).origin,z=new URL(`${j}/api${J}`),X=`/api${J.split(/[?#]/)[0]}`;if(!J.startsWith("/")||z.origin!==j||z.pathname!==X||z.hash!==""||z.pathname.startsWith("/api/__gemi__")||z.pathname==="/api/auth"||z.pathname.startsWith("/api/auth/"))throw Error(`dispatchAs: "${J}" is not an app api path. Pass the route's own path, without "/api", with every param encoded.`);let Q=Y?.identity;if(Q!==void 0&&(typeof Q!=="object"||!Q?.user))throw Error("dispatchAs: identity needs the user to dispatch as.");let G=new Headers,K=[],B=Q?null:$.cookies.get(p1);if(B)K.push(`${p1}=${B}`);if(Y?.credentials)hD(G,K,Y.credentials,Q!==void 0);if(K.length>0)G.set("Cookie",K.join("; "));let F=Q?null:$.headers.get(p1);if(F)G.set(p1,F);let D=$.headers.get("User-Agent");if(D)G.set("User-Agent",D);let V;if(W instanceof FormData)V=W;else if(W!==void 0)G.set("Content-Type","application/json"),V=JSON.stringify(W);let O=new Request(z,{method:Z,headers:G,body:V,...Y?.signal?{signal:Y.signal}:{}});if(ZG(O,YZ($),Q?.grant,Y?.progress),$.domain)uZ(O,$.domain);let U=Q?{user:Q.user}:void 0;return T.exit(()=>e3.exit(()=>this.handleApiRequest(O,U)))}}import{timingSafeEqual as cD}from"crypto";import{isIP as dD}from"net";var s4="",L9="*",uD=60000,lD=1e4,U9=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,u4=16,D9=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,l4="x-forwarded-host";function YG($){return $.startsWith(":")}function i4($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&cD(J,W)}function iD($){if(!$)return null;if($===!0)return{header:l4,clientIpHeader:null,secret:null};return{header:($.hostHeader??l4).toLowerCase(),clientIpHeader:$.clientIpHeader?.toLowerCase()??null,secret:$.secret?{header:$.secret.header.toLowerCase(),value:$.secret.value}:null}}function sD($){if(!$||$===!0)return;let{hostHeader:Z,clientIpHeader:J,secret:W}=$;if(Z!==void 0&&(typeof Z!=="string"||!D9.test(Z)))throw Error(`\`route.domains.trustProxy.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(Z)}.`);if(J!==void 0){if(typeof J!=="string"||!D9.test(J))throw Error(`\`route.domains.trustProxy.clientIpHeader\` must be a single header name, e.g. "x-client-ip". Got ${JSON.stringify(J)}.`);if(!W)throw Error("`route.domains.trustProxy.clientIpHeader` needs `secret`: without proof the proxy sent it, any client that reaches the app directly picks its own address.");if(J.toLowerCase()===(Z??l4).toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `hostHeader`.");if(typeof W.header==="string"&&J.toLowerCase()===W.header.toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `secret.header`.")}if(!W)return;if(typeof W.header!=="string"||!D9.test(W.header))throw Error(`\`route.domains.trustProxy.secret.header\` must be a header name. Got "${W.header}".`);if(W.header.toLowerCase()===(Z??l4).toLowerCase())throw Error("`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.");if(typeof W.value!=="string"||W.value.length<u4)throw Error(`\`route.domains.trustProxy.secret.value\` must be at least ${u4} characters. A guessable one lets any client name its own host.`)}function L1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function nD($){try{let Z=new URL(`http://${$.trim()}`),J=Z.hostname.toLowerCase().replace(/\.$/,"");return J?Z.port?`${J}:${Z.port}`:J:null}catch{return null}}function oD($){let Z=L1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>U9.test(j)))throw Error(`\`route.domains.root\` must be a bare hostname, e.g. "example.com" \u2014 no scheme, port or path. Got "${$.root}".`);if($.custom&&($.custom.cacheTtlMs??0)<0)throw Error(`\`route.domains.custom.cacheTtlMs\` is ${$.custom.cacheTtlMs}; it cannot be negative. Use 0 to disable the cache.`);if($.ask&&$.ask.secret.length<u4)throw Error(`\`route.domains.ask.secret\` must be at least ${u4} characters. A guessable one is worse than leaving \`ask\` out.`);sD($.trustProxy);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),YG(z)){if(!/^:[A-Za-z_][A-Za-z0-9_]*$/.test(z))throw Error(`"${z}" is not a valid param subdomain. It must be a single \`:name\` label.`);if(Y)throw Error(`\`route.domains\` declares two param subdomains, "${Y.subdomain}" and "${z}"; a host could match either.`);Y=j;continue}if(j.exists)throw Error(`The subdomain "${z}" is fixed, so \`exists\` has no param to check. It only applies to a \`:param\` subdomain.`);if(!z.split(".").every((X)=>U9.test(X)))throw Error(`"${z}" is not a valid subdomain.`)}if($.custom&&!W.has($.custom.group))throw Error(`\`route.domains.custom.group\` is "${$.custom.group}", but no group declares that subdomain.`);if($.ask&&Y&&!Y.exists)throw Error(`\`route.domains.ask\` is set, so "${Y.subdomain}" needs an \`exists\` to say which tenants are real. Without one every host under the root would be approved for a certificate.`)}class H9{root;hostTrust;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeader;constructor($){oD($),this.root=L1($.root),this.hostTrust=iD($.trustProxy);for(let Z of $.groups??[])if(YG(Z.subdomain))this.param={...Z,name:Z.subdomain.slice(1)};else this.fixed.set(Z.subdomain.toLowerCase(),Z);this.custom=$.custom??null,this.cacheTtlMs=this.custom?.cacheTtlMs??uD,this.askSecret=$.ask?.secret??null,this.proxySecretHeader=this.hostTrust?.secret?.header??null}forwardedHost($){let Z=this.hostTrust;if(!Z)return null;if(Z.secret&&!i4($.headers.get(Z.secret.header),Z.secret.value))return null;return $.headers.get(Z.header)?.split(",")[0]?.trim()||null}trustedClientIp($){let Z=this.hostTrust;if(!Z?.clientIpHeader||!Z.secret)return null;if(!i4($.headers.get(Z.secret.header),Z.secret.value))return null;let J=$.headers.get(Z.clientIpHeader)?.split(",")[0]?.trim();return J&&dD(J)?J:null}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return L1(this.forwardedHost($))??L1(new URL($.url).host)}publicOrigin($){let Z=new URL($.url),J=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim(),W=J==="http"||J==="https"?J:Z.protocol.replace(/:$/,""),Y=this.forwardedHost($),j=Y&&L1(Y)?nD(Y):null;return`${W}://${j??Z.host}`}async resolve($){let Z=this.hostOf($);if(!Z)return null;let J=await this.match(Z,$);if(J)return J;if(this.custom?.fallback&&!this.isUnderRoot(Z))return{host:Z,group:L9,params:{},custom:!0};return null}async allows($,Z){let J=L1($);return J?await this.match(J,Z)!==null:!1}isUnderRoot($){return $===this.root||$.endsWith(`.${this.root}`)}async match($,Z){if($===this.root)return{host:$,group:s4,params:{},custom:!1};if($.endsWith(`.${this.root}`)){let W=$.slice(0,-(this.root.length+1)),Y=this.fixed.get(W);if(Y)return{host:$,group:Y.subdomain,params:{},custom:!1};if(this.param&&U9.test(W)){let j={[this.param.name]:W};if(this.param.exists&&!await this.param.exists(j,Z))return null;return{host:$,group:this.param.subdomain,params:j,custom:!1}}return null}if(!this.custom)return null;let J=await this.resolveCustom($);return J?{host:$,group:this.custom.group,params:J,custom:!0}:null}async resolveCustom($){let Z=Date.now(),J=this.cache.get($);if(J&&J.expiresAt>Z)return this.cache.delete($),this.cache.set($,J),J.value;let W=this.inFlight.get($);if(W)return W;let Y=(async()=>await this.custom.resolve($)??null)();this.inFlight.set($,Y);let j;try{j=await Y}finally{this.inFlight.delete($)}if(this.cacheTtlMs>0){if(this.cache.size>=lD)this.cache.delete(this.cache.keys().next().value);this.cache.delete($),this.cache.set($,{value:j,expiresAt:Date.now()+this.cacheTtlMs})}return j}forget($){if($===void 0)this.cache.clear();else{let Z=L1($);if(Z)this.cache.delete(Z)}}}var aD="/__gemi__/domains/ask";class W1{static token="router.domains";resolver;acceptsCustomDomains;groups=new Map;constructor($,Z){this.groups.set(s4,$);let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new H9(J);let W=(Y)=>({api:Y.api?new d4({...Z.api,...Y.api}):$.api,view:Y.view?new c3({...Z.view,...Y.view}):$.view});for(let Y of J.groups??[])this.groups.set(Y.subdomain,W(Y));if(J.custom?.fallback)this.groups.set(L9,W(J.custom.fallback))}async route($){if(!this.resolver)return this.dispatchers(null);if(this.resolver.proxySecretHeader)jG($,this.resolver.proxySecretHeader);let Z=await this.resolver.resolve($);if(!Z)return null;return uZ($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==aD)return null;if(!i4(Z.searchParams.get("secret"),this.resolver.askSecret))return null;let J=Z.searchParams.get("domain"),W=J?await this.resolver.allows(J,$):!1;return new Response(null,{status:W?200:404})}dispatchers($){return this.groups.get($?.group??s4)}viewDispatchers(){return Array.from(new Set(Array.from(this.groups.values(),($)=>$.view)))}viewGroups(){let $=new Set,Z=[];for(let[J,W]of this.groups){if($.has(W.view))continue;$.add(W.view),Z.push({group:J,view:W.view})}return Z}}function n4($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var zG=600000;function XG($,Z){return[X6($,Z),X6($,Z-1)]}class A{static token="auth";config;provider;constructor($={},Z=new u8){z5($.oauthProviders),this.config={...D1(X5($),$),emailCode:g8($.emailCode)},this.provider=Z}async oauthProvider($){return await KZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await M5(this.config.oauthProviders)}get userProvider(){return this.provider}accessTokenCookieOptions($,Z){return{expires:Z,secure:this.publicOrigin($).startsWith("https://"),httpOnly:!0,domain:this.cookieDomain($)}}publicOrigin($){let Z=L().bound(W1)?L(W1).resolver:null;return Z?Z.publicOrigin($.rawRequest):new URL($.rawRequest.url).origin}cookieDomain($){let Z=this.config.cookieDomain;if(!Z)return;let J=Z==="root"?L(W1).resolver?.root:L1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??L1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!b8($))return this.config.migrateLegacySession?this.convertLegacySession($,Z,this.config.migrateLegacySession):null;let J=await this.userProvider.findSession({token:$,userAgent:Z});if(!J?.user)return null;let W=Date.now(),Y=n4(J.expiresAt),j=n4(J.absoluteExpiresAt);if(Y<=W||j<=W)return await this.userProvider.deleteSession({token:$}),null;let X=await this.slideSession(J,W);return X.user.extension=await this.config.extendSession(X.user),X}async convertLegacySession($,Z,J){let W=T.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/zG),z=null,X=await this.userProvider.findSession({token:$,userAgent:Z});if(X?.user){if(!await J(X,{token:$,req:W,userAgent:Z}))return null;let G=X6($,j),K=X.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:G,userId:K,userAgent:Z,...this.freshLifetime(Y)}),!0}))z=G}if(!z){for(let G of XG($,j))if((await this.userProvider.findSession({token:G,userAgent:Z}))?.user){z=G;break}}if(!z)return null;let Q=await this.getSession(z,Z);if(Q)W.ctx().setCookie("access_token",z,this.accessTokenCookieOptions(W,new Date(Q.expiresAt)));return Q}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(b8($)||!this.config.migrateLegacySession){let Y=await this.userProvider.findSession({token:$,userAgent:Z});return await this.userProvider.deleteSession({token:$}),Y}let J=Math.floor(Date.now()/zG),W=XG($,J);return this.userProvider.withLegacySessionLock($,async()=>{let Y=await this.userProvider.findSession({token:$,userAgent:Z});for(let j of W){if(Y?.user)break;Y=await this.userProvider.findSession({token:j,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let j of W)await this.userProvider.deleteSession({token:j});return Y})}requestCarryingCookie($){let Z=T.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let J=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=J/2)return $;let W=new Date(Math.min(Z+J,new Date($.absoluteExpiresAt).getTime())),Y=await this.userProvider.updateSession({token:$.token,expiresAt:W}),j=this.requestCarryingCookie($.token);if(j)j.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(j,W));if(!Y)return $;return{...$,expiresAt:Y.expiresAt??W}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let J=await this.createOrUpdateSession({email:$,id:Z.id}),W=new C;if(W.ctx().setCookie("access_token",J.token,this.accessTokenCookieOptions(W,J.expiresAt)),J?.user)J.user.extension=await this.config.extendSession(J.user);return J}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),J=null;if(Z?.user)J=await this.config.extendSession(Z.user),Z.user.extension=J;return Z}async createOrUpdateSession($){let Z=new C,J=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!J)throw new P$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=nW(J),j=await this.userProvider.createSessionV2({token:Y,userId:J,userAgent:W,...this.freshLifetime(Date.now())}),z=await this.userProvider.findSession({token:Y,userAgent:W??""});return z?.user?z:j}async createMagicLinkToken($){let Z=await this.userProvider.findUserByEmailAddress($,!1);if(Z){let{pin:J,token:W}=await this.issueOneTimeCode($,6);return{user:Z,email:$,pin:J,token:W}}return{}}async issueOneTimeCode($,Z){await this.userProvider.deleteMagicLinkToken($);let J=await this.config.generateMagicLinkToken($),W=await this.config.generateCode($),Y=typeof W==="string"&&W!==""?W:Z5(Z);return await this.userProvider.createMagicLinkToken({email:$,token:Q6("link",$,J),pin:Q6("pin",$,Y)}),{email:$,pin:Y,token:J}}async verifyOneTimeCode($,Z,J={}){let{expiresInMinutes:W,maxAttempts:Y}=this.config.emailCode,j=await this.userProvider.findMagicLinkTokenByEmail($);if(!j)return Z3("pin",$,null,Z),{status:"invalid"};let z=n4(j.createdAt);if(z+W*60000<=Date.now())return Z3("pin",$,null,Z),{status:"expired"};if(!await Y5(j.id,z,Y,W))return await this.userProvider.claimMagicLinkToken(j.id),{status:"too_many_attempts"};if(!Z3("pin",$,j.pin,Z))return{status:"invalid"};if(J.claim!==!1&&!await this.userProvider.claimMagicLinkToken(j.id))return{status:"invalid"};return{status:"ok",row:j}}async verifyMagicLinkToken($,Z){let J=await this.userProvider.findMagicLinkTokenByEmail($),W=Z3("link",$,J?.token,Z);if(!J||!W)return!1;if(n4(J.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.userProvider.claimMagicLinkToken(J.id)}}class w0 extends g{static getFacadeAccessor(){return A}static async user(){let $=await w0.userOrNull();if($)return $;throw new P$({redirectTo:$6(T.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=T.getStore();if($?.user)return $.user;let Z=await a3(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=T.getStore()?.req;return j1(Z?.search.get(Y1),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await w0.user();if(!await $(Z))throw new jZ}static async guardSafe($){let Z=await w0.user();try{return await $(Z)}catch(J){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async oauthProviders(){return await this.getFacadeRoot().oauthProviderNames()}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class o4{static ensure($,Z={}){let J=T.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new pZ(m3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=o4.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){o4.ensure($,Z[0])}static noPrefetch(){let $=T.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new pZ(m3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function QG($,Z,J="/"){let W=new URL($.origin),Y=Z.host?Z.host:Z.subdomain?`${Z.subdomain}.${$.root}`:$.root,j=new URL(J.startsWith("/")?J:`/${J}`,W),z=rD(Y);if(!z)throw Error(`"${Y}" is not a hostname, so there is no URL for it. Give a bare host, optionally with a port \u2014 no scheme, path or credentials.`);if(j.hostname=z.hostname,z.port)j.port=z.port;return j.toString()}function rD($){try{let Z=new URL(`http://${$.trim()}`);return Z.host===$.trim().toLowerCase()&&Z.pathname==="/"?{hostname:Z.hostname,port:Z.port}:null}catch{return null}}class KG{static origin($){return GG($)}static absolute($,...Z){return`${v3()}${K0(String($),Z[0]??{})}`}static relative($,...Z){return K0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=L(W1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=T.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):v3();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return QG({root:W.root,origin:j},$,K0(String(Z),J[0]??{}))}}class FG{name="Meta";static description($){T.getStore().metadata.description($)}static title($){T.getStore().metadata.title($)}static openGraph($){T.getStore().metadata.openGraph($)}static htmlAttributes($){T.getStore().metadata.htmlAttributes($)}static canonical($){T.getStore().metadata.canonical($)}static alternates($){T.getStore().metadata.alternates($)}static fonts($){T.getStore().metadata.fonts($)}}var tD={set($,Z,J){T.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(T.getStore().req.cookies.has($))return!1;return T.getStore().setCookie($,Z,J),!0},delete($,Z){T.getStore().deleteCookie($,Z)}};class y1 extends g{static getFacadeAccessor(){return u$}static get client(){return this.getFacadeRoot().client}static get($){return y1.client.get($)}static set($,Z){return y1.client.set($,Z)}static del(...$){return y1.client.del(...$)}static exists($){return y1.client.exists($)}static incr($){return y1.client.incr($)}static expire($,Z){return y1.client.expire($,Z)}static ttl($){return y1.client.ttl($)}}function Ox($){return $}function BG(){return{store:"memory",ttl:null}}class I9{entries=new Map;maxEntries;now;constructor($={}){let Z=$.maxEntries??1e4;if(!Number.isInteger(Z)||Z<1)throw TypeError(`MemoryCacheStore maxEntries is a whole number of 1 or more; got ${Z}.`);this.maxEntries=Z,this.now=$.now??Date.now}get size(){return this.entries.size}async get($){let Z=this.live($);if(!Z)return null;return this.entries.delete($),this.entries.set($,Z),Z.value}async set($,Z,J){this.entries.delete($),this.entries.set($,{value:Z,expiresAt:J===null?null:this.now()+J});while(this.entries.size>this.maxEntries)this.entries.delete(this.entries.keys().next().value)}async delete($){let Z=this.live($)!==void 0;return this.entries.delete($),Z}async flush(){this.entries.clear()}live($){let Z=this.entries.get($);if(!Z)return;if(Z.expiresAt!==null&&Z.expiresAt<=this.now()){this.entries.delete($);return}return Z}}var eD="500";class P9{prefix;injectedClient;constructor($={}){this.injectedClient=$.client,this.prefix=$.prefix??"gemi:cache:"}async get($){let Z=await this.client.send("GET",[this.prefix+$]);return Z===null||Z===void 0?null:String(Z)}async set($,Z,J){let W=[this.prefix+$,Z];if(J!==null)W.push("PX",String(Math.max(1,Math.round(J))));await this.client.send("SET",W)}async delete($){return Number(await this.client.send("DEL",[this.prefix+$]))>0}async flush(){if(this.prefix==="")throw Error("RedisCacheStore refuses to flush with an empty prefix: that would delete every key in the database.");let $=this.client,Z=`${$U(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",eD]),[Y,j]=Array.isArray(W)?W:["0",[]];if(J=String(Y),Array.isArray(j)&&j.length>0)await $.send("UNLINK",j.map(String))}while(J!=="0")}get client(){if(this.injectedClient)return this.injectedClient;let $=L(),Z=$.bound(u$)?$.make(u$).client:void 0;if(!Z)throw Error("RedisCacheStore could not reach the Redis client. Register RedisServiceProvider on your application, or pass a client: new RedisCacheStore({ client }).");return Z}}function $U($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var ZU="k:",VG="tag:",JU="t:";class M9{async get($){let Z=await this.manager.read(await this.storeKey($));return Z.found?Z.value:void 0}async has($){return(await this.manager.read(await this.storeKey($))).found}async set($,Z,J){await this.manager.write(await this.storeKey($),Z,J)}async delete($){return this.manager.store.delete(await this.storeKey($))}async pull($){let Z=await this.storeKey($),J=await this.manager.read(Z);if(!J.found)return;return await this.manager.store.delete(Z),J.value}async remember($,Z,J){let[W,Y]=typeof Z==="function"?[void 0,Z]:[Z,J];if(typeof Y!=="function")throw TypeError("Cache.remember needs a function that computes the value.");return this.manager.rememberAt(await this.storeKey($),W,Y)}}class T9 extends M9{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=D1(BG(),$),this.config.ttl!==null&&this.config.ttl!==void 0)l$(this.config.ttl)}get manager(){return this}get store(){return this.builtStore??=this.buildStore()}tags(...$){let Z=[...new Set($.flat())].sort();if(Z.length===0)throw TypeError("Cache.tags needs at least one tag.");for(let J of Z)if(typeof J!=="string"||J==="")throw TypeError(`A cache tag is a non-empty string; got ${JSON.stringify(J)}.`);return new DG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return ZU+UG($)}async read($){let Z=await this.store.get($);if(Z===null)return{found:!1};try{return{found:!0,value:JSON.parse(Z)}}catch{return{found:!1}}}async write($,Z,J){if(Z===void 0)throw TypeError("Cache.set cannot store undefined: get() returns undefined for a miss. Store null instead.");let W=this.ttlMs(J);if(W===0){await this.store.delete($);return}let Y=JSON.stringify(Z);if(Y===void 0)throw TypeError(`Cache.set cannot store a ${typeof Z}: it has no JSON form.`);await this.store.set($,Y,W)}async rememberAt($,Z,J){let W=await this.read($);if(W.found)return W.value;let Y=this.inflight.get($);if(Y)return Y;let j=(async()=>{try{let z=await J();if(z!==void 0)await this.write($,z,Z);return z}finally{this.inflight.delete($)}})();return this.inflight.set($,j),j}async tagVersions($){return Promise.all($.map(async(Z)=>{let J=VG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=OG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(VG+Z,OG(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:l$(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new I9(this.config.memory);if($==="redis"){let Z=this.options.application;return new P9({...this.config.redis,client:Z?{send:(J,W)=>Z.make(u$).client.send(J,W)}:void 0})}if(typeof $==="function"){let Z=this.options.application;if(!Z)throw Error("A cache store factory needs the application: build CacheManager with { application }.");return $(Z)}if($&&typeof $==="object")return $;throw Error(`Unknown cache store ${JSON.stringify($)} in app/config/cache.ts: use "memory", "redis", a CacheStore, or a function returning one.`)}}class DG extends M9{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){UG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${JU}${Z.join(",")}:${$}`}}function UG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function OG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class LG extends g{static getFacadeAccessor(){return T9}static get($){return this.getFacadeRoot().get($)}static has($){return this.getFacadeRoot().has($)}static set($,Z,J){return this.getFacadeRoot().set($,Z,J)}static delete($){return this.getFacadeRoot().delete($)}static pull($){return this.getFacadeRoot().pull($)}static remember($,Z,J){let W=this.getFacadeRoot();return typeof Z==="function"?W.remember($,Z):W.remember($,Z,J)}static tags(...$){return this.getFacadeRoot().tags(...$)}static flush(){return this.getFacadeRoot().flush()}}class HG extends g{static getFacadeAccessor(){return z1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class PG extends g{static getFacadeAccessor(){return IG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class TG extends g{static getFacadeAccessor(){return MG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class NG extends g{static getFacadeAccessor(){return y3}static for($,Z,J){return this.getFacadeRoot().for($,Z,J)}static list($,Z){return this.getFacadeRoot().list($,Z)}static save($,Z,J){return this.getFacadeRoot().save($,Z,J)}static fake($={}){return this.getFacadeRoot().fake($)}static restore(){this.getFacadeRoot().restore()}}function cx($){return $}function _G(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function a4($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function N9($){let Z=new Map;if(!$)return Z;let J;try{J=new URLSearchParams($)}catch{return Z}for(let[W,Y]of J){let j=Number(Y);if(Y!==""&&Number.isSafeInteger(j)&&j>=0)Z.set(W,j)}return Z}var{SQL:WU}=globalThis.Bun;function YU(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var jU=async($)=>{let Z=new WU($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},zU=async($)=>{let Z;try{Z=(await import("./chunk-1fe07ge4.js")).default}catch(W){throw Error("The change feed's database driver needs a Postgres client that can LISTEN: Bun 1.4 or later, or the `postgres` package (bun add postgres).",{cause:W})}let J=Z($,{max:1,idle_timeout:0,max_lifetime:null,fetch_types:!1,onnotice:()=>{}});return{listen:(W,Y,j)=>J.listen(W,Y,j),close:()=>J.end({timeout:1}).catch(()=>{})}},xG=($)=>YU()?jU($):zU($);var XU=/^[A-Za-z_][A-Za-z0-9_]*$/;class _9{headsTable;entriesTable;notifyChannel;sql;dialect;connection;url;retain;listener;sqliteTurn=Promise.resolve();constructor($,Z={}){if($.dialect!=="postgres"&&$.dialect!=="sqlite")throw Error(`The change feed's database driver supports Postgres and SQLite, not ${$.dialect}.`);let J=Z.headsTable??"gemi_change_heads",W=Z.entriesTable??"gemi_changes",Y=Z.notifyChannel??"gemi_changes";for(let z of[J,W,Y])if(!XU.test(z))throw Error(`"${z}" is not a plain identifier. Use letters, digits and underscores.`);let j=Z.retain??1000;if(!Number.isInteger(j)||j<1)throw Error(`The change feed's retain must be a whole number, 1 or more; got ${j}.`);this.headsTable=J,this.entriesTable=W,this.notifyChannel=Y,this.sql=$.sql,this.dialect=$.dialect,this.connection=$.name,this.url=$.url,this.retain=j,this.listener=Z.listener??xG}async createTable(){for(let $ of QU(this.headsTable,this.entriesTable))await this.sql.unsafe($)}joinsTransaction(){return this.transaction()!==void 0}publish($,Z){let J=this.transaction();if(!J){let Y=()=>this.sql.begin((z)=>this.append(z,$,Z));if(this.dialect!=="sqlite")return Y();let j=this.sqliteTurn.then(Y);return this.sqliteTurn=j.catch(()=>{}),j}let W=this.append(J,$,Z);return CG(W),W}async append($,Z,J){let W=$.unsafe(`"${this.headsTable}"`),Y=$.unsafe(`"${this.entriesTable}"`),[j]=await $`
|
|
24
24
|
INSERT INTO ${W} (channel, seq) VALUES (${Z}, 1)
|
|
25
25
|
ON CONFLICT (channel) DO UPDATE SET seq = ${W}.seq + 1
|
|
26
26
|
RETURNING seq
|
|
@@ -112,6 +112,6 @@ data: ${JSON.stringify(Z)}
|
|
|
112
112
|
"updated_at" BIGINT NOT NULL,
|
|
113
113
|
"finished_at" BIGINT,
|
|
114
114
|
"deadline_at" BIGINT${W}
|
|
115
|
-
)`,`CREATE INDEX IF NOT EXISTS "${Z}_subject_created_at_idx" ON "${Z}"("subject", "created_at")`,`CREATE INDEX IF NOT EXISTS "${Z}_status_deadline_at_idx" ON "${Z}"("status", "deadline_at")`]}var pG=191,cG=30000;class Z8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class J8 extends Error{code;data;constructor($,Z={}){super($,Z.cause===void 0?void 0:{cause:Z.cause});this.name="RunFailure",this.code=Z.code,this.data=Z.data}}class v9{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=D1(gG(),$),this.store=UU(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make(lZ);return this.ownFeed??=new lZ,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){lG("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;lG("id",Z);let J=await this.store.create({id:Z,kind:$.kind,subject:$.subject??null,owner:$.owner??null,meta:$.meta??null,status:$.start?"running":"pending",deadlineMs:$.deadline===void 0||$.deadline===null?null:l$($.deadline)});return await this.publish(J),J}async get($){return await this.store.get($)}list($={}){return this.store.list($)}start($){return this.change($,["pending"],{status:"running"})}async progress($,Z){return DU(Z),this.change($,H1,{status:"running",progress:Z})}complete($,Z){return this.change($,H1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,H1,{status:"failed",error:uG(Z)})}cancel($,Z){return this.change($,H1,{status:"cancelled",error:{message:Z??"The run was cancelled.",code:"cancelled"}})}async execute($,Z){let J=this.feed.subscribe(this.channel($));try{await J.ready();let W=await this.start($)??await this.store.get($);if(!W)throw new Z8($);if(I1(W.status))return W;let Y=new AbortController,j=this.watch($,W,J,Y),z={id:$,record:W,signal:Y.signal,progress:async(Q)=>{if(Y.signal.aborted)return;await this.progress($,Q)}},X;try{let Q=await Z(z);X=await this.complete($,Q)}catch(Q){if(!(Q instanceof J8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,H1,{status:"failed",error:Q instanceof J8?uG(Q):{message:"The run failed.",code:"error"}})}finally{Y.abort(),J.close(),await j}return X??await this.store.get($)??W}finally{J.close()}}async wait($,Z={}){let{signal:J}=Z;J?.throwIfAborted();let W=Z.timeout===void 0?1/0:Date.now()+l$(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new Z8($);let z=null;for(;;){if(I1(j.status))return j;J?.throwIfAborted();let X=await this.untilDeadline(j);if(X!==null&&X<=0){j=await this.expire($)??await this.store.get($)??j;continue}let Q=W-Date.now();if(Q<=0)return j;if(z??=Y.isClosed?new Promise(()=>{}):Y.next(),await dG(z,Math.min(Q,X??1/0,cG),J))z=null;j=await this.store.get($)??j}}finally{Y.close()}}async*subscribe($,Z={}){let J=this.feed.subscribe(this.channel($),{signal:Z.signal});try{await J.ready();let W=await this.store.get($);if(!W)throw new Z8($);if(yield W,I1(W.status))return;for await(let Y of J){let j=OU(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,I1(W.status))return}}finally{J.close()}}stream($,Z,J={}){return this.feed.stream($,this.channel(Z),J)}cursor($){return this.feed.cursor(this.channel($))}async sweep(){let $=await this.now(),Z=0;for(let J of await this.store.overdue($,this.config.sweepLimit))if(await this.expire(J.id))Z++;return Z}async prune($){let Z=l$($);return await this.store.prune?.(Z)??0}async close(){await this.ownFeed?.close(),this.ownFeed=null}now(){return this.store.now?this.store.now():Promise.resolve(Date.now())}async untilDeadline($){if($.deadlineAt===null)return null;return $.deadlineAt-await this.now()}async expire($){let Z=await this.store.get($);if(!Z||I1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,H1,{status:"timed_out",error:{message:"The run passed its deadline.",code:"deadline"}})}async watch($,Z,J,W){let Y=new Promise((z)=>{if(W.signal.aborted)z("ended");W.signal.addEventListener("abort",()=>z("ended"),{once:!0})}),j=null;try{for(;;){if(W.signal.aborted)return;if(I1(Z.status)){W.abort();return}let z=await this.untilDeadline(Z);if(z!==null&&z<=0){Z=await this.expire($)??await this.store.get($)??Z;continue}j??=J.next();let X=await Promise.race([Y,dG(j,Math.min(z??1/0,cG))]);if(X==="ended")return;if(X)j=null;Z=await this.store.get($)??Z}}catch(z){console.error(`[gemi] Run ${$}: could not follow the run for a cancel.`,z)}}async change($,Z,J){let W=await this.store.transition($,Z,J);if(W)await this.publish(W);return W}async publish($){try{await this.feed.publish(this.channel($.id),$)}catch(Z){console.error(`[gemi] Run ${$.id}: could not publish its change.`,Z)}}}function dG($,Z,J){return new Promise((W,Y)=>{let j=Number.isFinite(Z)?setTimeout(()=>Q(!1),Math.max(0,Z)):null,z=()=>{X(),Y(J.reason)},X=()=>{if(j)clearTimeout(j);J?.removeEventListener("abort",z)},Q=(G)=>{X(),W(G)};J?.addEventListener("abort",z,{once:!0}),$.then(()=>Q(!0),()=>Q(!0))})}function OU($,Z){if($.type!=="change")return null;let J=$.data;if(!J||typeof J!=="object"||J.id!==Z||typeof J.version!=="number")return null;return J}function uG($){if(typeof $==="string")return{message:$};if($ instanceof J8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function lG($,Z){if(typeof Z!=="string"||Z===""||Z.length>pG)throw TypeError(`A run's ${$} is a string of 1 to ${pG} characters; got ${JSON.stringify(Z)}.`)}function DU($){let{fraction:Z}=$;if(Z!==void 0&&!(Number.isFinite(Z)&&Z>=0&&Z<=1))throw RangeError(`A run's progress fraction is between 0 and 1; got ${Z}.`)}function UU($,Z){if($==="memory")return new b9;if($==="database"||typeof $==="function"){if(!Z&&($==="database"||$.length>0))throw Error("The runs store needs the application it belongs to, and this RunManager was built without one. Pass { application }.");if($==="database"){let J=Z.make(N1).connection();return new y9(J)}return $(Z)}if(typeof $==="string")throw Error(`Unknown runs store "${$}". The runs slice's store is "memory", "database", a RunStore, or a function returning one.`);return $}class iG extends g{static getFacadeAccessor(){return v9}static create($){return this.getFacadeRoot().create($)}static get($){return this.getFacadeRoot().get($)}static list($){return this.getFacadeRoot().list($)}static start($){return this.getFacadeRoot().start($)}static progress($,Z){return this.getFacadeRoot().progress($,Z)}static complete($,Z){return this.getFacadeRoot().complete($,Z)}static fail($,Z){return this.getFacadeRoot().fail($,Z)}static cancel($,Z){return this.getFacadeRoot().cancel($,Z)}static execute($,Z){return this.getFacadeRoot().execute($,Z)}static wait($,Z){return this.getFacadeRoot().wait($,Z)}static subscribe($,Z){return this.getFacadeRoot().subscribe($,Z)}static stream($,Z,J){return this.getFacadeRoot().stream($,Z,J)}static cursor($){return this.getFacadeRoot().cursor($)}static channel($){return this.getFacadeRoot().channel($)}static sweep(){return this.getFacadeRoot().sweep()}static prune($){return this.getFacadeRoot().prune($)}}class sG extends g{static getFacadeAccessor(){return s1}static enabled($){return this.getFacadeRoot().enabled($)}static all(){return this.getFacadeRoot().forClient()}static explain($){return this.getFacadeRoot().explain($)}static for($){return this.getFacadeRoot().for($)}static list(){return this.getFacadeRoot().list()}static set($,Z,J){return this.getFacadeRoot().set($,Z,J)}static refresh(){return this.getFacadeRoot().refresh()}static invalidate(){return this.getFacadeRoot().invalidate()}}class W8{bound;constructor($){this.bound=$}get name(){return this.bound??T1()}get sql(){return this.connection().sql}get dialect(){return this.connection().dialect}async query($){return await this.run($,"query")}async execute($){let Z=await this.run($,"execute");return Number(Z?.count??0)}async transaction($){let Z=this.name,J=this.connection(Z);return aG(J.sql,(W)=>nG(Z,()=>$(W)),{slowTransactionThreshold:J.config.slowTransactionThreshold,connection:Z})}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-c0m8pcbd.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=tG($,rG(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=i0();if($===void 0)return;return T1()===this.name?$:void 0}connection($=this.name){return oG($),L(N1).connection($)}}var iZ=new W8;class eG extends g{static getFacadeAccessor(){return N1}static connection($){return new W8($)}static get sql(){return iZ.sql}static get dialect(){return iZ.dialect}static query($){return iZ.query($)}static execute($){return iZ.execute($)}static transaction($){return iZ.transaction($)}static schema(){return iZ.schema()}static close(){return this.getFacadeRoot().close()}}export{l0 as _d,oZ as $d,X8 as ae,e$ as be,rZ as ce,T0 as de,a3 as ee,R8 as fe,b8 as ge,nW as he,i1 as ie,z1 as je,r as ke,CW as le,YZ as me,oW as ne,aW as oe,k8 as pe,q8 as qe,Q6 as re,Z3 as se,TF as te,RI as ue,X5 as ve,O5 as we,h8 as xe,D5 as ye,U5 as ze,fF as Ae,L5 as Be,p8 as Ce,wF as De,kF as Ee,c8 as Fe,H5 as Ge,I5 as He,s1 as Ie,P5 as Je,gF as Ke,u8 as Le,I8 as Me,Z6 as Ne,P1 as Oe,I$ as Pe,AK as Qe,L8 as Re,M1 as Se,V$ as Te,o4 as Ue,KG as Ve,FG as We,tD as Xe,y1 as Ye,Ox as Ze,BG as _e,I9 as $e,P9 as af,T9 as bf,DG as cf,LG as df,HG as ef,PG as ff,TG as gf,NG as hf,cx as if,_G as jf,a4 as kf,N9 as lf,_9 as mf,x9 as nf,r4 as of,lZ as pf,qG as qf,yG as rf,p as sf,tZ as tf,C4 as uf,DP as vf,UP as wf,LP as xf,MP as yf,CX as zf,UJ as Af,EX as Bf,CP as Cf,bX as Df,h0 as Ef,w3 as Ff,wX as Gf,vG as Hf,MC as If,R9 as Jf,H1 as Kf,I1 as Lf,b9 as Mf,y9 as Nf,VU as Of,Z8 as Pf,J8 as Qf,v9 as Rf,iG as Sf,sG as Tf,W8 as Uf,eG as Vf,HJ as Wf,qO as Xf,AJ as Yf,EJ as Zf,yM as _f,rX as $f,tX as ag,r3 as bg,c1 as cg,iM as dg,$Q as eg,ZQ as fg,eJ as gg,cZ as hg,$9 as ig,nT as jg,JN as kg,WN as lg,V9 as mg,bD as ng,F9 as og,qD as pg,c3 as qg,O9 as rg,eQ as sg,$G as tg,d4 as ug,W1 as vg,A as wg,w0 as xg,t3 as yg,XW as zg,TK as Ag,YW as Bg,GW as Cg,V8 as Dg,O8 as Eg,D8 as Fg,KW as Gg,EK as Hg,fK as Ig,LW as Jg,IW as Kg,MW as Lg,AW as Mg,EW as Ng,fW as Og,T8 as Pg,yK as Qg,J0 as Rg,pW as Sg,XZ as Tg,iW as Ug};
|
|
115
|
+
)`,`CREATE INDEX IF NOT EXISTS "${Z}_subject_created_at_idx" ON "${Z}"("subject", "created_at")`,`CREATE INDEX IF NOT EXISTS "${Z}_status_deadline_at_idx" ON "${Z}"("status", "deadline_at")`]}var pG=191,cG=30000;class Z8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class J8 extends Error{code;data;constructor($,Z={}){super($,Z.cause===void 0?void 0:{cause:Z.cause});this.name="RunFailure",this.code=Z.code,this.data=Z.data}}class v9{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=D1(gG(),$),this.store=UU(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make(lZ);return this.ownFeed??=new lZ,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){lG("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;lG("id",Z);let J=await this.store.create({id:Z,kind:$.kind,subject:$.subject??null,owner:$.owner??null,meta:$.meta??null,status:$.start?"running":"pending",deadlineMs:$.deadline===void 0||$.deadline===null?null:l$($.deadline)});return await this.publish(J),J}async get($){return await this.store.get($)}list($={}){return this.store.list($)}start($){return this.change($,["pending"],{status:"running"})}async progress($,Z){return DU(Z),this.change($,H1,{status:"running",progress:Z})}complete($,Z){return this.change($,H1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,H1,{status:"failed",error:uG(Z)})}cancel($,Z){return this.change($,H1,{status:"cancelled",error:{message:Z??"The run was cancelled.",code:"cancelled"}})}async execute($,Z){let J=this.feed.subscribe(this.channel($));try{await J.ready();let W=await this.start($)??await this.store.get($);if(!W)throw new Z8($);if(I1(W.status))return W;let Y=new AbortController,j=this.watch($,W,J,Y),z={id:$,record:W,signal:Y.signal,progress:async(Q)=>{if(Y.signal.aborted)return;await this.progress($,Q)}},X;try{let Q=await Z(z);X=await this.complete($,Q)}catch(Q){if(!(Q instanceof J8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,H1,{status:"failed",error:Q instanceof J8?uG(Q):{message:"The run failed.",code:"error"}})}finally{Y.abort(),J.close(),await j}return X??await this.store.get($)??W}finally{J.close()}}async wait($,Z={}){let{signal:J}=Z;J?.throwIfAborted();let W=Z.timeout===void 0?1/0:Date.now()+l$(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new Z8($);let z=null;for(;;){if(I1(j.status))return j;J?.throwIfAborted();let X=await this.untilDeadline(j);if(X!==null&&X<=0){j=await this.expire($)??await this.store.get($)??j;continue}let Q=W-Date.now();if(Q<=0)return j;if(z??=Y.isClosed?new Promise(()=>{}):Y.next(),await dG(z,Math.min(Q,X??1/0,cG),J))z=null;j=await this.store.get($)??j}}finally{Y.close()}}async*subscribe($,Z={}){let J=this.feed.subscribe(this.channel($),{signal:Z.signal});try{await J.ready();let W=await this.store.get($);if(!W)throw new Z8($);if(yield W,I1(W.status))return;for await(let Y of J){let j=OU(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,I1(W.status))return}}finally{J.close()}}stream($,Z,J={}){return this.feed.stream($,this.channel(Z),J)}cursor($){return this.feed.cursor(this.channel($))}async sweep(){let $=await this.now(),Z=0;for(let J of await this.store.overdue($,this.config.sweepLimit))if(await this.expire(J.id))Z++;return Z}async prune($){let Z=l$($);return await this.store.prune?.(Z)??0}async close(){await this.ownFeed?.close(),this.ownFeed=null}now(){return this.store.now?this.store.now():Promise.resolve(Date.now())}async untilDeadline($){if($.deadlineAt===null)return null;return $.deadlineAt-await this.now()}async expire($){let Z=await this.store.get($);if(!Z||I1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,H1,{status:"timed_out",error:{message:"The run passed its deadline.",code:"deadline"}})}async watch($,Z,J,W){let Y=new Promise((z)=>{if(W.signal.aborted)z("ended");W.signal.addEventListener("abort",()=>z("ended"),{once:!0})}),j=null;try{for(;;){if(W.signal.aborted)return;if(I1(Z.status)){W.abort();return}let z=await this.untilDeadline(Z);if(z!==null&&z<=0){Z=await this.expire($)??await this.store.get($)??Z;continue}j??=J.next();let X=await Promise.race([Y,dG(j,Math.min(z??1/0,cG))]);if(X==="ended")return;if(X)j=null;Z=await this.store.get($)??Z}}catch(z){console.error(`[gemi] Run ${$}: could not follow the run for a cancel.`,z)}}async change($,Z,J){let W=await this.store.transition($,Z,J);if(W)await this.publish(W);return W}async publish($){try{await this.feed.publish(this.channel($.id),$)}catch(Z){console.error(`[gemi] Run ${$.id}: could not publish its change.`,Z)}}}function dG($,Z,J){return new Promise((W,Y)=>{let j=Number.isFinite(Z)?setTimeout(()=>Q(!1),Math.max(0,Z)):null,z=()=>{X(),Y(J.reason)},X=()=>{if(j)clearTimeout(j);J?.removeEventListener("abort",z)},Q=(G)=>{X(),W(G)};J?.addEventListener("abort",z,{once:!0}),$.then(()=>Q(!0),()=>Q(!0))})}function OU($,Z){if($.type!=="change")return null;let J=$.data;if(!J||typeof J!=="object"||J.id!==Z||typeof J.version!=="number")return null;return J}function uG($){if(typeof $==="string")return{message:$};if($ instanceof J8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function lG($,Z){if(typeof Z!=="string"||Z===""||Z.length>pG)throw TypeError(`A run's ${$} is a string of 1 to ${pG} characters; got ${JSON.stringify(Z)}.`)}function DU($){let{fraction:Z}=$;if(Z!==void 0&&!(Number.isFinite(Z)&&Z>=0&&Z<=1))throw RangeError(`A run's progress fraction is between 0 and 1; got ${Z}.`)}function UU($,Z){if($==="memory")return new b9;if($==="database"||typeof $==="function"){if(!Z&&($==="database"||$.length>0))throw Error("The runs store needs the application it belongs to, and this RunManager was built without one. Pass { application }.");if($==="database"){let J=Z.make(N1).connection();return new y9(J)}return $(Z)}if(typeof $==="string")throw Error(`Unknown runs store "${$}". The runs slice's store is "memory", "database", a RunStore, or a function returning one.`);return $}class iG extends g{static getFacadeAccessor(){return v9}static create($){return this.getFacadeRoot().create($)}static get($){return this.getFacadeRoot().get($)}static list($){return this.getFacadeRoot().list($)}static start($){return this.getFacadeRoot().start($)}static progress($,Z){return this.getFacadeRoot().progress($,Z)}static complete($,Z){return this.getFacadeRoot().complete($,Z)}static fail($,Z){return this.getFacadeRoot().fail($,Z)}static cancel($,Z){return this.getFacadeRoot().cancel($,Z)}static execute($,Z){return this.getFacadeRoot().execute($,Z)}static wait($,Z){return this.getFacadeRoot().wait($,Z)}static subscribe($,Z){return this.getFacadeRoot().subscribe($,Z)}static stream($,Z,J){return this.getFacadeRoot().stream($,Z,J)}static cursor($){return this.getFacadeRoot().cursor($)}static channel($){return this.getFacadeRoot().channel($)}static sweep(){return this.getFacadeRoot().sweep()}static prune($){return this.getFacadeRoot().prune($)}}class sG extends g{static getFacadeAccessor(){return s1}static enabled($){return this.getFacadeRoot().enabled($)}static all(){return this.getFacadeRoot().forClient()}static explain($){return this.getFacadeRoot().explain($)}static for($){return this.getFacadeRoot().for($)}static list(){return this.getFacadeRoot().list()}static set($,Z,J){return this.getFacadeRoot().set($,Z,J)}static refresh(){return this.getFacadeRoot().refresh()}static invalidate(){return this.getFacadeRoot().invalidate()}}class W8{bound;constructor($){this.bound=$}get name(){return this.bound??T1()}get sql(){return this.connection().sql}get dialect(){return this.connection().dialect}async query($){return await this.run($,"query")}async execute($){let Z=await this.run($,"execute");return Number(Z?.count??0)}async transaction($){let Z=this.name,J=this.connection(Z);return aG(J.sql,(W)=>nG(Z,()=>$(W)),{slowTransactionThreshold:J.config.slowTransactionThreshold,connection:Z})}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-mj55jdwp.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=tG($,rG(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=i0();if($===void 0)return;return T1()===this.name?$:void 0}connection($=this.name){return oG($),L(N1).connection($)}}var iZ=new W8;class eG extends g{static getFacadeAccessor(){return N1}static connection($){return new W8($)}static get sql(){return iZ.sql}static get dialect(){return iZ.dialect}static query($){return iZ.query($)}static execute($){return iZ.execute($)}static transaction($){return iZ.transaction($)}static schema(){return iZ.schema()}static close(){return this.getFacadeRoot().close()}}export{l0 as $d,oZ as ae,X8 as be,e$ as ce,rZ as de,T0 as ee,a3 as fe,R8 as ge,b8 as he,nW as ie,i1 as je,z1 as ke,r as le,CW as me,YZ as ne,oW as oe,aW as pe,k8 as qe,q8 as re,Q6 as se,Z3 as te,TF as ue,RI as ve,X5 as we,O5 as xe,h8 as ye,D5 as ze,U5 as Ae,fF as Be,L5 as Ce,p8 as De,wF as Ee,kF as Fe,c8 as Ge,H5 as He,I5 as Ie,s1 as Je,P5 as Ke,gF as Le,u8 as Me,I8 as Ne,Z6 as Oe,P1 as Pe,I$ as Qe,AK as Re,L8 as Se,M1 as Te,V$ as Ue,o4 as Ve,KG as We,FG as Xe,tD as Ye,y1 as Ze,Ox as _e,BG as $e,I9 as af,P9 as bf,T9 as cf,DG as df,LG as ef,HG as ff,PG as gf,TG as hf,NG as if,cx as jf,_G as kf,a4 as lf,N9 as mf,_9 as nf,x9 as of,r4 as pf,lZ as qf,qG as rf,yG as sf,p as tf,tZ as uf,C4 as vf,DP as wf,UP as xf,LP as yf,MP as zf,CX as Af,UJ as Bf,EX as Cf,CP as Df,bX as Ef,h0 as Ff,w3 as Gf,wX as Hf,vG as If,MC as Jf,R9 as Kf,H1 as Lf,I1 as Mf,b9 as Nf,y9 as Of,VU as Pf,Z8 as Qf,J8 as Rf,v9 as Sf,iG as Tf,sG as Uf,W8 as Vf,eG as Wf,HJ as Xf,qO as Yf,AJ as Zf,EJ as _f,yM as $f,rX as ag,tX as bg,r3 as cg,c1 as dg,iM as eg,$Q as fg,ZQ as gg,eJ as hg,cZ as ig,$9 as jg,nT as kg,JN as lg,WN as mg,V9 as ng,bD as og,F9 as pg,qD as qg,c3 as rg,O9 as sg,eQ as tg,$G as ug,d4 as vg,W1 as wg,A as xg,w0 as yg,t3 as zg,XW as Ag,TK as Bg,YW as Cg,GW as Dg,V8 as Eg,O8 as Fg,D8 as Gg,KW as Hg,EK as Ig,fK as Jg,LW as Kg,IW as Lg,MW as Mg,AW as Ng,EW as Og,fW as Pg,T8 as Qg,yK as Rg,J0 as Sg,pW as Tg,XZ as Ug,iW as Vg};
|
|
116
116
|
|
|
117
|
-
//# debugId=
|
|
117
|
+
//# debugId=546DB6897E56240964756E2164756E21
|