gemi 0.197.0 → 0.199.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/index.js +2 -2
- package/dist/ai/index.js.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-s57n552b.js → chunk-0kfrwbhg.js} +4 -4
- package/dist/{chunk-s57n552b.js.map → chunk-0kfrwbhg.js.map} +1 -1
- package/dist/{chunk-y9pzr1wc.js → chunk-1yq2b55s.js} +2 -2
- package/dist/{chunk-y9pzr1wc.js.map → chunk-1yq2b55s.js.map} +1 -1
- package/dist/{chunk-6nj9xjsm.js → chunk-206n0q1f.js} +2 -2
- package/dist/{chunk-6nj9xjsm.js.map → chunk-206n0q1f.js.map} +1 -1
- package/dist/{chunk-3bsw9sra.js → chunk-2cyd3h4h.js} +2 -2
- package/dist/{chunk-3bsw9sra.js.map → chunk-2cyd3h4h.js.map} +1 -1
- package/dist/{chunk-2g2cntdm.js → chunk-2kkv8515.js} +2 -2
- package/dist/{chunk-2g2cntdm.js.map → chunk-2kkv8515.js.map} +1 -1
- package/dist/{chunk-wprzrnqh.js → chunk-42b6zzg2.js} +2 -2
- package/dist/{chunk-wprzrnqh.js.map → chunk-42b6zzg2.js.map} +1 -1
- package/dist/{chunk-51n7yky9.js → chunk-4reyxar1.js} +1 -1
- package/dist/{chunk-a4kk68xy.js → chunk-503ce1t9.js} +2 -2
- package/dist/{chunk-a4kk68xy.js.map → chunk-503ce1t9.js.map} +1 -1
- package/dist/{chunk-zryrem89.js → chunk-50nex9wg.js} +3 -3
- package/dist/{chunk-zryrem89.js.map → chunk-50nex9wg.js.map} +1 -1
- package/dist/{chunk-4ftk3z34.js → chunk-5zjw41cv.js} +2 -2
- package/dist/{chunk-4ftk3z34.js.map → chunk-5zjw41cv.js.map} +1 -1
- package/dist/{chunk-spsheyx9.js → chunk-61mcmhjp.js} +1 -1
- package/dist/{chunk-5qaxde5h.js → chunk-64hxqsqx.js} +3 -3
- package/dist/{chunk-5qaxde5h.js.map → chunk-64hxqsqx.js.map} +1 -1
- package/dist/{chunk-zehvtpgm.js → chunk-6brwvyrz.js} +2 -2
- package/dist/{chunk-zehvtpgm.js.map → chunk-6brwvyrz.js.map} +1 -1
- package/dist/{chunk-qx1vc11v.js → chunk-6ftdsrkq.js} +2 -2
- package/dist/{chunk-qx1vc11v.js.map → chunk-6ftdsrkq.js.map} +1 -1
- package/dist/{chunk-bcydd231.js → chunk-6nr97atn.js} +2 -2
- package/dist/{chunk-bcydd231.js.map → chunk-6nr97atn.js.map} +1 -1
- package/dist/{chunk-tvdmx66x.js → chunk-6xa5yqrw.js} +2 -2
- package/dist/{chunk-tvdmx66x.js.map → chunk-6xa5yqrw.js.map} +1 -1
- package/dist/{chunk-zcmfkb9f.js → chunk-81m95se9.js} +2 -2
- package/dist/{chunk-zcmfkb9f.js.map → chunk-81m95se9.js.map} +1 -1
- package/dist/{chunk-j84r2j7a.js → chunk-84stff4t.js} +2 -2
- package/dist/{chunk-j84r2j7a.js.map → chunk-84stff4t.js.map} +1 -1
- package/dist/{chunk-kjygnj7y.js → chunk-8fzcs8dv.js} +2 -2
- package/dist/{chunk-kjygnj7y.js.map → chunk-8fzcs8dv.js.map} +1 -1
- package/dist/{chunk-tv33103m.js → chunk-93j09zw7.js} +1 -1
- package/dist/{chunk-2v83pskm.js → chunk-97g2qc7j.js} +1 -1
- package/dist/{chunk-rnjjn09d.js → chunk-agc5bqdt.js} +2 -2
- package/dist/{chunk-rnjjn09d.js.map → chunk-agc5bqdt.js.map} +1 -1
- package/dist/{chunk-nnn2f1ew.js → chunk-ahss6dcp.js} +2 -2
- package/dist/{chunk-nnn2f1ew.js.map → chunk-ahss6dcp.js.map} +1 -1
- package/dist/{chunk-zzmgz14a.js → chunk-b2n74m40.js} +2 -2
- package/dist/{chunk-zzmgz14a.js.map → chunk-b2n74m40.js.map} +1 -1
- package/dist/{chunk-ng5qfkgp.js → chunk-bcfcwbp4.js} +2 -2
- package/dist/{chunk-ng5qfkgp.js.map → chunk-bcfcwbp4.js.map} +1 -1
- package/dist/{chunk-mk4x0vtp.js → chunk-bdbg2dt6.js} +2 -2
- package/dist/{chunk-mk4x0vtp.js.map → chunk-bdbg2dt6.js.map} +1 -1
- package/dist/{chunk-7sadg8d7.js → chunk-bxxd1awv.js} +3 -3
- package/dist/{chunk-7sadg8d7.js.map → chunk-bxxd1awv.js.map} +1 -1
- package/dist/{chunk-qw6aa9fy.js → chunk-by0afyps.js} +2 -2
- package/dist/{chunk-qw6aa9fy.js.map → chunk-by0afyps.js.map} +1 -1
- package/dist/chunk-ccpp45dm.js +5 -0
- package/dist/{chunk-tgbky7fc.js.map → chunk-ccpp45dm.js.map} +1 -1
- package/dist/{chunk-zv55h4x9.js → chunk-ct1vh28z.js} +2 -2
- package/dist/{chunk-zv55h4x9.js.map → chunk-ct1vh28z.js.map} +1 -1
- package/dist/chunk-dqgn4wgf.js +15 -0
- package/dist/{chunk-es05kqtp.js.map → chunk-dqgn4wgf.js.map} +5 -4
- package/dist/{chunk-fyk66c5e.js → chunk-drb6gpgv.js} +2 -2
- package/dist/{chunk-fyk66c5e.js.map → chunk-drb6gpgv.js.map} +1 -1
- package/dist/{chunk-c601phyd.js → chunk-drqv10sv.js} +2 -2
- package/dist/{chunk-c601phyd.js.map → chunk-drqv10sv.js.map} +1 -1
- package/dist/{chunk-evdca0b9.js → chunk-e603nm1c.js} +2 -2
- package/dist/{chunk-evdca0b9.js.map → chunk-e603nm1c.js.map} +1 -1
- package/dist/{chunk-02jze3te.js → chunk-e7bb26fb.js} +2 -2
- package/dist/{chunk-02jze3te.js.map → chunk-e7bb26fb.js.map} +1 -1
- package/dist/{chunk-4f2xy9ws.js → chunk-ewknbs3b.js} +3 -3
- package/dist/{chunk-4f2xy9ws.js.map → chunk-ewknbs3b.js.map} +1 -1
- package/dist/chunk-ff22412e.js +117 -0
- package/dist/{chunk-7xy7ebkx.js.map → chunk-ff22412e.js.map} +9 -8
- package/dist/chunk-gknvmhby.js +6 -0
- package/dist/{chunk-arb0qkrm.js.map → chunk-gknvmhby.js.map} +2 -2
- package/dist/{chunk-n01mhwkj.js → chunk-gx2fhmnx.js} +3 -3
- package/dist/{chunk-n01mhwkj.js.map → chunk-gx2fhmnx.js.map} +1 -1
- package/dist/{chunk-a77w04sw.js → chunk-ha4er085.js} +2 -2
- package/dist/{chunk-a77w04sw.js.map → chunk-ha4er085.js.map} +1 -1
- package/dist/{chunk-9ky5d5js.js → chunk-jkf5kjaz.js} +3 -3
- package/dist/{chunk-9ky5d5js.js.map → chunk-jkf5kjaz.js.map} +1 -1
- package/dist/{chunk-cpgc5q74.js → chunk-jtbe5n3c.js} +2 -2
- package/dist/{chunk-cpgc5q74.js.map → chunk-jtbe5n3c.js.map} +1 -1
- package/dist/{chunk-ecyq52t3.js → chunk-kz15j07h.js} +3 -3
- package/dist/{chunk-ecyq52t3.js.map → chunk-kz15j07h.js.map} +1 -1
- package/dist/{chunk-mnmz8n5k.js → chunk-mddazdpt.js} +2 -2
- package/dist/{chunk-mnmz8n5k.js.map → chunk-mddazdpt.js.map} +1 -1
- package/dist/{chunk-nbry43s8.js → chunk-mxt88hhp.js} +2 -2
- package/dist/{chunk-nbry43s8.js.map → chunk-mxt88hhp.js.map} +1 -1
- package/dist/{chunk-rk34z2wa.js → chunk-mzns19hy.js} +2 -2
- package/dist/{chunk-rk34z2wa.js.map → chunk-mzns19hy.js.map} +1 -1
- package/dist/{chunk-2z160r1b.js → chunk-mzqhn72h.js} +2 -2
- package/dist/{chunk-2z160r1b.js.map → chunk-mzqhn72h.js.map} +1 -1
- package/dist/{chunk-8mmskn4g.js → chunk-n3p16jpb.js} +3 -3
- package/dist/{chunk-8mmskn4g.js.map → chunk-n3p16jpb.js.map} +1 -1
- package/dist/{chunk-x05mj7ye.js → chunk-n9k29mrs.js} +2 -2
- package/dist/{chunk-x05mj7ye.js.map → chunk-n9k29mrs.js.map} +1 -1
- package/dist/{chunk-v4ka65g8.js → chunk-nnaz5djg.js} +2 -2
- package/dist/{chunk-v4ka65g8.js.map → chunk-nnaz5djg.js.map} +1 -1
- package/dist/{chunk-sxww1ka5.js → chunk-pab6ye4d.js} +2 -2
- package/dist/{chunk-sxww1ka5.js.map → chunk-pab6ye4d.js.map} +1 -1
- package/dist/{chunk-ff16m7gm.js → chunk-q1zj3a0e.js} +2 -2
- package/dist/{chunk-ff16m7gm.js.map → chunk-q1zj3a0e.js.map} +1 -1
- package/dist/{chunk-7q42fej6.js → chunk-rcnpjwp4.js} +2 -2
- package/dist/{chunk-7q42fej6.js.map → chunk-rcnpjwp4.js.map} +1 -1
- package/dist/{chunk-y50h3cd6.js → chunk-rh84xq17.js} +2 -2
- package/dist/{chunk-y50h3cd6.js.map → chunk-rh84xq17.js.map} +1 -1
- package/dist/{chunk-e0d6az7p.js → chunk-s9z0xxth.js} +2 -2
- package/dist/{chunk-e0d6az7p.js.map → chunk-s9z0xxth.js.map} +1 -1
- package/dist/{chunk-kjgy7sk0.js → chunk-sg78cmd1.js} +2 -2
- package/dist/{chunk-kjgy7sk0.js.map → chunk-sg78cmd1.js.map} +1 -1
- package/dist/{chunk-htnbmbx1.js → chunk-t0qs2q9j.js} +2 -2
- package/dist/{chunk-htnbmbx1.js.map → chunk-t0qs2q9j.js.map} +1 -1
- package/dist/{chunk-yzazktke.js → chunk-t4z6rkvw.js} +2 -2
- package/dist/{chunk-yzazktke.js.map → chunk-t4z6rkvw.js.map} +1 -1
- package/dist/{chunk-3am1e8ya.js → chunk-tjsv6e3a.js} +2 -2
- package/dist/{chunk-3am1e8ya.js.map → chunk-tjsv6e3a.js.map} +1 -1
- package/dist/{chunk-8xckmvea.js → chunk-txbram9h.js} +2 -2
- package/dist/{chunk-8xckmvea.js.map → chunk-txbram9h.js.map} +1 -1
- package/dist/{chunk-gk0d26zw.js → chunk-tyvc46ns.js} +2 -2
- package/dist/{chunk-gk0d26zw.js.map → chunk-tyvc46ns.js.map} +1 -1
- package/dist/{chunk-9dnbf9q8.js → chunk-v2pt8h42.js} +2 -2
- package/dist/{chunk-9dnbf9q8.js.map → chunk-v2pt8h42.js.map} +1 -1
- package/dist/{chunk-2qbfvb6m.js → chunk-vpqzzrkn.js} +2 -2
- package/dist/{chunk-2qbfvb6m.js.map → chunk-vpqzzrkn.js.map} +1 -1
- package/dist/{chunk-zrykhpn9.js → chunk-w09wtxr6.js} +3 -3
- package/dist/{chunk-zrykhpn9.js.map → chunk-w09wtxr6.js.map} +1 -1
- package/dist/{chunk-degz94dk.js → chunk-w84ke0bp.js} +2 -2
- package/dist/{chunk-degz94dk.js.map → chunk-w84ke0bp.js.map} +1 -1
- package/dist/{chunk-20y02g4n.js → chunk-wxb2pqqz.js} +2 -2
- package/dist/{chunk-20y02g4n.js.map → chunk-wxb2pqqz.js.map} +1 -1
- package/dist/{chunk-rqs2s5nh.js → chunk-xb0k1br9.js} +2 -2
- package/dist/{chunk-fzy1z97a.js.map → chunk-xb0k1br9.js.map} +1 -1
- package/dist/{chunk-kzy4pyqb.js → chunk-xhc16pv1.js} +3 -3
- package/dist/{chunk-kzy4pyqb.js.map → chunk-xhc16pv1.js.map} +1 -1
- package/dist/{chunk-gk12v51y.js → chunk-xxep62yg.js} +1 -1
- package/dist/{chunk-4k62r4hv.js → chunk-xzt117g6.js} +1 -1
- package/dist/{chunk-xb9zjaes.js → chunk-y167pt0p.js} +2 -2
- package/dist/{chunk-xb9zjaes.js.map → chunk-y167pt0p.js.map} +1 -1
- package/dist/chunk-yw9mn5w7.js +5 -0
- package/dist/{chunk-pvx66dq2.js.map → chunk-yw9mn5w7.js.map} +4 -4
- package/dist/{chunk-g1th116z.js → chunk-yxge0cem.js} +2 -2
- package/dist/{chunk-g1th116z.js.map → chunk-yxge0cem.js.map} +1 -1
- package/dist/{chunk-fzy1z97a.js → chunk-zpqcawmq.js} +2 -2
- package/dist/{chunk-rqs2s5nh.js.map → chunk-zpqcawmq.js.map} +1 -1
- package/dist/{chunk-dbe8zgyb.js → chunk-zwbpcch0.js} +2 -2
- package/dist/{chunk-dbe8zgyb.js.map → chunk-zwbpcch0.js.map} +1 -1
- package/dist/chunks/{RealtimeClient-BVQeh_yg.js → RealtimeClient-B7zh4okq.js} +2 -2
- package/dist/chunks/{RealtimeClient-BVQeh_yg.js.map → RealtimeClient-B7zh4okq.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-G2g5Z1ZS.js → ThemeProvider-D33bPpf8.js} +51 -4
- package/dist/chunks/ThemeProvider-D33bPpf8.js.map +1 -0
- package/dist/chunks/{fetchFileRequest-Bzva9J59.js → fetchFileRequest-Cp0QjioM.js} +2 -2
- package/dist/chunks/{fetchFileRequest-Bzva9J59.js.map → fetchFileRequest-Cp0QjioM.js.map} +1 -1
- package/dist/chunks/{live-C2Sck5PO.js → live-D08wnrrZ.js} +3 -3
- package/dist/chunks/{live-C2Sck5PO.js.map → live-D08wnrrZ.js.map} +1 -1
- package/dist/chunks/{mutationExtras-HC7AC6zn.js → mutationExtras-BbDboF8F.js} +2 -2
- package/dist/chunks/{mutationExtras-HC7AC6zn.js.map → mutationExtras-BbDboF8F.js.map} +1 -1
- package/dist/chunks/{subscriptionStream-CaTWWJwt.js → subscriptionStream-CRj9aV4K.js} +2 -2
- package/dist/chunks/{subscriptionStream-CaTWWJwt.js.map → subscriptionStream-CRj9aV4K.js.map} +1 -1
- package/dist/client/ClientRouterContext.d.ts.map +1 -1
- package/dist/client/Head.d.ts.map +1 -1
- package/dist/client/createRoot.d.ts.map +1 -1
- package/dist/client/cspNonce.d.ts +33 -0
- package/dist/client/cspNonce.d.ts.map +1 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +17 -10
- package/dist/client/index.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/Email.d.ts +8 -0
- package/dist/email/Email.d.ts.map +1 -1
- package/dist/email/debugEmail.d.ts +4 -0
- package/dist/email/debugEmail.d.ts.map +1 -1
- package/dist/email/index.js +4 -4
- package/dist/email/index.js.map +4 -4
- 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/HttpRequest.d.ts +7 -0
- package/dist/http/HttpRequest.d.ts.map +1 -1
- package/dist/http/cspNonce.d.ts +37 -0
- package/dist/http/cspNonce.d.ts.map +1 -0
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.d.ts.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/probe/index.js +2 -2
- package/dist/probe/index.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/services/email/MailManager.d.ts +7 -0
- package/dist/services/email/MailManager.d.ts.map +1 -1
- package/dist/services/email/config.d.ts +6 -0
- package/dist/services/email/config.d.ts.map +1 -1
- package/dist/services/email/drivers/AcsDriver.d.ts +97 -0
- package/dist/services/email/drivers/AcsDriver.d.ts.map +1 -0
- package/dist/services/email/drivers/types.d.ts +7 -0
- package/dist/services/email/drivers/types.d.ts.map +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -9
- package/dist/services/index.js.map +4 -3
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +2 -0
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/config.d.ts +17 -1
- package/dist/services/router/config.d.ts.map +1 -1
- package/dist/services/router/contentSecurityPolicy.d.ts +32 -0
- package/dist/services/router/contentSecurityPolicy.d.ts.map +1 -0
- package/dist/services/router/staticCache.d.ts +1 -0
- package/dist/services/router/staticCache.d.ts.map +1 -1
- package/dist/services/router/staticDocument.d.ts +5 -1
- package/dist/services/router/staticDocument.d.ts.map +1 -1
- package/dist/services/router/streamQueryInjection.d.ts +5 -3
- package/dist/services/router/streamQueryInjection.d.ts.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/testing/index.js +2 -2
- package/dist/vitest/index.js +1 -1
- package/package.json +9 -1
- package/dist/chunk-7xy7ebkx.js +0 -117
- package/dist/chunk-arb0qkrm.js +0 -6
- package/dist/chunk-es05kqtp.js +0 -15
- package/dist/chunk-pvx66dq2.js +0 -5
- package/dist/chunk-tgbky7fc.js +0 -5
- package/dist/chunks/ThemeProvider-G2g5Z1ZS.js.map +0 -1
- /package/dist/{chunk-51n7yky9.js.map → chunk-4reyxar1.js.map} +0 -0
- /package/dist/{chunk-spsheyx9.js.map → chunk-61mcmhjp.js.map} +0 -0
- /package/dist/{chunk-tv33103m.js.map → chunk-93j09zw7.js.map} +0 -0
- /package/dist/{chunk-2v83pskm.js.map → chunk-97g2qc7j.js.map} +0 -0
- /package/dist/{chunk-gk12v51y.js.map → chunk-xxep62yg.js.map} +0 -0
- /package/dist/{chunk-4k62r4hv.js.map → chunk-xzt117g6.js.map} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{th as LV}from"./chunk-ewknbs3b.js";import{Nh as DV}from"./chunk-bxxd1awv.js";import{$h as OB,Ai as h,Bi as s4,Ki as O6,Oh as B3,Qi as D6,Sh as LB,Th as j9,Uh as z9,Vh as I8,Wh as T8,Yi as k1,Zh as P8,_h as N8,ai as m5,ci as Z3,cj as sG,di as $8,dj as zZ,ei as o5,ej as XZ,fi as C2,gi as u,gj as nB,ii as x8,ij as oB,ji as b$,ki as m2,li as A2,mi as S2,ni as z6,si as A,ti as N5,ui as i8,vi as LZ,wi as C8,xi as U6,zi as k$}from"./chunk-dqgn4wgf.js";import{lj as e1,mj as q0,nj as Z$,oj as G9}from"./chunk-vpqzzrkn.js";import{pj as JZ,qj as t5,uj as a9,vj as Z8,wj as P}from"./chunk-b2n74m40.js";import{Cj as i3,zj as vG}from"./chunk-xhc16pv1.js";import{Gj as QY,Jj as pB}from"./chunk-kz15j07h.js";import{$j as R$,ek as $$}from"./chunk-sg78cmd1.js";import{sk as MG}from"./chunk-yxge0cem.js";import{tk as GZ,wk as mB}from"./chunk-mddazdpt.js";import{xk as _1}from"./chunk-bcfcwbp4.js";import{Ak as f1,Bk as M2,Ck as OV,Ek as iZ,Fk as iB,Ok as H2,yk as Q6,zk as s0}from"./chunk-64hxqsqx.js";import{bl as q1}from"./chunk-t0qs2q9j.js";import{gl as p5,ll as d5}from"./chunk-agc5bqdt.js";import{sl as h5,xl as c}from"./chunk-t4z6rkvw.js";import{Bl as H,yl as $3}from"./chunk-jkf5kjaz.js";import{Jl as w5}from"./chunk-by0afyps.js";import{Kl as aB}from"./chunk-1yq2b55s.js";import{Ul as A5}from"./chunk-ahss6dcp.js";import{Vl as Q8,Xl as MB}from"./chunk-y167pt0p.js";import{am as J8}from"./chunk-zpqcawmq.js";function W6($){return typeof $==="function"&&$.prototype!==void 0}var N2=Symbol.for("gemi.HttpResponse"),_V=new Set([301,302,303,307,308]);class U1{kind;body;status;headers;[N2]=!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 P2(J,"json"),new U1("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 U1.json({error:Z},{...J,status:$})}static redirect($,Z={}){let J=Z.status??303;if(!_V.has(J))throw RangeError(`HttpResponse.redirect: status must be 301, 302, 303, 307 or 308, got ${J}.`);let W=String($);if(W==="")throw TypeError("HttpResponse.redirect: url is empty.");let Y=new Headers(Z.headers);return Y.set("Location",W),new U1("empty",void 0,J,Y)}static noContent($={}){return new U1("empty",null,204,new Headers($.headers))}static text($,Z={}){let J=Z.status??200;return P2(J,"text"),new U1("text",$,J,new Headers(Z.headers))}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;case"text":return $.set("Content-Type","text/plain; charset=utf-8"),this.body;case"empty":return $.delete("Content-Type"),null}}}function P2($,Z){if(!Number.isInteger($)||$<200||$>599)throw RangeError(`HttpResponse.${Z}: status must be an integer from 200 to 599, got ${$}.`);if($===204||$===205||$===304)throw RangeError(`HttpResponse.${Z}: a ${$} response has no body.${$===204?" Use HttpResponse.noContent().":""}`)}function a1($){return typeof $==="object"&&$!==null&&$[N2]===!0}function IV($,Z,J={}){return U1.error($,Z,J)}function e0($){return typeof $==="string"?[$]:$}function Y6($,Z){let J=$.split(/[\\/]/).pop()??"",W=Z?"attachment":"inline",Y=J.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${W}; filename="${Y}"; filename*=UTF-8''${encodeURIComponent(J)}`}function xV($){return"total"in $&&"partial"in $&&"body"in $}function _2(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function X3($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":N8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function CV($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(xV($))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 _8($,Z){if($ instanceof Response)return $;if(!$)return _2();let J=await CV($),{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 _2()}let{range:G}=Z;if(G){if(z<=0)return X3(Math.max(z,0));if(!X){if(W instanceof Blob){let B=T8(G,z);if(!B)return X3(z);W=W.slice(B.start,B.end+1),Y=B.start,j=B.end,X=!0}}}let Q=Boolean(G)&&X,V=Q?206:J.status,F=new Headers;if(F.set("Accept-Ranges","bytes"),F.set("Content-Type",J.type||"application/octet-stream"),F.set("X-Content-Type-Options","nosniff"),Q)F.set("Content-Range",P8(Y,j,z)),F.set("Content-Length",String(j-Y+1));else if(z>=0)F.set("Content-Length",String(z));if(J.name)F.set("Content-Disposition",Y6(J.name,J.download));if(J.etag)F.set("ETag",J.etag);if(J.lastModified)F.set("Last-Modified",J.lastModified.toUTCString());for(let[B,U]of Object.entries(J.extraHeaders))F.set(B,U);if((Z.method??"GET").toUpperCase()==="HEAD"){if(W&&"cancel"in W&&typeof W.cancel==="function")await W.cancel();return new Response(null,{status:V,headers:F})}return new Response(W,{status:V,headers:F})}function AV($){return W6($)}function I2($,Z){if($.length===0)return $();return $(Z??new A)}class n{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];__internal_bodyLimitDefault;constructor($,Z,J){this.method=$;this.handler=Z;this.methodName=J;this.handler=Z,this.methodName=J,this.method=$}get source(){if(!AV(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(this.source){let Z=new this.source.controller;return I2(Z[this.methodName].bind(Z),$)}return I2(this.handler,$)}middleware($){return this.middlewares=e0($),this}}class E2{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=e0($),this}async run(){let $=new A,Z=$.headers.toJSON();for(let J of C2($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if(S2($.rawRequest))throw new x8(A2($.rawRequest));throw J}}}class b2{constructor(...$){return new n(...$)}}class R2 extends n{__internal_brand="StreamHandler";async run($){let Z=P.getStore(),J=Z?.req?.rawRequest,W=I8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);if(a1(Y))return Y;return await _8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof C8)return X3(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class k2{constructor(...$){return new R2(...$)}}class w2{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new n("GET",$,"list"),post:new n("POST",$,"store")},this.second={get:new n("GET",$,"show"),put:new n("PUT",$,"update"),delete:new n("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 x0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new n("GET",$,Z)}post($,Z){return new n("POST",$,Z)}put($,Z){return new n("PUT",$,Z)}patch($,Z){return new n("PATCH",$,Z)}delete($,Z){return new n("DELETE",$,Z)}resource($){return new w2($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${x2($)}.`);return SV($)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${x2($)}.`);return EV($)}file($,Z){return new b2("GET",$,Z)}stream($,Z){return new k2("GET",$,Z)}proxy($,Z={}){return new E2($,Z)}}function x2($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function SV($){let Z={stream:new n("POST",$,"stream"),attach:new n("POST",$,"attach"),watch:new n("POST",$,"watch"),stop:new n("POST",$,"stop"),upload:new n("POST",$,"upload")};return Z.stream.__internal_bodyLimitDefault="none",Z.upload.__internal_bodyLimitDefault="upload",class extends x0{static __internal_brand="AgentRoute";static controller=$;static handlers=Z;routes={"/":Z.stream,"/attach":Z.attach,"/watch":Z.watch,"/stop":Z.stop,"/files":Z.upload};static middleware(W){if(W.stream)Z.stream.middleware(W.stream);if(W.attach)Z.attach.middleware(W.attach),Z.watch.middleware(W.attach);if(W.stop)Z.stop.middleware(W.stop);if(W.upload)Z.upload.middleware(W.upload);return this}}}function EV($){let Z={start:new n("POST",$,"voiceStart"),update:new n("PATCH",$,"voiceUpdate"),end:new n("DELETE",$,"voiceEnd")};return class extends x0{static __internal_brand="VoiceRoute";static controller=$;static handlers=Z;routes={"/":Z.start,"/:sessionId":{patch:Z.update,delete:Z.end}};static middleware(W){if(W.start)Z.start.middleware(W.start);if(W.update)Z.update.middleware(W.update);if(W.end)Z.end.middleware(W.end);return this}}}var t1="access_token";function E$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function j6($,Z){let J=E$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var bV=/^[A-Za-z0-9_-]+$/,RV=/^:[A-Za-z_][A-Za-z0-9_]*$/,f2=/^[A-Za-z0-9_-]{1,128}$/,kV=/^[A-Za-z0-9_.:-]+$/;class i extends Error{constructor($){super($);this.name="InvalidChannelError"}}function q2($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function FZ($){if(typeof $!=="string"||$.length===0)throw new i("A channel pattern must be a non-empty string.");if($.length>255)throw new i(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(RV.test(W)){let Y=W.slice(1);if(J.has(Y))throw new i(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new i(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!bV.test(W))throw new i(`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 G3($,Z={}){let J=FZ($),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 i(`The channel "${$}" needs the param "${z}".`);let G=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof G!=="string"||!f2.test(G))throw new i(`The param "${z}" of the channel "${$}" must be 1 to 128 letters, digits, "_" or "-". Use a public id in a channel name.`);return G}).join(".");for(let j of Object.keys(Z))if(!W.has(j))throw new i(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new i(`The topic built from "${$}" is longer than 255 characters.`);return Y}function A8($){if(FZ($).some((J)=>J.startsWith(":")))throw new i(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function v2($){if(typeof $!=="string"||$.length===0||$.length>64||!kV.test($))throw new i(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function g2($,Z){if($===Z)return!0;if($===U0)return Z.startsWith(`${U0}.`)&&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(":")&&f2.test(W[j]))}var U0="user";function UZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return G3(`${U0}.:id`,{id:Z})}class Z0{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class X6 extends Z0{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');let J=Z==="upload"?this.config.uploadLimit??b$("50mb"):b$(Z);return z6(this.req.rawRequest,J),{}}}function wV($){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}function fV($){return{"body-limit":X6.configure({uploadLimit:$})}}class r1{config;static token="middleware";defaultBodyLimit;uploadBodyLimit;builtinAliases;constructor($){this.config=$;let Z=$.bodyLimit===null||$.bodyLimit===void 0?null:b$($.bodyLimit);this.defaultBodyLimit=Z===1/0?null:Z,this.uploadBodyLimit=b$($.uploadBodyLimit??"50mb"),this.builtinAliases=fV(this.uploadBodyLimit)}get aliases(){return{...this.builtinAliases,...this.config.aliases}}applyDefaultBodyLimit($,Z){if(this.defaultBodyLimit===null||Z==="none"||m2($))return;let J=Z==="upload"?Math.max(this.defaultBodyLimit,this.uploadBodyLimit):this.defaultBodyLimit;z6($,J,{checkDeclared:!1,uploadLimit:this.uploadBodyLimit})}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 A,J=this.aliases,W=[];for(let[Y,j]of wV($).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:y2(z)})}}else if(W6(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:y2(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 qV(W.slice(j+1)),z}return Y})()}}function y2($){return $?.runsOnRefusal===!0}async function qV($){for(let Z of $){if(!Z.runsOnRefusal)continue;try{await Z.run()}catch(J){console.error(J)}}}class G6{visibility;authorizer;middlewares=[];constructor($,Z){this.visibility=$;this.authorizer=Z}middleware($){return this.middlewares=[...this.middlewares,...e0($)],this}events(...$){return this}}class c2{static __brand="ChannelRouter";channels={};public(){return new G6("public")}private($){return new G6("private",$)}async authorize($,Z,J={},W={}){try{mV(this)}catch(G){return console.error("[gemi] The channel router is invalid, so every subscription is refused.",G),{ok:!1,code:"error"}}let Y=Object.hasOwn(this.channels,Z)?this.channels[Z]:void 0;if(!u2(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===U0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=G3(Z,J??{})}catch(G){if(G instanceof i)return{ok:!1,code:"invalid_params"};throw G}let z=Object.fromEntries(Object.entries(J??{}).map(([G,Q])=>[G,String(Q)])),X=new A($,z,"api",Z);return P.exit(()=>Q6.exit(()=>P.run(X,async()=>{let G=P.getStore();try{if(Y.middlewares.length>0)await H(r1).runMiddleware(Y.middlewares);if(Z===U0){let Q=await h2(X);if(!Q)return{ok:!1,code:"denied"};if(j=UZ(Q),Y.visibility==="private"&&Y.authorizer){if(await p2(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 p2(Y.authorizer,X,z):await h2(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(Q){if(yV(Q))return{ok:!1,code:"denied"};return console.error(`[gemi] Authorizing the channel "${Z}" threw, so the subscription was refused.`,Q),{ok:!1,code:"error"}}finally{G.destroy()}},W.carried)))}}async function vV($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;l2(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 u2($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function h2($){if(!P.getStore().user&&E$($)===null)return null;try{return await f0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function p2($,Z,J){if(gV($))return new $().authorize(Z,J);return $(Z,J)}function gV($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function yV($){return $?.kind===e1||$$($)||R$($)}var d2=new WeakSet;function mV($){if(d2.has($))return;l2($),d2.add($)}function l2($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!u2(Y))throw new i(`The channel "${W}" is not declared with this.public() or this.private().`);let j=FZ(W);if(j[0].startsWith(":"))throw new i(`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!==U0&&j.length===2&&j[0]===U0)throw new i(`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!==U0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new i(`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===U0?[U0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(hV(J[W].segments,J[Y].segments))throw new i(`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 hV($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class S8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class B6{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class E8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}function pV($){let Z=[],J="";for(let W of $)if(W==="_"||W==="-"||W===" "){if(J)Z.push(J);J=""}else if(W===W.toLowerCase())J+=W;else{if(J)Z.push(J);J=W.toLowerCase()}if(J)Z.push(J);return Z}function dV($,Z){let J=pV($);if(Z==="snake")return J.join("_");if(Z==="kebab")return J.join("-");return J.map((W,Y)=>Y===0?W:W[0].toUpperCase()+W.slice(1)).join("")}class i2{static __brand="McpRouter";routes={};scopes;param($){return new S8($.as,$.input,$.bind)}fromTool($,Z={}){return new E8($,Z)}fromApiRoute($,Z,J){return new B6($,Z,J)}fromApiRouteFor($,Z,J){let{name:W,audiences:Y,description:j,params:z,files:X,...G}=J,Q=`McpRouter.fromApiRouteFor("${$}", "${Z}")`,V=Object.keys(Y??{});if(V.length===0)throw Error(`${Q}: declare at least one audience.`);let F={},B=new Map;for(let U of V){let{name:D,casing:O,description:L,params:M,files:T,...K}=Y[U],N=D??(O?dV(W,O):W);if(B.has(N))throw Error(`${Q}: the audiences "${B.get(N)}" and "${U}" are both named "${N}". Give one its own name or casing.`);B.set(N,U);let R=typeof L==="function"?j===void 0?void 0:L(j):L??j;if(typeof R!=="string")throw Error(`${Q}: the audience "${U}" has no description, and there is no shared one.`);let C={...G,...K,description:R};if(z||M)C.params={...z,...M};if(X||T)C.files={...X,...T};F[N]=new B6($,Z,C)}return F}}function O0($,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 b8 extends q0{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 b1{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 b8([O0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new b8($,Z)}}class s2{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 b1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=e0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function R8($,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[G,Q]of Object.entries($.headers??{}))Z.set(G,Q);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",Y6(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class n2{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=e0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function o2($,Z){if(a1($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class a2{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=o2(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=e0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class t2{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends R1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends R1{routes=J??{}}}else this.children=class extends R1{routes=Z},this.handler=()=>({})}async run($,Z){let J=o2(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=e0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class R1{middlewares=[];featureGates=[];routes={};view($,Z){return new a2($,Z)}file($){return new n2($)}redirect($){return new s2($)}layout($,Z,J){return new t2($,Z,J)}}function cV($){return $}function uV(){return{aliases:{},global:[],bodyLimit:"1mb",uploadBodyLimit:"50mb"}}var l0="redirect";function O1($,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 OZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function k8($){return/^(https?:\/\/|\/\/)/i.test($??"")}function lV($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(H(c).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function iV($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function V6($,Z){let J=Z||H(b).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=lV($,!W);if(W||!iV(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(l0,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class r2 extends Z0{async run($){let Z=P.getStore(),J=Z.req;if(Z.user)return{};let W=await j6(H(b),J);if(!W)throw new k$({redirectTo:V6(J,$)});return Z.setUser(W),{}}}var f8="gemi_same_site",w8="private, no-cache, no-store, max-age=0, must-revalidate";class F6 extends Z0{run(){let $=P.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(f8))return{};if(E$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(f8,"1"),new e2(`${W.pathname}${W.search}`)}}class e2 extends q0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=sV($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":w8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":w8}},viewData:{status:200,data:{},headers:{"Cache-Control":w8},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 sV($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}class $9 extends Z0{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 Z9={"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 J9 extends Z0{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={...Z9,...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={...Z9,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var nV="Rate limit exceeded";class J$ extends q0{result;retryAfter;constructor($,Z=nV){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?q8($):{}};this.payload={api:{status:429,data:{error:{...Z$("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function q8($){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 D1{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(W9("window",W),W9("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 J$(W,typeof J==="function"?J(W):J);return W}}function W9($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}import{isIP as v8}from"net";function w$($){let Z=$.trim();if(Z==="")return null;if(Z.startsWith("[")){let W=Z.indexOf("]");if(W<0)return null;let Y=Z.slice(W+1);if(Y!==""&&!/^:\d{1,5}$/.test(Y))return null;let j=Z.slice(1,W);return v8(j)===6?j:null}if(v8(Z))return Z;let J=/^(\d{1,3}(?:\.\d{1,3}){3}):\d{1,5}$/.exec(Z);return J&&v8(J[1])===4?J[1]:null}class X9 extends Z0{async run($,Z){let J=oV();if(!J)return{};let W=await J.consume(this.key(),{limit:Y9($)??this.config.limit,window:Y9(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(q8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new J$(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=j9(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${DZ(this.req)}:${this.req.routePath??"*"}`}}function oV(){try{let $=H();return $.bound(D1)?$.make(D1):null}catch{return null}}function DZ($){let Z=z9($.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$(W)??W.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function Y9($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class Q9 extends Z0{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new g8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new g8;return{}}}class g8 extends q0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:G9("csrf","Invalid CSRF token",403)}},view:{}}}class B9{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class V9{all($,Z){return!0}}class y8{options;param;refuse;answers=new WeakMap;constructor($){this.options=$;this.param=$.param,this.refuse=$.refuse??"not_found"}refusal(){return this.refuse==="forbidden"?new LZ:new U6}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 A,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 Z0{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 LZ:$ instanceof U6}}function aV($){return new y8($)}async function L6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await QF($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return GF(z,Z,J,$.url)}async function GF($,Z,J,W){let Y=$.getReader(),j=[],z=0;try{for(;;){let{done:Q,value:V}=await Y.read();if(Q)break;if(z+V.byteLength>Z){if(!J)throw new D6(W,Z);j.push(V.subarray(0,Z-z)),z=Z;break}j.push(V),z+=V.byteLength}}finally{Y.cancel().catch(()=>{})}let X=new Uint8Array(z),G=0;for(let Q of j)X.set(Q,G),G+=Q.byteLength;return X}async function QF($){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 M6($){return new TextDecoder("utf-8").decode($)}var BF={"&":"&","<":"<",">":">",'"':""","'":"'"};function f$($){return $.replace(/[&<>"']/g,(Z)=>BF[Z])}var VF={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function m8($){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 VF[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 h8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function F9($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(m8($.slice(W)));return}if(Y>W)Z.text(m8($.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 G=$.indexOf(">",X+1);if(G===-1)return;W=G+1}else W=j+1}else if($[Y+1]==="/"){let j=$.indexOf(">",Y+2);if(j===-1)return;Z.close(h8($.slice(Y+2,j).trim())),W=j+1}else{let j=FF($,Y+1);if(j===-1)return;let z=$.slice(Y+1,j),X=z.endsWith("/");if(X)z=z.slice(0,-1);let G=z.search(/[\s]|$/),Q=h8(z.slice(0,G));if(Q){if(Z.open(Q,UF(z.slice(G)),X),X)Z.close(Q)}W=j+1}}}function FF($,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 UF($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[h8(W[1])]=m8(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 M9="http://www.sitemaps.org/schemas/sitemap/0.9",OF="http://www.w3.org/1999/xhtml",c8=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
|
+
`,U9=`<urlset xmlns="${M9}" xmlns:xhtml="${OF}">
|
|
4
|
+
`,O9=`</urlset>
|
|
5
|
+
`,q$=50000,Q3=52428800,D9=2048,DF=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),LF=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,MF="application/xml; charset=utf-8",L9=new TextEncoder;function u8($,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>D9)throw new j0(`Sitemap: ${Z} is over ${D9} characters: "${W.slice(0,80)}\u2026".`);return W}function H9($,Z){if($ instanceof Date){if(Number.isNaN($.getTime()))throw new j0(`Sitemap: lastmod of ${Z} is an invalid Date.`);return $.toISOString()}if(!LF.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 HF($){let Z=u8($.loc,"loc"),J=`<url><loc>${f$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${f$(H9($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!DF.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=u8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${f$(Y)}" href="${f$(j)}"/>`}return`${J}</url>
|
|
6
|
+
`}function KF($){let Z=$.maxUrls??q$,J=$.maxBytes??Q3;if(!Number.isInteger(Z)||Z<1||Z>q$)throw RangeError(`Sitemap: maxUrls must be an integer from 1 to ${q$}.`);if(!Number.isInteger(J)||J<1||J>Q3)throw RangeError(`Sitemap: maxBytes must be an integer from 1 to ${Q3}.`);return{maxUrls:Z,maxBytes:J}}function K9($,Z={}){let{maxUrls:J,maxBytes:W}=KF(Z),Y=L9.encode(c8+U9+O9).byteLength,j=[],z=[],X=Y,G=()=>{j.push(c8+U9+z.join("")+O9),z=[],X=Y};for(let Q of $){let V=HF(Q),F=L9.encode(V).byteLength;if(Y+F>W)throw new j0(`Sitemap: the entry for ${Q.loc} alone is over maxBytes (${W}).`);if(z.length===J||X+F>W)G();z.push(V),X+=F}if(z.length>0||j.length===0)G();return j}function T9($){let Z="",J=0;for(let W of $){if(++J>q$)throw new j0(`Sitemap: an index can list at most ${q$} sitemaps.`);let Y=u8(W.loc,"sitemap loc");if(Z+=`<sitemap><loc>${f$(Y)}</loc>`,W.lastmod!=null)Z+=`<lastmod>${f$(H9(W.lastmod,Y))}</lastmod>`;Z+=`</sitemap>
|
|
7
|
+
`}return`${c8}<sitemapindex xmlns="${M9}">
|
|
8
|
+
${Z}</sitemapindex>
|
|
9
|
+
`}function p8($,Z,J){let W=new Headers(J);if(!W.has("content-type"))W.set("content-type",MF);return new Response($,{status:Z,headers:W})}function TF($){if($===null||$===void 0||$==="")return null;let Z=String($);return/^[1-9]\d{0,8}$/.test(Z)?Number(Z):NaN}function PF($,Z={}){let J=K9($,Z),W=TF(Z.page);if(W!==null){let j=J[W-1];return j?p8(j,200,Z.headers):new Response("Not found",{status:404,headers:{"cache-control":"no-store"}})}if(J.length===1)return p8(J[0],200,Z.headers);let Y=Z.pageUrl;if(!Y)throw new j0(`Sitemap: the entries need ${J.length} files, so Sitemap.response needs \`pageUrl\` to list them in an index.`);return p8(T9(J.map((j,z)=>({loc:Y(z+1)}))),200,Z.headers)}function d8($){try{let Z=new URL($.trim());return Z.protocol==="http:"||Z.protocol==="https:"?Z.href:null}catch{return null}}function P9($,Z={}){let J=Z.maxUrls??1/0,W=$.replace(/^\uFEFF/,"").trimStart();if(!W.startsWith("<")){let B=[];for(let U of W.split(/\r?\n/)){if(B.length>=J)break;let D=U.trim()?d8(U):null;if(D)B.push({loc:D})}if(B.length===0&&W.length>0)throw new j0("Sitemap: the document is neither XML nor a list of URLs.");return{kind:"urlset",urls:B}}let Y=null,j=[],z=[],X=[],G=null,Q=null,V="",F=()=>Y==="index"?z.length:j.length;if(F9(W,{stopped:()=>F()>=J,open(B,U){let D=X[X.length-1];if(X.push(B),Y===null){if(B==="urlset")Y="urlset";else if(B==="sitemapindex")Y="index";return}if(Y==="urlset"&&B==="url"&&D==="urlset"||Y==="index"&&B==="sitemap"&&D==="sitemapindex")G={};else if(G&&(D==="url"||D==="sitemap")&&(B==="loc"||B==="lastmod"||B==="changefreq"||B==="priority"))Q=B,V="";else if(G&&Y==="urlset"&&D==="url"&&B==="link"){let O=U.href?d8(U.href):null;if(U.rel?.toLowerCase()==="alternate"&&U.hreflang&&O)(G.alternates??=[]).push({hrefLang:U.hreflang,href:O})}},close(B){let U=X.lastIndexOf(B);if(U===-1)return;if(X.length=U,Q&&B===Q&&G)G[Q]=V.trim(),Q=null;else if(G&&(B==="url"||B==="sitemap")){let D=G;G=null,Q=null;let O=D.loc?d8(D.loc):null;if(!O)return;if(Y==="index"){z.push(D.lastmod?{loc:O,lastmod:D.lastmod}:{loc:O});return}let L={loc:O};if(D.lastmod)L.lastmod=D.lastmod;if(D.changefreq)L.changefreq=D.changefreq;let M=D.priority?Number(D.priority):NaN;if(Number.isFinite(M))L.priority=M;if(D.alternates)L.alternates=D.alternates;j.push(L)}},text(B){if(Q)V+=B}}),Y===null)throw new j0("Sitemap: the document has no <urlset> or <sitemapindex>.");return Y==="index"?{kind:Y,sitemaps:z}:{kind:Y,urls:j}}async function*NF($,Z={}){let{maxUrls:J=q$,maxSitemaps:W=50,maxDepth:Y=3,maxSize:j=Q3,onError:z,...X}=Z,G=[{url:String($),depth:0}],Q=new Set,V=0,F=0;while(G.length>0&&F<J&&V<W){let B=G.shift(),U=B.url.replace(/#.*$/,"");if(Q.has(U))continue;Q.add(U),V++;let D;try{let O=await k1(B.url,{...X,maxSize:j});if(!O.ok)throw O.body?.cancel().catch(()=>{}),new j0(`Sitemap: ${B.url} answered ${O.status}.`,B.url,O.status);let L=M6(await L6(O,j));D=P9(L,{maxUrls:Math.max(J-F,W-V)})}catch(O){if(B.depth===0||!z||X.signal?.aborted)throw O;z(O,B.url);continue}if(D.kind==="index"){if(B.depth>=Y)continue;G=D.sitemaps.slice(0,W-V).map((L)=>({url:L.loc,depth:B.depth+1})).concat(G);continue}for(let O of D.urls)if(yield{...O,sitemap:B.url},++F>=J)return}}var N9={response:PF,chunk:K9,index:T9,parse:P9,read:NF,MAX_URLS:q$,MAX_BYTES:Q3};var _F=512000,IF=new TextEncoder;function _9($){let Z=$.trim();if(Z==="*")return"*";return(/^[a-zA-Z_-]+/.exec(Z)?.[0]??"").toLowerCase()}function I9($){let Z="";for(let J=0;J<$.length;J++){let W=$[J];if(W==="%"&&/^[0-9a-fA-F]{2}$/.test($.slice(J+1,J+3)))Z+=`%${$.slice(J+1,J+3).toUpperCase()}`,J+=2;else if(W.charCodeAt(0)>126||W.charCodeAt(0)<=32){let Y=$.codePointAt(J);if(Y>65535)J++;for(let j of IF.encode(String.fromCodePoint(Y)))Z+=`%${j.toString(16).toUpperCase().padStart(2,"0")}`}else Z+=W}return Z}function xF($,Z){let J=$.endsWith("$"),W=J?$.slice(0,-1):$,Y=0,j=0,z=-1,X=0;while(j<Z.length)if(Y<W.length&&W[Y]!=="*"&&W[Y]===Z[j])Y++,j++;else if(Y<W.length&&W[Y]==="*")z=Y++,X=j;else if(Y===W.length&&!J)return!0;else if(z!==-1)Y=z+1,j=++X;else return!1;while(Y<W.length&&W[Y]==="*")Y++;return Y===W.length}class MZ{groups;sitemaps;status;constructor($,Z,J="parsed"){this.groups=$;this.sitemaps=Z;this.status=J}groupsFor($){let Z=_9($)||"*";if(Z!=="*"){let J=this.groups.filter((W)=>W.userAgents.includes(Z));if(J.length>0)return J}return this.groups.filter((J)=>J.userAgents.includes("*"))}isAllowed($,Z="*"){let J;if($ instanceof URL||/^[a-z][a-z0-9+.-]*:/i.test($)){let Y=new URL(String($));J=Y.pathname+Y.search}else J=$.startsWith("/")?$:`/${$}`;if(J==="/robots.txt")return!0;if(this.status==="unavailable")return!0;if(this.status==="unreachable")return!1;J=I9(J);let W=null;for(let Y of this.groupsFor(Z))for(let j of Y.rules){if(!xF(j.path,J))continue;let z=j.path.length,X=j.type==="allow";if(!W||z>W.length||z===W.length&&X)W={length:z,allow:X}}return W?W.allow:!0}crawlDelay($="*"){for(let Z of this.groupsFor($))if(Z.crawlDelay!==void 0)return Z.crawlDelay;return null}}var CF={"user-agent":"user-agent",useragent:"user-agent","user agent":"user-agent",allow:"allow",disallow:"disallow",dissallow:"disallow",disalow:"disallow",sitemap:"sitemap","site-map":"sitemap","crawl-delay":"crawl-delay"};function x9($,Z={}){let J=[],W=[],Y=null,j=!1;for(let z of $.replace(/^\uFEFF/,"").split(/\r\n|\r|\n/)){let X=z.indexOf("#"),G=(X===-1?z:z.slice(0,X)).trim(),Q=G.indexOf(":");if(Q===-1)continue;let V=CF[G.slice(0,Q).trim().toLowerCase()],F=G.slice(Q+1).trim();if(!V)continue;if(V==="sitemap"){if(!F||/\s/.test(F))continue;try{let B=Z.url?new URL(F,Z.url):new URL(F);if(B.protocol==="http:"||B.protocol==="https:")W.push(B.href)}catch{}continue}if(V==="user-agent"){if(!j||!Y)Y={userAgents:[],rules:[]},J.push(Y),j=!0;let B=_9(F);if(B)Y.userAgents.push(B);continue}if(!Y)continue;if(j=!1,V==="crawl-delay"){let B=Number(F);if(Number.isFinite(B)&&B>=0)Y.crawlDelay=B;continue}if(!F)continue;Y.rules.push({type:V,path:I9(F)})}return new MZ(J,W)}async function AF($,Z={}){let{maxSize:J=_F,...W}=Z,Y=new URL("/robots.txt",$),j=await k1(Y,{...W,maxSize:Number.MAX_SAFE_INTEGER}),z=j.status;if(z===429||z>=500)return j.body?.cancel().catch(()=>{}),new MZ([],[],"unreachable");if(z>=400)return j.body?.cancel().catch(()=>{}),new MZ([],[],"unavailable");let X=await L6(j,J,!0),G=M6(X);if(X.byteLength>=J)G=G.slice(0,Math.max(0,G.lastIndexOf(`
|
|
10
|
+
`)));return x9(G,{url:j.url})}function l8($){return $===void 0?[]:typeof $==="string"?[$]:$}function H6($,Z){if(/[\r\n]/.test(Z))throw TypeError(`Robots: the ${$} value ${JSON.stringify(Z)} has a line break in it.`);return`${$}: ${Z}
|
|
11
|
+
`}function C9($){let Z=[];for(let W of $.rules??[]){let Y=l8(W.userAgent);if(Y.length===0)throw TypeError("Robots: a rule needs at least one userAgent.");let j=Y.map((X)=>H6("User-agent",X)).join(""),z=[...l8(W.allow).map((X)=>["Allow",X]),...l8(W.disallow).map((X)=>["Disallow",X])];for(let[X,G]of z){if(!G.startsWith("/")&&!G.startsWith("*"))throw TypeError(`Robots: ${X} "${G}" must start with "/" or "*".`);j+=H6(X,G)}if(z.length===0)j+=`Disallow:
|
|
12
|
+
`;if(W.crawlDelay!==void 0){if(!Number.isFinite(W.crawlDelay)||W.crawlDelay<0)throw TypeError(`Robots: crawlDelay ${W.crawlDelay} is not a number of seconds.`);j+=H6("Crawl-delay",String(W.crawlDelay))}Z.push(j)}let J=($.sitemaps??[]).map((W)=>{let Y;try{Y=new URL(W)}catch{throw TypeError(`Robots: sitemap "${W}" is not an absolute URL.`)}return H6("Sitemap",Y.href)});if(J.length>0)Z.push(J.join(""));return Z.join(`
|
|
13
|
+
`)}function SF($,Z={}){let J=new Headers(Z.headers);if(!J.has("content-type"))J.set("content-type","text/plain; charset=utf-8");return new Response(C9($),{status:200,headers:J})}var A9={response:SF,text:C9,parse:x9,fetch:AF};import{createHmac as S9,randomBytes as EF}from"crypto";var s8="v2.";function n8($){return $.startsWith(s8)}function HZ(){let $=process.env.SECRET;if(!$)throw Error("Signing in needs a secret to mint session tokens with. Set SECRET in the environment.");return $}function E9($){let Z=EF(16).toString("hex"),J=S9("sha256",HZ()).update(`${$}:${Z}`).digest("hex");return`${s8}${J}`}function K6($,Z){let J=S9("sha256",HZ()).update(`legacy-session:${Z}:${$}`).digest("hex");return`${s8}${J}`}import{createHash as kF,createHmac as wF,randomInt as fF,timingSafeEqual as k9}from"crypto";function b9($,Z){return Math.floor($/Z)*Z}function bF($,Z){if(Z<=0)return 0;return Math.min(1,Math.max(0,(Z-$)/Z))}function o8($,Z,J,W){return Z*bF(J,W)+$}function RF($){let{current:Z,previous:J,elapsed:W,window:Y,limit:j,cost:z}=$,X=j-z;if(X<0)return Y;let G=Math.max(0,Y-W);if(J>0){let V=Y*(1-(X-Z)/J);if(V<=Y)return Math.max(0,Math.ceil(V-W))}if(Z<=X)return G;if(Z<=0)return G;let Q=Y*(1-X/Z);return G+Math.max(0,Math.ceil(Q))}function R9($){let{allowed:Z,current:J,previous:W,now:Y,elapsed:j,window:z,limit:X,cost:G}=$;if(Z){let V=o8(J,W,j,z);return{allowed:!0,limit:X,remaining:Math.max(0,Math.floor(X-V)),resetAt:Y-j+z,retryAfter:0}}let Q=RF({current:J,previous:W,elapsed:j,window:z,limit:X,cost:G});return{allowed:!1,limit:X,remaining:0,resetAt:Y+Q,retryAfter:Q}}class a8{}class t8 extends a8{buckets=new Map;maxKeys;constructor($={}){super();this.maxKeys=Math.max(1,$.maxKeys??1e5)}consume($){let{key:Z,limit:J,window:W}=$,Y=$.cost??1,j=Date.now(),z=b9(j,W),X=j-z,G=this.roll(Z,W,z);G.limit=J;let V=o8(G.current,G.previous,X,W)+Y<=J;if(V)G.current+=Y;if(this.buckets.delete(Z),this.buckets.set(Z,G),this.buckets.size>this.maxKeys)this.evict(j);return R9({allowed:V,current:G.current,previous:G.previous,now:j,elapsed:X,window:W,limit:J,cost:Y})}clear(){this.buckets.clear()}get size(){return this.buckets.size}roll($,Z,J){let W=this.buckets.get($);if(!W||W.window!==Z)return{window:Z,limit:0,windowStart:J,current:0,previous:0};if(W.windowStart===J)return W;if(W.windowStart+Z===J)return W.previous=W.current,W.current=0,W.windowStart=J,W;return W.previous=0,W.current=0,W.windowStart=J,W}evict($){for(let[W,Y]of this.buckets)if($-Y.windowStart>=Y.window*2)this.buckets.delete(W);let Z=this.maxKeys-Math.floor(this.maxKeys/10);if(this.buckets.size<=Z)return;let J=[...this.buckets].map(([W,Y],j)=>({key:W,order:j,spent:Y.limit>0?(Y.current+Y.previous)/Y.limit:0}));J.sort((W,Y)=>W.spent-Y.spent||W.order-Y.order);for(let{key:W}of J){if(this.buckets.size<=Z)break;this.buckets.delete(W)}}}var f9="h1.";function T6($,Z,J){let W=wF("sha256",HZ()).update(`gemi:one-time:${$}:${Z}:${J}`).digest("hex");return`${f9}${W}`}function KZ($,Z,J,W){let Y=typeof W==="string"?W:"",j=typeof J==="string"?J:"",z=j.startsWith(f9),X=T6($,Z,Y),G=Buffer.from(z?X:Y),Q=Buffer.from(j);if(G.length!==Q.length||Y===""||j==="")return k9(G,G),!1;return k9(G,Q)}function q9($){let Z="";for(let J=0;J<$;J++)Z+=String(fF(0,10));return Z}var v9=320;function v$($){if(typeof $!=="string")return null;let Z=$.trim();if(Z===""||Z.length>v9)return null;return Z.toLowerCase()}function P6($){if(typeof $!=="string")return null;let Z=$.trim();if(Z.length>v9)return null;let J=Z.toLowerCase();if(J.length<3||J.length>254||!/^[^\s@]+@[^\s@]+$/.test(J))return null;return J}var w9=null;function g9(){try{let $=H();if(typeof $?.bound==="function"&&$.bound(D1))return $.make(D1)}catch{}return w9??=new D1({driver:new t8,limit:1000,window:60}),w9}function r8($){return $.length<=64?$:`sha256:${kF("sha256").update($).digest("hex")}`}function qF($){return $==="request"||$==="verify"||$==="link"?`auth:code-${$}`:`auth:${$}`}async function g$($,Z,J,W,Y,j){let z=g9(),X=[["perIp",`ip:${r8(DZ(J))}`,W.perIp]];if(Z!==null)X.push(["perEmail",`email:${r8(Z)}`,W.perEmail]);for(let[G,Q,V]of X){if(!V)continue;let F=Y?await Y({req:J,scope:$,limit:G}):void 0,B=qF($),U=F?`${B}:p:${r8(String(F))}:${Q}`:`${B}:${Q}`,[D,O]=V,L=await z.consume(U,{limit:D,window:O});if(!L.allowed)throw await j?.(G),new J$(L)}}async function y9($,Z,J,W=10){let Y=Math.max(86400,Math.ceil(W*60*(J+1)));return(await g9().consume(`auth:code-attempt:${$}:${Z}`,{limit:J,window:Y})).allowed}import{randomBytes as $7}from"crypto";class e8 extends A{schema={name:{string:"Invalid name",required:"Name is required","min:2":"Name must be at least 3 characters"},email:{string:"Invalid email",required:"Email is required",email:"Invalid email"},password:{"min:8":"Password must be at least 9 characters"}}}import{createHash as vF,timingSafeEqual as gF}from"crypto";function h9($){let Z=$??process.env.AUTH_FIXED_CODE;return typeof Z==="string"&&Z!==""?Z:null}function p9($){if($!==void 0&&$!==null&&typeof $!=="string")throw Error(`auth.emailCode.fixedCode must be a string, got ${JSON.stringify($)}`);let Z=h9($);if(Z===null)return;let J=$?"auth.emailCode.fixedCode":"AUTH_FIXED_CODE";if(Bun.env.NODE_ENV==="production")throw Error(`${J} is set, but a fixed sign-in code is for development and tests only and is refused when NODE_ENV=production. Unset it in this environment.`);if(Z.trim()!==Z||Z.length>256)throw Error(`${J} must have no surrounding whitespace and at most 256 characters`)}function yF($){if(Bun.env.NODE_ENV==="production")return null;return h9($)}function m9($){return vF("sha256").update($).digest()}function d9($,Z){let J=yF(Z);if(J===null||typeof $!=="string"||$==="")return!1;return gF(m9($),m9(J))}async function w1($,Z){if(typeof $==="function")return await $({req:Z})===!0;return Boolean($)}function Z7($){return $===!0||typeof $==="function"}function J7($={}){return{signIn:{perEmail:$.signIn?.perEmail??[10,900],perIp:$.signIn?.perIp??[50,900]},signUp:{perEmail:$.signUp?.perEmail??!1,perIp:$.signUp?.perIp??[10,3600]},forgot:{perEmail:$.forgot?.perEmail??[5,900],perIp:$.forgot?.perIp??[20,900]},reset:{perEmail:$.reset?.perEmail??!1,perIp:$.reset?.perIp??[20,900]}}}function V3($,Z,J,W=1/0){if(!Number.isInteger(Z)||Z<J||Z>W){let Y=W===1/0?`an integer of at least ${J}`:`an integer from ${J} to ${W}`;throw Error(`auth.emailCode.${$} must be ${Y}, got ${Z}`)}}function mF($={}){let Z=[["password",$?.password],["magicLink",$?.magicLink],["verifyEmail",$?.verifyEmail],["emailCode.enabled",$?.emailCode?.enabled]];for(let[J,W]of Z)if(W!==void 0&&typeof W!=="boolean"&&typeof W!=="function")throw Error(`auth.${J} must be true, false or a function of the request, got ${JSON.stringify(W)}`)}function W7($={}){let Z=$.length??6,J=$.expiresInMinutes??10,W=$.linkExpiresInMinutes??10080,Y=$.maxAttempts??5,j=$.activeCodes??1;return V3("length",Z,4,12),V3("expiresInMinutes",J,1),V3("linkExpiresInMinutes",W,1),V3("maxAttempts",Y,1),V3("activeCodes",j,1,5),p9($.fixedCode),{enabled:$.enabled??!1,createUser:$.createUser??!1,length:Z,expiresInMinutes:J,linkExpiresInMinutes:W,maxAttempts:Y,activeCodes:j,requestLimit:{perEmail:$.requestLimit?.perEmail??[5,900],perIp:$.requestLimit?.perIp??[20,900]},verifyLimit:{perEmail:$.verifyLimit?.perEmail??[10,900],perIp:$.verifyLimit?.perIp??[50,900]},uniformMagicLinkResponse:$.uniformMagicLinkResponse??!1,send:$.send??(({email:z,code:X})=>{if(Bun.env.NODE_ENV!=="production")console.info(`[gemi] email code for ${z}: ${X} (set auth.emailCode.send to deliver it)`)}),fixedCode:$.fixedCode??null}}async function hF($,Z){if(typeof Z!=="string"||Z==="")return!1;try{return await Bun.password.verify($,Z)}catch{return!1}}function c9($){if(!$)return null;if(typeof $.getRedirectUrl==="function")return{provider:$};let{provider:Z,feature:J,enabled:W}=$;return{provider:Z,...J!==void 0?{feature:J}:{},...W!==void 0?{enabled:W}:{}}}function u9($){for(let[Z,J]of Object.entries($??{})){if(typeof J?.getRedirectUrl==="function")continue;let W=J;if(typeof W?.provider?.getRedirectUrl!=="function")throw Error(`auth.oauthProviders.${Z} must be an OAuthProvider, or { provider, feature, enabled } with an OAuthProvider.`);if(W.enabled!==void 0&&typeof W.enabled!=="boolean"&&typeof W.enabled!=="function")throw Error(`auth.oauthProviders.${Z}.enabled must be true, false or a function of the request.`);if(W.feature!==void 0&&(typeof W.feature!=="string"||W.feature===""))throw Error(`auth.oauthProviders.${Z}.feature must be a feature key from app/features.`)}}function vP($){return $}function l9($={}){return mF($),{basePath:"/auth",verifyEmail:!0,password:!0,passwordLimits:J7($.passwordLimits),magicLink:!0,redirectPath:"/dashboard",signInPath:"/auth/sign-in",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,cookieDomain:null,migrateLegacySession:null,signUpRequest:e8,oauthProviders:{},oauthFailurePath:null,oauthCompleteProfilePath:null,connections:{},connectionStore:null,onConnected:()=>{},verifyPassword:hF,hashPassword:async(Z)=>await Bun.password.hash(Z),generateForgotPasswordToken:async()=>$7(32).toString("hex"),generateEmailVerificationToken:()=>{if($.verifyEmail===!1)return"";return $7(32).toString("hex")},generateMagicLinkToken:()=>$7(32).toString("hex"),extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{},emailCode:W7($.emailCode),generateCode:()=>{return},rateLimitKey:()=>{return},onAuthenticated:()=>{}}}var pF=new Set(["script","style","textarea","title","xmp","iframe","noembed","noframes","noscript"]),dF=new Set(["svg","math"]);function i9($){return $===32||$===9||$===10||$===12||$===13}function s9($){return $>=65&&$<=90||$>=97&&$<=122}function N6($){return $>=65&&$<=90?$+32:$}function n9(){let $="data",Z="",J=!1,W="",Y=0,j=0,z=!1,X=0,G=0,Q=()=>$==="data"&&X===0&&G===0,V=()=>{if(!J&&pF.has(Z)){$="rawText",W=`</${Z}`,Y=0,Z="";return}if($="data",Z==="template")if(J)X=Math.max(0,X-1);else X+=1;else if(dF.has(Z)){if(J)G=Math.max(0,G-1);else if(!z)G+=1}Z=""},F=(B)=>{switch($){case"data":if(B===60)$="tagOpen";return;case"tagOpen":if(B===33)$="bang",j=0;else if(B===47)$="endTagOpen";else if(s9(B))$="tagName",J=!1,z=!1,Z=String.fromCharCode(N6(B));else if(B===63)$="bogus";else if(B===60)$="tagOpen";else $="data";return;case"endTagOpen":if(s9(B))$="tagName",J=!0,z=!1,Z=String.fromCharCode(N6(B));else if(B===62)$="data";else $="bogus";return;case"tagName":if(i9(B)||B===47)$="inTag",z=B===47;else if(B===62)V();else Z+=String.fromCharCode(N6(B));return;case"inTag":if(B===62){V();return}if(z=B===47,B===34)$="attrDouble";else if(B===39)$="attrSingle";return;case"attrDouble":if(B===34)$="inTag";z=!1;return;case"attrSingle":if(B===39)$="inTag";z=!1;return;case"bang":if(B===45){if(j+=1,j===2)$="comment",j=0}else if(B===62)$="data";else $="bogus";return;case"bogus":if(B===62)$="data";return;case"comment":if(B===45)j=j<2?j+1:2;else if(B===62&&j>=2)$="data",j=0;else j=0;return;case"rawText":{if(Y<W.length){if(N6(B)===W.charCodeAt(Y))Y+=1;else Y=B===60?1:0;return}if(B===62)$="data",Z="";else if(i9(B)||B===47)$="inTag",Z="";else Y=B===60?1:0;return}}};return{scanToInsertionPoint(B){for(let U=0;U<B.length;U++){if(Q())return U;F(B[U])}return B.length},write(B){for(let U=0;U<B.length;U++)F(B[U])},isSafe:Q}}function i0($){let Z=JSON.stringify($);if(Z===void 0)return"undefined";return Z.replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function o9($){return $?`<script nonce="${$}">`:"<script>"}function cF($,Z){let J=i0([$.path,$.variantKey,$.data]);return`${o9(Z)}(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${J})</script>`}function uF($,Z){let J=i0([$.id,$.locale,$.strings]);return`${o9(Z)}(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${J})</script>`}function Y7($,Z,J={},W,Y){let j=new TextEncoder,z=[],X=!1,G=!1,Q=()=>{if(G)return;G=!0,J.onClose?.()};Z.onSettle((O)=>{if(O.status!=="resolved")return;z.push(cF(O,Y))}),W?.onUse((O)=>{z.push(uF(O,Y))});let V=$.getReader(),F=n9(),B=(O,L)=>{O.enqueue(L),J.onChunk?.(L)},U=(O)=>{while(z.length>0){let L=j.encode(z.shift());F.write(L),B(O,L)}},D=(O,L)=>{if(z.length===0){F.write(L),B(O,L);return}let M=F.scanToInsertionPoint(L);if(M>0)B(O,L.subarray(0,M));if(F.isSafe())U(O);let T=L.subarray(M);if(T.length>0)F.write(T),B(O,T)};return new ReadableStream({async pull(O){let L;try{L=await V.read()}catch(K){throw Q(),K}let{done:M,value:T}=L;if(M){U(O),O.close(),Q();return}if(!X){if(X=!0,F.write(T),B(O,T),J.onShell?.(),F.isSafe())U(O);return}D(O,T)},cancel(O){return Q(),V.cancel(O)}})}var lF=/bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;function _6($){if(!$)return!1;return lF.test($)}async function t9($,Z=()=>{}){let J=P.getStore(),W=J?.req??null,Y=null;if(W?.rawRequest?.url)try{Y=new URL(W.rawRequest.url).pathname}catch{Y=null}return{user:J?.user??null,attributes:await iF($,Z),request:{path:Y,routePath:W?.routePath??null,locale:J?.locale??null},anonymousId:a9(),isBot:_6(W?.rawRequest?.headers?.get("user-agent")??null),now:new Date}}function r9($){return{user:$.user??null,attributes:$.attributes??{},request:{path:null,routePath:null,locale:null},anonymousId:$.subjectId??null,isBot:!1,now:new Date}}async function iF($,Z){if(!$.context)return{};try{let J=P.getStore();return await $.context(J?.req??null)??{}}catch(J){return Z(`The \`context\` hook in app/config/features.ts threw; evaluating with no attributes. ${J instanceof Error?J.message:String(J)}`),{}}}function e9($,Z){return`${$}:${Z}`}function j7($){let Z=new Bun.CryptoHasher("sha1").update($).digest("hex"),J=Number.parseInt(Z.slice(0,8),16);return Math.floor(J/4294967296*1e4)}function $Y($,Z){if(Z>=100)return!0;if(Z<=0)return!1;return $<Math.round(Z*100)}function ZY($,Z,J,W){if(W.unavailable)return{value:!1,reason:"unavailable"};if(W.active!==!0)return{value:!1,reason:"inactive"};if(Z.when){let j;try{j=Z.when(J)}catch(z){return W.warn?.(`The \`when\` for feature "${$}" threw; treating it as off. ${z instanceof Error?z.message:String(z)}`),{value:!1,reason:"error"}}if(typeof j==="boolean")return{value:j,reason:"attributed"}}if(Z.rollout===void 0)return{value:!0,reason:"on"};if(J.isBot)return{value:!1,reason:"bot"};let Y=nF($,Z,J,W.buckets);return $Y(Y,Z.rollout)?{value:!0,reason:"rollout"}:{value:!1,reason:"excluded"}}function sF($){let Z=$.user?.publicId??$.user?.id;if(Z!==void 0&&Z!==null)return String(Z);return $.anonymousId??""}function nF($,Z,J,W){let Y=e9(Z.salt??$,sF(J));if(!W)return j7(Y);let j=W.get(Y);if(j!==void 0)return j;let z=j7(Y);return W.set(Y,z),z}class JY extends Error{cause;kind="FeatureReloadFailed";constructor($){super(`Could not reload feature switches after a write, so the cached switches may still predate it: ${$ instanceof Error?$.message:String($)}`);this.cause=$}}class z7{source;declared;ttlMs;warn;snapshot=null;inflight=null;lastFailureLoggedAt=0;generation=0;lastError=null;retryAfter=0;constructor($,Z,J,W=()=>{}){this.source=$;this.declared=Z;this.ttlMs=J;this.warn=W}async get(){let $=this.snapshot;if($&&Date.now()-$.loadedAt<this.ttlMs)return $;if($){if(Date.now()>=this.retryAfter)this.refresh().catch(()=>{});return $}return await this.refresh()}refresh(){return this.inflight??=this.load().finally(()=>{this.inflight=null}),this.inflight}async invalidate(){await this.inflight?.catch(()=>{});let $=this.generation,Z=await this.refresh();if(this.generation===$)throw new JY(this.lastError);return Z}peek(){return this.snapshot}async load(){try{let $=await this.source.load(),{active:Z,audit:J}=this.readRows($);return this.snapshot={active:Z,audit:J,loadedAt:Date.now(),unavailable:!1},this.generation++,this.lastError=null,this.retryAfter=0,this.snapshot}catch($){return this.handleFailure($)}}readRows($){let Z=new Map,J=new Map;for(let W of $??[]){let Y=typeof W?.key==="string"?W.key:null;if(!Y){this.warn("Ignoring a feature row with no `key`.");continue}if(!(Y in this.declared)){this.warn(`Feature row "${Y}" is not declared in app/features, so it is ignored. Delete the row, or declare the feature.`);continue}Z.set(Y,W.active===!0);let j=oF(W);if(j)J.set(Y,j)}return{active:Z,audit:J}}handleFailure($){let Z=$ instanceof Error?$.message:String($),J=Date.now();if(this.lastError=$,this.retryAfter=J+this.ttlMs,J-this.lastFailureLoggedAt>=this.ttlMs)this.lastFailureLoggedAt=J,this.warn(`Could not load feature switches: ${Z}`);if(this.snapshot)return this.snapshot;return this.snapshot={active:new Map,audit:new Map,loadedAt:J,unavailable:!0},this.snapshot}}function oF($){let Z={},J=$.updatedBy;if(typeof J==="string")Z.updatedBy=J;else if(J===null)Z.updatedBy=null;let W=$.updatedAt;if(W instanceof Date||typeof W==="string"||typeof W==="number"){let Y=W instanceof Date?W:new Date(W);if(!Number.isNaN(Y.getTime()))Z.updatedAt=Y}return"updatedBy"in Z||"updatedAt"in Z?Z:null}class aF{}class tF extends Error{modelName;kind="FeatureModelMissing";constructor($){super(`No "${$}" model is registered, so every feature stays off. Add the model to prisma/schema.prisma and export it from app/models \u2014 see docs/feature-flags.md.`);this.modelName=$}}class X7 extends Error{sourceName;kind="FeatureSourceReadOnly";constructor($){super(`The feature source (${$}) is read-only, so Features.set() cannot write to it. Change the switch where that source reads from, or give the source a write() method.`);this.sourceName=$}}class WY extends Error{key;kind="UndeclaredFeature";constructor($){super(`"${$}" is not declared in app/features, so it cannot be switched. A row for it would be ignored \u2014 declare the feature first.`);this.key=$}}class YY{manager;ctx;constructor($,Z){this.manager=$;this.ctx=Z}async enabled($){return(await this.explain($)).value}async explain($){return await this.manager.evaluateIn($,this.ctx,new Map)}async all(){return await this.manager.evaluateAllIn(this.ctx,new Map,{clientOnly:!1})}}class W${config;log;static token="features";store;declared;warnedAboutSize=!1;warnedAboutActor=!1;constructor($,Z=()=>{}){this.config=$;this.log=Z;this.declared=$.features??{},this.store=new z7($.source,this.declared,Math.max(0,$.ttl)*1000,this.log)}declarations(){return this.declared}async list(){let{active:$,audit:Z,unavailable:J}=await this.switches();return{unavailable:J,features:Object.entries(this.declared).map(([W,Y])=>({key:W,describe:Y.describe,rollout:Y.rollout,targeted:Y.when!==void 0,serverOnly:Y.serverOnly,salt:Y.salt,active:$.get(W),...Z.get(W)}))}}async refresh(){if(!this.config.enabled)return;if(Object.keys(this.declared).length===0)return;await this.store.refresh()}async invalidate(){try{if(this.config.enabled&&Object.keys(this.declared).length>0)await this.store.invalidate()}finally{P.getStore()?.featureEvaluations?.clear()}}async set($,Z,J={}){if(typeof $!=="string"||!Object.hasOwn(this.declared,$))throw new WY(String($));if(typeof Z!=="boolean")throw TypeError(`Features.set("${$}", \u2026) takes a boolean, not ${Z===null?"null":typeof Z}.`);let W=rF(J.actor),Y=this.config.source;if(typeof Y.write!=="function")throw new X7(Y.constructor?.name||"an anonymous source");let{actorRecorded:j}=await Y.write($,Z,{actor:W});if(W!==null&&!j&&!this.warnedAboutActor)this.warnedAboutActor=!0,this.log('Features.set() was given an actor, but the feature source has nowhere to record it. For the database source, add a nullable `updatedBy String?` column to the feature flag model to keep "last changed by".');await this.invalidate()}async enabled($){return(await this.explain($)).value}async explain($){let Z=await this.requestContext();return await this.evaluateIn($,Z,this.requestBuckets())}async all(){let $=await this.requestContext();return await this.evaluateAllIn($,this.requestBuckets(),{clientOnly:!1})}async forClient(){if(!this.config.enabled)return{};let $=await this.requestContext(),Z=await this.evaluateAllIn($,this.requestBuckets(),{clientOnly:!0});return this.warnIfOversized(Object.keys(Z).length),Z}for($){return new YY(this,r9($))}async evaluateIn($,Z,J){let W=this.memoFor(Z),Y=W?.get($);if(Y)return Y;let j=this.declared[$];if(!j)return{value:!1,reason:"undeclared"};let{active:z,unavailable:X}=await this.switchFor($),G=ZY($,j,Z,{active:z,unavailable:X,buckets:J,warn:this.log});return W?.set($,G),this.notify($,G,Z),G}async evaluateAllIn($,Z,J){let W={};for(let[Y,j]of Object.entries(this.declared)){if(J.clientOnly&&j.serverOnly)continue;W[Y]=(await this.evaluateIn(Y,$,Z)).value}return W}async switches(){if(!this.config.enabled||Object.keys(this.declared).length===0)return{active:new Map,audit:new Map,unavailable:!1};let $=await this.store.get();return{active:$.active,audit:$.audit,unavailable:$.unavailable}}async switchFor($){if(!this.config.enabled)return{active:!1,unavailable:!1};let Z=await this.store.get();return{active:Z.active.get($),unavailable:Z.unavailable}}async requestContext(){let $=P.getStore();if($?.featureContext)return $.featureContext;let Z=await t9(this.config,this.log);if($)$.featureContext=Z;return Z}memoFor($){let Z=P.getStore();if(!Z||Z.featureContext!==$)return null;return Z.featureEvaluations??=new Map,Z.featureEvaluations}requestBuckets(){let $=P.getStore();if(!$)return new Map;return $.featureBuckets??=new Map,$.featureBuckets}notify($,Z,J){if(!this.config.onEvaluate)return;try{this.config.onEvaluate($,Z,J)}catch(W){this.log(`The \`onEvaluate\` hook in app/config/features.ts threw for "${$}". ${W instanceof Error?W.message:String(W)}`)}}warnIfOversized($){if(this.warnedAboutSize||$<=this.config.maxClientFlags)return;this.warnedAboutSize=!0,this.log(`${$} client-visible features are embedded in every document. Mark the ones only the server reads with \`serverOnly: true\` to keep them out of the payload.`)}}function rF($){if($===void 0||$===null)return null;if(typeof $==="string"){if($.length>0)return $}else if(typeof $==="object"){let{publicId:Z,id:J}=$;if(typeof Z==="string"&&Z.length>0)return Z;if(typeof J==="string"&&J.length>0||typeof J==="number")return String(J)}throw TypeError("Features.set() was given an `actor` that identifies nobody. Pass a string, or a user with a `publicId` or an `id`.")}async function jY($){if($===void 0)return!0;return await H(W$).enabled($)}function zY(){try{return P.getStore()?.req??null}catch{return null}}async function TZ($,Z,J=zY()){if(typeof Z!=="string"||!Object.hasOwn($,Z))return null;let W=c9($[Z]);if(!W||!await jY(W.feature))return null;if(W.enabled!==void 0&&W.enabled!==!0){if(typeof W.enabled==="function"&&!J)return null;if(!await w1(W.enabled,J))return null}let Y=W.provider;if(typeof Y.isAvailable==="function"&&!await Y.isAvailable(J))return null;return Y}async function XY($,Z=zY()){let J=[];for(let W of Object.keys($))if(await TZ($,W,Z))J.push(W);return J}function G7($){if($&&typeof $==="object")delete $.password;return $}function eF(){return new Proxy({},{get:($,Z)=>QY(Z)})}var GY=new WeakMap;function BY($){if($&&typeof $==="object"){for(let Z of Object.values($))BY(Z);Object.freeze($)}return $}var $U={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}},ZU=BY({token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:$U});class Q7{models;constructor($=eF()){this.models=$}run($){return this.models.User.asSystem($)}sessionSelect(){return ZU}transaction($){return this.models.User.transaction($)}withLegacySessionLock($,Z){let J=this.models.User.$connection??f1(),W=H(q1).connection(J),Y=()=>this.transaction(async()=>{if(W.dialect==="postgres"){let X=`gemi:legacy-session:${$}`;await s0()`SELECT pg_advisory_xact_lock(hashtextextended(${X}, 0))`}return Z()});if(W.dialect!=="sqlite"||s0())return Y();let z=(GY.get(W)??Promise.resolve()).then(Y,Y);return GY.set(W,z.catch(()=>{})),z}async createUser($){let Z=await this.run(()=>this.models.User.create({data:$}));return G7(Z)}async updateUserPassword($){let Z=await this.run(()=>this.models.User.update({where:{id:$.id},data:{password:$.password}}));return G7(Z)}async findUserByEmailAddress($,Z){return await this.run(()=>this.models.User.findUnique({where:Z?{email:$,emailVerifiedAt:{not:null}}:{email:$}}))}async findUserByVerificationToken($){if(typeof $!=="string"||$==="")return null;return await this.run(()=>this.models.User.findFirst({where:{verificationToken:$}}))}async verifyUser($){return await this.run(()=>this.models.User.update({where:{email:$},data:{emailVerifiedAt:new Date}}))}async createSession($){return await this.run(()=>this.models.Session.create({data:$,include:{user:!0}}))}async createSessionV2($){return await this.run(()=>this.models.Session.create({data:$,select:this.sessionSelect()}))}async findSession($){if(!$.token)return null;return await this.run(()=>this.models.Session.findUnique({where:{token:$.token},select:this.sessionSelect()}))}async updateSession($){return await this.run(()=>this.models.Session.update({where:{token:$.token},data:{expiresAt:$.expiresAt},select:this.sessionSelect()}))}async deleteSession($){if(!$.token)return;await this.run(()=>this.models.Session.deleteMany({where:{token:$.token}}))}async claimLegacySession($){if(!$.token)return!1;let{count:Z}=await this.run(()=>this.models.Session.deleteMany({where:{token:$.token}}));return Z>0}async deleteAllUserSessions($){await this.run(()=>this.models.Session.deleteMany({where:{userId:$}}))}async createPasswordResetToken($){return await this.run(()=>this.models.PasswordResetToken.create({data:{token:$.token,user:{connect:{id:$.user.id}}}}))}async findPasswordResetToken($){if(typeof $.token!=="string"||$.token==="")return null;return await this.run(()=>this.models.PasswordResetToken.findUnique({where:{token:$.token},include:{user:!0}}))}async deletePasswordResetToken($){return await this.run(()=>this.models.PasswordResetToken.delete({where:{token:$.token}}))}async findInvitation($,Z){if(typeof $!=="string"||typeof Z!=="string")return null;return await this.run(()=>this.models.OrganizationInvitation.findFirst({where:{publicId:$,email:Z}}))}async deleteInvitationById($){await this.run(()=>this.models.OrganizationInvitation.delete({where:{publicId:$}}))}async createAccount($){return await this.run(()=>this.models.Account.create({data:{userId:$.userId,organizationId:$.organizationId,organizationRole:$.organizationRole}}))}async createMagicLinkToken($){return await this.run(()=>this.models.MagicLinkToken.create({data:{email:$.email,token:$.token,pin:$.pin}}))}async findUserMagicLinkToken($){let Z=(J)=>typeof J==="string"&&J!=="";if(!Z($.email))return null;if($.token!==void 0&&!Z($.token))return null;if($.token===void 0&&!Z($.pin))return null;return await this.run(()=>$.token?this.models.MagicLinkToken.findUnique({where:{token_email:{token:$.token,email:$.email}}}):this.models.MagicLinkToken.findUnique({where:{pin_email:{pin:$.pin,email:$.email}}}))}async findMagicLinkTokenByEmail($){return await this.run(()=>this.models.MagicLinkToken.findFirst({where:{email:$},orderBy:{id:"desc"}}))}async listMagicLinkTokensByEmail($,Z){return await this.run(()=>this.models.MagicLinkToken.findMany({where:{email:$},orderBy:{id:"desc"},take:Z}))}async deleteMagicLinkTokensExcept($,Z){await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{email:$,id:{notIn:Z}}}))}async claimMagicLinkToken($){let{count:Z}=await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{id:$}}));return Z===1}async deleteMagicLinkToken($){await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{email:$}}))}async createSocialAccount($){return await this.run(()=>this.models.SocialAccount.create({data:$}))}async findUserBySocialAccount($,Z){if(!Z)return null;let J=await this.run(()=>this.models.SocialAccount.findFirst({where:{provider:$,providerId:Z},include:{user:!0}}));return J?G7(J.user):null}async findSocialAccounts($,Z){return await this.run(()=>this.models.SocialAccount.findMany({where:{userId:$,provider:Z},orderBy:{id:"asc"}}))}async claimSocialAccount($,Z){let{count:J}=await this.run(()=>this.models.SocialAccount.updateMany({where:{id:$.id,providerId:$.providerId},data:{providerId:Z}}));return J===1}}import{randomBytes as jL}from"crypto";function v0($,Z,J,W,Y){return $1(Z,CY($,Z),J,W,Y)}function $1($,Z,J,W,Y,j){let z=O7(Z,J,W);if(Y&&Z!==z)throw RangeError(QX($,Z,J,W,j));return z}function CY($,Z){let J=$[Z];if(J===void 0)throw TypeError(cJ(Z));return J}function L0($){return $!==null&&/object|function/.test(typeof $)}function m0($,Z=Map){let J=new Z;return(W,...Y)=>{if(J.has(W))return J.get(W);let j=$(W,...Y);return J.set(W,j),j}}function N7($){return p$({name:$},1)}function p$($,Z){return Y1((J)=>({value:J,configurable:1,writable:!Z}),$)}function AY($){return Y1((Z)=>({get:Z,configurable:1}),$)}function m6($){return{[Symbol.toStringTag]:{value:$,configurable:1}}}function AZ($,Z){let J={},W=$.length;for(let Y of Z)J[$[--W]]=Y;return J}function Y1($,Z,J){let W={};for(let Y in Z)W[Y]=$(Z[Y],Y,J);return W}function T3($,Z,J){let W={};for(let Y=0;Y<Z.length;Y++){let j=Z[Y];W[j]=$(j,Y,J)}return W}function JU($,Z,J){let W={};for(let Y=0;Y<$.length;Y++)W[Z[Y]]=J[$[Y]];return W}function p0($,Z){let J={};for(let W of $)J[W]=Z[W];return J}function _7($,Z){let J={};for(let W in Z)$.has(W)||(J[W]=Z[W]);return J}function I7($){$={...$};let Z=Object.keys($);for(let J of Z)$[J]===void 0&&delete $[J];return $}function SY($,Z){for(let J of Z)if(!(J in $))return 0;return 1}function EY($,Z,J){for(let W of $)if(Z[W]!==J[W])return 0;return 1}function bY($,Z,J){let W={...J};for(let Y=0;Y<Z;Y++)W[$[Y]]=0;return W}function q($,...Z){return(...J)=>$(...Z,...J)}function VY($){return $[0].toUpperCase()+$.substring(1)}function P3($){return $.slice().sort()}function b6($,Z){return String(Z).padStart($,"0")}function Y$($,Z){return Math.sign($-Z)}function O7($,Z,J){return Math.min(Math.max($,Z),J)}function g1($,Z){return[Math.floor($/Z),U3($,Z)]}function U3($,Z){return($%Z+Z)%Z}function X$($,Z){return[h6($,Z),x7($,Z)]}function h6($,Z){return Math.trunc($/Z)||0}function x7($,Z){return $%Z||0}function I6($){return Math.abs($%1)===0.5}function RY($,Z,J){let W=0,Y=0;for(let X=0;X<=Z;X++){let G=$[J[X]],Q=M1[X],V=s/Q,[F,B]=X$(G,V);W+=B*Q,Y+=F}let[j,z]=X$(W,s);return[Y+j,z]}function p6($,Z,J){let W={};for(let Y=Z;Y>=0;Y--){let j=M1[Y];W[J[Y]]=h6($,j),$=x7($,j)}return W}function kY($){return $===v?P4:[]}function wY($){return $===v?R3:[]}function fY($){return $===v?["year","day"]:[]}function qY($){if($!==void 0)return J0($)}function vY($){if($!==void 0)return j1($)}function C7($){if($!==void 0)return N3($)}function j1($){return mY(N3($))}function N3($){return yY(sU($))}function A7($){if($==null)throw TypeError("Cannot be null or undefined");return $}function gY($,Z){if(Z==null)throw RangeError(cJ($));return Z}function m1($){if(!L0($))throw TypeError(GX);return $}function d6($,Z,J=$){if(typeof Z!==$)throw TypeError(S3(J,Z));return Z}function yY($,Z="number"){if(!Number.isInteger($))throw RangeError(HU(Z,$));return $||0}function mY($,Z="number"){if($<=0)throw RangeError(KU(Z,$));return $}function S7($){if(typeof $=="symbol")throw TypeError(_U);return String($)}function R6($,Z){return L0($)?String($):J0($,Z)}function c6($){if(typeof $=="string")return BigInt($);if(typeof $!="bigint")throw TypeError(NU($));return $}function hY($,Z="number"){if(typeof $=="bigint")throw TypeError(PU(Z));if($=Number($),!Number.isFinite($))throw RangeError(TU(Z,$));return $}function C0($,Z){return Math.trunc(hY($,Z))||0}function pY($,Z){return yY(hY($,Z),Z)}function FY($,Z){return mY(C0($,Z),Z)}function E7($,Z){let[J,W]=X$(Z,s),Y=$+J,j=Math.sign(Y);return j&&j===-Math.sign(W)&&(Y-=j,W+=j*s),[Y,W]}function NZ($,Z,J=1){return E7($[0]+Z[0]*J,$[1]+Z[1]*J)}function _Z($,Z){return E7($[0],$[1]+Z)}function n0($,Z){return NZ(Z,$,-1)}function S0($,Z){return Y$($[0],Z[0])||Y$($[1],Z[1])}function dY($,Z,J){return S0($,Z)===-1||S0($,J)===1}function u6($,Z=1){let J=BigInt(s/Z);return[Number($/J),Number($%J)*Z]}function IZ($,Z=1){let J=s/Z,[W,Y]=X$($,J);return[W,Y*Z]}function cY($,Z=1){let[J,W]=$,Y=Math.floor(W/Z),j=s/Z;return BigInt(J)*BigInt(j)+BigInt(Y)}function o0($,Z=1,J){let[W,Y]=$,[j,z]=X$(Y,Z);return W*(s/Z)+(j+(J?z/Z:0))}function b7($,Z,J=g1){let[W,Y]=$,[j,z]=J(Y,Z);return[W*(s/Z)+j,z]}function R7($,Z){let J=$.formatToParts(Z),W={};for(let Y of J)W[Y.type]=Y.value;return W}function k7($){return v0($,"isoYear",K3,H3,1),$.isoYear===K3?v0($,"isoMonth",4,12,1):$.isoYear===H3&&v0($,"isoMonth",1,9,1),$}function j$($){return h1({...$,...W1,isoHour:12}),$}function h1($){let Z=v0($,"isoYear",K3,H3,1),J=Z===K3?1:Z===H3?-1:0;return J&&a0(A0({...$,isoDay:$.isoDay+J,isoNanosecond:$.isoNanosecond-J})),$}function a0($){if(!$||dY($,$O,eU))throw RangeError(M4);return $}function G$($){return RY($,5,Q1)[1]}function l6($){let[Z,J]=g1($,s);return[p6(J,5,Q1),Z]}function uY($){return lY($)[0]}function lY($){return b7($,J1)}function E0($){return SZ($.isoYear,$.isoMonth,$.isoDay,$.isoHour,$.isoMinute,$.isoSecond,$.isoMillisecond)}function A0($){let Z=E0($);if(Z!==void 0){let[J,W]=X$(Z,y0);return[J,W*H1+($.isoMicrosecond||0)*a$+($.isoNanosecond||0)]}}function w7($,Z){let[J,W]=l6(G$($)-Z);return a0(A0({...$,isoDay:$.isoDay+W,...J}))}function k6(...$){return SZ(...$)/TX}function SZ(...$){let[Z,J]=iY(...$),W=Z.valueOf();if(!isNaN(W))return W-J*y0}function iY($,Z=1,J=1,W=0,Y=0,j=0,z=0){let X=$===K3?1:$===H3?-1:0,G=new Date;return G.setUTCHours(W,Y,j,z),G.setUTCFullYear($,Z-1,J+X),[G,X]}function B$($,Z){let[J,W]=_Z($,Z);W<0&&(W+=s,J-=1);let[Y,j]=g1(W,H1),[z,X]=g1(j,a$);return i6(J*y0+Y,z,X)}function i6($,Z=0,J=0){let W=Math.ceil(Math.max(0,Math.abs($)-rU)/y0)*Math.sign($),Y=new Date($-W*y0);return AZ(_4,[Y.getUTCFullYear(),Y.getUTCMonth()+1,Y.getUTCDate()+W,Y.getUTCHours(),Y.getUTCMinutes(),Y.getUTCSeconds(),Y.getUTCMilliseconds(),Z,J])}function sY($){return[$.isoYear,$.isoMonth,$.isoDay]}function nY(){return v1}function f7($,Z){switch(Z){case 2:return q7($)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function oY($){return q7($)?366:365}function q7($){return $%4==0&&($%100!=0||$%400==0)}function aY($){let[Z,J]=iY($.isoYear,$.isoMonth,$.isoDay);return U3(Z.getUTCDay()-J,7)||7}function tY({isoYear:$}){return $<1?["bce",1-$]:["ce",$]}function WU($){let Z=E0($);if(Z<JO)return tY($);let J=R7(XW(xZ),Z),{era:W,eraYear:Y}=Gz(J,xZ);return[W,Y]}function s6($){return d$($),n6($,1),$}function d$($){return rY($,1),$}function UY($){return EY(eJ,$,rY($))}function rY($,Z){let{isoYear:J}=$,W=v0($,"isoMonth",1,nY(),Z);return{isoYear:J,isoMonth:W,isoDay:v0($,"isoDay",1,f7(J,W),Z)}}function n6($,Z){return AZ(Q1,[v0($,"isoHour",0,23,Z),v0($,"isoMinute",0,59,Z),v0($,"isoSecond",0,59,Z),v0($,"isoMillisecond",0,999,Z),v0($,"isoMicrosecond",0,999,Z),v0($,"isoNanosecond",0,999,Z)])}function m($){return $===void 0?0:gX(m1($))}function _3($,Z=0){$=z1($);let J=yX($),W=FO($,Z);return[gX($),W,J]}function v7($){return yX(z1($))}function eY($){return $=z1($),JW($,9,6,1)}function EZ($,Z,J,W=9,Y=0,j=4){Z=z1(Z);let z=JW(Z,W,Y),X=m7(Z),G=w3(Z,j),Q=k3(Z,W,Y,1);return z==null?z=Math.max(J,Q):Wj(z,Q),X=h7(X,Q,1),$&&(G=((V)=>V<4?(V+2)%4:V)(G)),[z,Q,X,G]}function o6($,Z=6,J){let W=m7($=p7($,y6)),Y=w3($,7),j=k3($,Z);return j=gY(y6,j),W=h7(W,j,void 0,J),[j,W,Y]}function g7($){return WW(z1($))}function $j($,Z){return y7(z1($),Z)}function y7($,Z=4){let J=Jj($);return[w3($,4),...Zj(k3($,Z),J)]}function Zj($,Z){return $!=null?[M1[$],$<4?9-3*$:-1]:[Z===void 0?1:10**(9-Z),Z]}function m7($){let Z=$[O3];return Z===void 0?1:C0(Z,O3)}function h7($,Z,J,W){let Y=W?s:M1[Z+1];if(Y){let j=M1[Z];if(Y%(($=$1(O3,$,1,Y/j-(W?0:1),1))*j))throw RangeError(S3(O3,$))}else $=$1(O3,$,1,J?1e9:1,1);return $}function Jj($){let Z=$[U7];if(Z!==void 0){if(typeof Z!="number"){if(S7(Z)==="auto")return;throw RangeError(S3(U7,Z))}Z=$1(U7,Math.floor(Z),0,9,1)}return Z}function z1($){return $===void 0?{}:m1($)}function p7($,Z){return typeof $=="string"?{[Z]:$}:m1($)}function z0($){if($!==void 0){if(L0($))return Object.assign(Object.create(null),$);throw TypeError(GX)}}function a6($,Z){return $&&Object.assign(Object.create(null),$,{overflow:YO[Z]})}function d7($,Z,J=9,W=0,Y){let j=Z[$];if(j===void 0)return Y?W:void 0;if(j=S7(j),j==="auto")return Y?W:null;let z=H7[j];if(z===void 0&&(z=aU[j]),z===void 0)throw RangeError(FX($,j,H7));return $1($,z,W,J,1,b3),z}function c$($,Z,J,W=0){let Y=J[$];if(Y===void 0)return W;let j=S7(Y),z=Z[j];if(z===void 0)throw RangeError(FX($,j,Z));return z}function Wj($,Z){if(Z>$)throw RangeError(dU)}function M0($){return{branding:x4,epochNanoseconds:$}}function P0($,Z,J){return{branding:u1,calendar:J,timeZone:Z,epochNanoseconds:$}}function X0($,Z=$.calendar){return{branding:r$,calendar:Z,...p0(wX,$)}}function G0($,Z=$.calendar){return{branding:t$,calendar:Z,...p0($W,$)}}function m$($,Z=$.calendar){return{branding:gZ,calendar:Z,...p0($W,$)}}function w6($,Z=$.calendar){return{branding:yZ,calendar:Z,...p0($W,$)}}function X1($){return{branding:I4,...p0(kX,$)}}function e($){return{branding:C4,sign:V$($),...p0(aJ,$)}}function Yj($){return uY($.epochNanoseconds)}function t6($){return b7($.epochNanoseconds,H1)[0]}function jj($){return cY($.epochNanoseconds,a$)}function zj($){return cY($.epochNanoseconds)}function Xj($){return $.epochNanoseconds}function K0($){return typeof $=="string"?$:J0($.id)}function bZ($,Z){return $===Z||K0($)===K0(Z)}function Gj($,Z,J,W,Y){let j=h$(W),[z,X]=((L,M)=>{let T=M((L=p7(L,P7))[qX]),K=VO(L);return K=gY(P7,K),[K,T]})(Y,$);if(L3(Math.max(z,j),X))return OY(W,z);if(!X)throw RangeError(H4);let[G,Q,V]=W4(Z,J,X),F=FJ(V),B=Y4(V),U=UJ(V),D=B(Q,G,W),O=U(Q,G,D,z);return L3(z,X)?OY(O,z):((L,M,T,K,N,R,C)=>{let S=V$(L),[w,x]=c7(K,rJ(T,L),T,S,N,R,C),f=u7(M,w,x);return L[p[T]]+f*S})(O,F(D),z,Q,G,F,B)}function OY($,Z){return o0(D0($),M1[Z],1)}function c7($,Z,J,W,Y,j,z){let X=p[J],G={...Z,[X]:Z[X]+W},Q=z($,Y,Z),V=z($,Y,G);return[j(Q),j(V)]}function u7($,Z,J){let W=o0(n0(Z,J));if(!W)throw RangeError(E3);return o0(n0(Z,$))/W}function Qj($,Z){let[J,W,Y]=o6(Z,5,1);return M0(e6($.epochNanoseconds,J,W,Y,1))}function Bj($,Z,J){let{epochNanoseconds:W,timeZone:Y,calendar:j}=Z,[z,X,G]=o6(J);if(z===0&&X===1)return Z;let Q=$(Y);if(z===6)W=((V,F,B,U)=>{let D=b0(B,F),[O,L]=V(D),M=B.epochNanoseconds,T=h0(F,O),K=h0(F,L);if(dY(M,T,K))throw RangeError(E3);return Kj(u7(M,T,K),U)?K:T})(Mj,Q,Z,G);else{let V=Q.getOffsetNanosecondsFor(W);W=l$(Q,Dj(B$(W,V),z,X,G),V,2,0,1)}return P0(W,Y,j)}function Vj($,Z){return X0(Dj($,...o6(Z)),$.calendar)}function Fj($,Z){let[J,W,Y]=o6(Z,5);var j;return X1((j=Y,l7($,I3(J,W),j)[0]))}function Uj($,Z){let J=$(Z.timeZone),W=b0(Z,J),[Y,j]=Mj(W),z=o0(n0(h0(J,Y),h0(J,j)),T4,1);if(z<=0)throw RangeError(E3);return z}function Oj($,Z){let{timeZone:J,calendar:W}=Z,Y=((j,z,X)=>h0(z,j(b0(X,z))))(Hj,$(J),Z);return P0(Y,J,W)}function Dj($,Z,J,W){return Lj($,I3(Z,J),W)}function Lj($,Z,J){let[W,Y]=l7($,Z,J);return h1({...i$($,Y),...W})}function l7($,Z,J){return l6(Q$(G$($),Z,J))}function f6($){return Q$($,K4,7)}function I3($,Z){return M1[$]*Z}function Mj($){let Z=Hj($);return[Z,i$(Z,1)]}function Hj($){return tU(6,$)}function YU($,Z,J){let W=Math.min(h$($),6);return kZ($4(D0($,W),Z,J),W)}function r6($,Z,J,W,Y,j,z,X,G,Q){if(W===0&&Y===1)return $;let V=L3(W,X)?j4(X)&&W<6&&J>=6?zU:jU:XU,[F,B,U]=V($,Z,J,W,Y,j,z,X,G,Q);return U&&W!==7&&(F=((D,O,L,M,T,K,N,R)=>{let C=V$(D);for(let S=M+1;S<=L;S++){if(S===7&&L!==7)continue;let w=rJ(S,D);w[p[S]]+=C;let x=o0(n0(N(R(T,K,w)),O));if(x&&Math.sign(x)!==C)break;D=w}return D})(F,B,J,Math.max(6,W),z,X,G,Q)),F}function e6($,Z,J,W,Y){if(Z===6){let j=((z)=>z[0]+z[1]/s)($);return[Q$(j,J,W),0]}return $4($,I3(Z,J),W,Y)}function $4($,Z,J,W){let[Y,j]=$;W&&j<0&&(j+=s,Y-=1);let[z,X]=g1(Q$(j,Z,J),s);return E7(Y+z,X)}function Q$($,Z,J){return Kj($/Z,J)*Z}function Kj($,Z){return DO[Z]($)}function jU($,Z,J,W,Y,j){let z=V$($),X=D0($),G=e6(X,W,Y,j),Q=n0(X,G),V=Math.sign(G[0]-X[0])===z,F=kZ(G,Math.min(J,6));return[{...$,...F},NZ(Z,Q),V]}function zU($,Z,J,W,Y,j,z,X,G,Q){let V=V$($),F=o0(D0($,5)),B=I3(W,Y),U=Q$(F,B,j),[D,O]=c7(z,{...$,...tJ},6,V,X,G,Q),L=U-o0(n0(D,O)),M=0;L&&Math.sign(L)!==V?Z=_Z(D,U):(M+=V,U=Q$(L,B,j),Z=_Z(O,U));let T=X4(U);return[{...$,...T,days:$.days+M},Z,Boolean(M)]}function XU($,Z,J,W,Y,j,z,X,G,Q){let V=V$($),F=p[W],B=rJ(W,$);W===7&&($={...$,weeks:$.weeks+Math.trunc($.days/7)});let U=h6($[F],Y)*Y;B[F]=U;let[D,O]=c7(z,B,W,Y*V,X,G,Q),L=U+u7(Z,D,O)*V*Y,M=Q$(L,Y,j),T=Math.sign(M-L)===V;return B[F]=M,[B,T?O:D,T]}function i7($,Z,J,W){let[Y,j,z,X]=((Q)=>{let V=y7(Q=z1(Q));return[Q.timeZone,...V]})(W),G=Y!==void 0;return((Q,V,F,B,U,D)=>{F=$4(F,U,B,1);let O=V.getOffsetNanosecondsFor(F);return e7(B$(F,O),D)+(Q?u$(f6(O)):"Z")})(G,Z(G?$(Y):e$),J.epochNanoseconds,j,z,X)}function s7($,Z,J){let[W,Y,j,z,X,G]=((Q)=>{Q=z1(Q);let V=WW(Q),F=Jj(Q),B=OO(Q),U=w3(Q,4),D=k3(Q,4);return[V,UO(Q),B,U,...Zj(D,F)]})(J);return((Q,V,F,B,U,D,O,L,M,T)=>{B=$4(B,M,L,1);let K=Q(F).getOffsetNanosecondsFor(B);return e7(B$(B,K),T)+u$(f6(K),O)+((N,R)=>R!==1?"["+(R===2?"!":"")+K0(N)+"]":"")(F,D)+$J(V,U)})($,Z.calendar,Z.timeZone,Z.epochNanoseconds,W,Y,j,z,X,G)}function n7($,Z){let[J,W,Y,j]=((Q)=>(Q=z1(Q),[WW(Q),...y7(Q)]))(Z);return z=$.calendar,X=J,G=j,e7(Lj($,Y,W),G)+$J(z,X);var z,X,G}function o7($,Z){return J=$.calendar,W=$,Y=g7(Z),q6(W)+$J(J,Y);var J,W,Y}function a7($,Z){return Tj($.calendar,Pj,$,g7(Z))}function t7($,Z){return Tj($.calendar,GU,$,g7(Z))}function r7($,Z){let[J,W,Y]=$j(Z);return j=Y,Nj(l7($,W,J)[0],j);var j}function Z4($,Z){let[J,W,Y]=$j(Z,3);return W>1&&($={...$,...YU($,W,J)}),((j,z)=>{let{sign:X}=j,G=X===-1?R0(j):j,{hours:Q,minutes:V}=G,[F,B]=b7(D0(G,3),J1,X$);bj(F);let U=ZJ(B,z),D=z>=0||!X||U;return(X<0?"-":"")+"P"+DY({Y:y$(G.years),M:y$(G.months),W:y$(G.weeks),D:y$(G.days)})+(Q||V||F||D?"T"+DY({H:y$(Q),M:y$(V),S:y$(F,D)+U}):"")})($,Y)}function Tj($,Z,J,W){let Y=K0($),j=W>1||W===0&&Y!==v;return W===1?Y===v?Z(J):q6(J):j?q6(J)+_j(Y,W===2):Z(J)}function DY($){let Z=[];for(let J in $){let W=$[J];W&&Z.push(W,J)}return Z.join("")}function e7($,Z){return q6($)+"T"+Nj($,Z)}function q6($){return Pj($)+"-"+Z1($.isoDay)}function Pj($){let{isoYear:Z}=$;return(Z<0||Z>9999?Ij(Z)+b6(6,Math.abs(Z)):b6(4,Z))+"-"+Z1($.isoMonth)}function GU($){return Z1($.isoMonth)+"-"+Z1($.isoDay)}function Nj($,Z){let J=[Z1($.isoHour),Z1($.isoMinute)];return Z!==-1&&J.push(Z1($.isoSecond)+((W,Y,j,z)=>ZJ(W*H1+Y*a$+j,z))($.isoMillisecond,$.isoMicrosecond,$.isoNanosecond,Z)),J.join(":")}function u$($,Z=0){if(Z===1)return"";let[J,W]=g1(Math.abs($),T4),[Y,j]=g1(W,K4),[z,X]=g1(j,J1);return Ij($)+Z1(J)+":"+Z1(Y)+(z||X?":"+Z1(z)+ZJ(X):"")}function $J($,Z){if(Z!==1){let J=K0($);if(Z>1||Z===0&&J!==v)return _j(J,Z===2)}return""}function _j($,Z){return"["+(Z?"!":"")+"u-ca="+$+"]"}function ZJ($,Z){let J=b6(9,$);return J=Z===void 0?J.replace(HO,""):J.slice(0,Z),J?"."+J:""}function Ij($){return $<0?"-":"+"}function y$($,Z){return $||Z?$.toLocaleString("fullwide",{useGrouping:0}):""}function QU($,Z){let{epochNanoseconds:J}=$,W=(Z.getOffsetNanosecondsFor?Z:Z($.timeZone)).getOffsetNanosecondsFor(J),Y=B$(J,W);return{calendar:$.calendar,...Y,offsetNanoseconds:W}}function xj($,Z){let J=b0(Z,$);return{calendar:Z.calendar,...p0(wX,J),offset:u$(J.offsetNanoseconds),timeZone:Z.timeZone}}function l$($,Z,J,W=0,Y=0,j,z){if(J!==void 0&&W===1&&(W===1||z))return w7(Z,J);let X=$.getPossibleInstantsFor(Z);if(J!==void 0&&W!==3){let G=((Q,V,F,B)=>{let U=A0(V);B&&(F=f6(F));for(let D of Q){let O=o0(n0(D,U));if(B&&(O=f6(O)),O===F)return D}})(X,Z,J,j);if(G!==void 0)return G;if(W===0)throw RangeError(vU)}return z?A0(Z):h0($,Z,Y,X)}function h0($,Z,J=0,W=$.getPossibleInstantsFor(Z)){if(W.length===1)return W[0];if(J===1)throw RangeError(gU);if(W.length)return W[J===3?1:0];let Y=A0(Z),j=((X,G)=>{let Q=X.getOffsetNanosecondsFor(_Z(G,-s));return WJ(X.getOffsetNanosecondsFor(_Z(G,s))-Q)})($,Y),z=j*(J===2?-1:1);return(W=$.getPossibleInstantsFor(B$(Y,z)))[J===2?0:W.length-1]}function JJ($){if(Math.abs($)>=s)throw RangeError(fU);return $}function WJ($){if($>s)throw RangeError(qU);return $}function YJ($,Z,J){return M0(a0(NZ(Z.epochNanoseconds,((W)=>{if(Rj(W))throw RangeError(hU);return D0(W,5)})($?R0(J):J))))}function jJ($,Z,J,W,Y,j=Object.create(null)){let z=Z(W.timeZone),X=$(W.calendar);return{...W,...BJ(z,X,W,J?R0(Y):Y,j)}}function zJ($,Z,J,W,Y=Object.create(null)){let{calendar:j}=J;return X0(VJ($(j),J,Z?R0(W):W,Y),j)}function XJ($,Z,J,W,Y){let{calendar:j}=J;return G0(J4($(j),J,Z?R0(W):W,Y),j)}function GJ($,Z,J,W,Y=Object.create(null)){let j=J.calendar,z=$(j),X=D3(z,J);Z&&(W=z4(W)),W.sign<0&&(X=z.dateAdd(X,{...T0,months:1}),X=i$(X,-1));let G=z.dateAdd(X,W,Y);return m$(D3(z,G),j)}function QJ($,Z,J){return X1(Cj(Z,$?R0(J):J)[0])}function BJ($,Z,J,W,Y){let j=D0(W,5),z=J.epochNanoseconds;if(Rj(W)){let X=b0(J,$);z=NZ(h0($,{...J4(Z,X,{...W,...tJ},Y),...p0(Q1,X)}),j)}else z=NZ(z,j),m(Y);return{epochNanoseconds:a0(z)}}function VJ($,Z,J,W){let[Y,j]=Cj(Z,J);return h1({...J4($,Z,{...J,...tJ,days:J.days+j},W),...Y})}function J4($,Z,J,W){if(J.years||J.months||J.weeks)return $.dateAdd(Z,J,W);m(W);let Y=J.days+D0(J,5)[0];return Y?j$(i$(Z,Y)):Z}function D3($,Z,J=1){return i$(Z,J-$.day(Z))}function Cj($,Z){let[J,W]=D0(Z,5),[Y,j]=l6(G$($)+W);return[Y,J+j]}function i$($,Z){return Z?{...$,...i6(E0($)+Z*y0)}:$}function W4($,Z,J){let W=$(J.calendar);return j4(J)?[J,W,Z(J.timeZone)]:[{...J,...W1},W]}function FJ($){return $?Xj:A0}function Y4($){return $?q(BJ,$):VJ}function UJ($){return $?q(VU,$):FU}function j4($){return $&&$.epochNanoseconds}function L3($,Z){return $<=6-(j4(Z)?1:0)}function OJ($,Z,J,W,Y,j,z){let X=$(z1(z).relativeTo),G=Math.max(h$(Y),h$(j));if(L3(G,X))return e(RZ(((O,L,M,T)=>{let K=NZ(D0(O),D0(L),T?-1:1);if(!Number.isFinite(K[0]))throw RangeError(M4);return{...T0,...kZ(K,M)}})(Y,j,G,W)));if(!X)throw RangeError(H4);W&&(j=R0(j));let[Q,V,F]=W4(Z,J,X),B=Y4(F),U=UJ(F),D=B(V,Q,Y);return e(U(V,Q,B(V,D,j),G))}function Aj($,Z,J,W,Y){let j=h$(W),[z,X,G,Q,V]=((C,S,w)=>{C=p7(C,y6);let x=JW(C),f=w(C[qX]),_=m7(C),k=w3(C,7),H0=k3(C);if(x===void 0&&H0===void 0)throw RangeError(pU);return H0==null&&(H0=0),x==null&&(x=Math.max(H0,S)),Wj(x,H0),_=h7(_,H0,1),[x,H0,_,k,f]})(Y,j,$),F=Math.max(j,z);if(!j4(V)&&F<=6)return e(RZ(((C,S,w,x,f)=>{let _=e6(D0(C),w,x,f);return{...T0,...kZ(_,S)}})(W,z,X,G,Q)));if(!V)throw RangeError(H4);let[B,U,D]=W4(Z,J,V),O=FJ(D),L=Y4(D),M=UJ(D),T=L(U,B,W),K=M(U,B,T,z),N=W.sign,R=V$(K);if(N&&R&&N!==R)throw RangeError(E3);return R&&(K=r6(K,O(T),z,X,G,Q,U,B,O,L)),e(K)}function Sj($){return $.sign===-1?z4($):$}function z4($){return e(R0($))}function R0($){let Z={};for(let J of p)Z[J]=-1*$[J]||0;return Z}function Ej($){return!$.sign}function V$($,Z=p){let J=0;for(let W of Z){let Y=Math.sign($[W]);if(Y){if(J&&J!==Y)throw RangeError(mU);J=Y}}return J}function RZ($){for(let Z of oU)$1(Z,$[Z],-NY,NY,1);return bj(o0(D0($),J1)),$}function bj($){if(!Number.isSafeInteger($))throw RangeError(yU)}function D0($,Z=6){return RY($,Z,p)}function kZ($,Z=6){let[J,W]=$,Y=p6(W,Z,p);if(Y[p[Z]]+=J*(s/M1[Z]),!Number.isFinite(Y[p[Z]]))throw RangeError(M4);return Y}function X4($,Z=5){return p6($,Z,p)}function Rj($){return Boolean(V$($,RX))}function h$($){let Z=9;for(;Z>0&&!$[p[Z]];Z--);return Z}function BU($,Z){return[$,Z]}function LY($){let Z=Math.floor($/S6)*S6;return[Z,Z+S6]}function kj($){let Z=F$($=R6($));if(!Z)throw RangeError(g0($));let J;if(Z.m)J=0;else{if(!Z.offset)throw RangeError(g0($));J=wZ(Z.offset)}return Z.timeZone&&HJ(Z.timeZone,1),M0(w7(s6(Z),J))}function wj($){let Z=F$(J0($));if(!Z)throw RangeError(g0($));if(Z.timeZone)return dj(Z,Z.offset?wZ(Z.offset):void 0);if(Z.m)throw RangeError(g0($));return uj(Z)}function fj($,Z){let J=F$(J0($));if(!J||!J.timeZone)throw RangeError(g0($));let{offset:W}=J,Y=W?wZ(W):void 0,[,j,z]=_3(Z);return dj(J,Y,j,z)}function wZ($){let Z=HJ($);if(Z===void 0)throw RangeError(g0($));return Z}function qj($){let Z=F$(J0($));if(!Z||Z.m)throw RangeError(g0($));return X0(cj(Z))}function G4($){let Z=F$(J0($));if(!Z||Z.m)throw RangeError(g0($));return G0(Z.p?cj(Z):uj(Z))}function vj($,Z){let J=LJ(J0(Z));if(J)return DJ(J),m$(k7(d$(J)));let W=G4(Z);return m$(D3($(W.calendar),W))}function DJ($){if($.calendar!==v)throw RangeError(y1($.calendar))}function gj($,Z){let J=MJ(J0(Z));if(J)return DJ(J),w6(d$(J));let W=G4(Z),{calendar:Y}=W,j=$(Y),[z,X,G]=j.h(W),[Q,V]=j.I(z,X),[F,B]=j.N(Q,V,G);return w6(j$(j.P(F,B,G)),Y)}function yj($){let Z,J=((W)=>{let Y=_O.exec(W);return Y?(Q4(Y[10]),sj(Y)):void 0})(J0($));if(!J){if(J=F$($),!J)throw RangeError(g0($));if(!J.p)throw RangeError(g0($));if(J.m)throw RangeError(y1("Z"));DJ(J)}if((Z=LJ($))&&UY(Z))throw RangeError(g0($));if((Z=MJ($))&&UY(Z))throw RangeError(g0($));return X1(n6(J,1))}function mj($){let Z=((J)=>{let W=CO.exec(J);return W?((Y)=>{function j(V,F,B){let U=0,D=0;if(B&&([U,G]=g1(G,M1[B])),V!==void 0){if(X)throw RangeError(y1(V));D=((O)=>{let L=parseInt(O);if(!Number.isFinite(L))throw RangeError(y1(O));return L})(V),z=1,F&&(G=KJ(F)*(M1[B]/J1),X=1)}return U+D}let z=0,X=0,G=0,Q={...AZ(p,[j(Y[2]),j(Y[3]),j(Y[4]),j(Y[5]),j(Y[6],Y[7],5),j(Y[8],Y[9],4),j(Y[10],Y[11],3)]),...p6(G,2,p)};if(!z)throw RangeError(BX(p));return TJ(Y[1])<0&&(Q=R0(Q)),Q})(W):void 0})(J0($));if(!Z)throw RangeError(g0($));return e(RZ(Z))}function hj($){let Z=F$($)||LJ($)||MJ($);return Z?Z.calendar:$}function pj($){let Z=F$($);return Z&&(Z.timeZone||Z.m&&e$||Z.offset)||$}function dj($,Z,J=0,W=0){let Y=B4($.timeZone),j=A4(Y);return P0(l$(j,s6($),Z,J,W,!j.v,$.m),Y,x3($.calendar))}function cj($){return lj(h1(s6($)))}function uj($){return lj(j$(d$($)))}function lj($){return{...$,calendar:x3($.calendar)}}function F$($){let Z=NO.exec($);return Z?((J)=>{let W=J[10],Y=(W||"").toUpperCase()==="Z";return{isoYear:ij(J),isoMonth:parseInt(J[4]),isoDay:parseInt(J[5]),...sj(J.slice(5)),...Q4(J[16]),p:Boolean(J[6]),m:Y,offset:Y?void 0:W}})(Z):void 0}function LJ($){let Z=TO.exec($);return Z?((J)=>({isoYear:ij(J),isoMonth:parseInt(J[4]),isoDay:1,...Q4(J[5])}))(Z):void 0}function MJ($){let Z=PO.exec($);return Z?((J)=>({isoYear:CZ,isoMonth:parseInt(J[1]),isoDay:parseInt(J[2]),...Q4(J[3])}))(Z):void 0}function HJ($,Z){let J=IO.exec($);return J?((W,Y)=>{let j=W[4]||W[5];if(Y&&j)throw RangeError(y1(j));return JJ((PZ(W[2])*T4+PZ(W[3])*K4+PZ(W[4])*J1+KJ(W[5]||""))*TJ(W[1]))})(J,Z):void 0}function ij($){let Z=TJ($[1]),J=parseInt($[2]||$[3]);if(Z<0&&!J)throw RangeError(y1(-0));return Z*J}function sj($){let Z=PZ($[3]);return{...l6(KJ($[4]||""))[0],isoHour:PZ($[1]),isoMinute:PZ($[2]),isoSecond:Z===60?59:Z}}function Q4($){let Z,J,W=[];if($.replace(xO,(Y,j,z)=>{let X=Boolean(j),[G,Q]=z.split("=").reverse();if(Q){if(Q==="u-ca")W.push(G),Z||(Z=X);else if(X||/[A-Z]/.test(Q))throw RangeError(y1(Y))}else{if(J)throw RangeError(y1(Y));J=G}return""}),W.length>1&&Z)throw RangeError(y1($));return{timeZone:J,calendar:W[0]||v}}function KJ($){return parseInt($.padEnd(9,"0"))}function fZ($){return new RegExp(`^${$}$`,"i")}function TJ($){return $&&$!=="+"?-1:1}function PZ($){return $===void 0?0:parseInt($)}function nj($){return B4(J0($))}function B4($){let Z=PJ($);return typeof Z=="number"?u$(Z):Z?((J)=>{if(SO.test(J))throw RangeError(wU);return J.toLowerCase().split("/").map((W,Y)=>(W.length<=3||/\d/.test(W))&&!/etc|yap/.test(W)?W.toUpperCase():W.replace(/baja|dumont|[a-z]+/g,(j,z)=>j.length<=2&&!Y||j==="in"||j==="chat"?j.toUpperCase():j.length>2||!z?VY(j).replace(/island|noronha|murdo|rivadavia|urville/,VY):j)).join("/")})($):e$}function MY($){let Z=PJ($);return typeof Z=="number"?Z:Z?Z.resolvedOptions().timeZone:e$}function PJ($){let Z=HJ($=$.toUpperCase(),1);return Z!==void 0?Z:$!==e$?AO($):void 0}function NJ($,Z){return S0($.epochNanoseconds,Z.epochNanoseconds)}function _J($,Z){return S0($.epochNanoseconds,Z.epochNanoseconds)}function oj($,Z,J,W,Y,j){let z=$(z1(j).relativeTo),X=Math.max(h$(W),h$(Y));if(EY(p,W,Y))return 0;if(L3(X,z))return S0(D0(W),D0(Y));if(!z)throw RangeError(H4);let[G,Q,V]=W4(Z,J,z),F=FJ(V),B=Y4(V);return S0(F(B(Q,G,W)),F(B(Q,G,Y)))}function IJ($,Z){return s$($,Z)||V4($,Z)}function s$($,Z){return Y$(E0($),E0(Z))}function V4($,Z){return Y$(G$($),G$(Z))}function aj($,Z){return!NJ($,Z)}function tj($,Z){return!_J($,Z)&&!!F4($.timeZone,Z.timeZone)&&bZ($.calendar,Z.calendar)}function rj($,Z){return!IJ($,Z)&&bZ($.calendar,Z.calendar)}function ej($,Z){return!s$($,Z)&&bZ($.calendar,Z.calendar)}function $z($,Z){return!s$($,Z)&&bZ($.calendar,Z.calendar)}function Zz($,Z){return!s$($,Z)&&bZ($.calendar,Z.calendar)}function Jz($,Z){return!V4($,Z)}function F4($,Z){if($===Z)return 1;let J=K0($),W=K0(Z);if(J===W)return 1;try{return MY(J)===MY(W)}catch(Y){}}function xJ($,Z,J,W){let Y=EZ($,z0(W),3,5),j=U4(Z.epochNanoseconds,J.epochNanoseconds,...Y);return e($?R0(j):j)}function CJ($,Z,J,W,Y,j){let z=D4(W.calendar,Y.calendar),X=z0(j),[G,Q,V,F]=EZ(J,X,5),B=W.epochNanoseconds,U=Y.epochNanoseconds,D=S0(U,B),O;if(D)if(G<6)O=U4(B,U,G,Q,V,F);else{let L=Z(((T,K)=>{if(!F4(T,K))throw RangeError(LX);return T})(W.timeZone,Y.timeZone)),M=$(z);O=Yz(M,L,W,Y,D,G,X),O=r6(O,U,G,Q,V,F,M,W,Xj,q(BJ,L))}else O=T0;return e(J?R0(O):O)}function AJ($,Z,J,W,Y){let j=D4(J.calendar,W.calendar),z=z0(Y),[X,G,Q,V]=EZ(Z,z,6),F=A0(J),B=A0(W),U=S0(B,F),D;if(U)if(X<=6)D=U4(F,B,X,G,Q,V);else{let O=$(j);D=jz(O,J,W,U,X,z),D=r6(D,B,X,G,Q,V,O,J,A0,VJ)}else D=T0;return e(Z?R0(D):D)}function SJ($,Z,J,W,Y){let j=D4(J.calendar,W.calendar),z=z0(Y);return Wz(Z,()=>$(j),J,W,...EZ(Z,z,6,9,6),z)}function EJ($,Z,J,W,Y){let j=D4(J.calendar,W.calendar),z=z0(Y),X=EZ(Z,z,9,9,8),G=$(j);return Wz(Z,()=>G,D3(G,J),D3(G,W),...X,z)}function Wz($,Z,J,W,Y,j,z,X,G){let Q=A0(J),V=A0(W),F;if(S0(V,Q))if(Y===6)F=U4(Q,V,Y,j,z,X);else{let B=Z();F=B.dateUntil(J,W,Y,G),j===6&&z===1||(F=r6(F,V,Y,j,z,X,B,J,A0,J4))}else F=T0;return e($?R0(F):F)}function bJ($,Z,J,W){let Y=z0(W),[j,z,X,G]=EZ($,Y,5,5),Q=Q$(RJ(Z,J),I3(z,X),G),V={...T0,...X4(Q,j)};return e($?R0(V):V)}function VU($,Z,J,W,Y,j){let z=S0(W.epochNanoseconds,J.epochNanoseconds);return z?Y<6?zz(J.epochNanoseconds,W.epochNanoseconds,Y):Yz(Z,$,J,W,z,Y,j):T0}function FU($,Z,J,W,Y){let j=A0(Z),z=A0(J),X=S0(z,j);return X?W<=6?zz(j,z,W):jz($,Z,J,X,W,Y):T0}function Yz($,Z,J,W,Y,j,z){let[X,G,Q]=((B,U,D,O)=>{function L(){return S={...i$(K,R++*-O),...T},w=h0(B,S),S0(N,w)===-O}let M=b0(U,B),T=p0(Q1,M),K=b0(D,B),N=D.epochNanoseconds,R=0,C=RJ(M,K),S,w;if(Math.sign(C)===-O&&R++,L()&&(O===-1||L()))throw RangeError(E3);let x=o0(n0(w,N));return[M,S,x]})(Z,J,W,Y);var V,F;return{...j===6?(V=X,F=G,{...T0,days:Xz(V,F)}):$.dateUntil(X,G,j,z),...X4(Q)}}function jz($,Z,J,W,Y,j){let[z,X,G]=((Q,V,F)=>{let B=V,U=RJ(Q,V);return Math.sign(U)===-F&&(B=i$(V,-F),U+=s*F),[Q,B,U]})(Z,J,W);return{...$.dateUntil(z,X,Y,j),...X4(G)}}function U4($,Z,J,W,Y,j){return{...T0,...kZ(e6(n0($,Z),W,Y,j),J)}}function zz($,Z,J){return{...T0,...kZ(n0($,Z),J)}}function Xz($,Z){return O4(E0($),E0(Z))}function O4($,Z){return Math.trunc((Z-$)/y0)}function RJ($,Z){return G$(Z)-G$($)}function D4($,Z){if(!bZ($,Z))throw RangeError(iJ);return $}function UU($){function Z(Y){return((j,z)=>({...Gz(j,z),F:j.month,day:parseInt(j.day)}))(R7(J,Y),W)}let J=XW($),W=v6($);return{id:$,O:OU(Z),B:DU(Z)}}function OU($){return m0((Z)=>{let J=E0(Z);return $(J)},WeakMap)}function DU($){let Z=$(0).year-ZO;return m0((J)=>{let W,Y=SZ(J-Z),j=[],z=[];do Y+=400*y0;while((W=$(Y)).year<=J);do Y+=(1-W.day)*y0,W.year===J&&(j.push(Y),z.push(W.F)),Y-=y0;while((W=$(Y)).year>=J);return{k:j.reverse(),C:KX(z.reverse())}})}function Gz($,Z){let J,W,Y=Qz($);if($.era){let j=SX[Z];j!==void 0&&(J=Z==="islamic"?"ah":$.era.normalize("NFD").toLowerCase().replace(/[^a-z0-9]/g,""),J==="bc"||J==="b"?J="bce":J!=="ad"&&J!=="a"||(J="ce"),W=Y,Y=Oz(W,j[J]||0))}return{era:J,eraYear:W,year:Y}}function Qz($){return parseInt($.relatedYear||$.year)}function D7($){let{year:Z,F:J,day:W}=this.O($),{C:Y}=this.B(Z);return[Z,Y[J]+1,W]}function M3($,Z=1,J=1){return this.B($).k[Z-1]+(J-1)*y0}function x6($){let Z=KY(this,$),J=KY(this,$-1),W=Z.length;if(W>J.length){let Y=Dz(this);if(Y<0)return-Y;for(let j=0;j<W;j++)if(Z[j]!==J[j])return j+1}}function C6($){return O4(M3.call(this,$),M3.call(this,$+1))}function HY($,Z){let{k:J}=this.B($),W=Z+1,Y=J;return W>J.length&&(W=1,Y=this.B($+1).k),O4(J[Z-1],Y[W-1])}function A6($){return this.B($).k.length}function KY($,Z){return Object.keys($.B(Z).C)}function Bz($){return x3(J0($))}function x3($){if(($=$.toLowerCase())!==v&&$!==N4&&v6($)!==v6(XW($).resolvedOptions().calendar))throw RangeError(kU($));return $}function v6($){return $==="islamicc"&&($="islamic"),$.split("-")[0]}function Vz($){return this.R($)[0]}function Fz($){return this.R($)[1]}function kJ($){let[Z]=this.h($);return O4(this.q(Z),E0($))+1}function Uz($){let Z=bO.exec($);if(!Z)throw RangeError(bU($));return[parseInt(Z[1]),Boolean(Z[2])]}function g6($,Z,J){return $+(Z||J&&$>=J?1:0)}function L7($,Z){return $-(Z&&$>=Z?1:0)}function Oz($,Z){return(Z+$)*(Math.sign(Z)||1)||0}function M7($){return SX[Lz($)]}function Dz($){return iU[Lz($)]}function Lz($){return v6($.id||v)}function Mz($,Z,J,W){let Y=U$(J,W,G1,[],IX);if(Y.timeZone!==void 0){let j=J.dateFromFields(Y),z=n$(Y),X=$(Y.timeZone);return{epochNanoseconds:l$(Z(X),{...j,...z},Y.offset!==void 0?wZ(Y.offset):void 0),timeZone:X}}return{...J.dateFromFields(Y),...W1}}function Hz($,Z,J,W,Y,j){let z=U$(J,Y,G1,NX,IX),X=$(z.timeZone),[G,Q,V]=_3(j),F=J.dateFromFields(z,a6(j,G)),B=n$(z,G);return P0(l$(Z(X),{...F,...B},z.offset!==void 0?wZ(z.offset):void 0,Q,V),X,W)}function Kz($,Z,J){let W=U$($,Z,G1,[],c1),Y=m(J);return X0(h1({...$.dateFromFields(W,a6(J,Y)),...n$(W,Y)}))}function wJ($,Z,J,W=[]){let Y=U$($,Z,G1,W);return $.dateFromFields(Y,J)}function fJ($,Z,J,W){let Y=U$($,Z,oJ,W);return $.yearMonthFromFields(Y,J)}function qJ($,Z,J,W,Y=[]){let j=U$($,J,G1,Y);return Z&&j.month!==void 0&&j.monthCode===void 0&&j.year===void 0&&(j.year=CZ),$.monthDayFromFields(j,W)}function Tz($,Z){let J=m(Z);return X1(n$(L1($,K7,[],1),J))}function Pz($){let Z=L1($,aJ);return e(RZ({...T0,...Z}))}function U$($,Z,J,W=[],Y=[]){return L1(Z,[...$.fields(J),...Y].sort(),W)}function L1($,Z,J,W=!J){let Y={},j,z=0;for(let X of Z){if(X===j)throw RangeError(IU(X));if(X==="constructor"||X==="__proto__")throw RangeError(uJ(X));let G=$[X];if(G!==void 0)z=1,_Y[X]&&(G=_Y[X](G,X)),Y[X]=G;else if(J){if(J.includes(X))throw TypeError(cJ(X));Y[X]=AX[X]}j=X}if(W&&!z)throw TypeError(BX(Z));return Y}function n$($,Z){return n6(fO({...AX,...$}),Z)}function Nz($,Z,J,W,Y,j){let z=z0(j),{calendar:X,timeZone:G}=J;return P0(((Q,V,F,B,U)=>{let D=C3(Q,F,B,G1,_X,PX),[O,L,M]=_3(U,2);return l$(V,{...Q.dateFromFields(D,a6(U,O)),...n$(D,O)},wZ(D.offset),L,M)})($(X),Z(G),W,Y,z),G,X)}function _z($,Z,J,W,Y){let j=z0(Y);return X0(((z,X,G,Q)=>{let V=C3(z,X,G,G1,c1),F=m(Q);return h1({...z.dateFromFields(V,a6(Q,F)),...n$(V,F)})})($(Z.calendar),J,W,j))}function Iz($,Z,J,W,Y){let j=z0(Y);return((z,X,G,Q)=>{let V=C3(z,X,G,G1);return z.dateFromFields(V,Q)})($(Z.calendar),J,W,j)}function xz($,Z,J,W,Y){let j=z0(Y);return m$(((z,X,G,Q)=>{let V=C3(z,X,G,oJ);return z.yearMonthFromFields(V,Q)})($(Z.calendar),J,W,j))}function Cz($,Z,J,W,Y){let j=z0(Y);return((z,X,G,Q)=>{let V=C3(z,X,G,G1);return z.monthDayFromFields(V,Q)})($(Z.calendar),J,W,j)}function Az($,Z,J){return X1(((W,Y,j)=>{let z=m(j);return n$({...p0(K7,W),...L1(Y,K7)},z)})($,Z,J))}function Sz($,Z){return e((J=$,W=Z,RZ({...J,...L1(W,aJ)})));var J,W}function C3($,Z,J,W,Y=[],j=[]){let z=[...$.fields(W),...Y].sort(),X=L1(Z,z,j),G=L1(J,z);return X=$.mergeFields(X,G),L1(X,z,[])}function vJ($,Z){let J=U$($,Z,CX);return $.monthDayFromFields(J)}function gJ($,Z,J){let W=U$($,Z,xX);return $.yearMonthFromFields(W,J)}function Ez($,Z,J,W,Y){Z=p0(J=$.fields(J),Z),W=L1(W,Y=$.fields(Y),[]);let j=$.mergeFields(Z,W);return j=L1(j,[...J,...Y].sort(),[]),$.dateFromFields(j)}function B7($,Z){let{era:J,eraYear:W,year:Y}=Z,j=M7($);if(J!==void 0||W!==void 0){if(J===void 0||W===void 0)throw TypeError(CU);if(!j)throw RangeError(xU);let z=j[J];if(z===void 0)throw RangeError(SU(J));let X=Oz(W,z);if(Y!==void 0&&Y!==X)throw RangeError(AU);Y=X}else if(Y===void 0)throw TypeError(EU(j));return Y}function V7($,Z,J,W){let{month:Y,monthCode:j}=Z;if(j!==void 0){let z=((X,G,Q,V)=>{let F=X.U(Q),[B,U]=Uz(G),D=g6(B,U,F);if(U){let O=Dz(X);if(O===void 0)throw RangeError(F3);if(O>0){if(D>O)throw RangeError(F3);if(F===void 0){if(V===1)throw RangeError(F3);D--}}else{if(D!==-O)throw RangeError(F3);if(F===void 0&&V===1)throw RangeError(F3)}}return D})($,j,J,W);if(Y!==void 0&&Y!==z)throw RangeError(OX);Y=z,W=1}else if(Y===void 0)throw TypeError(RU);return $1("month",Y,1,$.L(J),W)}function TY($,Z,J,W,Y){return v0(Z,"day",1,$.j(W,J),Y)}function F7($,Z,J,W){let Y=0,j=[];for(let z of J)Z[z]!==void 0?Y=1:j.push(z);if(Object.assign($,Z),Y)for(let z of W||j)delete $[z]}function bz($){return M0(a0(u6(c6($))))}function Rz($,Z,J,W,Y=v){return P0(a0(u6(c6(J))),Z(W),$(Y))}function kz($,Z,J,W,Y=0,j=0,z=0,X=0,G=0,Q=0,V=v){return X0(h1(s6(Y1(C0,AZ(_4,[Z,J,W,Y,j,z,X,G,Q])))),$(V))}function wz($,Z,J,W,Y=v){return G0(j$(d$(Y1(C0,{isoYear:Z,isoMonth:J,isoDay:W}))),$(Y))}function fz($,Z,J,W=v,Y=1){let j=C0(Z),z=C0(J),X=$(W);return m$(k7(d$({isoYear:j,isoMonth:z,isoDay:C0(Y)})),X)}function qz($,Z,J,W=v,Y=CZ){let j=C0(Z),z=C0(J),X=$(W);return w6(j$(d$({isoYear:C0(Y),isoMonth:j,isoDay:z})),X)}function vz($=0,Z=0,J=0,W=0,Y=0,j=0){return X1(n6(Y1(C0,AZ(Q1,[$,Z,J,W,Y,j])),1))}function gz($=0,Z=0,J=0,W=0,Y=0,j=0,z=0,X=0,G=0,Q=0){return e(RZ(Y1(pY,AZ(p,[$,Z,J,W,Y,j,z,X,G,Q]))))}function yJ($,Z,J=v){return P0($.epochNanoseconds,Z,J)}function yz($){return M0($.epochNanoseconds)}function mJ($,Z){return X0(b0(Z,$))}function hJ($,Z){return G0(b0(Z,$))}function mz($,Z,J){return gJ($(Z.calendar),J)}function hz($,Z,J){return vJ($(Z.calendar),J)}function pJ($,Z){return X1(b0(Z,$))}function pz($,Z,J,W){let Y=((j,z,X,G)=>{let Q=v7(G);return h0(j(z),X,Q)})($,J,Z,W);return P0(a0(Y),J,Z.calendar)}function dz($,Z,J){let W=$(Z.calendar);return m$({...Z,...gJ(W,J)})}function cz($,Z,J){return vJ($(Z.calendar),J)}function uz($,Z,J,W,Y){let j=$(Y.timeZone),z=Y.plainTime,X=z!==void 0?Z(z):W1;return P0(h0(J(j),{...W,...X}),j,W.calendar)}function lz($,Z=W1){return X0(h1({...$,...Z}))}function iz($,Z,J){return gJ($(Z.calendar),J)}function sz($,Z,J){return vJ($(Z.calendar),J)}function nz($,Z,J,W){return((Y,j,z)=>Ez(Y,j,xX,m1(z),R3))($(Z.calendar),J,W)}function oz($,Z,J,W){return((Y,j,z)=>Ez(Y,j,CX,m1(z),P4))($(Z.calendar),J,W)}function az($,Z,J,W,Y){let j=m1(Y),z=Z(j.plainDate),X=$(j.timeZone);return P0(h0(J(X),{...z,...W}),X,z.calendar)}function tz($,Z){return X0(h1({...$,...Z}))}function rz($){return M0(a0(IZ($,J1)))}function ez($){return M0(a0(IZ($,H1)))}function $X($){return M0(a0(u6(c6($),a$)))}function ZX($){return M0(a0(u6(c6($))))}function JX($,Z,J=W1){let W=Z.timeZone,Y=$(W),j={...b0(Z,Y),...J};return P0(l$(Y,j,j.offsetNanoseconds,2),W,Z.calendar)}function WX($,Z,J){let W=Z.timeZone,Y=$(W),j={...b0(Z,Y),...J},z=XX(Z.calendar,J.calendar);return P0(l$(Y,j,j.offsetNanoseconds,2),W,z)}function YX($,Z=W1){return X0({...$,...Z})}function jX($,Z){return X0({...$,...Z},XX($.calendar,Z.calendar))}function L4($,Z){return{...$,calendar:Z}}function zX($,Z){return{...$,timeZone:Z}}function XX($,Z){if($===Z)return $;let J=K0($),W=K0(Z);if(J===W||J===v)return Z;if(W===v)return $;throw RangeError(iJ)}function LU($,Z){return(J)=>J===v?$:J===N4||J===xZ?Object.assign(Object.create($),{id:J}):Object.assign(Object.create(Z),EO(J))}function o$($,Z,J){let W=new Set(J);return(Y)=>(((j,z)=>{for(let X of z)if(X in j)return 1;return 0})(Y=_7(W,Y),$)||Object.assign(Y,Z),J&&(Y.timeZone=e$,["full","long"].includes(Y.timeStyle)&&(Y.timeStyle="medium")),Y)}function p1($,Z=dJ){let[J,,,W]=$;return(Y,j=aO,...z)=>{let X=Z(W&&W(...z),Y,j,J),G=X.resolvedOptions();return[X,...MU($,G,z)]}}function dJ($,Z,J,W){if(J=W(J),$){if(J.timeZone!==void 0)throw TypeError(cU);J.timeZone=$}return new O$(Z,J)}function MU($,Z,J){let[,W,Y]=$;return J.map((j)=>(j.calendar&&((z,X,G)=>{if((G||z!==v)&&z!==X)throw RangeError(iJ)})(K0(j.calendar),Z.calendar,Y),W(j,Z)))}function qZ($){let Z=A3();return B$(Z,$.getOffsetNanosecondsFor(Z))}function A3(){return IZ(Date.now(),H1)}function d1(){return xY||(xY=new O$().resolvedOptions().timeZone)}var HU=($,Z)=>`Non-integer ${$}: ${Z}`,KU=($,Z)=>`Non-positive ${$}: ${Z}`,TU=($,Z)=>`Non-finite ${$}: ${Z}`,PU=($)=>`Cannot convert bigint to ${$}`,NU=($)=>`Invalid bigint: ${$}`,_U="Cannot convert Symbol to string",GX="Invalid object",QX=($,Z,J,W,Y)=>Y?QX($,Y[Z],Y[J],Y[W]):S3($,Z)+`; must be between ${J}-${W}`,S3=($,Z)=>`Invalid ${$}: ${Z}`,cJ=($)=>`Missing ${$}`,uJ=($)=>`Invalid field ${$}`,IU=($)=>`Duplicate field ${$}`,BX=($)=>"No valid fields: "+$.join(),VX="Invalid bag",FX=($,Z,J)=>S3($,Z)+"; must be "+Object.keys(J).join(),UX="Cannot use valueOf",lJ="Invalid calling context",xU="Forbidden era/eraYear",CU="Mismatching era/eraYear",AU="Mismatching year/eraYear",SU=($)=>`Invalid era: ${$}`,EU=($)=>"Missing year"+($?"/era/eraYear":""),bU=($)=>`Invalid monthCode: ${$}`,OX="Mismatching month/monthCode",RU="Missing month/monthCode",PY="Cannot guess year",F3="Invalid leap month",DX="Invalid protocol",E3="Invalid protocol results",iJ="Mismatching Calendars",kU=($)=>`Invalid Calendar: ${$}`,LX="Mismatching TimeZones",wU="Forbidden ICU TimeZone",fU="Out-of-bounds offset",qU="Out-of-bounds TimeZone gap",vU="Invalid TimeZone offset",gU="Ambiguous offset",M4="Out-of-bounds date",yU="Out-of-bounds duration",mU="Cannot mix duration signs",H4="Missing relativeTo",hU="Cannot use large units",pU="Required smallestUnit or largestUnit",dU="smallestUnit > largestUnit",g0=($)=>`Cannot parse: ${$}`,y1=($)=>`Invalid substring: ${$}`,MX=($)=>`Cannot format ${$}`,HX="Mismatching types for formatting",cU="Cannot specify TimeZone",KX=q(T3,($,Z)=>Z),vZ=q(T3,($,Z,J)=>J),Z1=q(b6,2),H7={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},b3=Object.keys(H7),y0=86400000,TX=1000,a$=1000,H1=1e6,J1=1e9,K4=60000000000,T4=3600000000000,s=86400000000000,M1=[1,a$,H1,J1,K4,T4,s],c1=b3.slice(0,6),K7=P3(c1),PX=["offset"],NX=["timeZone"],_X=c1.concat(PX),IX=_X.concat(NX),T7=["era","eraYear"],uU=T7.concat(["year"]),P4=["year"],sJ=["monthCode"],nJ=["month"].concat(sJ),R3=["day"],oJ=nJ.concat(P4),xX=sJ.concat(P4),G1=R3.concat(oJ),lU=R3.concat(nJ),CX=R3.concat(sJ),AX=vZ(c1,0),v="iso8601",N4="gregory",xZ="japanese",SX={[N4]:{bce:-1,ce:0},[xZ]:{bce:-1,ce:0,meiji:1867,taisho:1911,showa:1925,heisei:1988,reiwa:2018},ethioaa:{era0:0},ethiopic:{era0:0,era1:5500},coptic:{era0:-1,era1:0},roc:{beforeroc:-1,minguo:0},buddhist:{be:0},islamic:{ah:0},indian:{saka:0},persian:{ap:0}},iU={chinese:13,dangi:13,hebrew:-6},J0=q(d6,"string"),EX=q(d6,"boolean"),sU=q(d6,"number"),bX=q(d6,"function"),p=b3.map(($)=>$+"s"),aJ=P3(p),nU=p.slice(0,6),RX=p.slice(6),oU=RX.slice(1),aU=KX(p),T0=vZ(p,0),tJ=vZ(nU,0),rJ=q(bY,p),Q1=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],eJ=["isoDay","isoMonth","isoYear"],_4=Q1.concat(eJ),$W=P3(eJ),kX=P3(Q1),wX=P3(_4),W1=vZ(kX,0),tU=q(bY,_4),O$=Intl.DateTimeFormat,fX="en-GB",ZW=1e8,rU=ZW*y0,eU=[ZW,0],$O=[-ZW,0],H3=275760,K3=-271821,ZO=1970,CZ=1972,v1=12,JO=SZ(1868,9,8),WO=m0(WU,WeakMap),y6="smallestUnit",P7="unit",O3="roundingIncrement",U7="fractionalSecondDigits",qX="relativeTo",vX={constrain:0,reject:1},YO=Object.keys(vX),jO={compatible:0,reject:1,earlier:2,later:3},zO={reject:0,use:1,prefer:2,ignore:3},XO={auto:0,never:1,critical:2,always:3},GO={auto:0,never:1,critical:2},QO={auto:0,never:1},BO={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},k3=q(d7,y6),JW=q(d7,"largestUnit"),VO=q(d7,P7),gX=q(c$,"overflow",vX),yX=q(c$,"disambiguation",jO),FO=q(c$,"offset",zO),WW=q(c$,"calendarName",XO),UO=q(c$,"timeZoneName",GO),OO=q(c$,"offset",QO),w3=q(c$,"roundingMode",BO),gZ="PlainYearMonth",yZ="PlainMonthDay",t$="PlainDate",r$="PlainDateTime",I4="PlainTime",u1="ZonedDateTime",x4="Instant",C4="Duration",DO=[Math.floor,($)=>I6($)?Math.floor($):Math.round($),Math.ceil,($)=>I6($)?Math.ceil($):Math.round($),Math.trunc,($)=>I6($)?Math.trunc($)||0:Math.round($),($)=>$<0?Math.floor($):Math.ceil($),($)=>Math.sign($)*Math.round(Math.abs($))||0,($)=>I6($)?($=Math.trunc($)||0)+$%2:Math.round($)],e$="UTC",S6=5184000,LO=k6(1847),MO=k6(new Date().getUTCFullYear()+10),HO=/0+$/,b0=m0(QU,WeakMap),NY=4294967295,A4=m0(($)=>{let Z=PJ($);return typeof Z=="object"?new hX(Z):new mX(Z||0)});class mX{constructor($){this.v=$}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor($){return[w7($,this.v)]}l(){}}class hX{constructor($){this.$=((Z)=>{function J(G){let Q=O7(G,z,X),[V,F]=LY(Q),B=Y(V),U=Y(F);return B===U?B:W(j(V,F),B,U,G)}function W(G,Q,V,F){let B,U;for(;(F===void 0||(B=F<G[0]?Q:F>=G[1]?V:void 0)===void 0)&&(U=G[1]-G[0]);){let D=G[0]+Math.floor(U/2);Z(D)===V?G[1]=D:G[0]=D+1}return B}let Y=m0(Z),j=m0(BU),z=LO,X=MO;return{G(G){let Q=J(G-86400),V=J(G+86400),F=G-Q,B=G-V;if(Q===V)return[F];let U=J(F);return U===J(B)?[G-U]:Q>V?[F,B]:[]},V:J,l(G,Q){let V=O7(G,z,X),[F,B]=LY(V),U=S6*Q,D=Q<0?()=>B>z||(z=V,0):()=>F<X||(X=V,0);for(;D();){let O=Y(F),L=Y(B);if(O!==L){let M=j(F,B);W(M,O,L);let T=M[0];if((Y$(T,G)||1)===Q)return T}F+=U,B+=U}}}})(((Z)=>(J)=>{let W=R7(Z,J*TX);return k6(Qz(W),parseInt(W.month),parseInt(W.day),parseInt(W.hour),parseInt(W.minute),parseInt(W.second))-J})($))}getOffsetNanosecondsFor($){return this.$.V(uY($))*J1}getPossibleInstantsFor($){let[Z,J]=[k6((W=$).isoYear,W.isoMonth,W.isoDay,W.isoHour,W.isoMinute,W.isoSecond),W.isoMillisecond*H1+W.isoMicrosecond*a$+W.isoNanosecond];var W;return this.$.G(Z).map((Y)=>a0(_Z(IZ(Y,J1),J)))}l($,Z){let[J,W]=lY($),Y=this.$.l(J+(Z>0||W?1:0),Z);if(Y!==void 0)return IZ(Y,J1)}}var YW="([+\u2212-])",E6="(?:[.,](\\d{1,9}))?",pX=`(?:(?:${YW}(\\d{6}))|(\\d{4}))-?(\\d{2})`,jW="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+E6+")?)?",zW=YW+jW,KO=pX+"-?(\\d{2})(?:[T ]"+jW+"(Z|"+zW+")?)?",dX="\\[(!?)([^\\]]*)\\]",S4=`((?:${dX}){0,9})`,TO=fZ(pX+S4),PO=fZ("(?:--)?(\\d{2})-?(\\d{2})"+S4),NO=fZ(KO+S4),_O=fZ("T?"+jW+"(?:"+zW+")?"+S4),IO=fZ(zW),xO=new RegExp(dX,"g"),CO=fZ(`${YW}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${E6}H)?(?:(\\d+)${E6}M)?(?:(\\d+)${E6}S)?)?`),AO=m0(($)=>new O$(fX,{timeZone:$,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),SO=/^(AC|AE|AG|AR|AS|BE|BS|CA|CN|CS|CT|EA|EC|IE|IS|JS|MI|NE|NS|PL|PN|PR|PS|SS|VS)T$/,EO=m0(UU),XW=m0(($)=>new O$(fX,{calendar:$,timeZone:e$,era:"short",year:"numeric",month:"short",day:"numeric"})),bO=/^M(\d{2})(L?)$/,RO={era:R6,eraYear:C0,year:C0,month:FY,monthCode:R6,day:FY},kO=vZ(c1,C0),wO=vZ(p,pY),_Y=Object.assign({},RO,kO,wO,{offset:R6}),fO=q(JU,c1,Q1),IY={dateAdd($,Z,J){let W=m(J),Y,{years:j,months:z,weeks:X,days:G}=Z;if(G+=D0(Z,5)[0],j||z)Y=((Q,V,F,B,U)=>{let[D,O,L]=Q.h(V);if(F){let[M,T]=Q.I(D,O);D+=F,O=g6(M,T,Q.U(D)),O=$1("month",O,1,Q.L(D),U)}return B&&([D,O]=Q._(D,O,B)),L=$1("day",L,1,Q.j(D,O),U),Q.q(D,O,L)})(this,$,j,z,W);else{if(!X&&!G)return $;Y=E0($)}return Y+=(7*X+G)*y0,j$(i6(Y))},dateUntil($,Z,J){if(J<=7){let G=0,Q=Xz({...$,...W1},{...Z,...W1});return J===7&&([G,Q]=X$(Q,7)),{...T0,weeks:G,days:Q}}let W=this.h($),Y=this.h(Z),[j,z,X]=((G,Q,V,F,B,U,D)=>{let O=B-Q,L=U-V,M=D-F;if(O||L){let T=Math.sign(O||L),K=G.j(B,U),N=0;if(Math.sign(M)===-T){let R=K;[B,U]=G._(B,U,-T),O=B-Q,L=U-V,K=G.j(B,U),N=T<0?-R:K}if(M=D-Math.min(F,K)+N,O){let[R,C]=G.I(Q,V),[S,w]=G.I(B,U);if(L=S-R||Number(w)-Number(C),Math.sign(L)===-T){let x=T<0&&-G.L(B);O=(B-=T)-Q,L=U-g6(R,C,G.U(B))+(x||G.L(B))}}}return[O,L,M]})(this,...W,...Y);return J===8&&(z+=this.J(j,W[0]),j=0),{...T0,years:j,months:z,days:X}},dateFromFields($,Z){let J=m(Z),W=B7(this,$),Y=V7(this,$,W,J),j=TY(this,$,Y,W,J);return G0(j$(this.P(W,Y,j)),this.id||v)},yearMonthFromFields($,Z){let J=m(Z),W=B7(this,$),Y=V7(this,$,W,J);return m$(k7(this.P(W,Y,1)),this.id||v)},monthDayFromFields($,Z){let J=m(Z),W=!this.id,{monthCode:Y,year:j,month:z}=$,X,G,Q,V,F;if(Y!==void 0){[X,G]=Uz(Y),F=CY($,"day");let B=this.N(X,G,F);if(!B)throw RangeError(PY);if([Q,V]=B,z!==void 0&&z!==V)throw RangeError(OX);W&&(V=$1("month",V,1,v1,1),F=$1("day",F,1,f7(j!==void 0?j:Q,V),J))}else{Q=j===void 0&&W?CZ:B7(this,$),V=V7(this,$,Q,J),F=TY(this,$,V,Q,J);let B=this.U(Q);G=V===B,X=L7(V,B);let U=this.N(X,G,F);if(!U)throw RangeError(PY);[Q,V]=U}return w6(j$(this.P(Q,V,F)),this.id||v)},fields($){return M7(this)&&$.includes("year")?[...$,...T7]:$},mergeFields($,Z){let J=Object.assign(Object.create(null),$);return F7(J,Z,nJ),M7(this)&&(F7(J,Z,uU),this.id===xZ&&F7(J,Z,lU,T7)),J},inLeapYear($){let[Z]=this.h($);return this.K(Z)},monthsInYear($){let[Z]=this.h($);return this.L(Z)},daysInMonth($){let[Z,J]=this.h($);return this.j(Z,J)},daysInYear($){let[Z]=this.h($);return this.X(Z)},dayOfYear:kJ,era($){return this.ee($)[0]},eraYear($){return this.ee($)[1]},monthCode($){let[Z,J]=this.h($),[W,Y]=this.I(Z,J);return((j,z)=>"M"+Z1(j)+(z?"L":""))(W,Y)},dayOfWeek:aY,daysInWeek(){return 7}},qO={dayOfYear:kJ,h:sY,q:SZ},vO=Object.assign({},qO,{weekOfYear:Vz,yearOfWeek:Fz,R($){function Z(U){return(7-U<W?7:0)-U}function J(U){let D=oY(B+U),O=U||1,L=Z(U3(G+D*O,7));return V=(D+(L-Q)*O)/7}let W=this.id?1:4,Y=aY($),j=this.dayOfYear($),z=U3(Y-1,7),X=j-1,G=U3(z-X,7),Q=Z(G),V,F=Math.floor((X-Q)/7)+1,B=$.isoYear;return F?F>J(0)&&(F=1,B++):(F=J(-1),B--),[F,B,V]}}),gO={dayOfYear:kJ,h:D7,q:M3,weekOfYear:Vz,yearOfWeek:Fz,R(){return[]}},mZ=LU(Object.assign({},IY,vO,{h:sY,ee($){return this.id===N4?tY($):this.id===xZ?WO($):[]},I:($,Z)=>[Z,0],N($,Z){if(!Z)return[CZ,$]},K:q7,U(){},L:nY,J:($)=>$*v1,j:f7,X:oY,P:($,Z,J)=>({isoYear:$,isoMonth:Z,isoDay:J}),q:SZ,_:($,Z,J)=>($+=h6(J,v1),(Z+=x7(J,v1))<1?($--,Z+=v1):Z>v1&&($++,Z-=v1),[$,Z]),year($){return $.isoYear},month($){return $.isoMonth},day:($)=>$.isoDay}),Object.assign({},IY,gO,{h:D7,ee($){let Z=this.O($);return[Z.era,Z.eraYear]},I($,Z){let J=x6.call(this,$);return[L7(Z,J),J===Z]},N($,Z,J){let[W,Y,j]=D7.call(this,{isoYear:CZ,isoMonth:v1,isoDay:31}),z=x6.call(this,W),X=Y===z;(Y$($,L7(Y,z))||Y$(Number(Z),Number(X))||Y$(J,j))===1&&W--;for(let G=0;G<100;G++){let Q=W-G,V=x6.call(this,Q),F=g6($,Z,V);if(Z===(F===V)&&J<=HY.call(this,Q,F))return[Q,F]}},K($){let Z=C6.call(this,$);return Z>C6.call(this,$-1)&&Z>C6.call(this,$+1)},U:x6,L:A6,J($,Z){let J=Z+$,W=Math.sign($),Y=W<0?-1:0,j=0;for(let z=Z;z!==J;z+=W)j+=A6.call(this,z+Y);return j},j:HY,X:C6,P($,Z,J){return i6(M3.call(this,$,Z,J))},q:M3,_($,Z,J){if(J){if(Z+=J,!Number.isSafeInteger(Z))throw RangeError(M4);if(J<0)for(;Z<1;)Z+=A6.call(this,--$);else{let W;for(;Z>(W=A6.call(this,$));)Z-=W,$++}}return[$,Z]},year($){return this.O($).year},month($){let{year:Z,F:J}=this.O($),{C:W}=this.B(Z);return W[J]+1},day($){return this.O($).day}})),z$="numeric",hZ=["timeZoneName"],cX={month:z$,day:z$},GW={year:z$,month:z$},QW=Object.assign({},GW,{day:z$}),BW={hour:z$,minute:z$,second:z$},VW=Object.assign({},QW,BW),yO=Object.assign({},VW,{timeZoneName:"short"}),mO=Object.keys(GW),hO=Object.keys(cX),pO=Object.keys(QW),dO=Object.keys(BW),FW=["dateStyle"],cO=mO.concat(FW),uO=hO.concat(FW),UW=pO.concat(FW,["weekday"]),f3=dO.concat(["dayPeriod","timeStyle"]),OW=UW.concat(f3),lO=OW.concat(hZ),iO=hZ.concat(f3),sO=hZ.concat(UW),nO=hZ.concat(["day","weekday"],f3),oO=hZ.concat(["year","weekday"],f3),aO={},DW=[o$(OW,VW),t6],uX=[o$(lO,yO),t6,0,($,Z)=>{let J=K0($.timeZone);if(Z&&K0(Z.timeZone)!==J)throw RangeError(LX);return J}],LW=[o$(OW,VW,hZ),E0],MW=[o$(UW,QW,iO),E0],HW=[o$(f3,BW,sO),($)=>G$($)/H1],KW=[o$(cO,GW,nO),E0,1],TW=[o$(uO,cX,oO),E0,1],xY;function P1($,Z,J,W,Y){function j(...G){if(!(this instanceof j))throw TypeError(lJ);nX(this,Z(...G))}function z(G,Q){return Object.defineProperties(function(...V){return G.call(this,X(this),...V)},N7(Q))}function X(G){let Q=I0(G);if(!Q||Q.branding!==$)throw TypeError(lJ);return Q}return Object.defineProperties(j.prototype,{...AY(Y1(z,J)),...p$(Y1(z,W)),...m6("Temporal."+$)}),Object.defineProperties(j,{...p$(Y),...N7($)}),[j,(G)=>{let Q=Object.create(j.prototype);return nX(Q,G),Q},X]}function tX($){return $=$.concat("id").sort(),(Z)=>{if(!SY(Z,$))throw TypeError(DX);return Z}}function uZ($){if(I0($)||$.calendar!==void 0||$.timeZone!==void 0)throw TypeError(VX);return $}function E4($,Z){let J={};for(let W in $)J[W]=({o:Y},j)=>{let z=I0(j)||{},{branding:X}=z,G=X===t$||Z.includes(X)?z:w0(j);return Y[W](G)};return J}function _W($){let Z={};for(let J in $)Z[J]=(W)=>{let{calendar:Y}=W;return(j=Y,typeof j=="string"?mZ(j):(z=j,Object.assign(Object.create(FD),{i:z})))[J](W);var j,z};return Z}function K$(){throw TypeError(UX)}function v3({calendar:$}){return typeof $=="string"?new kW($):$}function lX($,Z){if(Z=z0(Z),L0($)){let W=I0($);if(W&&W.branding===yZ)return m(Z),W;let Y=$G($);return qJ(v4(Y||v),!Y,$,Z)}let J=gj(mZ,$);return m(Z),J}function rX($,Z,J){return W=Z.call($,k0(M0(J))),JJ(N3(W));var W}function b4($,Z=YG){let J=Object.keys(Z).sort(),W={};for(let Y of J)W[Y]=q(Z[Y],$,bX($[Y]));return W}function o($,Z){return typeof $=="string"?A4($):b4($,Z)}function B0($){return o($,NW)}function K1($){if(L0($)){let Z=I0($);if(Z)switch(Z.branding){case x4:return Z;case u1:return M0(Z.epochNanoseconds)}}return kj($)}function iX($,Z,J){let W=Z.l(K1(J).epochNanoseconds,$);return W?k0(M0(W)):null}function t($){return L0($)?(I0($)||{}).timeZone||HD($):((Z)=>B4(pj(J0(Z))))($)}function D$($,Z){if(L0($)){let J=I0($)||{};switch(J.branding){case I4:return m(Z),J;case r$:return m(Z),X1(J);case u1:return m(Z),pJ(B0,J)}return Tz($,Z)}return m(Z),yj($)}function IW($){return $===void 0?void 0:D$($)}function pZ($,Z){if(Z=z0(Z),L0($)){let W=I0($);return W&&W.branding===gZ?(m(Z),W):fJ(f4(g3($)),$,Z)}let J=vj(mZ,$);return m(Z),J}function L$($,Z){if(Z=z0(Z),L0($)){let W=I0($)||{};switch(W.branding){case r$:return m(Z),W;case t$:return m(Z),X0({...W,...W1});case u1:return m(Z),mJ(B0,W)}return Kz(q4(g3($)),$,Z)}let J=qj($);return m(Z),J}function w0($,Z){if(Z=z0(Z),L0($)){let W=I0($)||{};switch(W.branding){case t$:return m(Z),W;case r$:return m(Z),G0(W);case u1:return m(Z),hJ(B0,W)}return wJ(q4(g3($)),$,Z)}let J=G4($);return m(Z),J}function eX($,Z,J){return j1(Z.call($,Y0(G0(J,$))))}function N1($){return(Z)=>typeof Z=="string"?mZ(Z):((J,W)=>{let Y=Object.keys(W).sort(),j={};for(let z of Y)j[z]=q(W[z],J,J[z]);return j})(Z,$)}function W0($){if(L0($)){let Z=I0($);return Z&&Z.branding===C4?Z:Pz($)}return mj($)}function q3($){if($!==void 0){if(L0($)){let Z=I0($)||{};switch(Z.branding){case u1:case t$:return Z;case r$:return G0(Z)}let J=g3($);return{...Mz(t,o,q4(J),$),calendar:J}}return wj($)}}function g3($){return $G($)||v}function $G($){let{calendar:Z}=$;if(Z!==void 0)return _0(Z)}function _0($){return L0($)?(I0($)||{}).calendar||wD($):((Z)=>x3(hj(J0(Z))))($)}function dZ($,Z){if(Z=z0(Z),L0($)){let J=I0($);if(J&&J.branding===u1)return _3(Z),J;let W=g3($);return Hz(t,o,q4(W),W,$,Z)}return fj($,Z)}function sX($){return Y1((Z)=>(J)=>Z(PW(J)),$)}function PW($){return b0($,B0)}function tO(){let $=O$.prototype,Z=Object.getOwnPropertyDescriptors($),J=Object.getOwnPropertyDescriptors(O$),W=function(Y,j={}){if(!(this instanceof W))return new W(Y,j);wW.set(this,((z,X={})=>{let G=new O$(z,X),Q=G.resolvedOptions(),V=Q.locale,F=p0(Object.keys(X),Q),B=m0($D),U=(...D)=>{let O,L=D.map((M,T)=>{let K=I0(M),N=(K||{}).branding;if(T&&O&&O!==N)throw TypeError(HX);return O=N,K});return O?B(O)(V,F,...L):[G,...D]};return U.u=G,U})(Y,j))};for(let Y in Z){let j=Z[Y],z=Y.startsWith("format")&&rO(Y);typeof j.value=="function"?j.value=Y==="constructor"?W:z||eO(Y):z&&(j.get=function(){return z.bind(this)})}return J.prototype.value=Object.create($,Z),Object.defineProperties(W,J),W}function rO($){return function(...Z){let J=wW.get(this),[W,...Y]=J(...Z);return W[$](...Y)}}function eO($){return function(...Z){return wW.get(this).u[$](...Z)}}function $D($){let Z=ZD[$];if(!Z)throw TypeError(MX($));return p1(Z,m0(dJ))}var ZD={Instant:DW,PlainDateTime:LW,PlainDate:MW,PlainTime:HW,PlainYearMonth:KW,PlainMonthDay:TW},JD=p1(DW),WD=p1(uX),YD=p1(LW),jD=p1(MW),zD=p1(HW),XD=p1(KW),GD=p1(TW),xW={era:qY,eraYear:C7,year:N3,month:j1,daysInMonth:j1,daysInYear:j1,inLeapYear:EX,monthsInYear:j1},k4={monthCode:J0},CW={day:j1},ZG={dayOfWeek:j1,dayOfYear:j1,weekOfYear:vY,yearOfWeek:C7,daysInWeek:j1},JG=Object.assign({},xW,k4,CW,ZG),R4=new WeakMap,I0=R4.get.bind(R4),nX=R4.set.bind(R4),QD={...E4(xW,[gZ]),...E4(ZG,[]),...E4(k4,[gZ,yZ]),...E4(CW,[yZ])},AW=_W(JG),BD=_W({...xW,...k4}),VD=_W({...k4,...CW}),y3={calendarId:($)=>K0($.calendar)},FD=Y1(($,Z)=>function(J){let{i:W}=this;return $(W[Z](Y0(G0(J,W))))},JG),UD=T3(($)=>(Z)=>Z[$],p.concat("sign")),SW=T3(($,Z)=>(J)=>J[Q1[Z]],c1),WG={epochSeconds:Yj,epochMilliseconds:t6,epochMicroseconds:jj,epochNanoseconds:zj},m3=q(_7,new Set(["branding"])),[OD,cZ,DD]=P1(yZ,q(qz,_0),{...y3,...VD},{getISOFields:m3,getCalendar:v3,with($,Z,J){return cZ(Cz(bD,$,this,uZ(Z),J))},equals:($,Z)=>Zz($,lX(Z)),toPlainDate($,Z){return Y0(oz(h3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=GD(Z,J,$);return W.format(Y)},toString:t7,toJSON:($)=>t7($),valueOf:K$},{from:($,Z)=>cZ(lX($,Z))}),YG={getOffsetNanosecondsFor:rX,getPossibleInstantsFor($,Z,J){let W=[...Z.call($,N0(X0(J,v)))].map((j)=>MD(j).epochNanoseconds),Y=W.length;return Y>1&&(W.sort(S0),WJ(o0(n0(W[0],W[Y-1])))),W}},NW={getOffsetNanosecondsFor:rX},[LD,k0,MD]=P1(x4,bz,WG,{add:($,Z)=>k0(YJ(0,$,W0(Z))),subtract:($,Z)=>k0(YJ(1,$,W0(Z))),until:($,Z,J)=>a(xJ(0,$,K1(Z),J)),since:($,Z,J)=>a(xJ(1,$,K1(Z),J)),round:($,Z)=>k0(Qj($,Z)),equals:($,Z)=>aj($,K1(Z)),toZonedDateTime($,Z){let J=m1(Z);return Q0(yJ($,t(J.timeZone),_0(J.calendar)))},toZonedDateTimeISO:($,Z)=>Q0(yJ($,t(Z))),toLocaleString($,Z,J){let[W,Y]=JD(Z,J,$);return W.format(Y)},toString:($,Z)=>i7(t,B0,$,Z),toJSON:($)=>i7(t,B0,$),valueOf:K$},{from:($)=>k0(K1($)),fromEpochSeconds:($)=>k0(rz($)),fromEpochMilliseconds:($)=>k0(ez($)),fromEpochMicroseconds:($)=>k0($X($)),fromEpochNanoseconds:($)=>k0(ZX($)),compare:($,Z)=>NJ(K1($),K1(Z))}),[w4,DN]=P1("TimeZone",($)=>{let Z=nj($);return{branding:"TimeZone",id:Z,o:A4(Z)}},{id:($)=>$.id},{getPossibleInstantsFor:({o:$},Z)=>$.getPossibleInstantsFor(L$(Z)).map((J)=>k0(M0(J))),getOffsetNanosecondsFor:({o:$},Z)=>$.getOffsetNanosecondsFor(K1(Z).epochNanoseconds),getOffsetStringFor($,Z){let J=K1(Z).epochNanoseconds,W=b4(this,NW).getOffsetNanosecondsFor(J);return u$(W)},getPlainDateTimeFor($,Z,J=v){let W=K1(Z).epochNanoseconds,Y=b4(this,NW).getOffsetNanosecondsFor(W);return N0(X0(B$(W,Y),_0(J)))},getInstantFor($,Z,J){let W=L$(Z),Y=v7(J),j=b4(this);return k0(M0(h0(j,W,Y)))},getNextTransition:({o:$},Z)=>iX(1,$,Z),getPreviousTransition:({o:$},Z)=>iX(-1,$,Z),equals($,Z){return!!F4(this,t(Z))},toString:($)=>$.id,toJSON:($)=>$.id},{from($){let Z=t($);return typeof Z=="string"?new w4(Z):Z}}),HD=tX(Object.keys(YG)),[KD,M$]=P1(I4,vz,SW,{getISOFields:m3,with($,Z,J){return M$(Az(this,uZ(Z),J))},add:($,Z)=>M$(QJ(0,$,W0(Z))),subtract:($,Z)=>M$(QJ(1,$,W0(Z))),until:($,Z,J)=>a(bJ(0,$,D$(Z),J)),since:($,Z,J)=>a(bJ(1,$,D$(Z),J)),round:($,Z)=>M$(Fj($,Z)),equals:($,Z)=>Jz($,D$(Z)),toZonedDateTime:($,Z)=>Q0(az(t,w0,o,$,Z)),toPlainDateTime:($,Z)=>N0(tz($,w0(Z))),toLocaleString($,Z,J){let[W,Y]=zD(Z,J,$);return W.format(Y)},toString:r7,toJSON:($)=>r7($),valueOf:K$},{from:($,Z)=>M$(D$($,Z)),compare:($,Z)=>V4(D$($),D$(Z))}),[TD,H$,PD]=P1(gZ,q(fz,_0),{...y3,...BD},{getISOFields:m3,getCalendar:v3,with($,Z,J){return H$(xz(ED,$,this,uZ(Z),J))},add:($,Z,J)=>H$(GJ(oX,0,$,W0(Z),J)),subtract:($,Z,J)=>H$(GJ(oX,1,$,W0(Z),J)),until:($,Z,J)=>a(EJ(aX,0,$,pZ(Z),J)),since:($,Z,J)=>a(EJ(aX,1,$,pZ(Z),J)),equals:($,Z)=>$z($,pZ(Z)),toPlainDate($,Z){return Y0(nz(h3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=XD(Z,J,$);return W.format(Y)},toString:a7,toJSON:($)=>a7($),valueOf:K$},{from:($,Z)=>H$(pZ($,Z)),compare:($,Z)=>s$(pZ($),pZ(Z))}),[ND,N0]=P1(r$,q(kz,_0),{...y3,...AW,...SW},{getISOFields:m3,getCalendar:v3,with($,Z,J){return N0(_z(h3,$,this,uZ(Z),J))},withCalendar:($,Z)=>N0(L4($,_0(Z))),withPlainDate:($,Z)=>N0(jX($,w0(Z))),withPlainTime:($,Z)=>N0(YX($,IW(Z))),add:($,Z,J)=>N0(zJ($Z,0,$,W0(Z),J)),subtract:($,Z,J)=>N0(zJ($Z,1,$,W0(Z),J)),until:($,Z,J)=>a(AJ(T1,0,$,L$(Z),J)),since:($,Z,J)=>a(AJ(T1,1,$,L$(Z),J)),round:($,Z)=>N0(Vj($,Z)),equals:($,Z)=>rj($,L$(Z)),toZonedDateTime:($,Z,J)=>Q0(pz(o,$,t(Z),J)),toPlainDate:($)=>Y0(G0($)),toPlainTime:($)=>M$(X1($)),toPlainYearMonth($){return H$(dz(f4,$,this))},toPlainMonthDay($){return cZ(cz(v4,$,this))},toLocaleString($,Z,J){let[W,Y]=YD(Z,J,$);return W.format(Y)},toString:n7,toJSON:($)=>n7($),valueOf:K$},{from:($,Z)=>N0(L$($,Z)),compare:($,Z)=>IJ(L$($),L$(Z))}),[_D,Y0,jG]=P1(t$,q(wz,_0),{...y3,...AW},{getISOFields:m3,getCalendar:v3,with($,Z,J){return Y0(Iz(h3,$,this,uZ(Z),J))},withCalendar:($,Z)=>Y0(L4($,_0(Z))),add:($,Z,J)=>Y0(XJ($Z,0,$,W0(Z),J)),subtract:($,Z,J)=>Y0(XJ($Z,1,$,W0(Z),J)),until:($,Z,J)=>a(SJ(T1,0,$,w0(Z),J)),since:($,Z,J)=>a(SJ(T1,1,$,w0(Z),J)),equals:($,Z)=>ej($,w0(Z)),toZonedDateTime($,Z){let J=!L0(Z)||Z instanceof w4?{timeZone:Z}:Z;return Q0(uz(t,D$,o,$,J))},toPlainDateTime:($,Z)=>N0(lz($,IW(Z))),toPlainYearMonth($){return H$(iz(f4,$,this))},toPlainMonthDay($){return cZ(sz(v4,$,this))},toLocaleString($,Z,J){let[W,Y]=jD(Z,J,$);return W.format(Y)},toString:o7,toJSON:($)=>o7($),valueOf:K$},{from:($,Z)=>Y0(w0($,Z)),compare:($,Z)=>s$(w0($),w0(Z))}),EW={fields($,Z,J){return[...Z.call($,J)]}},zG=Object.assign({dateFromFields($,Z,J,W){return jG(Z.call($,Object.assign(Object.create(null),J),W))}},EW),XG=Object.assign({yearMonthFromFields($,Z,J,W){return PD(Z.call($,Object.assign(Object.create(null),J),W))}},EW),GG=Object.assign({monthDayFromFields($,Z,J,W){return DD(Z.call($,Object.assign(Object.create(null),J),W))}},EW),bW={mergeFields($,Z,J,W){return m1(Z.call($,Object.assign(Object.create(null),J),Object.assign(Object.create(null),W)))}},ID=Object.assign({},zG,bW),xD=Object.assign({},XG,bW),CD=Object.assign({},GG,bW),RW={dateAdd($,Z,J,W,Y){return jG(Z.call($,Y0(G0(J,$)),a(e(W)),Y))}},QG=Object.assign({},RW,{dateUntil($,Z,J,W,Y,j){return kD(Z.call($,Y0(G0(J,$)),Y0(G0(W,$)),Object.assign(Object.create(null),j,{largestUnit:b3[Y]})))}}),AD=Object.assign({},RW,{day:eX}),SD=Object.assign({},QG,{day:eX}),f4=N1(XG),q4=N1(zG),v4=N1(GG),ED=N1(xD),h3=N1(ID),bD=N1(CD),$Z=N1(RW),T1=N1(QG),oX=N1(AD),aX=N1(SD),[RD,a,kD]=P1(C4,gz,{...UD,blank:Ej},{with:($,Z)=>a(Sz($,Z)),negated:($)=>a(z4($)),abs:($)=>a(Sj($)),add:($,Z,J)=>a(OJ(q3,T1,o,0,$,W0(Z),J)),subtract:($,Z,J)=>a(OJ(q3,T1,o,1,$,W0(Z),J)),round:($,Z)=>a(Aj(q3,T1,o,$,Z)),total:($,Z)=>Gj(q3,T1,o,$,Z),toLocaleString($,Z,J){return Intl.DurationFormat?new Intl.DurationFormat(Z,J).format(this):Z4($)},toString:Z4,toJSON:($)=>Z4($),valueOf:K$},{from:($)=>a(W0($)),compare:($,Z,J)=>oj(q3,$Z,o,W0($),W0(Z),J)}),BG={toString:($)=>$.id,toJSON:($)=>$.id,...QD,dateAdd:({id:$,o:Z},J,W,Y)=>Y0(G0(Z.dateAdd(w0(J),W0(W),Y),$)),dateUntil:({o:$},Z,J,W)=>a(e($.dateUntil(w0(Z),w0(J),eY(W)))),dateFromFields:({id:$,o:Z},J,W)=>Y0(wJ(Z,J,W,fY($))),yearMonthFromFields:({id:$,o:Z},J,W)=>H$(fJ(Z,J,W,kY($))),monthDayFromFields:({id:$,o:Z},J,W)=>cZ(qJ(Z,0,J,W,wY($))),fields({o:$},Z){let J=new Set(G1),W=[];for(let Y of Z){if(J0(Y),!J.has(Y))throw RangeError(uJ(Y));J.delete(Y),W.push(Y)}return $.fields(W)},mergeFields:({o:$},Z,J)=>$.mergeFields(I7(A7(Z)),I7(A7(J)))},[kW]=P1("Calendar",($)=>{let Z=Bz($);return{branding:"Calendar",id:Z,o:mZ(Z)}},{id:($)=>$.id},BG,{from($){let Z=_0($);return typeof Z=="string"?new kW(Z):Z}}),wD=tX(Object.keys(BG).slice(4)),[fD,Q0]=P1(u1,q(Rz,_0,t),{...WG,...y3,...sX(AW),...sX(SW),offset:($)=>u$(PW($).offsetNanoseconds),offsetNanoseconds:($)=>PW($).offsetNanoseconds,timeZoneId:($)=>K0($.timeZone),hoursInDay:($)=>Uj(o,$)},{getISOFields:($)=>xj(B0,$),getCalendar:v3,getTimeZone:({timeZone:$})=>typeof $=="string"?new w4($):$,with($,Z,J){return Q0(Nz(h3,o,$,this,uZ(Z),J))},withCalendar:($,Z)=>Q0(L4($,_0(Z))),withTimeZone:($,Z)=>Q0(zX($,t(Z))),withPlainDate:($,Z)=>Q0(WX(o,$,w0(Z))),withPlainTime:($,Z)=>Q0(JX(o,$,IW(Z))),add:($,Z,J)=>Q0(jJ($Z,o,0,$,W0(Z),J)),subtract:($,Z,J)=>Q0(jJ($Z,o,1,$,W0(Z),J)),until:($,Z,J)=>a(e(CJ(T1,o,0,$,dZ(Z),J))),since:($,Z,J)=>a(e(CJ(T1,o,1,$,dZ(Z),J))),round:($,Z)=>Q0(Bj(o,$,Z)),startOfDay:($)=>Q0(Oj(o,$)),equals:($,Z)=>tj($,dZ(Z)),toInstant:($)=>k0(yz($)),toPlainDateTime:($)=>N0(mJ(B0,$)),toPlainDate:($)=>Y0(hJ(B0,$)),toPlainTime:($)=>M$(pJ(B0,$)),toPlainYearMonth($){return H$(mz(f4,$,this))},toPlainMonthDay($){return cZ(hz(v4,$,this))},toLocaleString($,Z,J={}){let[W,Y]=WD(Z,J,$);return W.format(Y)},toString:($,Z)=>s7(B0,$,Z),toJSON:($)=>s7(B0,$),valueOf:K$},{from:($,Z)=>Q0(dZ($,Z)),compare:($,Z)=>_J(dZ($),dZ(Z))}),qD=Object.defineProperties({},{...m6("Temporal.Now"),...p$({timeZoneId:()=>d1(),instant:()=>k0(M0(A3())),zonedDateTime:($,Z=d1())=>Q0(P0(A3(),t(Z),_0($))),zonedDateTimeISO:($=d1())=>Q0(P0(A3(),t($),v)),plainDateTime:($,Z=d1())=>N0(X0(qZ(B0(t(Z))),_0($))),plainDateTimeISO:($=d1())=>N0(X0(qZ(B0(t($))),v)),plainDate:($,Z=d1())=>Y0(G0(qZ(B0(t(Z))),_0($))),plainDateISO:($=d1())=>Y0(G0(qZ(B0(t($))),v)),plainTimeISO:($=d1())=>M$(X1(qZ(B0(t($)))))})}),lZ=Object.defineProperties({},{...m6("Temporal"),...p$({PlainYearMonth:TD,PlainMonthDay:OD,PlainDate:_D,PlainTime:KD,PlainDateTime:ND,ZonedDateTime:fD,Instant:LD,Calendar:kW,TimeZone:w4,Duration:RD,Now:qD})}),vD=tO(),wW=new WeakMap,gD=Object.defineProperties(Object.create(Intl),p$({DateTimeFormat:vD}));var g4="x-gemi-socket";var PN="gemi.v1",VG="/__gemi/socket",NN=/^[A-Za-z0-9_-]{1,32}$/,_N={Normal:1000,UnsupportedData:1003,PolicyViolation:1008,Restart:1012,TryAgainLater:1013,Revoked:4001};function AN($){return $}function FG(){return{driver:"memory",redis:{},maxEventBytes:16384,warnEventBytes:4096,path:VG,allowedOrigins:[],maxConnectionsPerProcess:1e4,maxConnectionsPerIp:100,maxConnectionsPerUser:50,maxChannelsPerSocket:50,maxInboundMessageBytes:16384,backpressureLimit:1048576,idleTimeout:120,heartbeatMs:25000,subscribeRate:{limit:300,windowMs:60000}}}import{hkdfSync as yD,randomBytes as mD}from"crypto";function hD($=process.env.SECRET){if(!$)return"gemi:bc:";return`gemi:bc:${Buffer.from(yD("sha256",$,"gemi","gemi.broadcast.prefix",4)).toString("hex")}:`}var pD="__control",fW=250,dD=1e4,cD=15000;class qW{config;prefix;controlChannel;instanceId=mD(9).toString("base64url");subscribeTimeoutMs;healthCheckMs;publisher=null;subscriber=null;ready=null;deliver=null;hooks;wanted=new Set;active=new Set;chains=new Map;connectedOnce=!1;reconnectAttempt=0;reconnectTimer=null;healthTimer=null;closed=!1;constructor($={}){this.config=$;this.prefix=$.prefix??hD(),this.controlChannel=this.prefix+pD,this.subscribeTimeoutMs=$.subscribeTimeoutMs??5000,this.healthCheckMs=$.healthCheckMs??30000}get connected(){return this.subscriber!==null&&this.ready===null}publish($,Z){return this.send(this.prefix+$,Z)}async revoke($){this.hooks?.onRevoke?.($);let Z={op:"revoke",from:this.instanceId,r:$};try{await this.send(this.controlChannel,JSON.stringify(Z))}catch(J){throw Error(`The broadcast revocation ${JSON.stringify($)} could not reach the other instances.`,{cause:J})}}async start($,Z){this.closed=!1,this.deliver=$,this.hooks=Z,this.connectSubscriber(),this.startHealthCheck();try{await this.whenReady()}catch{console.warn("[gemi] Broadcast: Redis is not reachable yet; sockets get events once it is.")}}topicAdded($){return this.wanted.add($),this.sync($,!0)}topicRemoved($){return this.wanted.delete($),this.sync($,!1)}async close(){if(this.closed=!0,this.deliver=null,this.hooks=void 0,this.reconnectTimer)clearTimeout(this.reconnectTimer);if(this.reconnectTimer=null,this.healthTimer)clearInterval(this.healthTimer);this.healthTimer=null;let $=[this.subscriber,this.publisher];this.subscriber=null,this.publisher=null,this.ready=null,this.wanted.clear(),this.active.clear(),this.chains.clear();for(let Z of $){if(!Z)continue;Z.onclose=null;try{Z.close()}catch{}}}async send($,Z){let J=this.publisherClient();try{await J.publish($,Z)}catch{if(this.closed)throw Error("The broadcast driver is closed.");this.dropPublisher(J),await this.publisherClient().publish($,Z)}}dropPublisher($){if(this.publisher!==$)return;this.publisher=null,$.onclose=null;try{$.close()}catch{}}publisherClient(){if(this.publisher)return this.publisher;let $=this.createClient("publisher");return $.onclose=()=>{if(this.publisher===$)this.publisher=null},this.publisher=$,$}createClient($){if(this.config.createClient)return this.config.createClient($);let Z=globalThis.Bun?.RedisClient;if(typeof Z!=="function")throw Error("The redis broadcast driver needs Bun's built-in Redis client. Run the app under Bun.");let J=$==="subscriber"?{...this.config.options,autoReconnect:!1}:{...this.config.options};return new Z(this.config.url,J)}connectSubscriber(){if(this.closed||this.ready)return;let $;try{$=this.createClient("subscriber")}catch(J){console.error("[gemi] Broadcast: the Redis subscriber could not be created.",J),this.scheduleReconnect();return}this.subscriber=$,this.active.clear(),$.onclose=()=>this.lost($);let Z=p3((async()=>{await $.connect(),await $.subscribe(this.controlChannel,this.onMessage);let J=[...this.wanted];if(await Promise.all(J.map((W)=>$.subscribe(this.prefix+W,this.onMessage))),this.subscriber!==$)throw Error("Replaced.");for(let W of J)this.active.add(W);return $})(),cD,"connect");this.ready=Z,Z.then(()=>{if(this.subscriber!==$)return;this.ready=null,this.reconnectAttempt=0;for(let J of this.active)if(!this.wanted.has(J))this.sync(J,!1).catch(()=>{});if(this.connectedOnce)this.hooks?.onGap?.();this.connectedOnce=!0},(J)=>{if(this.subscriber!==$||this.closed)return;console.warn(`[gemi] Broadcast: the Redis subscriber could not connect (${UG(J)}); retrying.`),this.drop($)})}lost($){if(this.subscriber!==$||this.closed)return;if(this.ready===null)console.warn("[gemi] Broadcast: the Redis subscriber connection dropped; reconnecting.");this.drop($)}drop($){if(this.subscriber!==$)return;this.subscriber=null,this.ready=null,this.active.clear(),$.onclose=null;try{$.close()}catch{}this.scheduleReconnect()}scheduleReconnect(){if(this.closed||this.reconnectTimer)return;let $=Math.min(dD,fW*2**this.reconnectAttempt);this.reconnectAttempt=Math.min(this.reconnectAttempt+1,16);let Z=Math.max(fW,Math.floor(Math.random()*$));this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connectSubscriber()},Z),this.reconnectTimer.unref?.()}startHealthCheck(){if(this.healthCheckMs<=0||this.healthTimer)return;this.healthTimer=setInterval(()=>{let $=this.subscriber;if(!$||this.ready)return;p3($.ping(),this.subscribeTimeoutMs,"ping").catch((Z)=>{if(this.subscriber!==$)return;console.warn(`[gemi] Broadcast: the Redis subscriber did not answer a ping (${UG(Z)}); reconnecting.`),this.drop($)})},this.healthCheckMs),this.healthTimer.unref?.()}async whenReady(){if(this.closed)throw Error("The broadcast driver is closed.");let $=Date.now()+this.subscribeTimeoutMs;for(;;){if(this.subscriber&&!this.ready)return this.subscriber;let Z=$-Date.now();if(Z<=0)throw Error("Redis did not answer in time.");let J=this.ready??uD(Math.min(Z,fW));await p3(J,Z,"subscribe").catch((W)=>{if(Date.now()>=$)throw W})}}sync($,Z){let W=(this.chains.get($)??Promise.resolve()).catch(()=>{}).then(()=>this.reconcile($,Z));this.chains.set($,W);let Y=()=>{if(this.chains.get($)===W)this.chains.delete($)};return W.then(Y,Y),W}async reconcile($,Z){if(!this.wanted.has($)){if(!this.active.has($)||!this.connected)return;let Y=this.subscriber;this.active.delete($);try{await p3(Y.unsubscribe(this.prefix+$),this.subscribeTimeoutMs,"unsubscribe")}catch(j){if(this.subscriber===Y)this.drop(Y);throw j}return}if(!Z)return;let W=await this.whenReady();if(!this.wanted.has($)||this.active.has($))return;try{await p3(W.subscribe(this.prefix+$,this.onMessage),this.subscribeTimeoutMs,"subscribe")}catch(Y){if(this.subscriber===W)this.drop(W);throw Y}if(this.subscriber===W)this.active.add($)}onMessage=($,Z)=>{if(Z===this.controlChannel){this.onControl($);return}if(!Z.startsWith(this.prefix))return;this.deliver?.(Z.slice(this.prefix.length),$)};onControl($){let Z;try{Z=JSON.parse($)}catch{return}if(Z?.op!=="revoke"||Z.from===this.instanceId)return;let J=Z.r;if(J&&typeof J.user==="string")this.hooks?.onRevoke?.({user:J.user});else if(J&&typeof J.topic==="string")this.hooks?.onRevoke?.({topic:J.topic})}}function p3($,Z,J){let W;return Promise.race([$,new Promise((Y,j)=>{W=setTimeout(()=>j(Error(`Redis ${J} timed out after ${Z} ms.`)),Z)})]).finally(()=>clearTimeout(W))}function uD($){return new Promise((Z)=>setTimeout(Z,$))}function UG($){return $ instanceof Error?$.message:String($)}import{createHmac as lD,hkdfSync as iD,randomBytes as OG}from"crypto";function DG($){return lD("sha256",sD()).update($).digest("base64url").slice(0,22)}var y4=null;function sD(){let $=process.env.SECRET||void 0;if(y4&&y4.secret===$)return y4.key;let Z=$?Buffer.from(iD("sha256",$,"gemi","gemi.broadcast.socket-tag",32)):OG(32);return y4={secret:$,key:Z},Z}function kN(){return OG(16).toString("base64url")}var nD=/^[A-Za-z0-9_-]{8,64}$/;function vW($){return typeof $==="string"&&nD.test($)}function LG($,Z,J,W){let Y={op:"ev",t:$,ev:Z};if(J!==void 0)Y.d=J;if(W)Y.x=W;return JSON.stringify(Y)}class HG extends Error{bytes;limit;constructor($,Z,J){super(`The broadcast "${J}" is ${$} bytes, over the limit of ${Z}. Send ids and a change hint, and let the client fetch the data over HTTP; or raise maxEventBytes in app/config/broadcast.ts.`);this.bytes=$;this.limit=Z;this.name="BroadcastPayloadTooLargeError"}}class d0{options;static token="broadcast";config;driver;warnedAboutSize=new Set;started=!1;hooks;channelRouter;constructor($={},Z={}){this.options=Z;this.config=_1(FG(),$),this.driver=tD(this.config,Z.application)}get channels(){if(this.channelRouter===void 0)this.channelRouter=this.options.channels?new this.options.channels:null;return this.channelRouter}to($,...Z){return new d3(this,m4($,Z[0]),null)}toUser($){return new d3(this,{topic:UZ($),pattern:U0},null)}toOthers($){return new KG(this,aD($))}broadcastEvent($){let Z=$.broadcastOn(),J=Array.isArray(Z)?Z:[Z],W=$.broadcastAs(),Y=$.broadcastWith(),j=J.map((z)=>this.prepare(m4(z,void 0),W,Y,null));for(let{sent:z,frame:X}of j)this.hand(z,X)}send($,Z,J,W){let{sent:Y,frame:j}=this.prepare($,Z,J,W);this.hand(Y,j)}prepare($,Z,J,W){v2(Z);let Y;try{Y=LG($.topic,Z,J,W?DG(W):null)}catch(z){throw TypeError(`The broadcast "${Z}" could not be encoded. Payloads must be JSON.`,{cause:z})}return this.checkSize(Z,Y),{sent:{topic:$.topic,...$.pattern?{pattern:$.pattern}:{},event:Z,data:JSON.parse(Y).d,...W?{except:W}:{}},frame:Y}}hand($,Z){iZ(()=>this.publish($,Z))}publish($,Z){let J=(W)=>console.error(`[gemi] The broadcast "${$.event}" on "${$.topic}" could not be published.`,W);try{let W=this.driver.publish($.topic,Z);if(W&&typeof W.catch==="function")W.catch(J)}catch(W){J(W)}}get isStarted(){return this.started}async start($,Z){if(this.started)throw Error("The broadcast driver was already started in this process.");this.started=!0,this.hooks=Z;try{await this.driver.start($,Z)}catch(J){throw this.started=!1,this.hooks=void 0,J}}topicAdded($){return this.driver.topicAdded?.($)}topicRemoved($){return this.driver.topicRemoved?.($)}async close(){this.started=!1,this.hooks=void 0,await this.driver.close()}revoke($){let Z=oD($);iZ(()=>this.sendRevocation(Z))}sendRevocation($){let Z=(J)=>console.error("[gemi] A broadcast revocation could not be sent.",J);try{if(typeof this.driver.revoke==="function"){let J=this.driver.revoke($);if(J&&typeof J.catch==="function")J.catch(Z);return}this.hooks?.onRevoke?.($)}catch(J){Z(J)}}checkSize($,Z){let J=Buffer.byteLength(Z,"utf8");if(J>this.config.maxEventBytes)throw new HG(J,this.config.maxEventBytes,$);let W=this.config.warnEventBytes;if(W!==!1&&J>W&&!this.warnedAboutSize.has($))this.warnedAboutSize.add($),console.warn(`[gemi] The broadcast "${$}" is ${J} bytes, over ${W}. Broadcasts are change hints: send ids and let the client fetch the data over HTTP. Warned once per event name.`)}}class d3{manager;target;except;constructor($,Z,J){this.manager=$;this.target=Z;this.except=J}emit($,...Z){this.manager.send(this.target,$,Z[0],this.except)}}class KG{manager;except;constructor($,Z){this.manager=$;this.except=Z}to($,...Z){return new d3(this.manager,m4($,Z[0]),this.except)}toUser($){return new d3(this.manager,{topic:UZ($),pattern:U0},this.except)}}function m4($,Z){if(q2($))return{topic:A8($.topic),...$.pattern?{pattern:$.pattern}:{}};if(Z!==void 0||$.includes(":"))return{topic:G3($,Z??{}),pattern:$};if($===U0)throw new i('"user" is not a topic: the "user" channel resolves to user.<id> per subscriber. Emit with Broadcast.toUser(user).');return{topic:A8($)}}function oD($){if($&&typeof $==="object"&&"user"in $)return{user:UZ($.user).slice(U0.length+1)};if($&&typeof $==="object"&&"channel"in $)return{topic:m4($.channel,$.params).topic};throw new i("Broadcast.revoke takes { user } or { channel }.")}function aD($){if($===null||$===void 0)return null;if(typeof $==="string")return vW($)?$:null;let J=($ instanceof Request?$.headers:("rawRequest"in $)?$.rawRequest.headers:$.headers)?.get(g4);return vW(J)?J:null}function tD($,Z){let J=$.driver;if(J===void 0||J==="memory")return new MG;if(J==="redis"){let W=Z?.config.get("redis",{})??{},Y=$.redis??{};return new qW({url:Y.url??W.url??process.env.REDIS_URL,options:Y.options??W.options,prefix:Y.prefix,subscribeTimeoutMs:Y.subscribeTimeoutMs,healthCheckMs:Y.healthCheckMs})}if(typeof J==="function"){if(!Z)throw Error("A broadcast driver factory needs the application to be called with.");return J(Z)}if(typeof J==="object"&&J!==null&&typeof J.publish==="function")return J;throw Error(`Unknown broadcast driver "${String(J)}" in app/config/broadcast.ts. Use "memory" or "redis", or pass a BroadcastDriver.`)}class gW extends Error{code;constructor($,Z=`OAuth callback failed: ${$}`){super(Z);this.name="OAuthCallbackError",this.code=$}}class rD{linkByEmail=!0;createUsers=!0;createUsersWithoutEmail=!1;clientFor($){return Promise.resolve(void 0)}async isAvailable($){return await this.clientFor($)!==null}async redirectUriFor($){return(await this.clientFor($))?.redirectUri}}import{createHash as yW,createHmac as eD,randomBytes as TG,timingSafeEqual as _G}from"crypto";var u3=600,h4="gemi_oauth",$L=`__Host-${h4}`;function sZ($,Z=h4){if(Z===h4)return $?$L:h4;return $?`__Host-${Z}`:Z}function c3($){return $.toString("base64url")}function IG($){return eD("sha256",HZ()).update(`gemi-oauth-state:${$}`).digest()}function PG($,Z){let J=yW("sha256").update($).digest(),W=yW("sha256").update(Z).digest();return _G(J,W)&&$.length===Z.length}function p4($,Z=Date.now(),J={}){let W=c3(TG(32)),Y=c3(TG(32)),j=ZL(Y),z={provider:$,state:W,codeVerifier:Y,expiresAt:Z+u3*1000,...J.subject!==void 0?{subject:J.subject}:{},...J.returnTo!==void 0?{returnTo:J.returnTo}:{},...J.redirectUri!==void 0?{redirectUri:J.redirectUri}:{}};return{state:W,codeVerifier:Y,codeChallenge:j,cookieValue:JL(z)}}function ZL($){return c3(yW("sha256").update($).digest())}function JL($){let Z=c3(Buffer.from(JSON.stringify($)));return`${Z}.${c3(IG(Z))}`}function WL($){if(typeof $!=="string"||$==="")return null;let Z=$.indexOf(".");if(Z<=0||Z!==$.lastIndexOf("."))return null;let J=$.slice(0,Z),W=Buffer.from($.slice(Z+1),"base64url"),Y=IG(J);if(W.length!==Y.length||!_G(W,Y))return null;try{let j=JSON.parse(Buffer.from(J,"base64url").toString("utf8"));if(typeof j?.provider!=="string"||typeof j?.state!=="string"||typeof j?.codeVerifier!=="string"||typeof j?.expiresAt!=="number"||j.subject!==void 0&&typeof j.subject!=="string"||j.returnTo!==void 0&&typeof j.returnTo!=="string"||j.redirectUri!==void 0&&typeof j.redirectUri!=="string")return null;return j}catch{return null}}var T$=new Map,NG=1e4;function YL($,Z,J){if(T$.size>=NG){for(let[W,Y]of T$)if(Y<=J)T$.delete(W);while(T$.size>=NG){let W=T$.keys().next().value;if(W===void 0)break;T$.delete(W)}}T$.set($,Z)}function d4($){let Z=$.now??Date.now();if(!$.cookieValue||!$.returnedState)return{ok:!1,reason:"missing_state"};let J=WL($.cookieValue);if(!J)return{ok:!1,reason:"invalid_state"};let W=PG(J.state,$.returnedState),Y=PG(J.provider,$.provider);if(!W||!Y)return{ok:!1,reason:"invalid_state"};if(J.expiresAt<=Z)return{ok:!1,reason:"expired_state"};if(T$.has(J.state))return{ok:!1,reason:"invalid_state"};return YL(J.state,J.expiresAt,Z),{ok:!0,payload:J}}var mW=new WeakMap;function zL($){let Z=mW.get($);if(!Z)Z=$(jL(32).toString("hex")),mW.set($,Z),Z.catch(()=>mW.delete($));return Z}async function c4($,Z,J){if(typeof J==="string"&&J!=="")return await $.verifyPassword(Z,J);try{await $.verifyPassword(Z,await zL($.hashPassword))}catch{}return!1}async function ZZ($,Z){let J=Z.user??Z.session?.user;if(!J||!$.onAuthenticated)return;let{password:W,...Y}=J;await $.onAuthenticated({...Z,user:Y})}class pW extends Error{}function hW($){return typeof $==="string"&&$!==""?$:null}function xG($){return v$($)}var XL=256;function CG($){return typeof $==="string"&&$!==""&&$.length<=XL?$:null}function AG($){let{password:Z,code:J,...W}=$;return W}var l4="intended_url";function bG($){if($.cookies.get(l4))$.ctx().setCookie(l4,"",{maxAge:-1})}function SG($){let Z=$.cookies.get(l4);if(!Z)return null;bG($);try{return O1(decodeURIComponent(Z),"")||null}catch{return null}}class dW extends A{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class RG extends A{schema={email:{required:"Email is required",email:"Invalid email"}}}class kG extends A{schema={password:{required:"Password is required",password:"Invalid password"}}}function u4(){throw new q0("Not found",{status:404})}async function l1($,Z){if(!await w1(H(b).config[$],Z))u4()}async function l3($,Z,J,W){let{config:Y}=H(b),j={signIn:"sign-in",signUp:"sign-up",forgot:"forgot",reset:"reset"}[$];await g$(j,Z,J,Y.passwordLimits?.[$]??{},Y.rateLimitKey,W)}async function EG($,Z,J){let{config:W}=H(b);await l3("signIn",v$($),J,async(Y)=>{if(Y==="perEmail"&&typeof Z==="string")await c4(W,Z,null)})}async function nZ($){return await w1(H(b).config.verifyEmail,$)}class $0 extends B3{async me(){let $=await f0.user();if(!$)throw new i8;return $}async verifyEmail($=new A){await l1("password",$);let Z=await $.input(),{userProvider:J}=H(b),W=hW(Z.get("token"));if(!W)return{email:null};let Y=await J.findUserByVerificationToken(W);if(!Y)return{email:null};return await J.verifyUser(Y.email),{email:Y.email}}async signInWithMagicLink($=new A){let Z=H(b),{userProvider:J}=Z;if(!await w1(Z.config.magicLink,$)&&!await w1(Z.config.emailCode.enabled,$))u4();let W=hW($.search.get("token")),Y=null;try{Y=v$(decodeURIComponent($.search.get("email")??""))}catch{}if(await g$("link",null,$,{perIp:Z.config.emailCode.verifyLimit.perIp},Z.config.rateLimitKey),!Y||!W||!await Z.verifyMagicLinkToken(Y,W))return{error:"Invalid token"};await J.verifyUser(Y);let j=await Z.createOrUpdateSession({email:Y});return $.ctx().setCookie("access_token",j.token,H(b).accessTokenCookieOptions($,j.expiresAt)),await Z.config.onSignIn(j,$.search.toJSON(),{req:$}),await ZZ(Z.config,{session:j,isNewUser:!1,method:"magic-link",req:$}),{session:j}}async verifyPinRequest($){await l1("magicLink",$);let Z=H(b),J=await $.input(),{email:W,pin:Y}=J.toJSON(),j=v$(W),z=CG(Y);if(await g$("verify",j,$,Z.config.emailCode.verifyLimit,Z.config.rateLimitKey),!j||!z)throw new u({pin:["Invalid pin"]});let X=await Z.verifyOneTimeCode(j,z);if(X.status==="too_many_attempts")throw new u({pin:["Too many attempts"]});if(X.status!=="ok")throw new u({pin:["Invalid pin"]});return await Z.userProvider.verifyUser(j),j}async signInWithPinV2($=new A){let Z=H(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSessionV2({email:J});return $.ctx().setCookie("access_token",W.token,H(b).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON(),{req:$}),await ZZ(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),W}async signInWithPin($=new A){let Z=H(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSession({email:J});return $.ctx().setCookie("access_token",W.token,H(b).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON(),{req:$}),await ZZ(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),{session:W}}async signInV2($=new dW){await l1("password",$);let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b);await EG(J,W,$);let z=await j.userProvider.findUserByEmailAddress(Y,await nZ($)),X=typeof W==="string"&&await c4(j.config,W,z?.password);if(!z||!X)throw new u({invalid_credentials:["Invalid credentials"]});let G=await j.createOrUpdateSessionV2({email:z.email,id:z.id});$.ctx().setCookie("access_token",G.token,H(b).accessTokenCookieOptions($,G.expiresAt)),await j.config.onSignIn(z,$.search.toJSON(),{req:$}),await ZZ(j.config,{session:G,user:z,isNewUser:!1,method:"password",req:$});let{password:Q,...V}=z;return V}async signIn($=new dW){await l1("password",$);let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b);await EG(J,W,$);let z=await j.userProvider.findUserByEmailAddress(Y,await nZ($)),X=typeof W==="string"&&await c4(j.config,W,z?.password);if(!z||!X)throw new u({invalid_credentials:["Invalid credentials"]});let G=await j.createOrUpdateSession({email:z.email,id:z.id});$.ctx().setCookie("access_token",G.token,H(b).accessTokenCookieOptions($,G.expiresAt)),await j.config.onSignIn(z,$.search.toJSON(),{req:$}),await ZZ(j.config,{session:G,user:z,isNewUser:!1,method:"password",req:$});let{password:Q,...V}=z;return V}async signUp(){let $=H(b),{userProvider:Z,config:J}=$,W=new J.signUpRequest;await l1("password",W);let Y=await W.input(),{email:j,password:z,name:X,invitationId:G}=Y.toJSON(),Q={method:"password",input:AG(Y.toJSON()),req:W},V=xG(j);if(await l3("signUp",V,W),!V)throw new u({email:["Invalid email"]});if(z!=null&&typeof z!=="string")throw new u({password:["Invalid password"]});if(G!=null&&typeof G!=="string")throw new u({invitationId:["Invalid invitation"]});if(await Z.findUserByEmailAddress(V,!1))throw new u({email:["Email address already exists"]});let B=await J.hashPassword(z),U=H(c).detectLocale(W),D;if(G)D=await Z.findInvitation(G,V);let O,L="";if(D)O=await Z.transaction(async()=>{await Z.deleteInvitationById(G);let M=await Z.createUser({email:V,name:X,password:B,emailVerifiedAt:new Date,locale:U});return await Z.createAccount({organizationId:D.organizationId,userId:M.id,organizationRole:D.role}),await J.onUserCreated(M,Q),M});else{if(L=await J.generateEmailVerificationToken(V),typeof J.verifyEmail==="function"&&!await nZ(W))L="";O=await Z.transaction(async()=>{let M=await Z.createUser({email:V,name:X,password:B,verificationToken:L,locale:U});return await J.onUserCreated(M,Q),M})}return await J.onSignUp(O,L,W.search.toJSON(),{req:W}),O}async signOut($=new A){let Z=E$($),J=H(b),{config:W}=J,Y=await J.revokeSession(Z,$.headers.get("User-Agent"));if($.ctx().setCookie("access_token","",H(b).accessTokenCookieOptions($,new Date(0))),H(b).cookieDomain($))$.ctx().setCookie("access_token","",{...H(b).accessTokenCookieOptions($,new Date(0)),domain:void 0});if(Y?.user)GL(Y.user),Y.user.extension=await W.extendSession(Y.user),await W.onSignOut(Y.user,{req:$});return{}}async forgotPassword($=new RG){await l1("password",$);let Z=await $.input(),J=xG(Z.get("email"));if(await l3("forgot",J,$),!J)return{};let{userProvider:W,config:Y}=H(b),j=await W.findUserByEmailAddress(J,await nZ($));if(!j)return{};let z=await Y.generateForgotPasswordToken(j);return await W.createPasswordResetToken({user:j,token:z}),await Y.onForgotPassword(j,z,{req:$}),{}}async resetPassword($=new kG){await l1("password",$);let{userProvider:Z,config:J}=H(b),W=await $.input(),{password:Y,token:j}=W.toJSON(),z=hW(j);await l3("reset",null,$);let X=z?await Z.findPasswordResetToken({token:z}):null;if(!X)throw new u({token:["Invalid token"]});if(lZ.Instant.from(X.createdAt.toISOString()).add({hours:24}).until(lZ.Now.instant()).sign>=0)throw new u({token:["Token expired"]});await Z.deletePasswordResetToken({token:z});let Q=await Z.findUserByEmailAddress(X.user.email,await nZ($));if(!Q)throw new u({email:["User not found"]});let V=await J.hashPassword(Y);return await Z.updateUserPassword({id:Q.id,password:V}),await Z.deleteAllUserSessions(Q.id),await J.onResetPassword(Q,{req:$}),{}}async changePassword($=new A){await l1("password",$);let{userProvider:Z,config:J}=H(b),W=await f0.user(),Y=await $.input(),{oldPassword:j,newPassword:z}=Y.toJSON();if(await l3("signIn",v$(W?.email),$),typeof z!=="string")throw new u({newPassword:["Invalid password"]});let X=await Z.findUserByEmailAddress(W.email,await nZ($));if(!(typeof j==="string"&&await c4(J,j,X?.password)))throw new u({oldPassword:["Incorrect password"]});let Q=await J.hashPassword(z);return await Z.updateUserPassword({id:W.id,password:Q}),await Z.deleteAllUserSessions(W.id),{}}async oauthRedirect($=new A){let{provider:Z}=$.params,J=H(b).config.oauthProviders,W=Object.hasOwn(J,Z),Y=await TZ(J,Z,$);if(!Y){if(W)throw new q0("Not found",{status:404});throw Error(`Invalid provider: ${Z}`)}let j=OZ($.rawRequest),z=O1($.search.get(l0),"");if(z)$.ctx().setCookie(l4,encodeURIComponent(z),{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:600});else bG($);let X=typeof Y.redirectUriFor==="function"?await Y.redirectUriFor($):void 0,{state:G,codeChallenge:Q,cookieValue:V}=p4(Z,Date.now(),X!==void 0?{redirectUri:X}:{});return $.ctx().setCookie(sZ(j),V,{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:u3}),{destination:await Y.getRedirectUrl($,{state:G,codeChallenge:Q,codeChallengeMethod:"S256"})}}async oauthCallback($=new A){let{provider:Z}=$.params,J=H(b),{userProvider:W,config:Y}=J,j=Object.hasOwn(Y.oauthProviders,Z),z=await TZ(Y.oauthProviders,Z,$);if(j&&!z)throw new q0("Not found",{status:404});let X=OZ($.rawRequest),G=sZ(X),Q=$.cookies.get(G);if(Q!==void 0&&Q!==null)$.ctx().setCookie(G,"",{httpOnly:!0,sameSite:"Lax",secure:X,maxAge:-1});if(!z)return this.oauthFailure($,"unknown_provider");let V=$.search.get("error");if(V)return this.oauthFailure($,/^[a-z0-9_]{1,64}$/.test(V)?V:"provider_error");let F=d4({provider:Z,cookieValue:Q,returnedState:$.search.get("state")});if("reason"in F)return console.error(`Authentication error: OAuth callback refused (${F.reason})`),this.oauthFailure($,F.reason);if(F.payload.redirectUri!==void 0&&typeof z.redirectUriFor==="function"){let x=await z.redirectUriFor($);if(x!==void 0&&x!==F.payload.redirectUri)return console.error("Authentication error: OAuth callback refused (redirect_mismatch)"),this.oauthFailure($,"redirect_mismatch")}if(!$.search.get("code"))return this.oauthFailure($,"missing_code");let B;try{B=await z.onCallback($,{state:F.payload.state,codeVerifier:F.payload.codeVerifier})}catch(x){if(x instanceof gW)return this.oauthFailure($,x.code);return console.error("Authentication error: OAuth provider callback failed",x),this.oauthFailure($,"provider_error")}let{name:U,username:D,providerId:O,emailVerified:L}=B??{},M=typeof B?.email==="string"?B.email:void 0,T=M?P6(M):null,K=O?await W.findUserBySocialAccount(Z,O):null,N="signin",R=!K&&!T&&!M&&!!O&&z.createUsersWithoutEmail===!0;if(!K&&R){if(z.createUsers===!1)return console.error(`Authentication error: a ${Z} sign-in is not linked to a user, and ${Z} does not create users`),this.oauthFailure($,"signup_disabled");try{K=await this.createOAuthUserWithoutEmail({provider:Z,providerId:O,name:U,username:D,locale:H(c).detectLocale($),req:$}),N="signup"}catch(x){let f=await W.findUserBySocialAccount(Z,O);if(!f)throw x;K=f}}if(!K){if(!T)return console.error("Authentication error: No usable email returned from OAuth provider callback"),this.oauthFailure($,M?"invalid_email":O?"missing_email":"no_identity");if(L===!1)return console.error("Authentication error: OAuth provider returned an unverified email"),this.oauthFailure($,"email_not_verified");let x=H(c).detectLocale($);try{let f=await this.linkOAuthAccount({provider:Z,providerId:O,email:T,rawEmail:M,name:U,username:D,locale:x,req:$,linkExisting:z.linkByEmail!==!1,createUser:z.createUsers!==!1});if(f==="account_exists")return console.error(`Authentication error: a ${Z} sign-in matched an existing user by email, and ${Z} does not link by email`),this.oauthFailure($,"account_exists");if(f==="signup_disabled")return console.error(`Authentication error: a ${Z} sign-in is not linked to a user, and ${Z} does not create users`),this.oauthFailure($,"signup_disabled");if(f)K=f.user,N=f.action}catch(f){let _=O?await W.findUserBySocialAccount(Z,O):null;if(!_)throw f;K=_}if(!K)return this.oauthFailure($,"account_conflict")}let C=await J.createOrUpdateSessionV2({email:K.email,id:K.id});if($.ctx().setCookie("access_token",C.token,H(b).accessTokenCookieOptions($,C.expiresAt)),N==="signup")await Y.onSignUp(K,"",$.search.toJSON(),{req:$});else await Y.onSignIn(K,$.search.toJSON(),{req:$});await ZZ(J.config,{session:C,user:K,isNewUser:N==="signup",method:"oauth",req:$});let S=SG($)??Y.redirectPath,w=Y.oauthCompleteProfilePath?O1(Y.oauthCompleteProfilePath,""):"";if(w&&!K.email){let x=new URL(w,"http://gemi.invalid");x.searchParams.set(l0,S),S=`${x.pathname}${x.search}${x.hash}`}return{session:C,redirectTo:S}}async createOAuthUserWithoutEmail($){let{userProvider:Z,config:J}=H(b);return await Z.transaction(async()=>{let W=await Z.createUser({email:null,name:$.name??$.username??"",locale:$.locale});return await Z.createSocialAccount({provider:$.provider,providerId:$.providerId,userId:W.id,username:$.username,expiresAt:new Date,accessToken:"",refreshToken:""}),await J.onUserCreated(W,{method:"oauth",input:{},req:$.req}),W})}oauthFailure($,Z){let J=SG($),W=H(b).config.oauthFailurePath;if(W){let Y=O1(W,"");if(Y){let j=new URL(Y,"http://gemi.invalid");if(j.searchParams.set("error",Z),J)j.searchParams.set(l0,J);b1.external(`${j.pathname}${j.search}${j.hash}`)}else console.error(`auth.oauthFailurePath must be a same-origin path, got ${JSON.stringify(W)}`)}return{session:null,error:Z,redirectTo:J}}async linkOAuthAccount($){let{provider:Z,providerId:J,email:W,rawEmail:Y,name:j,username:z,locale:X}=$,{userProvider:G,config:Q}=H(b),V=(D)=>({provider:Z,userId:D,email:W,username:z,providerId:J,expiresAt:new Date,accessToken:"",refreshToken:""}),F=await G.findUserByEmailAddress(W,!1),B=Y?.trim();if(!F&&B&&B!==W)F=await G.findUserByEmailAddress(B,!1);if(F){if($.linkExisting===!1)return"account_exists";if(!J)return{user:F,action:"signin"};let D=await G.findSocialAccounts(F.id,Z);if(D.some((L)=>L.providerId===J))return{user:F,action:"signin"};if(D.some((L)=>L.providerId))return console.error(`Authentication error: user ${F.id} is already linked to a different ${Z} account`),null;let O=D[0];if(O){if(!await G.claimSocialAccount(O,J))throw Error(`${Z} account link changed concurrently`)}else await G.createSocialAccount(V(F.id));return{user:F,action:"signin"}}if($.createUser===!1)return"signup_disabled";return{user:await G.transaction(async()=>{let D=await G.createUser({email:W,name:j,locale:X,emailVerifiedAt:new Date});if(J)await G.createSocialAccount(V(D.id));return await Q.onUserCreated(D,{method:"oauth",input:{},req:$.req}),D}),action:"signup"}}async createMagicLinkToken($=new A){await l1("magicLink",$);let Z=await $.input(),J=v$(Z.get("email")),W=H(b),{uniformMagicLinkResponse:Y,requestLimit:j}=W.config.emailCode;if(await g$("request",J,$,j,W.config.rateLimitKey),!J)return{email:null};let{user:z,pin:X,token:G}=await W.createMagicLinkToken(J);if(z)return await W.config.onMagicLinkCreated(z,{email:J,pin:X,token:G,req:$}),{email:J};return{email:Y?J:null}}async requestEmailCode($=new A){let Z=H(b),J=Z.config.emailCode;if(!await w1(J.enabled,$))u4();let W=await $.input(),Y=P6(W.get("email"));if(await g$("request",Y,$,J.requestLimit,Z.config.rateLimitKey),!Y)throw new u({email:["Invalid email"]});let j=await Z.userProvider.findUserByEmailAddress(Y,!1);if(j||J.createUser){let{pin:z,token:X}=await Z.issueOneTimeCode(Y,J.length);await J.send({email:Y,code:z,token:X,isNewUser:!j,req:$})}return{ok:!0}}async verifyEmailCode($=new A){let Z=H(b),{userProvider:J,config:W}=Z;if(!await w1(W.emailCode.enabled,$))u4();let Y=await $.input(),{email:j,code:z,name:X}=Y.toJSON(),G=P6(j),Q=CG(z);if(await g$("verify",G,$,W.emailCode.verifyLimit,W.rateLimitKey),!G||!Q)throw new u({code:["invalid_code"]});let V=null;if(!d9(Q,W.emailCode.fixedCode)){let O=await Z.verifyOneTimeCode(G,Q,{claim:!1});if(O.status==="too_many_attempts")throw new u({code:["too_many_attempts"]});if(O.status!=="ok")throw new u({code:["invalid_code"]});V=O.row}let F=async()=>V?await Z.claimOneTimeCode(G,V.id):!0,B=await J.findUserByEmailAddress(G,!1),U=!1;if(B){if(!await F())throw new u({code:["invalid_code"]});await J.verifyUser(G)}else if(W.emailCode.createUser){let O=H(c).detectLocale($);try{B=await J.transaction(async()=>{if(!await F())throw new pW;let L=await J.createUser({email:G,name:typeof X==="string"?X.trim():"",emailVerifiedAt:new Date,locale:O});return await W.onUserCreated(L,{method:"email-code",input:AG(Y.toJSON()),req:$}),L}),U=!0}catch(L){if(L instanceof pW)throw new u({code:["invalid_code"]});throw L}}else throw await F(),new u({code:["invalid_code"]});let D=await Z.createOrUpdateSessionV2({email:G,id:B.id});return $.ctx().setCookie("access_token",D.token,H(b).accessTokenCookieOptions($,D.expiresAt)),await W.onSignIn(D,$.search.toJSON(),{req:$}),await ZZ(Z.config,{session:D,isNewUser:U,method:"email-code",req:$}),{session:D,isNewUser:U}}}function GL($){try{let Z=$?.id;if(Z===void 0||Z===null)return;let J=H();if(typeof J?.bound!=="function"||!J.bound(d0))return;J.make(d0).revoke({user:{id:Z}})}catch(Z){console.error("[gemi] Revoking the signed-out user's sockets failed:",Z)}}var wG="gemi_oauth_connection";class i4 extends B3{async connect($=new A){let Z=String($.params.provider??""),W=H(i3).providers[Z],Y=await f0.user(),j=O1($.search.get(l0),"");if(!W)return this.finish(j,Z,"unknown_provider");let z=OZ($.rawRequest),{state:X,codeChallenge:G,cookieValue:Q}=p4(fG(Z),Date.now(),{subject:String(Y.id),...j?{returnTo:j}:{}});return $.ctx().setCookie(sZ(z,wG),Q,{httpOnly:!0,sameSite:"Lax",secure:z,maxAge:u3}),b1.external(W.authorizationUrl({state:X,codeChallenge:G,redirectUri:qG($,Z,W.config.redirectUri)})),{destination:"/"}}async callback($=new A){let Z=String($.params.provider??""),J=H(i3),W=await f0.user(),Y=OZ($.rawRequest),j=sZ(Y,wG),z=$.cookies.get(j);if(z!==void 0&&z!==null)$.ctx().setCookie(j,"",{httpOnly:!0,sameSite:"Lax",secure:Y,maxAge:-1});let X=d4({provider:fG(Z),cookieValue:z,returnedState:$.search.get("state")}),G="payload"in X?X.payload.returnTo??"":"",Q=J.providers[Z];if(!Q)return this.finish(G,Z,"unknown_provider");let V=$.search.get("error");if(V)return this.finish(G,Z,/^[a-z0-9_]{1,64}$/.test(V)?V:"provider_error");if("reason"in X)return console.error(`OAuth connection refused (${X.reason})`),this.finish(G,Z,X.reason);if(X.payload.subject!==String(W.id))return this.finish(G,Z,"user_mismatch");let F=$.search.get("code");if(!F)return this.finish(G,Z,"missing_code");try{let B=await Q.exchangeCode({code:F,codeVerifier:X.payload.codeVerifier,redirectUri:qG($,Z,Q.config.redirectUri)}),U=await J.save(W,Z,B);await H(b).config.onConnected({user:W,provider:Z,connection:U,profile:B.profile??null,req:$})}catch(B){if(B instanceof vG)return console.error(`OAuth connection to ${Z} failed: ${B.message}`),this.finish(G,Z,B.providerError??B.code);throw B}return this.finish(G,Z)}finish($,Z,J){let W=$||O1(H(b).config.redirectPath,"/"),Y=new URL(W,"http://gemi.invalid");if(Y.searchParams.set("connection",Z),J)Y.searchParams.set("connection_error",J);throw b1.external(`${Y.pathname}${Y.search}${Y.hash}`),Error("unreachable: Redirect.external throws")}}function fG($){return`connection:${$}`}function qG($,Z,J){if(J)return J;return`${JZ()??new URL($.rawRequest.url).origin}/auth/connections/${encodeURIComponent(Z)}/callback`}function gG($){return $.magicLink!==!1||Z7($.emailCode?.enabled)}function yG($){return Object.keys($.oauthProviders??{}).length>0}function mG($={}){let Z=[];if(gG($))Z.push({view:"auth/MagicLinkSignIn",requiredBy:Z7($.emailCode?.enabled)&&$.magicLink===!1?"auth.emailCode.enabled":`auth.magicLink${$.magicLink===void 0?" (on by default; set `magicLink: false` to turn it off)":""}`});if(yG($)){let W=`auth.oauthProviders (${Object.keys($.oauthProviders??{}).join(", ")})`;Z.push({view:"_Redirect",requiredBy:W},{view:"auth/OauthCallback",requiredBy:W})}return Z}class hG extends R1{middlewares=["cache:private"];routes={"/:provider":this.redirect([i4,"connect"]).middleware(["auth"]),"/:provider/callback":this.redirect([i4,"callback"]).middleware([F6,"auth"])}}function pG($={}){let Z=gG($),J=yG($);class W extends R1{middlewares=["cache:private"];routes={"/:provider":this.view("_Redirect",[$0,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[$0,"oauthCallback"])}}return class extends R1{middlewares=["cache:private"];routes={...Z?{"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[$0,"signInWithMagicLink"])}:{},...J?{"/oauth":W}:{},"/connections":hG}}}class cW extends x0{middlewares=["cache:private"];routes={"/sign-in":this.post($0,"signIn"),"/sign-in-v2":this.post($0,"signInV2"),"/sign-up":this.post($0,"signUp"),"/sign-out":this.post($0,"signOut"),"/forgot-password":this.post($0,"forgotPassword"),"/reset-password":this.post($0,"resetPassword"),"/change-password":this.post($0,"changePassword"),"/verify-email":this.post($0,"verifyEmail"),"/me":this.get($0,"me").middleware(["auth"]),"/magic-link":this.post($0,"createMagicLinkToken"),"/sign-in-with-pin":this.post($0,"signInWithPin"),"/sign-in-with-pin-v2":this.post($0,"signInWithPinV2"),"/email-code":this.post($0,"requestEmailCode"),"/email-code/verify":this.post($0,"verifyEmailCode")}}class uW extends x0{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(async()=>{let Z=new A().params.locale;return await H(c).onLocaleChange(Z),{locale:Z}}),"/translations/:locale/:scope*":this.get(async()=>{let $=new A,Z=`/${$.params.scope??""}`,J=$.params.locale,W=H(c),Y=J??W.detectLocale($),j=W.getPageTranslations(Y,Z);return $.ctx().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000)}),{[Y]:j}})}}class lW{}class iW extends lW{async resize($,Z){let{height:J,width:W,quality:Y,fit:j}=Z;return await(await s4("The Sharp image optimization driver"))($).resize(W>0?W:void 0,J>0?J:void 0,{fit:j}).webp({quality:Y>0?Y:80,force:!0}).toBuffer()}}function l_($){return $}function dG(){return{driver:new iW,allowedHosts:[],maxSize:10485760,timeout:1e4}}class V0 extends Error{status;constructor($,Z,J){super(Z,J);this.status=$;this.name="ImageSourceError"}}var QL=new Set([301,302,303,307,308]),BL="/api/__gemi__/services/image/";async function uG($,Z){let J=Z.maxRedirects??5,W=AbortSignal.timeout(Z.timeout),Y=Z.ownOrigins[0]??Z.localOrigin,j=cG($,Y);try{for(let z=0;;z++){let X=await VL(j,Z,W),G=X.headers.get("location");if(QL.has(X.status)&&G){if(await X.body?.cancel().catch(()=>{}),z>=J)throw new V0(502,"The image redirects too many times");j=cG(G,j.href);continue}if(!X.ok)throw await X.body?.cancel().catch(()=>{}),new V0(404,"Image not found");if(!X.headers.get("content-type")?.split(";")[0].trim().toLowerCase()?.startsWith("image/"))throw await X.body?.cancel().catch(()=>{}),new V0(415,"The source is not an image");return{bytes:Buffer.from(await X.arrayBuffer()),cacheControl:X.headers.get("cache-control")}}}catch(z){if(z instanceof TypeError&&z.message.startsWith("safeFetch:"))throw z;throw UL(z,W)}}function cG($,Z){let J;try{J=new URL($,Z)}catch{throw new V0(400,"The url parameter is not a URL")}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new V0(400,"Only http(s) images can be resized");return J}async function VL($,Z,J){let W={method:"GET",redirect:"manual",signal:J,timeout:Z.timeout,maxSize:Z.maxSize,headers:{accept:"image/*"}},Y=$;if(Z.ownOrigins.includes($.origin)){if($.pathname.startsWith(BL))throw new V0(403,"This image source is not allowed");if(FL($.pathname))throw new V0(403,"This image source is not allowed");let j=new URL(Z.localOrigin).origin,z=new URL(`${$.pathname}${$.search}`,j);if(z.origin===j)return k1(z,{...W,allowPrivate:!0,ports:"any"});Y=z}if(Z.allowedHosts.length===0)throw new V0(403,"This image source is not allowed");return k1(Y,{...Z.external,...W,allow:Z.allowedHosts})}function FL($){let Z=$;for(let J=0;J<5;J++){if(/^[/\\][/\\]/.test(Z))return!0;let W;try{W=decodeURIComponent(Z)}catch{return!0}if(W===Z)return!1;Z=W}return!0}function UL($,Z){if($ instanceof V0)return $;if(Z.aborted)return new V0(504,"The image took too long to load",{cause:$});if($ instanceof O6)switch($.code){case"blocked-host":case"blocked-address":case"invalid-url":return new V0(403,"This image source is not allowed",{cause:$});case"too-large":return new V0(413,"The image is too large",{cause:$});case"timeout":return new V0(504,"The image took too long to load",{cause:$})}return new V0(502,"The image could not be loaded",{cause:$})}class sW extends x0{routes={"/resize":this.file(async()=>{let $=new A,Z=new URL($.rawRequest.url),J=Z.searchParams.get("url"),W=Number(Z.searchParams.get("w")),Y=Number(Z.searchParams.get("h")),j=Z.searchParams.get("fit")??"cover",z=Number(Z.searchParams.get("q"));if(!J)return lG(400,"url query parameter is required");let X=H(iG),G=[Z.origin,`${Z.protocol==="https:"?"http":"https"}://${Z.host}`],Q=JZ();if(Q&&URL.canParse(Q))G.push(new URL(Q).origin);let V;try{V=await uG(J,{ownOrigins:G,localOrigin:`http://localhost:${process.env.PORT||5173}`,allowedHosts:X.allowedHosts,maxSize:X.maxSize,timeout:X.timeout})}catch(U){if(U instanceof V0)return lG(U.status,U.message);throw U}let F=await X.resize(V.bytes,{height:Y,width:W,fit:j,quality:z}),B=new Headers({"Content-Type":"image/webp","Content-Length":`${F.byteLength}`});if(V.cacheControl)B.set("Cache-Control",V.cacheControl);return new Response(new Uint8Array(F),{headers:B})})}}function lG($,Z){return Response.json({error:Z},{status:$})}class iG{static token="image";driver;allowedHosts;maxSize;timeout;constructor($={}){let Z=dG();this.driver=$.driver??Z.driver,this.allowedHosts=$.allowedHosts??Z.allowedHosts,this.maxSize=$.maxSize??Z.maxSize,this.timeout=$.timeout??Z.timeout}resize($,Z){return this.driver.resize($,Z)}}class nW extends x0{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let $=Bun.file(H(sG).currentLogFilePath);return new Response(await $.text(),{headers:{"Content-Type":"text/plain"}})})}}function zI($){return $}function nG(){return{onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{}}}function oG(){return{partialRendering:!0,localeRouting:"prefix",theme:{},publicFiles:!0,assetRoutes:!1,onNotFound:()=>{},onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{},onStreamComplete:()=>{}}}function OL($){return"run"in $}function DL($){return Object.hasOwn($,"get")||Object.hasOwn($,"post")||Object.hasOwn($,"put")||Object.hasOwn($,"patch")||Object.hasOwn($,"delete")}function LL($){return Object.hasOwn($,"first")&&Object.hasOwn($,"second")}function ML($){if("__brand"in $)return $.__brand==="ApiRouter";return!1}function HL($){if("__internal_brand"in $)return $.__internal_brand==="ProxyHandler";return!1}function aG($){if("__internal_brand"in $)return $.__internal_brand==="StreamHandler";return!1}function KL($){let Z=$.replace(/(?<!:\w*)\([\w-]+\)/g,"");if(Z===$)return $;let J=`/${Z}`.replace(/\/{2,}/g,"/");return J.length>1?J.replace(/\/$/,""):J}function oW($,Z="",J=[]){let W={};function Y(j,z,X,G,Q,V){let F=j==="/"?"":j,B=Z==="/"?"":Z,U=KL((`${B}${F}`===""?"/":`${B}${F}`).replaceAll("//","/"));if(!W[U])W[U]={};W[U][z.toUpperCase()]={exec:X,middleware:[...J,...G],...Q?{source:Q}:{},...V?{bodyLimitDefault:V}:{}},W[U].OPTIONS={exec:()=>{let O=new A().ctx().headers;return new Response(null,{headers:O,status:204})},middleware:[]}}for(let[j,z]of Object.entries($)){if(HL(z)){let X=z;for(let G of["GET","POST","PUT","DELETE"])Y(j,G,X.run.bind(X),X.middlewares);continue}if(OL(z)){let X=z,G=X.method,Q=X.middlewares,V=X.run.bind(X);if(Y(j,G,V,Q,X.source,X.__internal_bodyLimitDefault),aG(z))Y(j,"HEAD",V,Q,X.source)}if(DL(z))for(let[X,G]of Object.entries(z)){let Q=G,V=Q.middlewares,F=Q.run.bind(Q);if(Y(j,X,F,V,Q.source,Q.__internal_bodyLimitDefault),X==="get"&&aG(Q))Y(j,"HEAD",F,V,Q.source)}if(ML(z)){let X=new z,G=oW(X.routes,`${Z}${j}`,[...J,...X.middlewares]);for(let[Q,V]of Object.entries(G)){let F=Q.replaceAll("//","/");W[F]={...W[F],...V}}}if(LL(z)){let{first:X,second:G}=z;for(let[Q,V]of Object.entries(X)){let F=V.middlewares,B=V.run.bind(V),[U,...D]=j.split("/").reverse();if(!U.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Y(D.reverse().join("/"),Q,B,F,V.source)}for(let[Q,V]of Object.entries(G)){let F=V.middlewares,B=V.run.bind(V);Y(j,Q,B,F,V.source)}}}return Object.fromEntries(Object.entries(W).sort(([j],[z])=>{let X=j.split("/").length+j.split(":").length,G=z.split("/").length+z.split(":").length;return X-G}))}function n4($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function aW($,Z){if($==="/")return Z;if(Z==="/")return $;return`${$}${Z}`}function tW($){let Z=n4($);return Z.length>1?Z.replace(/\/$/,""):Z}function tG($,Z){return Z.map((J)=>({...J,path:tW(aW($,J.path))}))}function o4($){let Z={};for(let[J,W]of Object.entries($))if("run"in W){let Y=W;if("children"in Y){let j=new Y.children,z=o4(j.routes);for(let[X,{exec:G,middleware:Q,segments:V,features:F,static:B}]of Object.entries(z)){let U=aW(J,X),D=(O)=>Y.run.call(Y,O,J);Z[n4(U)]={exec:[D,...G],middleware:[...Y.middlewares,...Q],features:[...Y.featureGates,...F],viewPath:Y.viewPath,segments:[{path:tW(J),viewPath:Y.viewPath,...Y.alwaysRuns?{alwaysRun:!0}:{}},...tG(J,V)],...B?{static:B}:{}}}}else{let j=(z)=>Y.run.call(Y,z,J);Z[n4(J)]={exec:[j],middleware:Y.middlewares,features:Y.featureGates,viewPath:Y.viewPath,segments:[{path:tW(J),viewPath:Y.viewPath}],..."staticOptions"in Y&&Y.staticOptions?{static:Y.staticOptions}:{}}}}else{let Y=new W,j=o4(Y.routes);for(let[z,{exec:X,middleware:G,viewPath:Q,segments:V,features:F,static:B}]of Object.entries(j)){let U=aW(J,z);Z[n4(U)]={exec:X,middleware:[...Y.middlewares,...G],features:[...Y.featureGates,...F],viewPath:Q,segments:tG(J,V),...B?{static:B}:{}}}}return Object.fromEntries(Object.entries(Z).sort(([J],[W])=>{let Y=J.split("/").length+J.split(":").length,j=W.split("/").length+W.split(":").length;return Y-j}))}var rW="theme";function rG($){return $==="light"||$==="dark"||$==="system"}function eG($){return`!function(o){try{var e=null,d=document.documentElement,c=d.classList,k=document.cookie.split(';'),i,j,v;
|
|
14
|
+
for(i=0;i<k.length;i++){j=k[i].indexOf('=');if(j>0&&k[i].slice(0,j).trim()===o.cookie){v=decodeURIComponent(k[i].slice(j+1).trim());break}}
|
|
15
|
+
if(v!=='light'&&v!=='dark'&&v!=='system'){try{v=localStorage.getItem('theme')}catch(x){}}
|
|
16
|
+
if(v==='light'||v==='dark'||v==='system')e=v;else e=o.default;
|
|
17
|
+
if(!e)return;
|
|
18
|
+
if(e==='system')e=window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light';
|
|
19
|
+
c.remove(e==='dark'?'light':'dark');c.add(e);d.style.colorScheme=e}catch(x){}}(${$})`}var TL=Object.defineProperty,I=($,Z)=>TL($,"name",{value:Z,configurable:!0}),tZ=class{type=3;name="";prefix="";value="";suffix="";modifier=3;constructor($,Z,J,W,Y,j){this.type=$,this.name=Z,this.prefix=J,this.value=W,this.suffix=Y,this.modifier=j}hasCustomName(){return this.name!==""&&typeof this.name!="number"}};I(tZ,"Part");var PL=/[$_\p{ID_Start}]/u,NL=/[$_\u200C\u200D\p{ID_Continue}]/u,$5=".*";function $Q($,Z){return(Z?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test($)}I($Q,"isASCII");function W5($,Z=!1){let J=[],W=0;for(;W<$.length;){let Y=$[W],j=I(function(z){if(!Z)throw TypeError(z);J.push({type:"INVALID_CHAR",index:W,value:$[W++]})},"ErrorOrInvalid");if(Y==="*"){J.push({type:"ASTERISK",index:W,value:$[W++]});continue}if(Y==="+"||Y==="?"){J.push({type:"OTHER_MODIFIER",index:W,value:$[W++]});continue}if(Y==="\\"){J.push({type:"ESCAPED_CHAR",index:W++,value:$[W++]});continue}if(Y==="{"){J.push({type:"OPEN",index:W,value:$[W++]});continue}if(Y==="}"){J.push({type:"CLOSE",index:W,value:$[W++]});continue}if(Y===":"){let z="",X=W+1;for(;X<$.length;){let G=$.substr(X,1);if(X===W+1&&PL.test(G)||X!==W+1&&NL.test(G)){z+=$[X++];continue}break}if(!z){j(`Missing parameter name at ${W}`);continue}J.push({type:"NAME",index:W,value:z}),W=X;continue}if(Y==="("){let z=1,X="",G=W+1,Q=!1;if($[G]==="?"){j(`Pattern cannot start with "?" at ${G}`);continue}for(;G<$.length;){if(!$Q($[G],!1)){j(`Invalid character '${$[G]}' at ${G}.`),Q=!0;break}if($[G]==="\\"){X+=$[G++]+$[G++];continue}if($[G]===")"){if(z--,z===0){G++;break}}else if($[G]==="("&&(z++,$[G+1]!=="?")){j(`Capturing groups are not allowed at ${G}`),Q=!0;break}X+=$[G++]}if(Q)continue;if(z){j(`Unbalanced pattern at ${W}`);continue}if(!X){j(`Missing pattern at ${W}`);continue}J.push({type:"REGEX",index:W,value:X}),W=G;continue}J.push({type:"CHAR",index:W,value:$[W++]})}return J.push({type:"END",index:W,value:""}),J}I(W5,"lexer");function Y5($,Z={}){let J=W5($);Z.delimiter??="/#?",Z.prefixes??="./";let W=`[^${c0(Z.delimiter)}]+?`,Y=[],j=0,z=0,X="",G=new Set,Q=I((K)=>{if(z<J.length&&J[z].type===K)return J[z++].value},"tryConsume"),V=I(()=>Q("OTHER_MODIFIER")??Q("ASTERISK"),"tryConsumeModifier"),F=I((K)=>{let N=Q(K);if(N!==void 0)return N;let{type:R,index:C}=J[z];throw TypeError(`Unexpected ${R} at ${C}, expected ${K}`)},"mustConsume"),B=I(()=>{let K="",N;for(;N=Q("CHAR")??Q("ESCAPED_CHAR");)K+=N;return K},"consumeText"),U=I((K)=>K,"DefaultEncodePart"),D=Z.encodePart||U,O="",L=I((K)=>{O+=K},"appendToPendingFixedValue"),M=I(()=>{O.length&&(Y.push(new tZ(3,"","",D(O),"",3)),O="")},"maybeAddPartFromPendingFixedValue"),T=I((K,N,R,C,S)=>{let w=3;switch(S){case"?":w=1;break;case"*":w=0;break;case"+":w=2;break}if(!N&&!R&&w===3){L(K);return}if(M(),!N&&!R){if(!K)return;Y.push(new tZ(3,"","",D(K),"",w));return}let x;R?R==="*"?x=$5:x=R:x=W;let f=2;x===W?(f=1,x=""):x===$5&&(f=0,x="");let _;if(N?_=N:R&&(_=j++),G.has(_))throw TypeError(`Duplicate name '${_}'.`);G.add(_),Y.push(new tZ(f,_,D(K),x,D(C),w))},"addPart");for(;z<J.length;){let K=Q("CHAR"),N=Q("NAME"),R=Q("REGEX");if(!N&&!R&&(R=Q("ASTERISK")),N||R){let S=K??"";Z.prefixes.indexOf(S)===-1&&(L(S),S=""),M();let w=V();T(S,N,R,"",w);continue}let C=K??Q("ESCAPED_CHAR");if(C){L(C);continue}if(Q("OPEN")){let S=B(),w=Q("NAME"),x=Q("REGEX");!w&&!x&&(x=Q("ASTERISK"));let f=B();F("CLOSE");let _=V();T(S,w,x,f,_);continue}M(),F("END")}return Y}I(Y5,"parse");function c0($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}I(c0,"escapeString");function Z5($){return $&&$.ignoreCase?"ui":"u"}I(Z5,"flags");function ZQ($,Z,J){return j5(Y5($,J),Z,J)}I(ZQ,"stringToRegexp");function WZ($){switch($){case 0:return"*";case 1:return"?";case 2:return"+";case 3:return""}}I(WZ,"modifierToString");function j5($,Z,J={}){J.delimiter??="/#?",J.prefixes??="./",J.sensitive??=!1,J.strict??=!1,J.end??=!0,J.start??=!0,J.endsWith="";let W=J.start?"^":"";for(let X of $){if(X.type===3){X.modifier===3?W+=c0(X.value):W+=`(?:${c0(X.value)})${WZ(X.modifier)}`;continue}Z&&Z.push(X.name);let G=`[^${c0(J.delimiter)}]+?`,Q=X.value;if(X.type===1?Q=G:X.type===0&&(Q=$5),!X.prefix.length&&!X.suffix.length){X.modifier===3||X.modifier===1?W+=`(${Q})${WZ(X.modifier)}`:W+=`((?:${Q})${WZ(X.modifier)})`;continue}if(X.modifier===3||X.modifier===1){W+=`(?:${c0(X.prefix)}(${Q})${c0(X.suffix)})`,W+=WZ(X.modifier);continue}W+=`(?:${c0(X.prefix)}`,W+=`((?:${Q})(?:`,W+=c0(X.suffix),W+=c0(X.prefix),W+=`(?:${Q}))*)${c0(X.suffix)})`,X.modifier===0&&(W+="?")}let Y=`[${c0(J.endsWith)}]|$`,j=`[${c0(J.delimiter)}]`;if(J.end)return J.strict||(W+=`${j}?`),J.endsWith.length?W+=`(?=${Y})`:W+="$",new RegExp(W,Z5(J));J.strict||(W+=`(?:${j}(?=${Y}))?`);let z=!1;if($.length){let X=$[$.length-1];X.type===3&&X.modifier===3&&(z=J.delimiter.indexOf(X)>-1)}return z||(W+=`(?=${j}|${Y})`),new RegExp(W,Z5(J))}I(j5,"partsToRegexp");var N$={delimiter:"",prefixes:"",sensitive:!0,strict:!0},_L={delimiter:".",prefixes:"",sensitive:!0,strict:!0},IL={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function JQ($,Z){return $.length?$[0]==="/"?!0:!Z||$.length<2?!1:($[0]=="\\"||$[0]=="{")&&$[1]=="/":!1}I(JQ,"isAbsolutePathname");function z5($,Z){return $.startsWith(Z)?$.substring(Z.length,$.length):$}I(z5,"maybeStripPrefix");function WQ($,Z){return $.endsWith(Z)?$.substr(0,$.length-Z.length):$}I(WQ,"maybeStripSuffix");function X5($){return!$||$.length<2?!1:$[0]==="["||($[0]==="\\"||$[0]==="{")&&$[1]==="["}I(X5,"treatAsIPv6Hostname");var YQ=["ftp","file","http","https","ws","wss"];function G5($){if(!$)return!0;for(let Z of YQ)if($.test(Z))return!0;return!1}I(G5,"isSpecialScheme");function jQ($,Z){if($=z5($,"#"),Z||$==="")return $;let J=new URL("https://example.com");return J.hash=$,J.hash?J.hash.substring(1,J.hash.length):""}I(jQ,"canonicalizeHash");function zQ($,Z){if($=z5($,"?"),Z||$==="")return $;let J=new URL("https://example.com");return J.search=$,J.search?J.search.substring(1,J.search.length):""}I(zQ,"canonicalizeSearch");function XQ($,Z){return Z||$===""?$:X5($)?V5($):B5($)}I(XQ,"canonicalizeHostname");function GQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.password=$,J.password}I(GQ,"canonicalizePassword");function QQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.username=$,J.username}I(QQ,"canonicalizeUsername");function BQ($,Z,J){if(J||$==="")return $;if(Z&&!YQ.includes(Z))return new URL(`${Z}:${$}`).pathname;let W=$[0]=="/";return $=new URL(W?$:"/-"+$,"https://example.com").pathname,W||($=$.substring(2,$.length)),$}I(BQ,"canonicalizePathname");function VQ($,Z,J){return Q5(Z)===$&&($=""),J||$===""?$:F5($)}I(VQ,"canonicalizePort");function FQ($,Z){return $=WQ($,":"),Z||$===""?$:a4($)}I(FQ,"canonicalizeProtocol");function Q5($){switch($){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}I(Q5,"defaultPortForProtocol");function a4($){if($==="")return $;if(/^[-+.A-Za-z0-9]*$/.test($))return $.toLowerCase();throw TypeError(`Invalid protocol '${$}'.`)}I(a4,"protocolEncodeCallback");function UQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.username=$,Z.username}I(UQ,"usernameEncodeCallback");function OQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.password=$,Z.password}I(OQ,"passwordEncodeCallback");function B5($){if($==="")return $;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test($))throw TypeError(`Invalid hostname '${$}'`);let Z=new URL("https://example.com");return Z.hostname=$,Z.hostname}I(B5,"hostnameEncodeCallback");function V5($){if($==="")return $;if(/[^0-9a-fA-F[\]:]/g.test($))throw TypeError(`Invalid IPv6 hostname '${$}'`);return $.toLowerCase()}I(V5,"ipv6HostnameEncodeCallback");function F5($){if($===""||/^[0-9]*$/.test($)&&parseInt($)<=65535)return $;throw TypeError(`Invalid port '${$}'.`)}I(F5,"portEncodeCallback");function DQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.pathname=$[0]!=="/"?"/-"+$:$,$[0]!=="/"?Z.pathname.substring(2,Z.pathname.length):Z.pathname}I(DQ,"standardURLPathnameEncodeCallback");function LQ($){return $===""?$:new URL(`data:${$}`).pathname}I(LQ,"pathURLPathnameEncodeCallback");function MQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.search=$,Z.search.substring(1,Z.search.length)}I(MQ,"searchEncodeCallback");function HQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.hash=$,Z.hash.substring(1,Z.hash.length)}I(HQ,"hashEncodeCallback");var KQ=class{#j;#W=[];#Z={};#$=0;#Y=1;#Q=0;#X=0;#U=0;#O=0;#D=!1;constructor($){this.#j=$}get result(){return this.#Z}parse(){for(this.#W=W5(this.#j,!0);this.#$<this.#W.length;this.#$+=this.#Y){if(this.#Y=1,this.#W[this.#$].type==="END"){if(this.#X===0){this.#K(),this.#B()?this.#J(9,1):this.#V()?this.#J(8,1):this.#J(7,0);continue}else if(this.#X===2){this.#F(5);continue}this.#J(10,0);break}if(this.#U>0)if(this.#C())this.#U-=1;else continue;if(this.#x()){this.#U+=1;continue}switch(this.#X){case 0:this.#T()&&this.#F(1);break;case 1:if(this.#T()){this.#E();let $=7,Z=1;this.#N()?($=2,Z=3):this.#D&&($=2),this.#J($,Z)}break;case 2:this.#M()?this.#F(3):(this.#H()||this.#V()||this.#B())&&this.#F(5);break;case 3:this.#_()?this.#J(4,1):this.#M()&&this.#J(5,1);break;case 4:this.#M()&&this.#J(5,1);break;case 5:this.#A()?this.#O+=1:this.#S()&&(this.#O-=1),this.#I()&&!this.#O?this.#J(6,1):this.#H()?this.#J(7,0):this.#V()?this.#J(8,1):this.#B()&&this.#J(9,1);break;case 6:this.#H()?this.#J(7,0):this.#V()?this.#J(8,1):this.#B()&&this.#J(9,1);break;case 7:this.#V()?this.#J(8,1):this.#B()&&this.#J(9,1);break;case 8:this.#B()&&this.#J(9,1);break;case 9:break;case 10:break}}this.#Z.hostname!==void 0&&this.#Z.port===void 0&&(this.#Z.port="")}#J($,Z){switch(this.#X){case 0:break;case 1:this.#Z.protocol=this.#G();break;case 2:break;case 3:this.#Z.username=this.#G();break;case 4:this.#Z.password=this.#G();break;case 5:this.#Z.hostname=this.#G();break;case 6:this.#Z.port=this.#G();break;case 7:this.#Z.pathname=this.#G();break;case 8:this.#Z.search=this.#G();break;case 9:this.#Z.hash=this.#G();break;case 10:break}this.#X!==0&&$!==10&&([1,2,3,4].includes(this.#X)&&[6,7,8,9].includes($)&&(this.#Z.hostname??=""),[1,2,3,4,5,6].includes(this.#X)&&[8,9].includes($)&&(this.#Z.pathname??=this.#D?"/":""),[1,2,3,4,5,6,7].includes(this.#X)&&$===9&&(this.#Z.search??="")),this.#P($,Z)}#P($,Z){this.#X=$,this.#Q=this.#$+Z,this.#$+=Z,this.#Y=0}#K(){this.#$=this.#Q,this.#Y=0}#F($){this.#K(),this.#X=$}#L($){return $<0&&($=this.#W.length-$),$<this.#W.length?this.#W[$]:this.#W[this.#W.length-1]}#z($,Z){let J=this.#L($);return J.value===Z&&(J.type==="CHAR"||J.type==="ESCAPED_CHAR"||J.type==="INVALID_CHAR")}#T(){return this.#z(this.#$,":")}#N(){return this.#z(this.#$+1,"/")&&this.#z(this.#$+2,"/")}#M(){return this.#z(this.#$,"@")}#_(){return this.#z(this.#$,":")}#I(){return this.#z(this.#$,":")}#H(){return this.#z(this.#$,"/")}#V(){if(this.#z(this.#$,"?"))return!0;if(this.#W[this.#$].value!=="?")return!1;let $=this.#L(this.#$-1);return $.type!=="NAME"&&$.type!=="REGEX"&&$.type!=="CLOSE"&&$.type!=="ASTERISK"}#B(){return this.#z(this.#$,"#")}#x(){return this.#W[this.#$].type=="OPEN"}#C(){return this.#W[this.#$].type=="CLOSE"}#A(){return this.#z(this.#$,"[")}#S(){return this.#z(this.#$,"]")}#G(){let $=this.#W[this.#$],Z=this.#L(this.#Q).index;return this.#j.substring(Z,$.index)}#E(){let $={};Object.assign($,N$),$.encodePart=a4;let Z=ZQ(this.#G(),void 0,$);this.#D=G5(Z)}};I(KQ,"Parser");var eW=["protocol","username","password","hostname","port","pathname","search","hash"],P$="*";function J5($,Z){if(typeof $!="string")throw TypeError("parameter 1 is not of type 'string'.");let J=new URL($,Z);return{protocol:J.protocol.substring(0,J.protocol.length-1),username:J.username,password:J.password,hostname:J.hostname,port:J.port,pathname:J.pathname,search:J.search!==""?J.search.substring(1,J.search.length):void 0,hash:J.hash!==""?J.hash.substring(1,J.hash.length):void 0}}I(J5,"extractValues");function I1($,Z){return Z?aZ($):$}I(I1,"processBaseURLString");function oZ($,Z,J){let W;if(typeof Z.baseURL=="string")try{W=new URL(Z.baseURL),Z.protocol===void 0&&($.protocol=I1(W.protocol.substring(0,W.protocol.length-1),J)),!J&&Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.username===void 0&&($.username=I1(W.username,J)),!J&&Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.username===void 0&&Z.password===void 0&&($.password=I1(W.password,J)),Z.protocol===void 0&&Z.hostname===void 0&&($.hostname=I1(W.hostname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&($.port=I1(W.port,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&($.pathname=I1(W.pathname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&Z.search===void 0&&($.search=I1(W.search.substring(1,W.search.length),J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&Z.search===void 0&&Z.hash===void 0&&($.hash=I1(W.hash.substring(1,W.hash.length),J))}catch{throw TypeError(`invalid baseURL '${Z.baseURL}'.`)}if(typeof Z.protocol=="string"&&($.protocol=FQ(Z.protocol,J)),typeof Z.username=="string"&&($.username=QQ(Z.username,J)),typeof Z.password=="string"&&($.password=GQ(Z.password,J)),typeof Z.hostname=="string"&&($.hostname=XQ(Z.hostname,J)),typeof Z.port=="string"&&($.port=VQ(Z.port,$.protocol,J)),typeof Z.pathname=="string"){if($.pathname=Z.pathname,W&&!JQ($.pathname,J)){let Y=W.pathname.lastIndexOf("/");Y>=0&&($.pathname=I1(W.pathname.substring(0,Y+1),J)+$.pathname)}$.pathname=BQ($.pathname,$.protocol,J)}return typeof Z.search=="string"&&($.search=zQ(Z.search,J)),typeof Z.hash=="string"&&($.hash=jQ(Z.hash,J)),$}I(oZ,"applyInit");function aZ($){return $.replace(/([+*?:{}()\\])/g,"\\$1")}I(aZ,"escapePatternString");function TQ($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}I(TQ,"escapeRegexpString");function PQ($,Z){Z.delimiter??="/#?",Z.prefixes??="./",Z.sensitive??=!1,Z.strict??=!1,Z.end??=!0,Z.start??=!0,Z.endsWith="";let J=".*",W=`[^${TQ(Z.delimiter)}]+?`,Y=/[$_\u200C\u200D\p{ID_Continue}]/u,j="";for(let z=0;z<$.length;++z){let X=$[z];if(X.type===3){if(X.modifier===3){j+=aZ(X.value);continue}j+=`{${aZ(X.value)}}${WZ(X.modifier)}`;continue}let G=X.hasCustomName(),Q=!!X.suffix.length||!!X.prefix.length&&(X.prefix.length!==1||!Z.prefixes.includes(X.prefix)),V=z>0?$[z-1]:null,F=z<$.length-1?$[z+1]:null;if(!Q&&G&&X.type===1&&X.modifier===3&&F&&!F.prefix.length&&!F.suffix.length)if(F.type===3){let B=F.value.length>0?F.value[0]:"";Q=Y.test(B)}else Q=!F.hasCustomName();if(!Q&&!X.prefix.length&&V&&V.type===3){let B=V.value[V.value.length-1];Q=Z.prefixes.includes(B)}Q&&(j+="{"),j+=aZ(X.prefix),G&&(j+=`:${X.name}`),X.type===2?j+=`(${X.value})`:X.type===1?G||(j+=`(${W})`):X.type===0&&(!G&&(!V||V.type===3||V.modifier!==3||Q||X.prefix!=="")?j+="*":j+=`(${J})`),X.type===1&&G&&X.suffix.length&&Y.test(X.suffix[0])&&(j+="\\"),j+=aZ(X.suffix),Q&&(j+="}"),X.modifier!==3&&(j+=WZ(X.modifier))}return j}I(PQ,"partsToPattern");var U5=class{#j;#W={};#Z={};#$={};#Y={};#Q=!1;constructor($={},Z,J){try{let W;if(typeof Z=="string"?W=Z:J=Z,typeof $=="string"){let X=new KQ($);if(X.parse(),$=X.result,W===void 0&&typeof $.protocol!="string")throw TypeError("A base URL must be provided for a relative constructor string.");$.baseURL=W}else{if(!$||typeof $!="object")throw TypeError("parameter 1 is not of type 'string' and cannot convert to dictionary.");if(W)throw TypeError("parameter 1 is not of type 'string'.")}typeof J>"u"&&(J={ignoreCase:!1});let Y={ignoreCase:J.ignoreCase===!0},j={pathname:P$,protocol:P$,username:P$,password:P$,hostname:P$,port:P$,search:P$,hash:P$};this.#j=oZ(j,$,!0),Q5(this.#j.protocol)===this.#j.port&&(this.#j.port="");let z;for(z of eW){if(!(z in this.#j))continue;let X={},G=this.#j[z];switch(this.#Z[z]=[],z){case"protocol":Object.assign(X,N$),X.encodePart=a4;break;case"username":Object.assign(X,N$),X.encodePart=UQ;break;case"password":Object.assign(X,N$),X.encodePart=OQ;break;case"hostname":Object.assign(X,_L),X5(G)?X.encodePart=V5:X.encodePart=B5;break;case"port":Object.assign(X,N$),X.encodePart=F5;break;case"pathname":G5(this.#W.protocol)?(Object.assign(X,IL,Y),X.encodePart=DQ):(Object.assign(X,N$,Y),X.encodePart=LQ);break;case"search":Object.assign(X,N$,Y),X.encodePart=MQ;break;case"hash":Object.assign(X,N$,Y),X.encodePart=HQ;break}try{this.#Y[z]=Y5(G,X),this.#W[z]=j5(this.#Y[z],this.#Z[z],X),this.#$[z]=PQ(this.#Y[z],X),this.#Q=this.#Q||this.#Y[z].some((Q)=>Q.type===2)}catch{throw TypeError(`invalid ${z} pattern '${this.#j[z]}'.`)}}}catch(W){throw TypeError(`Failed to construct 'URLPattern': ${W.message}`)}}get[Symbol.toStringTag](){return"URLPattern"}test($={},Z){let J={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof $!="string"&&Z)throw TypeError("parameter 1 is not of type 'string'.");if(typeof $>"u")return!1;try{typeof $=="object"?J=oZ(J,$,!1):J=oZ(J,J5($,Z),!1)}catch{return!1}let W;for(W of eW)if(!this.#W[W].exec(J[W]))return!1;return!0}exec($={},Z){let J={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof $!="string"&&Z)throw TypeError("parameter 1 is not of type 'string'.");if(typeof $>"u")return;try{typeof $=="object"?J=oZ(J,$,!1):J=oZ(J,J5($,Z),!1)}catch{return null}let W={};Z?W.inputs=[$,Z]:W.inputs=[$];let Y;for(Y of eW){let j=this.#W[Y].exec(J[Y]);if(!j)return null;let z={};for(let[X,G]of this.#Z[Y].entries())if(typeof G=="string"||typeof G=="number"){let Q=j[X+1];z[G]=Q}W[Y]={input:J[Y]??"",groups:z}}return W}static compareComponent($,Z,J){let W=I((X,G)=>{for(let Q of["type","modifier","prefix","value","suffix"]){if(X[Q]<G[Q])return-1;if(X[Q]===G[Q])continue;return 1}return 0},"comparePart"),Y=new tZ(3,"","","","",3),j=new tZ(0,"","","","",3),z=I((X,G)=>{let Q=0;for(;Q<Math.min(X.length,G.length);++Q){let V=W(X[Q],G[Q]);if(V)return V}return X.length===G.length?0:W(X[Q]??Y,G[Q]??Y)},"comparePartList");return!Z.#$[$]&&!J.#$[$]?0:Z.#$[$]&&!J.#$[$]?z(Z.#Y[$],[j]):!Z.#$[$]&&J.#$[$]?z([j],J.#Y[$]):z(Z.#Y[$],J.#Y[$])}get protocol(){return this.#$.protocol}get username(){return this.#$.username}get password(){return this.#$.password}get hostname(){return this.#$.hostname}get port(){return this.#$.port}get pathname(){return this.#$.pathname}get search(){return this.#$.search}get hash(){return this.#$.hash}get hasRegExpGroups(){return this.#Q}};I(U5,"URLPattern");function s3($,Z){for(let[J,W]of Object.entries($)){let Y=new U5({pathname:J});if(Y.test({pathname:Z}))return{routePath:J,params:Y.exec({pathname:Z})?.pathname.groups??{},route:W}}return null}var YZ={startIndex:0,carriedViews:[]};function NQ($,Z){let J=O0($.path,Z);return J.includes("*")?null:J}function xL($,Z){if(!$)return YZ;if($.search!==Z.search)return YZ;let J=Math.min($.segments.length,Z.segments.length-1),W=0;while(W<J){let Y=$.segments[W],j=Z.segments[W];if(j.alwaysRun)break;if(Y.viewPath!==j.viewPath)break;let z=NQ(Y,$.params),X=NQ(j,Z.params);if(z===null||X===null||z!==X)break;W++}if(W===0)return YZ;return{startIndex:W,carriedViews:Z.segments.slice(0,W).map(({viewPath:Y})=>Y)}}function CL($,Z){let[,J,...W]=$.split("/");if(!Z.includes(J))return $;let Y=`/${W.join("/")}`;return Y==="/"?"/":Y.replace(/\/$/,"")}function _Q($){let{flatViewRoutes:Z,supportedLocales:J,from:W,origin:Y,to:j}=$;if(!W)return YZ;let z;try{z=new URL(W,Y)}catch{return YZ}if(z.origin!==Y)return YZ;let X=s3(Z,CL(z.pathname,J));if(!X)return YZ;return xL({segments:X.route.segments,params:X.params,search:z.search},j)}var O5="x-gemi-from";import{cloneElement as NM,createElement as i1,Fragment as BB}from"react";import{createElement as IQ,Fragment as xQ}from"react";function CQ($,Z,J){return[IQ(xQ,{key:"preloads"},...$),IQ(xQ,{key:"head"},...Z),J]}function AL($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function t4($){let Z={};for(let[J,W]of Object.entries($))if("run"in W){let Y=W.viewPath;if("children"in W){Z[J]=[Y];let j=new W.children,z=t4(j.routes);for(let[X,G]of Object.entries(z)){let Q=J==="/"?X:`${J}${X}`,V=X==="/"&&J!=="/"?J:Q;Z[V]=[Y,...G]}if(Z[J].length===1)delete Z[J]}else Z[J]=[Y]}else{let Y=new W,j=t4(Y.routes);for(let[z,X]of Object.entries(j)){let G=J==="/"?z:`${J}${z}`,Q=z==="/"&&J!=="/"?J:G;Z[Q]=X}}return Object.fromEntries(Object.entries(Z).map(([J,W])=>[AL(J),W]))}function r4($,Z){let[J,W]=Z,Y=$.find(([j])=>j===J);if(!Y){$.push([J,[...W]]);return}for(let j of W)r4(Y[1],j)}function e4($){let Z=[];for(let[J,W]of Object.entries($))if("run"in W){let Y=W.viewPath;if(Y==="__")continue;if(Y==="REDIRECT")continue;if(Y==="FILE")continue;if("children"in W){let j=new W.children,z=e4(j.routes);r4(Z,[Y,z])}else r4(Z,[Y,[]])}else{let Y=new W,j=e4(Y.routes);for(let z of j)r4(Z,z)}return Z}function D5($){let Z=[];for(let[J,W]of $)Z.push(J,...D5(W).flat());return Array.from(new Set(Z))}function AQ($,Z){let[,J,...W]=$.split("/");if(J===void 0||!Z.includes(J))return{locale:null,pathname:$||"/"};return{locale:J,pathname:`/${W.join("/")}`}}class _$ extends h{static getFacadeAccessor(){return c}static getSupportedLocales(){return this.getFacadeRoot().supportedLocales}static getDefaultLocale(){return this.getFacadeRoot().defaultLocale}static locale(){let $=this.getFacadeRoot(),Z=P.getStore();if(Z)return Z.locale??$.detectLocale(Z.req);return $.defaultLocale}static timeZone(){return this.getFacadeRoot().detectTimeZone(P.getStore()?.req)}static formatter($={}){return this.getFacadeRoot().formatter($.locale??_$.locale(),$.timeZone??_$.timeZone())}static setLocale($=_$.locale(),Z={}){let J=this.getFacadeRoot(),W=$;if(!J.supportedLocales.includes($))W=J.defaultLocale;let Y=P.getStore();if(Z.cookie!==!1)Y.setCookie("i18n-locale",W,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1});return Y.setLocale(W),W}}class L5{id;static token="kernel.id";constructor($=crypto.randomUUID()){this.id=$}}function SQ($){return Object.fromEntries(Object.entries($).filter(([,Z])=>{return Z!==null&&Z!==void 0}))}var SL=50;class rZ{fetcher;entries=new Map;settleListener=null;failListener=null;shellAt=null;settledBacklog=[];shipped=new Set;requestStartedAt=performance.now();renderStartedAt=null;discoveryHintsMuted=!1;constructor($){this.fetcher=$}elapsed(){return Math.round(performance.now()-this.requestStartedAt)}keyFor($,Z){return[$,Z].filter((J)=>J.length>0).join("?")}markRenderStart(){if(this.renderStartedAt===null)this.renderStartedAt=performance.now()}markShell(){if(this.shellAt===null)this.shellAt=this.elapsed()}summarize($){let Z=this.elapsed();return{shellAt:this.shellAt??Z,settledAt:Z,aborted:$,queries:Array.from(this.entries.values(),(J)=>({path:J.path,variantKey:J.variantKey,startedAt:J.startedAt,settledAt:J.settledAt,status:J.status,source:J.source}))}}onQueryFail($){this.failListener=$}muteDiscoveryHints(){this.discoveryHintsMuted=!0}maybeLogLateDiscovery($){if(!$.lateBy||this.discoveryHintsMuted)return;if($.status!=="resolved")return;if(Bun.env.NODE_ENV==="production")return;let Z="";try{let Y=JSON.stringify($.data)?.length??0;Z=Y>=1024?`${(Y/1024).toFixed(1)} kB`:`${Y} B`}catch{Z="an unserializable payload"}let J=($.settledAt??0)-$.startedAt,W=$.variantKey?`, { search: ${JSON.stringify(Object.fromEntries(new URLSearchParams($.variantKey)))} }`:"";console.warn(`[gemi] useQuery("${$.patternPath}") was discovered ${$.lateBy}ms into the `+`server render \u2014 under a suspended segment, so its fetch (${J}ms, resolved ${Z}) could not overlap the others. It still streamed. If the query belongs on this route, \`Query.prefetch("${$.patternPath}"${W})\` in the view `+"handler starts it at request time \u2014 but note prefetched data is also re-fetched and "+`streamed into every client-side navigation payload for the route, even when the client already holds it, so weigh that bandwidth against the ${Z}. If the data is only needed conditionally (a closed popover, a hidden tab), \`{ lazy: true }\` + \`trigger()\` avoids running it here at all. \`Query.noPrefetch()\` in the handler marks the omission intentional and silences this hint for the route.`)}locate($,Z){let J=Z.params??{},W=new URLSearchParams(SQ(Z.search??{}));W.delete("json"),W.sort();let Y=O0($,J),j=W.toString();return{params:J,searchParams:W,path:Y,variantKey:j,key:this.keyFor(Y,j)}}find($,Z={}){return this.entries.get(this.locate($,Z).key)}entriesFor($){return Array.from(this.entries.values()).filter((Z)=>Z.path===$)}read($,Z){return this.entries.get(this.keyFor($,Z))}ensure($,Z={},J="render"){let{params:W,searchParams:Y,path:j,variantKey:z,key:X}=this.locate($,Z),G=this.entries.get(X);if(G)return G;let Q;if(J==="render"&&this.renderStartedAt!==null){let U=Math.round(performance.now()-this.renderStartedAt);if(U>SL)Q=U}let V,F=new Promise((U)=>{V=U}),B={path:j,patternPath:$,variantKey:z,lateBy:Q,status:"pending",promise:F,source:J,startedAt:this.elapsed()};return this.entries.set(X,B),this.fetcher($,W,Y).then((U)=>{B.status="resolved",B.data=U},(U)=>{B.status="rejected",B.error=U}).then(()=>{if(B.settledAt=this.elapsed(),this.maybeLogLateDiscovery(B),B.status==="rejected"&&this.failListener)this.failListener(B);if(this.settleListener)this.settleListener(B);else this.settledBacklog.push(B);V()}),B}async allSettled(){let $=0;while($!==this.entries.size)$=this.entries.size,await Promise.all(Array.from(this.entries.values(),(Z)=>Z.promise))}snapshotResolved(){let $={};for(let[Z,J]of this.entries){if(J.status!=="resolved")continue;this.shipped.add(Z),$[J.path]??={},$[J.path][J.variantKey]=J.data}return $}onSettle($){this.settleListener=(J)=>{if(this.shipped.has(this.keyFor(J.path,J.variantKey)))return;$(J)};let Z=this.settledBacklog;this.settledBacklog=[];for(let J of Z)this.settleListener(J)}}class t0 extends Error{path;variantKey;status;body;retryAfter;constructor($,Z,J,W,Y){super(typeof W?.message==="string"?W.message:`Request to /api${$} failed with status ${J}`);this.path=$;this.variantKey=Z;this.status=J;this.body=W;this.retryAfter=Y;this.name="QueryError"}}function eZ(){let $=JSON.stringify({error:Z$("permission","Forbidden",403)});return new Response($,{status:403,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}function M5(){return{status:403,error:{message:"Forbidden"}}}function n3($){let Z=$3.getStore(),J=P.getStore();return(W,Y,j)=>{let z=new URL($.url).origin,X=[O0(W,Y),j.toString()].filter((F)=>F.length>0).join("?"),G=new Request(`${z}/${X}`,{headers:$.headers,signal:$.signal}),Q=$8($);if(Q)Z3(G,Q);let V=new A(G,Y);return $3.run(Z,()=>P.run(V,async()=>{let F=J?.locale;if(F&&H(c).isLocaleAware)P.getStore().setLocale(F);try{let B=H(B1).dispatchers(Q).api,U=await B.runRouteMiddleware(W,V)??await B.getRouteData(W);if(a1(U)){if(!U.ok)throw new t0(O0(W,Y),j.toString(),U.status,U.body);return U.body}if(U instanceof Response){let D=await U.json().catch(()=>null);if(!U.ok)throw new t0(O0(W,Y),j.toString(),U.status,D);return D}return U}catch(B){if(B instanceof t0)throw B;let U=new t0(O0(W,Y),j.toString(),500,{message:B instanceof Error?B.message:String(B)});throw U.cause=B,U}}))}}var EL=new Set(["script","style","template","title"]),bL=/\shidden([\s=/]|$)/i,RL=/"[^"]*"|'[^']*'/g;function kL($){let Z=0,J=0,W=0,Y=0;while(Y<$.length){let j=$.indexOf("<",Y),z=j===-1?$.length:j;if(z>Y){let F=$.slice(Y,z).replace(/\s+/g,"").length;if(W>0)J+=F;else Z+=F}if(j===-1)break;if($.startsWith("<!--",j)){let F=$.indexOf("-->",j+4);Y=F===-1?$.length:F+3;continue}let X=$.indexOf(">",j);if(X===-1)break;let G=$.slice(j+1,X);Y=X+1;let Q=/^\/?([a-zA-Z][a-zA-Z0-9-]*)/.exec(G)?.[1]?.toLowerCase();if(!Q)continue;let V=G.startsWith("/");if(!V&&EL.has(Q)&&!G.endsWith("/")){let F=$.indexOf(`</${Q}`,Y);Y=F===-1?$.length:F;continue}if(Q!=="div")continue;if(V){if(W>0)W-=1}else if(W>0)W+=1;else if(bL.test(G.replace(RL,'""')))W=1}return{shellChars:Z,deferredChars:J}}var wL=1000,fL=64;function qL($){return $>=1000?`${($/1000).toFixed(1)} kB`:`${$} chars`}function vL($,Z){if(Z.deferredChars<wL)return null;if(Z.shellChars>=fL)return null;return`[gemi] GET ${$} streams ${qL(Z.deferredChars)} of its `+`content behind reveal scripts \u2014 a no-JS visitor sees ~${Z.shellChars} chars. If this is a public/content route, add "no-stream" to its middleware.`}function EQ($=console.warn){let Z=new Set;return{shouldObserve(J){return!Z.has(J)},report(J,W){if(Z.has(J))return;let Y=vL(J,W);if(!Y)return;Z.add(J),$(Y)}}}function bQ(){let $=new TextDecoder,Z="";return{onChunk(J){Z+=$.decode(J,{stream:!0})},measure(){return Z+=$.decode(),kL(Z)}}}function RQ($,Z,J=1e4,W){let Y=new TextEncoder,j=()=>{};return new ReadableStream({start(z){let X=!1,G=(V)=>{if(X)return;X=!0,clearTimeout(Q);try{z.close()}catch{}W?.({aborted:V})};j=G,z.enqueue(Y.encode(`${JSON.stringify($)}
|
|
20
|
+
`)),Z.onSettle((V)=>{if(X||V.status!=="resolved")return;z.enqueue(Y.encode(`${JSON.stringify([V.path,V.variantKey,V.data])}
|
|
21
|
+
`))});let Q=setTimeout(()=>G(!0),J);Z.allSettled().then(()=>G(!1),()=>G(!1))},cancel(){j(!1)}})}import{Fragment as yx,createContext as JM,createElement as mx,lazy as hx,use as px,useContext as dx}from"react";import{createContext as gL}from"react";var yL=gL(null);import{createContext as pL,useContext as Fx}from"react";import{useContext as Xx}from"react";import{createContext as mL}from"react";import{jsx as Yx}from"react/jsx-runtime";var hL=mL({});var dL="gemi.islandI18n",cL=globalThis[Symbol.for(dL)]??=pL(null);import{createContext as hQ,useMemo as Ex,useRef as bx}from"react";class H5{subscribers=new Set;value;constructor($){this.value=$,this.subscribe=this.subscribe.bind(this),this.next=this.next.bind(this),this.getValue=this.getValue.bind(this)}subscribe($){return this.subscribers.add($),()=>{this.subscribers.delete($)}}next($){this.value=$,this.subscribers.forEach((Z)=>Z($))}getValue(){return this.value}}function kQ($,Z=Date.now()){if($==null)return;let J=$.trim();if(J==="")return;if(/^\d+$/.test(J))return Number(J)*1000;let W=Date.parse(J);if(Number.isNaN(W))return;return Math.max(0,W-Z)}function wQ($){if($.status===204||$.status===205)return Promise.resolve(null);let Z=$.headers?.get?.("Content-Type")??"";if(/^text\/plain\b/i.test(Z))return $.text();return $.json()}var fQ="/auth/sign-in",uL=1000,lL=2,K5,T5=null,J3="idle",qQ=0,P5=[];function gQ($,Z){if($!==401)return!1;let J=Z&&typeof Z==="object"?Z.error:void 0;if(typeof J==="string")return J==="Authentication error";return!!J&&typeof J==="object"&&J.kind==="authentication"}function iL($){let Z=$?.get?.(N5);if(typeof Z!=="string"||Z==="")return fQ;if(/^https?:\/\//i.test(Z))return Z;if(Z.startsWith("/")&&!Z.startsWith("//")&&!Z.includes("\\"))return Z;return fQ}function sL(){let $=T5?.current();if($)return $;if(typeof window>"u")return null;return{pathname:window.location.pathname,search:window.location.search}}var vQ=($)=>$.replace(/\/+$/,"")||"/";function nL($,Z){let J=k8($),W=new URL($,"http://gemi.invalid");if(!J&&vQ(W.pathname)===vQ(Z.pathname))return null;return W.searchParams.set(l0,J?Z.pathname:`${Z.pathname}${Z.search}`),J?W.href:`${W.pathname}${W.search}`}function oL($){if(!k8($)&&T5)T5.replace($);else window.location.replace($)}function yQ($){if(!K5||typeof window>"u")return;if(!gQ($.status,$.body))return;if($.path.split("?")[0]==="/auth/me")return;if(J3==="handled")return;if(J3==="idle"&&qQ>=lL)return;if($.refetch)P5.push($.refetch);if(J3==="checking")return;J3="checking",qQ++;let Z=$;setTimeout(()=>{aL(Z)},uL)}async function aL($){let Z=!1,J=$.headers?.get?.(N5)?$.headers:null;try{let X=await fetch("/api/auth/me",{cache:"no-store",headers:{Accept:"application/json"}}),G=null;try{G=await X.json()}catch{}if(Z=gQ(X.status,G),Z&&!J)J=X.headers}catch{}let W=P5;if(P5=[],!Z){J3="idle";for(let X of W)try{X()}catch(G){console.error(G)}return}J3="handled";let Y=sL();if(!Y)return;let j=nL(iL(J),Y);if(!j)return;let z={source:$.source,path:$.path,error:$.error,signInUrl:j,redirect:()=>oL(j)};try{if(K5==="redirect")z.redirect();else K5?.(z)}catch(X){console.error(X)}}var _5=5000,tL=2147483647;class jZ{store;staleVariants=new Set;lastFetchRecord=new Map;key;inflight=new Set;pending=new Map;watchers=new Map;failures=new Map;retryTimers=new Map;seq=0;issued=new Map;applied=new Map;controllers=new Map;constructor($,Z){this.key=$,this.store=new H5(new Map),this.hydrate(Z)}hydrate($){let Z=this.store.getValue(),J=Date.now(),W=!1;for(let[Y,j]of Object.entries($??{})){if(j===void 0)continue;let z=Z.get(Y);if(z?.loading)continue;if(z?.hasData&&z.data===j)continue;this.fill(Z,Y,j,J),W=!0}if(W)this.store.next(Z)}pendingFor($){let Z=this.pending.get($);if(!Z){let J;Z={promise:new Promise((Y)=>{J=Y}),resolve:J},this.pending.set($,Z)}return Z}settle($){let Z=this.pending.get($);if(Z)this.pending.delete($),Z.resolve()}isStale($,Z){if(this.staleVariants.has($))return!0;let J=Date.now();return J-(this.lastFetchRecord.get($)??J)>=Z}peek($){return this.store.getValue().get($)}read($,Z=_5){let J=this.peek($);if(J?.hasData){if(!this.inflight.has($)&&this.isStale($,Z))this.lastFetchRecord.set($,Date.now()),this.resolveVariant($,!0);return{state:J}}if(J?.error)return{state:J};if(typeof window>"u")return{state:J};let W=this.pendingFor($);if(!this.inflight.has($))this.resolveVariant($,!0);return{state:J,promise:W.promise}}getVariant($,Z=_5){let J=this.store.getValue();if(!J.has($)){if(!this.inflight.has($))this.resolveVariant($)}else{let W=J.get($);if(!W.loading&&!this.inflight.has($)){if(!W.hasData)return this.resolveVariant($),J.get($);if(this.isStale($,Z))return this.lastFetchRecord.set($,Date.now()),this.resolveVariant($,!0),J.get($)}}return J.get($)}revalidate($,Z=_5){if(typeof window>"u")return;if(this.inflight.has($))return;let J=this.peek($);if(J?.loading)return;if(J?.hasData){if(!this.isStale($,Z))return;this.lastFetchRecord.set($,Date.now())}this.resolveVariant($,!0)}clearError($){let Z=this.store.getValue(),J=!1;for(let[W,Y]of Z){if($!==void 0&&W!==$)continue;if(Y.error)Z.set(W,{...Y,error:null}),J=!0}if(J)this.store.next(Z)}retain($){this.watchers.set($,(this.watchers.get($)??0)+1);let Z=!1;return()=>{if(Z)return;Z=!0;let J=(this.watchers.get($)??1)-1;if(J>0)this.watchers.set($,J);else this.watchers.delete($),this.cancelRetry($),this.scheduleAbort($)}}scheduleAbort($){if(!this.controllers.has($))return;setTimeout(()=>{if(this.watchers.has($))return;this.abort($)},0)}abort($){let Z=this.controllers.get($);if(!Z)return;this.controllers.delete($);for(let J of Z)J.abort()}failureCount($){return this.failures.get($)??0}scheduleRetry($,Z){if(typeof window>"u")return;if(this.retryTimers.has($)||this.inflight.has($))return;let J=Math.min(Math.max(0,Z||0),tL),W=setTimeout(()=>{if(this.retryTimers.delete($),!this.watchers.has($))return;if(this.inflight.has($))return;let Y=this.peek($);if(!Y?.error||Y.loading)return;this.resolveVariant($,Y.hasData,!0,!0)},J);this.retryTimers.set($,W)}cancelRetry($){let Z=this.retryTimers.get($);if(Z!==void 0)clearTimeout(Z),this.retryTimers.delete($)}retryNow($){if(typeof window>"u")return;if(this.inflight.has($))return;let Z=this.peek($);if(!Z?.error||Z.loading)return;this.resolveVariant($,!0)}variantKeys(){return[...this.store.getValue().keys()]}invalidate($,Z){this.dropHttpCache($);let J=this.store.getValue(),W=J.get($);if(Z&&W?.hasData)this.markApplied($),this.store.next(J.set($,{...W,data:Z(W.data),error:null}));if(this.staleVariants.add($),this.watchers.has($))this.resolveVariant($,!1,!1)}dropHttpCache($){let Z=[typeof window<"u"&&window.location?.origin?window.location.origin:"",this.key,$].filter((J)=>J.length>0).join("?");try{if(caches)caches?.delete(Z)}catch{}}mutate($,Z=(J)=>J){this.dropHttpCache($);let J=this.store.getValue(),W=J.get($);if(!W||!W.hasData){this.resolveVariant($,!1,!1);return}let Y=Z(W.data);this.markApplied($),this.staleVariants.add($),this.store.next(J.set($,{loading:!1,data:Y,hasData:!0,error:null,version:W.version})),this.resolveVariant($,!1,!1)}fill($,Z,J,W){$.set(Z,{loading:!1,data:J,hasData:!0,error:null,version:W}),this.staleVariants.delete(Z),this.lastFetchRecord.set(Z,W),this.failures.delete(Z),this.cancelRetry(Z),this.settle(Z)}refetch($){this.resolveVariant($,!1,!1)}markApplied($){this.applied.set($,this.seq)}async resolveVariant($,Z=!1,J=!0,W=!1){if(typeof window>"u")return;this.cancelRetry($),this.inflight.add($);let Y=++this.seq;this.issued.set($,Y);let j=typeof AbortController>"u"?null:new AbortController;if(j){let F=this.controllers.get($);if(!F)F=new Set,this.controllers.set($,F);F.add(j)}let z=()=>this.issued.get($)===Y,X=()=>(this.applied.get($)??0)>=Y,G=()=>{this.failures.set($,W?(this.failures.get($)??0)+1:1)},Q=this.store.getValue(),V=(F)=>{if(!z())return;G();let B=Q.get($);this.store.next(Q.set($,{loading:!1,data:B?.data,hasData:B?.hasData??!1,error:F,version:B?.version}))};try{let F=Q.get($);if(!Z)Q.set($,{loading:!0,data:F?.data,hasData:F?.hasData??!1,error:F?.error,version:F?.version});let B=null,U=null,D=[this.key,$].filter((O)=>O.length).join("?");try{U=await fetch(`/api${D}`,{cache:J&&!this.staleVariants.has($)?"default":"reload",signal:j?.signal});try{B=await wQ(U)}catch(O){if(U.ok)throw O;B=null}}catch(O){if(j?.signal.aborted){let L=Q.get($);if(z()&&L?.loading)this.store.next(Q.set($,{...L,loading:!1}));return}console.error(`Error fetching url /api${D}`,O),V(O);return}if(U.ok){if(X()){let L=Q.get($);if(z()&&L?.loading)this.store.next(Q.set($,{...L,loading:!1}));return}this.applied.set($,Y);let O=Q.get($);this.store.next(Q.set($,{loading:z()?!1:O?.loading??!1,data:B,hasData:!0,error:null,version:Date.now()})),this.staleVariants.delete($),this.lastFetchRecord.set($,Date.now()),this.failures.delete($)}else{let O=new t0(this.key,$,U.status,B,kQ(U.headers?.get?.("retry-after")));if(V(O),z())yQ({source:"query",path:this.key,status:U.status,body:B,headers:U.headers,error:O,refetch:()=>this.resolveVariant($,!0,!1)})}}finally{if(j){let F=this.controllers.get($);if(F?.delete(j),F?.size===0)this.controllers.delete($)}if(z())this.inflight.delete($);this.settle($)}}}import{jsx as eL}from"react/jsx-runtime";var kx=hQ(null);var pQ=hQ({getResource:($,Z={})=>{return new jZ($,Z)},hydrate:()=>{},clearErrors:()=>{}});function rL(){let $=new Map;return{getResource(Z,J){let W=$.get(Z);if(!W)W=new jZ(Z,J??{}),$.set(Z,W);return W},hydrate(Z){if(!Z)return;for(let[J,W]of Object.entries(Z)){if(!W||typeof W!=="object")continue;let Y=$.get(J);if(Y)Y.hydrate(W);else $.set(J,new jZ(J,W))}},clearErrors(){for(let Z of $.values())Z.clearError()}}}var mQ="gemi.islandQueries";if(typeof window<"u"){let $=globalThis;if(!$[Symbol.for(mQ)]){let Z=rL(),J={seed:Z.hydrate,Provider:({children:W})=>eL(pQ.Provider,{value:Z,children:W})};$[Symbol.for(mQ)]=J}}import{createContext as $M}from"react";var ZM=$M(null);function dQ($,Z={},J){let W=new Set,Y=new Map,j=J?{ensure(Q,V){let F=J.find(Q,V);if(!F||F.source!=="prefetch"||F.status==="rejected")return null;return z(F),F}}:null,z=(Q)=>Y.set(`${Q.path}?${Q.variantKey}`,Q),G={queries:j,queriesRead:Y,createQueryManager:()=>{if(!J)return null;let Q=new Map;return{getResource(V,F){let B=Q.get(V);if(!B){let U=new Map(J.entriesFor(V).filter((O)=>O.source==="prefetch"&&O.status==="resolved").map((O)=>[O.variantKey,O]));B=new jZ(V,U.size>0?Object.fromEntries(Array.from(U,([O,L])=>[O,L.data])):F??{});let D=B.peek.bind(B);B.peek=(O)=>{let L=U.get(O);if(L)z(L);return D(O)},Q.set(V,B)}return B},hydrate(){},clearErrors(){}}},islands:[],render:$,instances:new WeakMap,count:0,i18n:{},localeAware:Boolean(Z.currentLocale),i18nUsed:!1,dictionaries:[],sink:{use(Q,V,F){let B=`${Q} ${V}`;if(W.has(B))return;W.add(B),G.dictionaries.push([Q,V,F])},onUse(){}}};for(let Q of["currentLocale","defaultLocale","timeZone"])Object.defineProperty(G.i18n,Q,{enumerable:!0,get(){return G.i18nUsed=!0,Z[Q]}});return G}function cQ($){if(!$.i18nUsed&&!$.localeAware)return;let{currentLocale:Z,defaultLocale:J,timeZone:W}=$.i18n;return{...Z?{currentLocale:Z}:{},...J?{defaultLocale:J}:{},...W?{timeZone:W}:{},...$.dictionaries.length>0?{dictionaries:$.dictionaries}:{}}}function uQ($){let Z;for(let J of $.queriesRead.values()){if(J.status!=="resolved")continue;Z??={},(Z[J.path]??={})[J.variantKey]=J.data}return Z}var o3="gemi-slot",lQ="data-slot",iQ="data-gemi-slot";var WM=Symbol.for("gemi.staticRender"),sQ=globalThis[WM]??=JM(null);import{createHash as rQ}from"crypto";var I5='var r=document,i=window,a=history;i.__gemi_nav?.d();var C=new AbortController,h=(t,e,n,s)=>t.addEventListener(e,n,{signal:C.signal,...s}),q=i.__gemi_nav={d:()=>C.abort()},y=(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))},L=(t)=>{let e=t.getElementById("gemi-islands");return e?JSON.parse(e.textContent):{i:[]}},D=(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")y(n,s);else if(s.l=="idle"||!i.IntersectionObserver||!n.children.length)(i.requestIdleCallback||setTimeout)(()=>y(n,s));else{let l=new IntersectionObserver((m)=>{if(m.some((d)=>d.isIntersecting))l.disconnect(),y(n,s)});for(let m of n.children)l.observe(m)}}},R=\'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(R)?.content,O=(t)=>[...t.querySelectorAll(K)].map((e)=>e.outerHTML).join(),c=(t)=>t.href.split("#")[0],N=O(r),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},v={},U=()=>Math.random().toString(36).slice(2),E=()=>a.state?.g||a.replaceState({...a.state,g:U()},""),P=c(location),b=0,Y=(t)=>{if(!t.hasAttribute("tabindex"))t.setAttribute("tabindex","-1"),t.addEventListener("blur",()=>t.removeAttribute("tabindex"),{once:!0});t.focus({preventScroll:!0})},j=(t)=>{let e=r.body,n=t.body,s=L(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),D(e,s)},H=async(t,e)=>{let n=++b,s=!e&&v[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)||O(d)!=N)throw 0;if(e){let o=new URL(l);o.hash=t.hash,a.pushState({g:U()},"",o.href)}P=c(location),j(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)Y(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(),v[a.state.g]=[i.scrollX,i.scrollY],H(e,1)});h(i,"popstate",()=>{if(b++,c(location)==P){let t=v[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&&(v[a.state.g]=[i.scrollX,i.scrollY]),{passive:!0});var S,x=(t)=>{if(r.querySelector(R)?.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();D(r,L(r));_(!0);';import{createHash as YM}from"crypto";import{existsSync as oQ,readFileSync as jM}from"fs";import{join as S5}from"path";var aQ=".script",zM=[".ts",".js"],XM="document-scripts.json",tQ="data-gemi-script",GM=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function QM($){if(typeof $!=="string"||!GM.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 BM($,Z){for(let J of zM){let W=S5($,"views",`${Z}${aQ}${J}`);if(oQ(W))return W}return null}async function nQ($){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
|
+
`);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 E5($){return`'sha256-${YM("sha256").update($).digest("base64")}'`}var x5,C5=new Map;function VM(){if(x5===void 0){let $=S5(A5(),"dist","server",XM);x5=oQ($)?JSON.parse(jM($,"utf8")):null}return x5??null}async function b5($){QM($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=VM()?.[$];if(j!==void 0)return j;let z=C5.get($);if(z)return z}let J=S5(A5(),"app"),W=BM(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${aQ}.ts (or .js).`);if(!Z)return nQ(W);let Y=nQ(W);return C5.set($,Y),Y.catch(()=>C5.delete($)),Y}async function $C($){return E5(await b5($))}var FM="gemi-islands",UM="gemi-island-i18n",OM="gemi-island-queries",GC=`'sha256-${rQ("sha256").update(w5).digest("base64")}'`;function R5($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var k5=($)=>$.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),QC=`'sha256-${rQ("sha256").update(I5).digest("base64")}'`,DM='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',LM="gemi-static";function eQ($,Z,J,W,Y,j,z){let X=new Set,G=[];if(J)G=Z.islands.map((T)=>{let K=T.module?J(T.module):void 0;if(!K)return console.error(`[gemi] island ${T.module??"(unknown module)"}: no client build entry. Declare it as island(() => import("./Component")) so gemi's Vite plugin builds it.`),null;if(T.load==="eager"){for(let N of K.preload)X.add(N);if(T.preloadDynamic)for(let N of K.dynamicPreload??[])X.add(N)}return{s:K.src,e:T.export,l:T.load}});let Q=G.some((T)=>T!==null),V=j?`<script type="module" ${tQ}="${k5(j.name)}">${j.source}</script>`:"";if(j)z?.push(j.source);if(!Q&&!Y)return R5($,"</head>",V,!1);let B=(Y?`<meta name="${LM}" content="${k5(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...X].map((T)=>`<link rel="modulepreload" href="${k5(T)}"/>`).join("")+V,U=Y?I5:w5,D=W?DM+U:U;z?.push(D);let O=Q?cQ(Z):void 0,L=Q?uQ(Z):void 0,M=(Q?`<script type="application/json" id="${FM}">${i0({i:G})}</script>`:"")+(O?`<script type="application/json" id="${UM}">${i0(O)}</script>`:"")+(L?`<script type="application/json" id="${OM}">${i0(L)}</script>`:"")+`<script type="module">${D}</script>`;return R5(R5($,"</head>",B,!1),"</body>",M,!0)}function MM($,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 $B($){let Z=`<template ${iQ}="`;for(let J=$.lastIndexOf(Z);J!==-1;J=$.lastIndexOf(Z)){let W=MM($,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 G=`<${o3} ${lQ}="${j}" style="display:contents"></${o3}>`;$=$.split(G).join(`<${o3} style="display:contents">${X}</${o3}>`)}return $}function f5($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function YB($,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)}function HM($){let Z=$.headers.get("Cache-Control")?.toLowerCase()??"";return/(^|[\s,])(public|s-maxage)\b/.test(Z)}var ZB=new Set,KM=new Set(["public","private","s-maxage","proxy-revalidate"]);function q5($,Z){let J=$.get("Cache-Control");if(!J||$.getSetCookie().length===0)return;if(!/(^|[\s,])(public|s-maxage)\b/i.test(J))return;let W=jB(J);if(Bun.env.NODE_ENV!=="production"&&!ZB.has(Z)){ZB.add(Z);let Y=[...new Set($.getSetCookie().map((j)=>j.split("=")[0]))];console.warn(`[gemi] The view "${Z??""}" sets cookies (${Y.join(", ")}) on a response with Cache-Control "${J}", so it was sent "${W}" instead: a shared cache would hand those cookies to every visitor. To let a CDN cache the page, make it a static view with .static({ cacheControl }).`)}$.set("Cache-Control",W)}function jB($){return["private",...$.split(",").map((J)=>J.trim()).filter((J)=>{let W=J.split("=")[0].trim().toLowerCase();return W!==""&&!KM.has(W)})].join(", ")}var JB=new Set;function zB($,Z,J){let W=$.get("Cache-Control");if(!W||!/(^|[\s,])(public|s-maxage)\b/i.test(W))return;let Y=jB(W);if(J&&Bun.env.NODE_ENV!=="production"&&!JB.has(Z))JB.add(Z),console.warn(`[gemi] The static view "${Z??""}" asked for a CSP nonce (cspNonce()) on a response with Cache-Control "${W}", so it was sent "${Y}" instead: a shared cache would hand the same nonce to every visitor. Allow a static page's scripts by hash instead (route.view.csp does).`);$.set("Cache-Control",Y)}var WB=new Set;function XB($,Z){if(!HM($)||$.headers.getSetCookie().length===0)return $;if(Bun.env.NODE_ENV!=="production"&&!WB.has(Z))WB.add(Z),console.warn(`[gemi] The file route "${Z??""}" set a cookie on a response with Cache-Control "${$.headers.get("Cache-Control")}", so the cookie was not sent: a shared cache would hand it to every visitor. Make the response private, or set the cookie elsewhere.`);try{return $.headers.delete("Set-Cookie"),$}catch{let J=new Headers($.headers);return J.delete("Set-Cookie"),new Response($.body,{status:$.status,statusText:$.statusText,headers:J})}}var TM="'strict-dynamic' 'self' https: 'unsafe-inline'",GB="Content-Security-Policy",QB="Content-Security-Policy-Report-Only";function PM($,Z={}){let J=[...$.nonce?[`'nonce-${$.nonce}'`]:[],...$.hashes??[]],W=[J.length>0?`script-src ${J.join(" ")} ${TM}`:"script-src 'none'","object-src 'none'","base-uri 'self'"];if(Z.reportUri)W.push(`report-uri ${Z.reportUri}`);return W.join("; ")}function v5($,Z,J){if(!Z)return;if($.has(GB)||$.has(QB))return;let W=Z===!0?{}:Z;$.set(W.reportOnly?QB:GB,PM({nonce:J.nonce,hashes:[...new Set(J.inlineScripts??[])].map(E5)},W))}var _M=async()=>(await import("./chunk-gx2fhmnx.js")).default,g5,a3=async(...$)=>{return g5??=import("react-dom/server.browser").catch((Z)=>{throw g5=void 0,Z}),(await g5).renderToReadableStream(...$)},VB=1e4,FB="no-locale",IM="no-theme";async function xM($,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 c5="/assets";function CM($){return $===c5||$.startsWith(`${c5}/`)}function AM($){let Z=$.filter(CM);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 "${c5}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else, or set \`assetRoutes: true\` on these views' config (route.view or a route.domains group's view).`)}}function SM($){let Z=H(B1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function y5($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function EM($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class t3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];requiredViews={};staticRoutes=[];root=null;shellReporter=EQ();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;detectLocale;theme;defaultMeta;notFound;publicFiles;assetRoutes;translate;csp;constructor($,Z={}){let J=oG();if(this.partialRendering=$.partialRendering??J.partialRendering,this.localeRouting=$.localeRouting??J.localeRouting,this.detectLocale=$.detectLocale,this.detectLocale&&this.localeRouting!=="off")throw Error('`view.detectLocale` needs `view.localeRouting: "off"`: on locale-routed views the URL, the `i18n-locale` cookie and `Accept-Language` decide the locale. A `route.domains` group that inherits it and keeps locale routing can set `detectLocale: undefined`.');this.theme=$.theme??J.theme,this.defaultMeta=$.meta,this.notFound=$.notFound,this.publicFiles=$.publicFiles??J.publicFiles,this.assetRoutes=$.assetRoutes??J.assetRoutes,this.translate=$.translate,this.csp=$.csp,this.hooks={onNotFound:$.onNotFound??J.onNotFound,onRequestStart:$.onRequestStart??J.onRequestStart,onRequestEnd:$.onRequestEnd??J.onRequestEnd,onRequestFail:$.onRequestFail??J.onRequestFail,onStreamComplete:$.onStreamComplete??J.onStreamComplete};let W={"/":$.rootRouter,"/auth":pG(Z)};if(this.requiredViews=Object.fromEntries(mG(Z).map(({view:Y,requiredBy:j})=>[Y,j])),this.flatViewRoutes=o4(W),!this.assetRoutes)AM(Object.keys(this.flatViewRoutes));this.routeManifest=t4(W),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,Y])=>Y.at(-1)!=="FILE")),this.componentTree=e4(W),this.flatComponentTree=D5(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,Y])=>Y.static).map(([Y])=>Y);for(let Y of this.staticRoutes){let j=this.flatViewRoutes[Y].static?.layout;if(j&&!this.flatComponentTree.includes(j))this.flatComponentTree.push(j)}if(this.notFound){for(let Y of[this.notFound.view,this.notFound.static?.layout])if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=H(W$);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)Z8();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{zZ.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 G=new Set(Z?.preload??[]);for(let Q of W)for(let V of J?.[Q]??[])G.add(V);return[...G].map((Q)=>i1("link",{key:`modulepreload:${Q}`,rel:"modulepreload",href:Q}))};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}=$,G;if(W.layout){if(G=$.viewImportMap[W.layout],!G)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 Q=await $.getStyles(Y,{static:!0,layout:W.layout});z.markRenderStart();let V=d5(),F=new AbortController,B=setTimeout(()=>F.abort(),VB),U=(O)=>{if(Bun.env.NODE_ENV!=="production")console.error(O)},D=dQ(async(O,L)=>{let M=await a3(O,{signal:F.signal,identifierPrefix:L,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:U});return await M.allReady.catch(()=>{}),await new Response(M).text()},{currentLocale:j?.i18n?.currentLocale,defaultLocale:j?.i18n?.defaultLocale,timeZone:j?.i18n?.timeZone},z);try{let O,L=typeof W.script==="function"?await J(()=>W.script(Z)):W.script;if(L)O={name:L,source:await b5(L)};let M;if(W.navigation){let C=W.navigation===!0?{}:W.navigation,S=C.version?String(await J(()=>C.version(Z))):"";M={identity:[W.layout??"",$.buildId??"",O?.name??"",S].join("|"),prefetch:C.prefetch==="none"?"none":"intent"}}let T=await a3(i1(sQ.Provider,{value:D,children:i1(BB,{children:[...Q,i1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:V,rootLayout:G,key:"root"})]})}),{signal:F.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:U});await T.allReady.catch(()=>{});let K=$B(await new Response(T).text()),N=[],R=eQ(K,D,$.resolveIsland,Bun.env.NODE_ENV!=="production",M,O,N);return v5(X,this.csp,{nonce:m5(Z.rawRequest),inlineScripts:N}),new Response(R,{status:$.status,headers:X})}finally{clearTimeout(B),J(()=>this.completeStream(Z,z.summarize(F.signal.aborted)))}}async render($){let{req:Z,runInRequestScope:J,csrfTokenHMAC:W,currentPathName:Y,headers:j,i18n:z,params:X,pathname:G,serverQueries:Q,userAgent:V,noStream:F,noTheme:B,url:U,user:D,viewData:O,breadcrumbs:L,urlLocaleSegment:M,meta:T,isOgRequest:K,appId:N,features:R,staticView:C,cspNonce:S}=$,w=this.theme===!1||B||C?null:{cookie:this.theme.cookie??rW,default:this.theme.default??null,value:bM(Z,this.theme.cookie??rW)},x=M?AQ(G,[M]).pathname:G,f={kind:"view",data:{meta:T,pageData:{[x]:O},__csrf:W.toString("base64"),prefetchedData:{},i18n:z,auth:{user:D},routeManifest:this.clientRouteManifest,breadcrumbs:L,router:{urlLocaleSegment:M,pathname:Y,params:X,currentPath:G,searchParams:U.search,is404:!Y?!0:!1,domain:Z.domain?SM(Z):null},appId:N,features:R,theme:w,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},_=this.root,k=this.routeManifest[Y];return async(H0)=>{let{bootstrapModules:j3=[],loaders:BZ,getStyles:I$,viewImportMap:d,cssManifest:g,ogMap:F0,viewModules:V1,clientEntry:x$,modulePreloadManifest:z3,assetBase:u0,resolveIsland:C$,buildId:S1}=H0,E1=x$?[]:j3,l=(y)=>[y,`window.loaders=${BZ}`,...x$?[`import(${JSON.stringify(x$.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(K){let y=null,F1=null;for(let E of k??[])if(typeof F0[E]==="function")F1=E,y=F0[E];if(!y)return new Response("Not found",{status:404});let $6=Object.values(f.data.pageData)[0];try{await a3(i1(y,$6[F1]),{onError:()=>{}})}catch(E){let{fonts:r,...o1}=E.satoriOptions,Z6=await Promise.all(r.map((J6)=>{return xM(J6.name,J6.weight,J6.style).then((NV)=>({...J6,data:NV}))})),T2=new Headers(j);T2.set("Content-Type","image/png");let[HV,KV]=await Promise.all([_M(),s4("Rendering an OG image")]),TV=await HV(E.jsx,{...o1,fonts:Z6}),PV=await KV(Buffer.from(TV)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(PV),{headers:T2})}return new Response("data")}if(C&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:C,currentViews:k,data:f.data,serverQueries:Q,headers:j,getStyles:I$,viewImportMap:d,viewModules:V1,resolveIsland:C$,buildId:S1,status:200});if(C&&!Y&&this.notFound){let y=this.notFound.view;if(!d[y])throw Error(`The not-found view "${y}" (route.view.notFound) was not found. It is a view path: a file at app/views/${y}.tsx.`);return await this.renderStatic({req:Z,runInRequestScope:J,staticView:C,currentViews:[y],data:f.data,serverQueries:Q,headers:j,getStyles:I$,viewImportMap:{...d,"404":d[y]},viewModules:V1&&{...V1,"404":V1[y]},resolveIsland:C$,buildId:S1,status:$.refusedStatus??404})}if(f.data.cssManifest=g,f.data.modulePreloadManifest=z3??{},u0&&u0!=="/")f.data.assetBase=u0;if(S1&&S1!=="dev")f.data.buildId=S1;let H8=UB(this.modulePreloadLinks({clientEntry:x$,modulePreloadManifest:z3,views:k??["404"],routeKey:Y??"404"}),S),K8=UB(await I$(k??["404"]),S);f.data.prefetchedData=Q.snapshotResolved(),Q.markRenderStart();let r0=new AbortController,VZ=setTimeout(()=>r0.abort(),VB),A$=_6(V)||F,n1=Bun.env.NODE_ENV!=="production"&&!A$&&Y&&this.shellReporter.shouldObserve(Y)?bQ():null,S$=d5();try{let y=await a3(i1(BB,{children:CQ(H8,[...K8,...w?[i1("script",{key:"theme-script",nonce:S,dangerouslySetInnerHTML:{__html:eG(i0({cookie:w.cookie,default:w.default}))}})]:[]],i1(_,{data:f.data,viewImportMap:d,viewModules:V1,serverQueries:Q,dictionarySink:S$,cspNonce:S,key:"root"}))}),{bootstrapScriptContent:l(`window.__GEMI_DATA__ = ${i0(f.data)}`),bootstrapModules:E1,nonce:S,signal:r0.signal,...A$?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(F1){if(Bun.env.NODE_ENV!=="production")console.error(F1)}});if(y.allReady.catch(()=>{}).finally(()=>clearTimeout(VZ)),A$)await y.allReady.catch(()=>{});return new Response(Y7(y,Q,{onShell:A$?void 0:()=>Q.markShell(),onChunk:n1?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,Q.summarize(r0.signal.aborted)),n1)this.shellReporter.report(Y,n1.measure())})},S$,S),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(y){if(clearTimeout(VZ),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,Q.summarize(r0.signal.aborted))),y;let F1=await a3(i1("div"),{bootstrapScriptContent:l(`window.error= ${i0(y.message)}; window.stack_trace=${i0(y.stack)};window.__GEMI_DATA__ = ${i0(f.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...E1]:E1,nonce:S});return new Response(Y7(F1,Q,{onClose:()=>J(()=>this.completeStream(Z,Q.summarize(r0.signal.aborted)))},void 0,S),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(R$(Z))return 404;if(Z?.kind===e1){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if($$(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof t0&&(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("/"),G=j,Q=null,V=null,F=H(c),B=s3(this.flatViewRoutes,j),U=F.isLocaleAware&&this.localeRouting==="prefix"&&!B?.route.middleware.includes(FB);if(U&&F.supportedLocales.includes(z))G=`/${X.join("/")}`,Q=z,V=z;if(($.method==="GET"||$.method==="HEAD")&&!W&&!Y&&B===null&&J.pathname.endsWith("/")&&!J.pathname.startsWith("//")){let _=J.pathname.replace(/\/+$/,""),k=U&&F.supportedLocales.includes(_.slice(1));if(_&&!k)return new Response("",{status:301,headers:{Location:`${_}${J.search}`}})}if(U&&!Y&&V===null&&!(V===null&&B!==null)){let _=h5(z,F.supportedLocales,F.defaultLocale);if(_){let k=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${k}${W?".json":""}${J.search}`}})}}if(U&&!Y){let _=H(c).detectLocale(new A($,{},"view",G));if(V===null&&_!==F.defaultLocale){let k=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${k}${J.search}`}})}}G=G.replace("//","/");let O=[],L=[],M=null,T={},K=null,N=!1,R=!1,C=[],S,w=!1,x=!1;try{let _=s3(this.flatViewRoutes,G);if(V&&_?.route.middleware.includes(FB))_=null;if(_){if(w=!0,M=_.routePath,T=_.params,O=_.route.exec,L=_.route.middleware,C=_.route.features,N=L.includes("no-stream"),R=L.includes(IM),S=_.route.static,x=_.route.segments.at(-1)?.viewPath==="FILE",W&&this.partialRendering){let k=$.headers.get(O5),H0=_Q({flatViewRoutes:this.flatViewRoutes,supportedLocales:H(c).supportedLocales,from:k,origin:J.origin,to:{segments:_.route.segments,params:T,search:J.search}});if(H0.startIndex>0)O=O.slice(H0.startIndex),K={from:k,carriedViews:H0.carriedViews}}}}catch(_){throw _}if(S&&W)return new Response("Not found",{status:404});let f=new A($,T,"view",M);return this.hooks.onRequestStart(f),await P.run(f,async()=>{let _=null,k=P.getStore(),H0=$3.getStore(),j3=(g)=>$3.run(H0,()=>P.runWith(k,g));k.serverQueries=new rZ(n3($));let BZ=new Set;k.serverQueries.onQueryFail((g)=>{BZ.add(g.error);try{j3(()=>Promise.resolve(this.hooks.onRequestFail(d,g.error)).catch(()=>{}))}catch{}});let I$=f5(x?{}:S??(M===null&&!W?this.notFound?.static:void 0));if(V){let g=V.replaceAll("/","");_$.setLocale(g,{cookie:I$.locale})}else if(F.isLocaleAware&&!U)k.setLocale(F.defaultLocale);else _$.setLocale(void 0,{cookie:I$.locale});let d=k.req;if(I$.session)Z8();try{let g=null;if(this.detectLocale&&!U&&H(c).isLocaleAware){let{supportedLocales:E,defaultLocale:r}=H(c),o1=await this.detectLocale(d,{supportedLocales:E,defaultLocale:r}),Z6=typeof o1==="string"?h5(o1,E,r):null;if(Z6)k.setLocale(Z6)}try{await H(r1).runMiddleware(L)}catch(E){if(g=this.viewRefusalStatus(d,E,BZ),g===null)throw E}if(g!==null||C.length>0&&!await this.passesFeatureGates(C))M=null,O=[],d.routePath="";let F0=H(c),V1=F0.isEnabled,x$=F0.isLocaleAware,z3=new A($,d.params),u0={defaultLocale:F0.defaultLocale,timeZone:F0.detectTimeZone(z3)};if(x$){let E=null;if(V)E=V.replaceAll("/",""),k.setLocale(E);else if(!U)E=k.locale??F0.defaultLocale;else E=F0.detectLocale(z3),k.setLocale(E);let r=V1?F0.getPageTranslations(E,d.routePath):{};u0={...u0,supportedLocales:F0.supportedLocales,currentLocale:E,dictionary:{[E]:r},defaultLocale:F0.defaultLocale,...U?{}:{localeRouting:"off"}}}await p5(u0.currentLocale??"");let C$;try{C$=await Promise.all(O.map((E)=>E(d)))}catch(E){if(g=this.viewRefusalStatus(d,E,BZ),g===null)throw E;M=null,O=[],d.routePath="",C$=[]}let S1=void 0;if(M===null){if(S1=await this.hooks.onNotFound(d,{status:g??404}),x$&&!U&&k.locale&&k.locale!==u0.currentLocale){let E=k.locale;u0={...u0,currentLocale:E,dictionary:{[E]:V1?F0.getPageTranslations(E,d.routePath):{}}},await p5(E)}}if(this.defaultMeta&&!k.metadata.hasAllDefaultFields)k.metadata.applyDefaults(typeof this.defaultMeta==="function"?await this.defaultMeta(d):this.defaultMeta);if(this.translate!==void 0)k.metadata.applyTranslateDefault(this.translate);let{cookies:E1,headers:l}=k;if(g!==null)l.set("Cache-Control","no-store");_={data:C$,cookies:E1,headers:l,user:k.user,prefetchedData:k.serverQueries.snapshotResolved(),currentPathName:M,params:d.params,urlLocaleSegment:Q,meta:k.renderMeta(),appId:H(L5).id,features:await H(W$).forClient()};let{params:H8,user:K8}=_,r0={},VZ={};for(let E of C$??[]){let[r,o1]=Object.entries(E)?.[0]??[];if(!r||!o1)continue;VZ[`${r}:${M}`]=o1.breadcrumb,r0[r]=o1}let A$=M===null&&this.notFound&&!W?this.notFound.static:void 0;if(A$&&S1)r0["404"]=S1;let n1=r0.FILE;if(n1){try{await this.onRequestEnd(d,{mintSession:!1})}catch(r){zZ.error(r?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(r)})}let E;if(n1 instanceof Response)E=W8(n1,l,E1);else{for(let r of E1)l.append("Set-Cookie",r.toString());E=await R8(n1,l)}return XB(E,M)}if(W){l.set("Content-Type","application/x-ndjson; charset=utf-8"),l.append("Vary",O5),E1.forEach((r)=>l.append("Set-Cookie",r.toString())),q5(l,M),await this.hooks.onRequestEnd(d);let E={meta:K&&!k.metadata.touched?null:_.meta,data:{[G]:r0},breadcrumbs:VZ,prefetchedData:k.serverQueries.snapshotResolved(),i18n:u0,features:_.features,is404:!M,appId:_.appId,partial:K};return new Response(RQ(E,k.serverQueries,void 0,({aborted:r})=>j3(()=>this.completeStream(d,k.serverQueries.summarize(r)))),{headers:l})}l.set("Content-Type","text/html; charset=utf-8");let S$=M?S:A$,y=Boolean(S$),F1=f5(S$);if(!N&&!y)l.append("Vary","User-Agent");if(!y||F1.session)Z8();for(let E of E1)l.append("Set-Cookie",E.toString());if(!y||F1.csrf){let E=Bun.CSRF.generate(process.env.SECRET);l.append("Set-Cookie",`csrf_token=${E}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(d,{mintSession:!y||F1.session})}catch(E){zZ.error(E?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(E)})}if(y&&(M||!w))YB(l,S$);q5(l,M);let $6=y?void 0:OB($);if(!y)v5(l,this.csp,{nonce:$6});if(m5($))zB(l,M,y);return await this.render({req:d,runInRequestScope:j3,csrfTokenHMAC:Buffer.from(""),currentPathName:M,headers:l,i18n:u0,params:H8,pathname:J.pathname,serverQueries:k.serverQueries,userAgent:$.headers.get("user-agent"),noStream:N,noTheme:R,url:J,user:K8,viewData:r0,breadcrumbs:VZ,urlLocaleSegment:Q,meta:_.meta,appId:_.appId,features:_.features,isOgRequest:Y,staticView:S$,refusedStatus:g??void 0,cspNonce:$6})}catch(g){if(g.kind===e1){let F0=W?EM(g.payload.viewData??g.payload.api):y5(g.payload.view);for(let V1 of k.cookies)F0.headers.append("Set-Cookie",V1.toString());return F0}if(!BZ.has(g))this.hooks.onRequestFail(d,g);if($$(g))return console.error(g),W?eZ():y5(M5());if(g instanceof t0&&g.status===403)return W?eZ():y5(M5());throw g}},Z)}}function UB($,Z){return Z?$.map((J)=>NM(J,{nonce:Z})):$}function bM($,Z){let J=$.cookies?.get(Z);return rG(J)?J:null}function u5(){let $=JSON.stringify({error:Z$("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 HB extends x0{routes={"/api-routes":this.get(()=>{let $=H(Y8).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 $=H(t3).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 RM=new Set([t1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),kM=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,wM=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function fM($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(RM.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===t1)throw Error(`dispatchAs: credentials may not set the "${t1}" cookie. The access token stays the initiator's.`);if(!kM.test(Y)||!wM.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function qM($,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(G){Y(),z.error(G);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 DB($){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 W8($,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,G]of W){if(X.toLowerCase()==="set-cookie")continue;if(!z.has(X))z.set(X,G)}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})}}function vM(){return Bun.env.NODE_ENV==="development"}class Y8{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=nG();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=oW({"/":$.rootRouter,"/auth":cW,"/__gemi__/services/i18n":uW,"/__gemi__/services/image":sW,...vM()?{"/__gemi__/services/logs":nW,"/__gemi__/debug":HB}:{}})}getRouteHandlerAndParams($){let Z=new URL($.url),J=MB(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 H(r1).runMiddleware(W)}catch(Y){if(Y.kind===e1)return DB(Y.payload.api);else{if(R$(Y))return u5();if(this.onRequestFail(Z,Y),console.error(Y),$$(Y))return eZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=P.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===e1)return DB(j.payload.api);if(R$(j))return u5();if(this.onRequestFail(J.req,j),console.error(j),$$(j))return eZ();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){zZ.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:Z$("not_found","Not found",404)}),{status:404});let j=new A($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await P.run(j,async()=>{let z=P.getStore(),X=!1,G=async()=>{X=!0,await this.endRequest(z,j,W)};try{let Q=H(c);if(Q.isEnabled){let O=Q.detectLocale(j);z.setLocale(O)}z.setRequest(j),H(r1).applyDefaultBodyLimit($,Y[$.method].bodyLimitDefault);let V=await this.runRouteMiddleware(W,j);if(V instanceof Response){let O=W8(V,z.headers,z.cookies);return await G(),O}let F=await this.getRouteData(W),B=z.headers,U=z.cookies;if(F instanceof Response){let O=W8(F,B,U);if(this.isOpenEndedBody($,O)){let L=qM(O,()=>this.endRequest(z,j,W));return X=!0,L}return await G(),O}let D=(a1(F)?F:U1.json(F)).toResponse(B,U);return await G(),D}catch(Q){if(!X)try{await G()}catch(V){console.error(V)}throw Q}},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 G=Y?.identity;if(G!==void 0&&(typeof G!=="object"||!G?.user))throw Error("dispatchAs: identity needs the user to dispatch as.");let Q=new Headers,V=[],F=G?null:$.cookies.get(t1);if(F)V.push(`${t1}=${F}`);if(Y?.credentials)fM(Q,V,Y.credentials,G!==void 0);if(V.length>0)Q.set("Cookie",V.join("; "));let B=G?null:$.headers.get(t1);if(B)Q.set(t1,B);let U=$.headers.get("User-Agent");if(U)Q.set("User-Agent",U);let D;if(W instanceof FormData)D=W;else if(W!==void 0)Q.set("Content-Type","application/json"),D=JSON.stringify(W);let O=new Request(z,{method:Z,headers:Q,body:D,...Y?.signal?{signal:Y.signal}:{}});if(LB(O,DZ($),G?.grant,Y?.progress),$.domain)Z3(O,$.domain);let L=G?{user:G.user}:void 0;return P.exit(()=>Q6.exit(()=>this.handleApiRequest(O,L)))}}import{timingSafeEqual as gM}from"crypto";var X8="",s5="*",yM=60000,mM=1e4,j8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,z8=16,l5=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,i5="x-forwarded-host";function TB($){return $.startsWith(":")}function r3($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&gM(J,W)}function hM($){if(!$)return[];if($===!0)return[{header:i5,clientIpHeader:null,secret:null}];let Z=Array.isArray($)?$:[$],J=Array.isArray($)?null:i5;return Z.map((W)=>({header:W.hostHeader?.toLowerCase()??J,clientIpHeader:W.clientIpHeader?.toLowerCase()??null,secret:W.secret?{header:W.secret.header.toLowerCase(),value:W.secret.value}:null}))}function pM($){if(!$||$===!0)return;if(!Array.isArray($)){KB($,"route.domains.trustProxy",i5);return}if($.length===0)throw Error("`route.domains.trustProxy` is an empty list. List at least one proxy, or leave `trustProxy` out.");let Z=new Map;$.forEach((J,W)=>{let Y=`route.domains.trustProxy[${W}]`;if(typeof J!=="object"||J===null||Array.isArray(J))throw Error(`\`${Y}\` must be an object: { hostHeader?, clientIpHeader?, secret }. \`true\` is only accepted on its own.`);if(!J.secret)throw Error(`\`${Y}.secret\` is required: in a list, each proxy proves itself with a secret of its own.`);if(J.hostHeader===void 0&&J.clientIpHeader===void 0)throw Error(`\`${Y}\` names neither \`hostHeader\` nor \`clientIpHeader\`, so it would trust nothing.`);KB(J,Y,null);let j=Z.get(J.secret.value);if(j!==void 0)throw Error(`\`${Y}.secret.value\` is the same as \`route.domains.trustProxy[${j}].secret.value\`. Give each proxy a secret of its own.`);Z.set(J.secret.value,W)})}function KB($,Z,J){let{hostHeader:W,clientIpHeader:Y,secret:j}=$;if(W!==void 0&&(typeof W!=="string"||!l5.test(W)))throw Error(`\`${Z}.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(W)}.`);let z=(W??J)?.toLowerCase()??null;if(Y!==void 0){if(typeof Y!=="string"||!l5.test(Y))throw Error(`\`${Z}.clientIpHeader\` must be a single header name, e.g. "x-client-ip". Got ${JSON.stringify(Y)}.`);if(!j)throw Error(`\`${Z}.clientIpHeader\` needs \`secret\`: without proof the proxy sent it, any client that reaches the app directly picks its own address.`);if(Y.toLowerCase()===z)throw Error(`\`${Z}.clientIpHeader\` names the same header as \`hostHeader\`.`);if(typeof j.header==="string"&&Y.toLowerCase()===j.header.toLowerCase())throw Error(`\`${Z}.clientIpHeader\` names the same header as \`secret.header\`.`)}if(!j)return;if(typeof j.header!=="string"||!l5.test(j.header))throw Error(`\`${Z}.secret.header\` must be a header name. Got "${j.header}".`);if(j.header.toLowerCase()===z)throw Error(`\`${Z}.secret.header\` names the same header as \`hostHeader\`; the secret needs a header of its own.`);if(typeof j.value!=="string"||j.value.length<z8)throw Error(`\`${Z}.secret.value\` must be at least ${z8} characters. A guessable one lets any client name its own host.`)}function x1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function dM($){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 PB($){if($===void 0)return[];if($===!0)return!0;if(!Array.isArray($))throw Error(`\`route.domains.devHosts\` must be a list of hostnames (or \`true\`). Got ${JSON.stringify($)}.`);return $.map((Z,J)=>{let W=typeof Z==="string"?Z.trim().toLowerCase():"",Y=W.startsWith(".")?W.slice(1):W;if(!Y||!Y.split(".").every((j)=>j8.test(j)))throw Error(`\`route.domains.devHosts[${J}]\` must be a bare hostname, e.g. "app.acme.test", or ".acme.test" for the domain and its subdomains \u2014 no scheme, port, path or "*". Got ${JSON.stringify(Z)}.`);return W})}function cM($){let Z=x1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>j8.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<z8)throw Error(`\`route.domains.ask.secret\` must be at least ${z8} characters. A guessable one is worse than leaving \`ask\` out.`);pM($.trustProxy),PB($.devHosts);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),TB(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)=>j8.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 n5{root;devHosts;hostTrusts;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeaders;constructor($){cM($),this.root=x1($.root),this.devHosts=PB($.devHosts),this.hostTrusts=hM($.trustProxy);for(let Z of $.groups??[])if(TB(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??yM,this.askSecret=$.ask?.secret??null,this.proxySecretHeaders=Array.from(new Set(this.hostTrusts.flatMap((Z)=>Z.secret?[Z.secret.header]:[])))}trustOf($){let Z=null;for(let J of this.hostTrusts)if((!J.secret||r3($.headers.get(J.secret.header),J.secret.value))&&!Z)Z=J;return Z}forwardedHost($){let Z=this.trustOf($)?.header;if(!Z)return null;return $.headers.get(Z)?.split(",")[0]?.trim()||null}trustedClientIp($){let Z=this.trustOf($);if(!Z?.clientIpHeader||!Z.secret)return null;let J=$.headers.get(Z.clientIpHeader)?.split(",")[0];return J===void 0?null:w$(J)}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return x1(this.forwardedHost($))??x1(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&&x1(Y)?dM(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:s5,params:{},custom:!0};return null}async allows($,Z){let J=x1($);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:X8,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&&j8.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>=mM)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=x1($);if(Z)this.cache.delete(Z)}}}var uM={kind:"none"};function yA($){let Z=($??"").trim().toLowerCase();if(Z===""||Z==="false"||Z==="off"||Z==="0")return uM;if(Z==="true")return{kind:"all"};if(/^[1-9]\d*$/.test(Z))return{kind:"hops",hops:Number(Z)};throw Error(`GEMI_TRUST_PROXY must be "false", "true" or the number of proxies in front of the app (e.g. 1). Got ${JSON.stringify($)}.`)}function mA($,Z,J){if(J.kind==="all"){if(!$.get("x-forwarded-for")&&Z)$.set("x-forwarded-for",Z);return}$.delete("x-real-ip");let W=Z;if(J.kind==="hops"){let Y=($.get("x-forwarded-for")??"").split(",").map((X)=>X.trim()).filter(Boolean),j=Y.length-J.hops,z=j>=0?Y[j]:Y[0];W=(z===void 0?null:w$(z))??Z}if(W)$.set("x-forwarded-for",W);else $.delete("x-forwarded-for")}var NB=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,_B=16;function hA($){let Z=$.GEMI_CLIENT_IP_HEADER?.trim()??"",J=$.GEMI_PROXY_SECRET_HEADER?.trim()??"",W=$.GEMI_PROXY_SECRET??"";if(Z===""&&J===""&&W==="")return null;if(Z===""||J===""||W==="")throw Error("GEMI_CLIENT_IP_HEADER, GEMI_PROXY_SECRET_HEADER and GEMI_PROXY_SECRET go together: the client-IP header is only believed on a request that carries the proxy's secret. Set all three, or none.");if(!NB.test(Z))throw Error(`GEMI_CLIENT_IP_HEADER must be a single header name, e.g. "x-azure-clientip". Got ${JSON.stringify(Z)}.`);if(!NB.test(J))throw Error(`GEMI_PROXY_SECRET_HEADER must be a single header name, e.g. "x-azure-fdid". Got ${JSON.stringify(J)}.`);if(Z.toLowerCase()===J.toLowerCase())throw Error("GEMI_CLIENT_IP_HEADER and GEMI_PROXY_SECRET_HEADER name the same header.");if(W.length<_B)throw Error(`GEMI_PROXY_SECRET must be at least ${_B} characters. A guessable one lets any client name its own address.`);return{header:Z.toLowerCase(),secretHeader:J.toLowerCase(),secret:W}}function IB($,Z){if(!r3($.get(Z.secretHeader),Z.secret))return null;let J=$.get(Z.header)?.split(",")[0];return J===void 0?null:w$(J)}var lM="/__gemi__/domains/ask";class B1{static token="router.domains";resolver;acceptsCustomDomains;clientIpTrust;groups=new Map;staticFilesVary=!1;constructor($,Z){this.groups.set(X8,$),this.clientIpTrust=Z.clientIpTrust??null;let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new n5(J);let W=(Y)=>({api:Y.api?new Y8({...Z.api,...Y.api}):$.api,view:Y.view?new t3({...Z.view,...Y.view},Z.auth):$.view});for(let Y of J.groups??[])this.groups.set(Y.subdomain,W(Y));if(J.custom?.fallback)this.groups.set(s5,W(J.custom.fallback));this.staticFilesVary=this.viewDispatchers().some((Y)=>Y.publicFiles!==$.view.publicFiles||Y.assetRoutes!==$.view.assetRoutes)}async staticFiles($){let Z=(this.staticFilesVary?await this.route($):null)?.view??this.dispatchers(null).view;return{publicFiles:Z.publicFiles,assetRoutes:Z.assetRoutes}}applyClientIp($){let Z=this.clientIpTrust;if(Z)o5($,Z.secretHeader);let J=this.resolver?.trustedClientIp($)??(Z?IB($.headers,Z):null);if(!J)return;$.headers.set("x-forwarded-for",J),$.headers.delete("x-real-ip")}async route($){if(!this.resolver)return this.dispatchers(null);for(let J of this.resolver.proxySecretHeaders)o5($,J);let Z=$8($)??await this.resolver.resolve($);if(!Z)return null;return Z3($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==lM)return null;if(!r3(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??X8)}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 W3($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var xB=600000;function CB($,Z){return[K6($,Z),K6($,Z-1)]}class b{static token="auth";config;provider;constructor($={},Z=new Q7){u9($.oauthProviders),this.config={..._1(l9($),$),emailCode:W7($.emailCode),passwordLimits:J7($.passwordLimits)},this.provider=Z}async oauthProvider($){return await TZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await XY(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=H().bound(B1)?H(B1).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"?H(B1).resolver?.root:x1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??x1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!n8($))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=W3(J.expiresAt),j=W3(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=P.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/xB),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 Q=K6($,j),V=X.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:Q,userId:V,userAgent:Z,...this.freshLifetime(Y)}),!0}))z=Q}if(!z){for(let Q of CB($,j))if((await this.userProvider.findSession({token:Q,userAgent:Z}))?.user){z=Q;break}}if(!z)return null;let G=await this.getSession(z,Z);if(G)W.ctx().setCookie("access_token",z,this.accessTokenCookieOptions(W,new Date(G.expiresAt)));return G}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(n8($)||!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()/xB),W=CB($,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=P.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 A;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 A,J=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!J)throw new k$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=E9(J),j=await this.userProvider.createSessionV2({token:Y,userId:J,userAgent:W,...this.freshLifetime(Date.now())}),z=null;try{z=await this.userProvider.findSession({token:Y,userAgent:W??""})}catch(X){console.error("Reading the new session back failed:",X)}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){let{activeCodes:J,expiresInMinutes:W,linkExpiresInMinutes:Y}=this.config.emailCode,j=await this.config.generateMagicLinkToken($),z=await this.config.generateCode($),X=typeof z==="string"&&z!==""?z:q9(Z),G=T6("link",$,j),Q=T6("pin",$,X);if(J===1)await this.userProvider.deleteMagicLinkToken($);else{let V=Math.max(W,Y)*60000,B=(await this.userProvider.listMagicLinkTokensByEmail($,J-1)).filter((U)=>W3(U.createdAt)+V>Date.now()&&U.pin!==Q&&U.token!==G);await this.userProvider.deleteMagicLinkTokensExcept($,B.map((U)=>U.id))}return await this.userProvider.createMagicLinkToken({email:$,token:G,pin:Q}),{email:$,pin:X,token:j}}async oneTimeCodeRows($){let{activeCodes:Z}=this.config.emailCode;if(Z===1){let J=await this.userProvider.findMagicLinkTokenByEmail($);return J?[J]:[]}return await this.userProvider.listMagicLinkTokensByEmail($,Z)}async claimOneTimeCode($,Z){if(!await this.userProvider.claimMagicLinkToken(Z))return!1;if(this.config.emailCode.activeCodes>1)await this.userProvider.deleteMagicLinkToken($);return!0}async verifyOneTimeCode($,Z,J={}){let{expiresInMinutes:W,maxAttempts:Y}=this.config.emailCode,j=await this.oneTimeCodeRows($);if(j.length===0)return KZ("pin",$,null,Z),{status:"invalid"};let z=j.filter((Q)=>W3(Q.createdAt)+W*60000>Date.now());if(z.length===0)return KZ("pin",$,null,Z),{status:"expired"};let X=!0;for(let Q of z)if(!await y9(Q.id,W3(Q.createdAt),Y,W))X=!1;if(!X){if(this.config.emailCode.activeCodes===1)await this.userProvider.claimMagicLinkToken(z[0].id);else await this.userProvider.deleteMagicLinkToken($);return{status:"too_many_attempts"}}let G=null;for(let Q of z)if(KZ("pin",$,Q.pin,Z))G??=Q;if(!G)return{status:"invalid"};if(J.claim!==!1&&!await this.claimOneTimeCode($,G.id))return{status:"invalid"};return{status:"ok",row:G}}async verifyMagicLinkToken($,Z){let J=await this.oneTimeCodeRows($);if(J.length===0)return KZ("link",$,void 0,Z),!1;let W=null;for(let j of J)if(KZ("link",$,j.token,Z))W??=j;if(!W)return!1;if(W3(W.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.claimOneTimeCode($,W.id)}}class f0 extends h{static getFacadeAccessor(){return b}static async user(){let $=await f0.userOrNull();if($)return $;throw new k$({redirectTo:V6(P.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=P.getStore();if($?.user)return $.user;let Z=await j6(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=P.getStore()?.req;return O1(Z?.search.get(l0),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await f0.user();if(!await $(Z))throw new LZ}static async guardSafe($){let Z=await f0.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 G8{static ensure($,Z={}){let J=P.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new rZ(n3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=G8.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){G8.ensure($,Z[0])}static noPrefetch(){let $=P.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new rZ(n3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function iM($){return(Array.isArray($)?$:String($).split("/")).map((J)=>encodeURIComponent(String(J))).join("/")}function a5($,Z={}){let J=$.replace(/\/:(\w+)([*?]?)/g,(W,Y,j)=>{let z=Object.hasOwn(Z,Y)?Z[Y]:void 0;if(z===void 0||z===""){if(j)return"";throw Error(`\`${$}\` needs a value for :${Y}.`)}return`/${j==="*"?iM(z):encodeURIComponent(String(z))}`});return`${Q8}${J==="/"?"":J}`||Q8}var AB=new Map;function SB($,Z){let J=AB.get($);if(!J)J=new URLPattern({pathname:`${Q8}${$==="/"?"":$}`}),AB.set($,J);let W;try{W=new URL(Z,"http://localhost").pathname}catch{return null}let Y=J.exec({pathname:W})?.pathname.groups;if(!Y)return null;let j={};for(let[z,X]of Object.entries(Y)){if(X===void 0)continue;try{j[z]=decodeURIComponent(X)}catch{return null}}return j}function EB($,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=sM(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 sM($){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 bB{static origin($){return t5($)}static absolute($,...Z){return`${JZ()}${O0(String($),Z[0]??{})}`}static relative($,...Z){return O0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=H(B1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=P.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):JZ();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return EB({root:W.root,origin:j},$,O0(String(Z),J[0]??{}))}static api($,...Z){return a5(String($),Z[0]??{})}static apiAbsolute($,...Z){return`${t5()}${a5(String($),Z[0]??{})}`}static matchApi($,Z){return SB(String($),Z)}}class RB{name="Meta";static description($){P.getStore().metadata.description($)}static title($){P.getStore().metadata.title($)}static openGraph($){P.getStore().metadata.openGraph($)}static htmlAttributes($){P.getStore().metadata.htmlAttributes($)}static canonical($){P.getStore().metadata.canonical($)}static alternates($){P.getStore().metadata.alternates($)}static tags($){P.getStore().metadata.tags($)}static robots($){P.getStore().metadata.robots($)}static translate($=!0){P.getStore().metadata.translate($)}static fonts($){P.getStore().metadata.fonts($)}}var nM={set($,Z,J){P.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(P.getStore().req.cookies.has($))return!1;return P.getStore().setCookie($,Z,J),!0},delete($,Z){P.getStore().deleteCookie($,Z)}};class s1 extends h{static getFacadeAccessor(){return XZ}static get client(){return this.getFacadeRoot().client}static get($){return s1.client.get($)}static set($,Z){return s1.client.set($,Z)}static del(...$){return s1.client.del(...$)}static exists($){return s1.client.exists($)}static incr($){return s1.client.incr($)}static expire($,Z){return s1.client.expire($,Z)}static ttl($){return s1.client.ttl($)}}function gS($){return $}function kB(){return{store:"memory",ttl:null}}class r5{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 oM="500";class e5{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=`${aM(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",oM]),[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 $=H(),Z=$.bound(XZ)?$.make(XZ).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 aM($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var tM="k:",wB="tag:",rM="t:";class $2{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 Z2 extends $2{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=_1(kB(),$),this.config.ttl!==null&&this.config.ttl!==void 0)GZ(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 qB(this,Z)}async flush(){await this.store.flush()}async storeKey($){return tM+vB($)}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=wB+Z,W=await this.store.get(J);if(W!==null)return W;let Y=fB();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(wB+Z,fB(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:GZ(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new r5(this.config.memory);if($==="redis"){let Z=this.options.application;return new e5({...this.config.redis,client:Z?{send:(J,W)=>Z.make(XZ).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 qB extends $2{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){vB($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${rM}${Z.join(",")}:${$}`}}function vB($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function fB(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class gB extends h{static getFacadeAccessor(){return Z2}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 yB extends h{static getFacadeAccessor(){return D1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class hB extends h{static getFacadeAccessor(){return mB}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class dB extends h{static getFacadeAccessor(){return pB}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class cB extends h{static getFacadeAccessor(){return i3}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 VE($){return $}function uB(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function B8($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function J2($){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:eM}=globalThis.Bun;function $H(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var ZH=async($)=>{let Z=new eM($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},JH=async($)=>{let Z;try{Z=(await import("./chunk-97g2qc7j.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(()=>{})}},lB=($)=>$H()?ZH($):JH($);var WH=/^[A-Za-z_][A-Za-z0-9_]*$/;class W2{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(!WH.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??lB}async createTable(){for(let $ of YH(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 iB(W),W}async append($,Z,J){let W=$.unsafe(`"${this.headsTable}"`),Y=$.unsafe(`"${this.entriesTable}"`),[j]=await $`
|
|
24
|
+
INSERT INTO ${W} (channel, seq) VALUES (${Z}, 1)
|
|
25
|
+
ON CONFLICT (channel) DO UPDATE SET seq = ${W}.seq + 1
|
|
26
|
+
RETURNING seq
|
|
27
|
+
`,z=Number(j.seq);if(await $`
|
|
28
|
+
INSERT INTO ${Y} (channel, seq, data, created_at)
|
|
29
|
+
VALUES (${Z}, ${z}, ${JSON.stringify(J??null)}, ${Date.now()})
|
|
30
|
+
`,z>this.retain)await $`DELETE FROM ${Y} WHERE channel = ${Z} AND seq <= ${z-this.retain}`;if(this.dialect==="postgres")await $`SELECT pg_notify(${this.notifyChannel}, ${`${z} ${Z}`})`;return z}async heads($){let Z=new Map($.map((Y)=>[Y,0]));if($.length===0)return Z;let J=this.sql,W=await J`
|
|
31
|
+
SELECT channel, seq FROM ${J.unsafe(`"${this.headsTable}"`)}
|
|
32
|
+
WHERE channel IN ${J([...$])}
|
|
33
|
+
`;for(let Y of W)Z.set(Y.channel,Number(Y.seq));return Z}async read($,Z,J){let W=this.sql,[Y]=await W`
|
|
34
|
+
SELECT seq FROM ${W.unsafe(`"${this.headsTable}"`)} WHERE channel = ${$}
|
|
35
|
+
`,j=Y?Number(Y.seq):0;if(Z>j)return{entries:[],head:j,gap:!0};if(Z===j)return{entries:[],head:j,gap:!1};let z=await W`
|
|
36
|
+
SELECT seq, data FROM ${W.unsafe(`"${this.entriesTable}"`)}
|
|
37
|
+
WHERE channel = ${$} AND seq > ${Z}
|
|
38
|
+
ORDER BY seq
|
|
39
|
+
LIMIT ${J}
|
|
40
|
+
`;if(z.length===0||Number(z[0].seq)!==Z+1)return{entries:[],head:j,gap:!0};return{entries:z.map((X)=>({seq:Number(X.seq),data:JSON.parse(X.data)})),head:j,gap:!1}}async listen($,Z){if(this.dialect!=="postgres")return{close:async()=>{}};if(!this.url)throw Error("The change feed's database driver needs the connection's url to LISTEN. Build it from a DatabaseManager connection, which has one.");let J=await this.listener(this.url);try{await J.listen(this.notifyChannel,(W)=>{let Y=W.indexOf(" "),j=Number(W.slice(0,Y));if(Y>0&&Number.isInteger(j))$(W.slice(Y+1),j)},Z)}catch(W){throw await J.close(),W}return{close:()=>J.close()}}transaction(){if(this.dialect==="sqlite"||this.connection===void 0)return;let $=s0();if($===void 0||f1()!==this.connection)return;return $}}function YH($,Z){return[`CREATE TABLE IF NOT EXISTS "${$}" (
|
|
41
|
+
"channel" TEXT NOT NULL PRIMARY KEY,
|
|
42
|
+
"seq" BIGINT NOT NULL
|
|
43
|
+
)`,`CREATE TABLE IF NOT EXISTS "${Z}" (
|
|
44
|
+
"channel" TEXT NOT NULL,
|
|
45
|
+
"seq" BIGINT NOT NULL,
|
|
46
|
+
"data" TEXT NOT NULL,
|
|
47
|
+
"created_at" BIGINT NOT NULL,
|
|
48
|
+
PRIMARY KEY ("channel", "seq")
|
|
49
|
+
)`]}class Y2{logs=new Map;retain;constructor($={}){let Z=$.retain??1000;if(!Number.isInteger(Z)||Z<1)throw Error(`The change feed's retain must be a whole number, 1 or more; got ${Z}.`);this.retain=Z}async publish($,Z){let J=this.logs.get($);if(!J)J={head:0,entries:[]},this.logs.set($,J);let W=++J.head;if(J.entries.push({seq:W,data:Z===void 0?null:structuredClone(Z)}),J.entries.length>this.retain)J.entries.splice(0,J.entries.length-this.retain);return W}async heads($){return new Map($.map((Z)=>[Z,this.logs.get(Z)?.head??0]))}async read($,Z,J){let W=this.logs.get($),Y=W?.head??0;if(Z>Y)return{entries:[],head:Y,gap:!0};if(!W||Z===Y)return{entries:[],head:Y,gap:!1};let j=W.entries[0]?.seq??Y+1;if(j>Z+1)return{entries:[],head:Y,gap:!0};let z=Z+1-j;return{entries:W.entries.slice(z,z+J),head:Y,gap:!1}}}var tB=new TextEncoder;function sB($,Z){return tB.encode(`id: ${$}
|
|
50
|
+
data: ${JSON.stringify(Z)}
|
|
51
|
+
|
|
52
|
+
`)}function rB($,Z,J,W){let Y=Z instanceof Request?Z:Z.rawRequest,j=W.cursor??Y.headers.get("Last-Event-ID")??new URL(Y.url).searchParams.get("cursor"),z;try{z=$.subscribe(J,{cursor:j,signal:Y.signal})}catch(B){if(!(B instanceof V8))throw B;return new Response(JSON.stringify({error:"The change feed is at capacity."}),{status:503,headers:{"Content-Type":"application/json","Retry-After":String(W.retryAfter??5)}})}let X=null,G=!1,Q=!1,V=(B)=>{if(X)clearInterval(X);if(X=null,z.close(),Q)return;Q=!0;try{B.close()}catch{}},F=new ReadableStream({start(B){X=setInterval(()=>{if(aB())return V(B);try{B.enqueue(tB.encode(nB))}catch{V(B)}},$.config.keepaliveInterval)},async pull(B){try{if(!G){if(await z.ready(),G=!0,!Q)B.enqueue(sB(z.cursor,{type:"ready"}));return}let U=await z.next();if(U.done||Q)return V(B);B.enqueue(sB(z.cursor,U.value))}catch(U){if(!Q)console.error("[gemi] A change feed stream failed.",U);V(B)}},cancel(){if(Q=!0,X)clearInterval(X);X=null,z.close()}});return new Response(F,{headers:oB()})}var eB=255,$V=500,jH=30000;class V8 extends Error{limit;constructor($){super(`The change feed holds its limit of ${$} subscriptions.`);this.limit=$;this.name="ChangeFeedFullError"}}class Y3{options;static token="changeFeed";driver;config;followers=new Map;all=new Set;listenState="off";listening=null;retryTimer=null;backoffMs=$V;pollTimer=null;polling=null;constructor($={},Z={}){this.options=Z;this.config=_1(uB(),$),this.driver=XH(this.config.driver,Z.application)}get subscriptions(){return this.all.size}get isListening(){return this.listenState==="listening"}async publish($,Z){z2($);let J=Z===void 0?null:Z;if(s0()!==void 0&&!this.driver.joinsTransaction?.())return iZ(async()=>{this.wake($,await this.driver.publish($,J))}),null;let W=await this.driver.publish($,J);return iZ(()=>this.wake($,W)),W}async head($){return z2($),(await this.driver.heads([$])).get($)??0}async cursor($){let Z=j2($);return B8(await this.driver.heads(Z))}subscribe($,Z={}){let J=j2($);if(this.all.size>=this.config.maxSubscriptions)throw new V8(this.config.maxSubscriptions);let W=new ZV(this,J,zH(Z.cursor),this.config,Z.signal);this.all.add(W);for(let Y of J){let j=this.followers.get(Y);if(!j)this.followers.set(Y,j=new Set);j.add(W)}return this.startListening(),this.startPolling(),W}stream($,Z,J={}){return rB(this,$,j2(Z),J)}async close(){if(this.listenState="closed",this.retryTimer)clearTimeout(this.retryTimer);this.retryTimer=null,this.stopPolling();for(let Z of this.all)Z.close();let $=this.listening;this.listening=null,await $?.close(),await this.driver.close?.()}forget($){if(!this.all.delete($))return;for(let Z of $.channels){let J=this.followers.get(Z);if(J?.delete($),J?.size===0)this.followers.delete(Z)}if(this.all.size===0)this.stopPolling()}poll(){return this.polling??=(async()=>{try{let $=[...this.followers.keys()];for(let Z=0;Z<$.length;Z+=500){let J=await this.driver.heads($.slice(Z,Z+500));for(let[W,Y]of J)this.wake(W,Y)}}catch($){console.error("[gemi] The change feed could not read its channels' heads.",$)}finally{this.polling=null}})(),this.polling}startPolling(){if(this.pollTimer)return;this.pollTimer=setInterval(()=>void this.poll(),this.config.pollInterval),this.pollTimer.unref?.()}stopPolling(){if(this.pollTimer)clearInterval(this.pollTimer);this.pollTimer=null}wake($,Z){for(let J of this.followers.get($)??[])J.moved($,Z)}resync(){this.poll()}startListening(){if(this.listenState!=="off"||!this.driver.listen)return;this.connect()}async connect(){this.listenState="connecting",this.retryTimer=null;try{let $=await this.driver.listen((Z,J)=>this.wake(Z,J),()=>this.resync());if(this.listenState!=="connecting"){await $.close();return}this.listening=$,this.listenState="listening",this.backoffMs=$V,this.resync()}catch($){if(this.listenState!=="connecting")return;console.error(`[gemi] The change feed could not listen for other instances' changes; retrying in ${this.backoffMs}ms.`,$),this.listenState="retrying",this.retryTimer=setTimeout(()=>void this.connect(),this.backoffMs),this.retryTimer.unref?.(),this.backoffMs=Math.min(this.backoffMs*2,jH)}}}class ZV{manager;config;signal;channels;positions=new Map;readTo=new Map;dirty=new Set;pending=[];started=null;wakeUp=null;closed=!1;onAbort=()=>this.close();constructor($,Z,J,W,Y){this.manager=$;this.config=W;this.signal=Y;this.channels=Z;for(let j of Z){let z=J.get(j);if(z!==void 0)this.positions.set(j,z),this.readTo.set(j,z),this.dirty.add(j)}if(Y?.aborted)this.close();else Y?.addEventListener("abort",this.onAbort,{once:!0})}get cursor(){return B8(this.positions)}get isClosed(){return this.closed}ready(){return this.started??=(async()=>{let $=this.channels.filter((J)=>!this.positions.has(J));if($.length===0)return;let Z=await this.manager.driver.heads($);for(let J of $){let W=Z.get(J)??0;this.positions.set(J,W),this.readTo.set(J,W)}})(),this.started}async next(){await this.ready();for(;;){if(this.closed)return{done:!0,value:void 0};let $=this.pending.shift();if($)return this.positions.set($.channel,$.seq),{done:!1,value:$};let Z=this.dirty.values().next().value;if(Z!==void 0){await this.read(Z);continue}await this.idle()}}async return(){return this.close(),{done:!0,value:void 0}}[Symbol.asyncIterator](){return this}close(){if(this.closed)return;this.closed=!0,this.pending.length=0,this.signal?.removeEventListener("abort",this.onAbort),this.manager.forget(this),this.wake()}moved($,Z){let J=this.readTo.get($);if(J!==void 0&&Z===J)return;this.dirty.add($),this.wake()}async read($){let Z=this.readTo.get($)??0;this.dirty.delete($);let{batchSize:J}=this.config,{entries:W,head:Y,gap:j}=await this.manager.driver.read($,Z,J);if(this.closed)return;if(j){this.readTo.set($,Y),this.pending.push({type:"reset",channel:$,seq:Y});return}for(let z of W)this.readTo.set($,z.seq),this.pending.push({type:"change",channel:$,seq:z.seq,data:z.data});if(W.length===J)this.dirty.add($)}idle(){return new Promise(($)=>{this.wakeUp=$})}wake(){let $=this.wakeUp;this.wakeUp=null,$?.()}}function z2($){if(typeof $!=="string"||$===""||$.length>eB)throw Error(`A change feed channel is a string of 1 to ${eB} characters; got ${JSON.stringify($)}.`)}function j2($){let Z=[...new Set(typeof $==="string"?[$]:$)];if(Z.length===0)throw Error("A change feed subscription needs at least one channel.");for(let J of Z)z2(J);return Z}function zH($){if($===void 0||$===null)return new Map;if(typeof $==="string")return J2($);let Z=$ instanceof Map?[...$]:Object.entries($);return J2(B8(new Map(Z)))}function XH($,Z){if($==="memory")return new Y2;if($==="database"||typeof $==="function"){if(!Z&&($==="database"||$.length>0))throw Error("The change feed driver needs the application it belongs to, and this ChangeFeedManager was built without one. Pass { application }.");if($==="database")return new W2(Z.make(q1));return $(Z)}if(typeof $==="string")throw Error(`Unknown change feed driver "${$}". The changeFeed slice's driver is "memory", "database", a ChangeFeedDriver, or a function returning one.`);return $}class JV extends h{static getFacadeAccessor(){return Y3}static publish($,Z){return this.getFacadeRoot().publish($,Z)}static head($){return this.getFacadeRoot().head($)}static cursor($){return this.getFacadeRoot().cursor($)}static subscribe($,Z){return this.getFacadeRoot().subscribe($,Z)}static stream($,Z,J){return this.getFacadeRoot().stream($,Z,J)}}class e3 extends d0{application;previous;sent=[];revoked=[];static install($){let Z=$.bound(d0)?$.make(d0):void 0;if(Z instanceof e3)return Z;let J=new e3($,Z);return $.instance(d0,J),J}constructor($,Z){super({driver:"memory",maxEventBytes:Z?.config.maxEventBytes,warnEventBytes:Z?.config.warnEventBytes},{application:$});this.application=$;this.previous=Z;this.channelsFrom=Z}channelsFrom;get channels(){return this.channelsFrom?.channels??null}publish($){this.sent.push($)}sendRevocation($){this.revoked.push($)}restore(){if(this.previous){this.application.instance(d0,this.previous);return}this.application.forget(d0)}assertSent($,Z,J){if(this.matching($,Z,J).length>0)return;throw Error(`Expected ${X2($,Z,J)} to have been broadcast. ${this.summary()}`)}assertNotSent($,Z,J){let W=this.matching($,Z,J);if(W.length===0)return;throw Error(`Expected ${X2($,Z,J)} not to have been broadcast, but it was broadcast ${G2(W.length)}: ${Q2(W)}.`)}assertSentTimes($,Z,J,W){let Y=this.matching($,J,W);if(Y.length===Z)return;throw Error(`Expected ${X2($,J,W)} to have been broadcast ${G2(Z)}, but it was broadcast ${G2(Y.length)}. `+this.summary())}assertNothingSent(){if(this.sent.length===0)return;throw Error(`Expected nothing to have been broadcast, but ${this.sent.length} ${this.sent.length===1?"emit was":"emits were"}: ${Q2(this.sent)}.`)}matching($,Z,J){return FZ($),this.sent.filter((W)=>(W.pattern===$||g2($,W.topic))&&(Z===void 0||W.event===Z)&&(J===void 0||J(W.data,W)))}summary(){if(this.sent.length===0)return"Nothing was broadcast.";return`Broadcast: ${Q2(this.sent)}.`}}function X2($,Z,J){return`${Z?`"${Z}" on `:"an event on "}"${$}"`+(J?" matching the predicate":"")}function G2($){return`${$} ${$===1?"time":"times"}`}function Q2($){return $.map((Z)=>`${Z.topic} ${Z.event}(${GH(Z.data)})`).join(", ")}function GH($){if($===void 0)return"";try{return JSON.stringify($)??String($)}catch{return String($)}}class WV extends h{static getFacadeAccessor(){return d0}static to($,...Z){return this.getFacadeRoot().to($,...Z)}static toUser($){return this.getFacadeRoot().toUser($)}static toOthers($){return this.getFacadeRoot().toOthers($)}static revoke($){this.getFacadeRoot().revoke($)}static fake(){return e3.install(H())}}function uE($){return $}function YV(){return{store:"memory",sweepLimit:500}}var B2=["completed","failed","cancelled","timed_out"],C1=["pending","running"];function A1($){return B2.includes($)}class V2{runs=new Map;clock=0;get size(){return this.runs.size}async create($){if(this.runs.has($.id))throw Error(`A run with the id ${$.id} already exists.`);let Z=this.tick(),J={id:$.id,kind:$.kind,subject:$.subject,owner:$.owner,status:$.status,meta:structuredClone($.meta??null),progress:null,result:null,error:null,version:1,createdAt:Z,startedAt:$.status==="running"?Z:null,updatedAt:Z,finishedAt:null,deadlineAt:$.deadlineMs===null?null:Z+$.deadlineMs};return this.runs.set(J.id,J),structuredClone(J)}async get($){let Z=this.runs.get($);return Z?structuredClone(Z):null}async list($){let Z=[];for(let J of this.runs.values()){if($.kind!==void 0&&J.kind!==$.kind)continue;if($.subject!==void 0&&J.subject!==$.subject)continue;if($.owner!==void 0&&J.owner!==$.owner)continue;if($.statuses&&!$.statuses.includes(J.status))continue;Z.push(J)}return Z.reverse().sort((J,W)=>W.createdAt-J.createdAt),Z.slice(0,F2($.limit)).map((J)=>structuredClone(J))}async transition($,Z,J){let W=this.runs.get($);if(!W||!Z.includes(W.status))return null;let Y=structuredClone(J),j=this.tick();if(Y.status!==void 0){if(W.startedAt===null&&Y.status!=="pending")W.startedAt=j;if(A1(Y.status))W.finishedAt=j;W.status=Y.status}if("progress"in Y)W.progress=Y.progress??null;if("result"in Y)W.result=Y.result??null;if("error"in Y)W.error=Y.error??null;return W.version+=1,W.updatedAt=j,structuredClone(W)}async overdue($,Z){let J=[];for(let W of this.runs.values())if(C1.includes(W.status)&&W.deadlineAt!==null&&W.deadlineAt<=$)J.push(W);return J.sort((W,Y)=>W.deadlineAt-Y.deadlineAt),J.slice(0,Math.max(0,Z)).map((W)=>structuredClone(W))}async now(){return this.tick()}async prune($){let Z=this.tick()-$,J=0;for(let[W,Y]of this.runs)if(Y.finishedAt!==null&&Y.finishedAt<=Z)this.runs.delete(W),J++;return J}tick(){return this.clock=Math.max(this.clock,Date.now()),this.clock}}function F2($){if($===void 0)return 50;return Math.max(0,Math.floor($))}class D2{table;sql;dialect;connection;constructor($,Z={}){let J=Z.table??"gemi_runs";if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(J))throw Error(`The runs table name "${J}" is not a plain identifier. Use letters, digits and underscores.`);this.table=J,this.sql=$.sql,this.dialect=$.dialect,this.connection=$.name}async createTable(){for(let $ of QH(this.dialect,this.table))await this.sql.unsafe($)}async create($){let Z=this.q(),J=this.clock(Z),W=$.deadlineMs===null?Z`NULL`:Z`${J} + ${this.ms(Z,$.deadlineMs)}`,Y=$.status==="running"?J:Z`NULL`;await Z`
|
|
53
|
+
INSERT INTO ${this.name(Z)}
|
|
54
|
+
(id, kind, subject, owner, status, meta, version,
|
|
55
|
+
created_at, started_at, updated_at, deadline_at)
|
|
56
|
+
VALUES
|
|
57
|
+
(${$.id}, ${$.kind}, ${$.subject}, ${$.owner}, ${$.status},
|
|
58
|
+
${U8($.meta)}, 1, ${J}, ${Y}, ${J}, ${W})
|
|
59
|
+
`;let j=await this.get($.id);if(!j)throw Error(`The run ${$.id} was not found after it was written.`);return j}async get($){let Z=this.q(),J=await Z`SELECT * FROM ${this.name(Z)} WHERE id = ${$}`;return J[0]?O2(J[0]):null}async list($){let Z=this.q(),J=[Z`1 = 1`];if($.kind!==void 0)J.push(Z`kind = ${$.kind}`);if($.subject!==void 0)J.push(Z`subject = ${$.subject}`);if($.owner!==void 0)J.push(Z`owner = ${$.owner}`);if($.statuses!==void 0)J.push($.statuses.length===0?Z`1 = 0`:Z`status IN (${F8(Z,$.statuses)})`);let W=J.reduce((j,z)=>Z`${j} AND ${z}`);return(await Z`
|
|
60
|
+
SELECT * FROM ${this.name(Z)}
|
|
61
|
+
WHERE ${W}
|
|
62
|
+
ORDER BY created_at DESC, id DESC
|
|
63
|
+
LIMIT ${F2($.limit)}
|
|
64
|
+
`).map(O2)}async transition($,Z,J){if(Z.length===0)return null;let W=this.q(),Y=this.clock(W),j=[W`updated_at = ${Y}`,W`version = version + 1`];if(J.status!==void 0){if(j.push(W`status = ${J.status}`),J.status!=="pending")j.push(W`started_at = COALESCE(started_at, ${Y})`);if(A1(J.status))j.push(W`finished_at = ${Y}`)}if("progress"in J)j.push(W`progress = ${U8(J.progress)}`);if("result"in J)j.push(W`result = ${U8(J.result)}`);if("error"in J)j.push(W`error = ${U8(J.error)}`);let z=j.reduce((G,Q)=>W`${G}, ${Q}`),X=await W`
|
|
65
|
+
UPDATE ${this.name(W)} SET ${z}
|
|
66
|
+
WHERE id = ${$} AND status IN (${F8(W,Z)})
|
|
67
|
+
`;if(zV(X)===0)return null;return this.get($)}async overdue($,Z){let J=this.q();return(await J`
|
|
68
|
+
SELECT * FROM ${this.name(J)}
|
|
69
|
+
WHERE status IN (${F8(J,C1)})
|
|
70
|
+
AND deadline_at IS NOT NULL AND deadline_at <= ${this.ms(J,$)}
|
|
71
|
+
ORDER BY deadline_at, id
|
|
72
|
+
LIMIT ${Math.max(0,Math.floor(Z))}
|
|
73
|
+
`).map(O2)}async now(){let $=this.q(),[Z]=await $`SELECT ${this.clock($)} AS now`;return Number(Z.now)}async prune($){let Z=this.q(),J=await Z`
|
|
74
|
+
DELETE FROM ${this.name(Z)}
|
|
75
|
+
WHERE status IN (${F8(Z,B2)})
|
|
76
|
+
AND finished_at <= ${this.clock(Z)} - ${this.ms(Z,$)}
|
|
77
|
+
`;return zV(J)}joinable(){if(this.connection===void 0)return;let $=s0();if($===void 0||f1()!==this.connection)return;return $}q(){return this.joinable()??this.sql}name($){let Z=this.dialect==="mysql"||this.dialect==="mariadb";return $.unsafe(Z?`\`${this.table}\``:`"${this.table}"`)}clock($){switch(this.dialect){case"postgres":return $`floor(extract(epoch from statement_timestamp()) * 1000)::bigint`;case"mysql":case"mariadb":return $`(TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', UTC_TIMESTAMP(6)) DIV 1000)`;case"sqlite":return $`CAST((julianday('now') - 2440587.5) * 86400000 AS INTEGER)`}}ms($,Z){let J=Math.max(0,Math.round(Z));return this.dialect==="mysql"||this.dialect==="mariadb"?$`CAST(${J} AS SIGNED)`:$`CAST(${J} AS BIGINT)`}}function F8($,Z){return Z.map((J)=>$`${J}`).reduce((J,W)=>$`${J}, ${W}`)}function U8($){return $===void 0||$===null?null:JSON.stringify($)}function O8($){if($===null||$===void 0)return null;return JSON.parse(String($))}function U2($){return $===null||$===void 0?null:Number($)}function jV($){return $===null||$===void 0?null:String($)}function O2($){return{id:String($.id),kind:String($.kind),subject:jV($.subject),owner:jV($.owner),status:String($.status),meta:O8($.meta),progress:O8($.progress),result:O8($.result),error:O8($.error),version:Number($.version),createdAt:Number($.created_at),startedAt:U2($.started_at),updatedAt:Number($.updated_at),finishedAt:U2($.finished_at),deadlineAt:U2($.deadline_at)}}function zV($){let Z=$;return Math.max(Number(Z.count??0),Number(Z.affectedRows??0))}function QH($,Z){if($==="mysql"||$==="mariadb")return[`CREATE TABLE IF NOT EXISTS \`${Z}\` (
|
|
78
|
+
\`id\` VARCHAR(191) NOT NULL,
|
|
79
|
+
\`kind\` VARCHAR(191) NOT NULL,
|
|
80
|
+
\`subject\` VARCHAR(191) NULL,
|
|
81
|
+
\`owner\` VARCHAR(191) NULL,
|
|
82
|
+
\`status\` VARCHAR(191) NOT NULL,
|
|
83
|
+
\`meta\` LONGTEXT NULL,
|
|
84
|
+
\`progress\` LONGTEXT NULL,
|
|
85
|
+
\`result\` LONGTEXT NULL,
|
|
86
|
+
\`error\` LONGTEXT NULL,
|
|
87
|
+
\`version\` INTEGER NOT NULL DEFAULT 1,
|
|
88
|
+
\`created_at\` BIGINT NOT NULL,
|
|
89
|
+
\`started_at\` BIGINT NULL,
|
|
90
|
+
\`updated_at\` BIGINT NOT NULL,
|
|
91
|
+
\`finished_at\` BIGINT NULL,
|
|
92
|
+
\`deadline_at\` BIGINT NULL,
|
|
93
|
+
|
|
94
|
+
INDEX \`${Z}_subject_created_at_idx\`(\`subject\`, \`created_at\`),
|
|
95
|
+
INDEX \`${Z}_status_deadline_at_idx\`(\`status\`, \`deadline_at\`),
|
|
96
|
+
PRIMARY KEY (\`id\`)
|
|
97
|
+
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`];let J=$==="sqlite"?'"id" TEXT NOT NULL PRIMARY KEY,':'"id" TEXT NOT NULL,',W=$==="sqlite"?"":`,
|
|
98
|
+
|
|
99
|
+
CONSTRAINT "${Z}_pkey" PRIMARY KEY ("id")`;return[`CREATE TABLE IF NOT EXISTS "${Z}" (
|
|
100
|
+
${J}
|
|
101
|
+
"kind" TEXT NOT NULL,
|
|
102
|
+
"subject" TEXT,
|
|
103
|
+
"owner" TEXT,
|
|
104
|
+
"status" TEXT NOT NULL,
|
|
105
|
+
"meta" TEXT,
|
|
106
|
+
"progress" TEXT,
|
|
107
|
+
"result" TEXT,
|
|
108
|
+
"error" TEXT,
|
|
109
|
+
"version" INTEGER NOT NULL DEFAULT 1,
|
|
110
|
+
"created_at" BIGINT NOT NULL,
|
|
111
|
+
"started_at" BIGINT,
|
|
112
|
+
"updated_at" BIGINT NOT NULL,
|
|
113
|
+
"finished_at" BIGINT,
|
|
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 XV=191,GV=30000;class D8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class L8 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 L2{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=_1(YV(),$),this.store=FH(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make(Y3);return this.ownFeed??=new Y3,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){VV("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;VV("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:GZ($.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 VH(Z),this.change($,C1,{status:"running",progress:Z})}complete($,Z){return this.change($,C1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,C1,{status:"failed",error:BV(Z)})}cancel($,Z){return this.change($,C1,{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 D8($);if(A1(W.status))return W;let Y=new AbortController,j=this.watch($,W,J,Y),z={id:$,record:W,signal:Y.signal,progress:async(G)=>{if(Y.signal.aborted)return;await this.progress($,G)}},X;try{let G=await Z(z);X=await this.complete($,G)}catch(G){if(!(G instanceof L8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,G);X=await this.change($,C1,{status:"failed",error:G instanceof L8?BV(G):{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()+GZ(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new D8($);let z=null;for(;;){if(A1(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 G=W-Date.now();if(G<=0)return j;if(z??=Y.isClosed?new Promise(()=>{}):Y.next(),await QV(z,Math.min(G,X??1/0,GV),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 D8($);if(yield W,A1(W.status))return;for await(let Y of J){let j=BH(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,A1(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=GZ($);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||A1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,C1,{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(A1(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,QV(j,Math.min(z??1/0,GV))]);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 QV($,Z,J){return new Promise((W,Y)=>{let j=Number.isFinite(Z)?setTimeout(()=>G(!1),Math.max(0,Z)):null,z=()=>{X(),Y(J.reason)},X=()=>{if(j)clearTimeout(j);J?.removeEventListener("abort",z)},G=(Q)=>{X(),W(Q)};J?.addEventListener("abort",z,{once:!0}),$.then(()=>G(!0),()=>G(!0))})}function BH($,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 BV($){if(typeof $==="string")return{message:$};if($ instanceof L8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function VV($,Z){if(typeof Z!=="string"||Z===""||Z.length>XV)throw TypeError(`A run's ${$} is a string of 1 to ${XV} characters; got ${JSON.stringify(Z)}.`)}function VH($){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 FH($,Z){if($==="memory")return new V2;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(q1).connection();return new D2(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 FV extends h{static getFacadeAccessor(){return L2}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 UV extends h{static getFacadeAccessor(){return W$}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 K2{value;constructor($){this.value=$}}var UH=/^[A-Za-z_][A-Za-z0-9_$]*$/;function OH($){let Z=["SET TRANSACTION READ ONLY"],J=[["statementTimeoutMs","statement_timeout"],["lockTimeoutMs","lock_timeout"],["idleInTransactionTimeoutMs","idle_in_transaction_session_timeout"]];for(let[W,Y]of J){let j=$[W];if(j===void 0)continue;if(typeof j!=="number"||!Number.isInteger(j)||j<=0)throw TypeError(`DB.readOnly: ${W} must be a positive whole number of milliseconds, got ${String(j)}.`);Z.push(`SET LOCAL ${Y} = ${j}`)}if($.role!==void 0){if(typeof $.role!=="string"||!UH.test($.role))throw TypeError(`DB.readOnly: the role "${String($.role)}" is not a plain identifier. Use letters, digits, _ and $.`);Z.push(`SET LOCAL ROLE "${$.role}"`)}return Z}class M8{bound;constructor($){this.bound=$}get name(){return this.bound??f1()}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 H2(J.sql,(W)=>M2(Z,()=>$(W)),{slowTransactionThreshold:J.config.slowTransactionThreshold,connection:Z})}async readOnly($,Z){let J=typeof $==="function"?{}:$,W=typeof $==="function"?$:Z;if(typeof W!=="function")throw TypeError("DB.readOnly needs a callback: readOnly(options, async (tx) => ...).");let Y=OH(J??{}),j=this.name,z=this.connection(j);if(z.dialect!=="postgres")throw Error(`DB.readOnly is supported on Postgres only, and the "${j}" connection is ${z.dialect}.`);if(s0()!==void 0)throw Error("DB.readOnly cannot run inside a transaction: SET TRANSACTION READ ONLY has to be the first statement of its own transaction. Call it outside the transaction.");try{await H2(z.sql,async(X)=>{for(let Q of Y)await X.unsafe(Q);let G=await M2(j,()=>W(X));throw new K2(G)},{slowTransactionThreshold:z.config.slowTransactionThreshold,connection:j})}catch(X){if(X instanceof K2)return X.value;throw X}throw Error("DB.readOnly: the transaction committed, which it never should.")}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-xxep62yg.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=LV($,DV(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=s0();if($===void 0)return;return f1()===this.name?$:void 0}connection($=this.name){return OV($),H(q1).connection($)}}var QZ=new M8;class MV extends h{static getFacadeAccessor(){return q1}static connection($){return new M8($)}static get sql(){return QZ.sql}static get dialect(){return QZ.dialect}static query($){return QZ.query($)}static execute($){return QZ.execute($)}static transaction($){return QZ.transaction($)}static readOnly($,Z){return QZ.readOnly($,Z)}static schema(){return QZ.schema()}static close(){return this.getFacadeRoot().close()}}export{U1 as me,IV as ne,e0 as oe,X3 as pe,_8 as qe,x0 as re,j6 as se,s8 as te,n8 as ue,E9 as ve,J$ as we,D1 as xe,w$ as ye,Z0 as ze,X9 as Ae,DZ as Be,b9 as Ce,R9 as De,a8 as Ee,t8 as Fe,T6 as Ge,KZ as He,p9 as Ie,yF as Je,d9 as Ke,mF as Le,vP as Me,l9 as Ne,e9 as Oe,j7 as Pe,$Y as Qe,ZY as Re,sF as Se,JY as Te,z7 as Ue,aF as Ve,tF as We,X7 as Xe,WY as Ye,YY as Ze,W$ as _e,jY as $e,ZU as af,Q7 as bf,f8 as cf,F6 as df,b1 as ef,R8 as ff,R1 as gf,_$ as hf,G8 as if,bB as jf,RB as kf,nM as lf,s1 as mf,gS as nf,kB as of,r5 as pf,e5 as qf,Z2 as rf,qB as sf,gB as tf,yB as uf,hB as vf,dB as wf,cB as xf,VE as yf,uB as zf,B8 as Af,J2 as Bf,W2 as Cf,Y2 as Df,V8 as Ef,Y3 as Ff,ZV as Gf,JV as Hf,i as If,G3 as Jf,g4 as Kf,PN as Lf,NN as Mf,_N as Nf,AN as Of,FG as Pf,qW as Qf,DG as Rf,kN as Sf,HG as Tf,d0 as Uf,d3 as Vf,KG as Wf,WV as Xf,uE as Yf,B2 as Zf,C1 as _f,A1 as $f,V2 as ag,D2 as bg,QH as cg,D8 as dg,L8 as eg,L2 as fg,FV as gg,UV as hg,M8 as ig,MV as jg,gW as kg,rD as lg,lW as mg,iW as ng,l_ as og,dG as pg,iG as qg,X6 as rg,r1 as sg,zI as tg,nG as ug,oG as vg,L5 as wg,eZ as xg,M5 as yg,$C as zg,GC as Ag,QC as Bg,HM as Cg,q5 as Dg,PM as Eg,c5 as Fg,CM as Gg,y5 as Hg,EM as Ig,t3 as Jg,u5 as Kg,DB as Lg,W8 as Mg,Y8 as Ng,yA as Og,mA as Pg,hA as Qg,B1 as Rg,b as Sg,f0 as Tg,G6 as Ug,c2 as Vg,vV as Wg,h2 as Xg,l2 as Yg,S8 as Zg,B6 as _g,E8 as $g,i2 as ah,cV as bh,uV as ch,r2 as dh,$9 as eh,J9 as fh,Q9 as gh,B9 as hh,V9 as ih,y8 as jh,aV as kh,j0 as lh,N9 as mh,MZ as nh,A9 as oh};
|
|
116
|
+
|
|
117
|
+
//# debugId=8D5697258253F80A64756E2164756E21
|