gemi 0.160.2 → 0.162.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/App.d.ts +5 -0
- package/dist/app/App.d.ts.map +1 -1
- package/dist/app/index.js +2 -2
- package/dist/app/index.js.map +1 -1
- package/dist/auth/config.d.ts +3 -2
- package/dist/auth/config.d.ts.map +1 -1
- package/dist/auth/routes.d.ts +20 -42
- package/dist/auth/routes.d.ts.map +1 -1
- package/dist/bin/gemi.js +8 -1
- package/dist/bin/gemi.js.map +3 -3
- package/dist/bun/plugin.js +2 -2
- package/dist/bun/plugin.js.map +1 -1
- package/dist/bun/preload.js +2 -2
- package/dist/bun/preload.js.map +1 -1
- package/dist/{chunk-4vqnv41y.js → chunk-04ffq2ge.js} +2 -2
- package/dist/{chunk-4vqnv41y.js.map → chunk-04ffq2ge.js.map} +1 -1
- package/dist/{chunk-27habdva.js → chunk-04h49y2f.js} +2 -2
- package/dist/{chunk-27habdva.js.map → chunk-04h49y2f.js.map} +1 -1
- package/dist/{chunk-fcjjd162.js → chunk-10zbxbwk.js} +2 -2
- package/dist/{chunk-fcjjd162.js.map → chunk-10zbxbwk.js.map} +1 -1
- package/dist/{chunk-cxz7wycm.js → chunk-17s187yp.js} +4 -4
- package/dist/{chunk-cxz7wycm.js.map → chunk-17s187yp.js.map} +3 -3
- package/dist/{chunk-8tyw6faf.js → chunk-1btx3kkv.js} +2 -2
- package/dist/{chunk-8tyw6faf.js.map → chunk-1btx3kkv.js.map} +1 -1
- package/dist/{chunk-bfj2jafb.js → chunk-1cjr8hvc.js} +3 -3
- package/dist/{chunk-bfj2jafb.js.map → chunk-1cjr8hvc.js.map} +2 -2
- package/dist/{chunk-9f2ps5v2.js → chunk-22jm6sn1.js} +2 -2
- package/dist/{chunk-9f2ps5v2.js.map → chunk-22jm6sn1.js.map} +1 -1
- package/dist/{chunk-4ye6p5yk.js → chunk-2hhwsm69.js} +2 -2
- package/dist/{chunk-4ye6p5yk.js.map → chunk-2hhwsm69.js.map} +1 -1
- package/dist/{chunk-wtddr3vs.js → chunk-3tyqnh59.js} +2 -2
- package/dist/{chunk-wtddr3vs.js.map → chunk-3tyqnh59.js.map} +1 -1
- package/dist/{chunk-m4pkbndk.js → chunk-51fvpq55.js} +2 -2
- package/dist/{chunk-m4pkbndk.js.map → chunk-51fvpq55.js.map} +1 -1
- package/dist/{chunk-k43m5dvs.js → chunk-576g6eyk.js} +2 -2
- package/dist/{chunk-k43m5dvs.js.map → chunk-576g6eyk.js.map} +1 -1
- package/dist/{chunk-cn6dteec.js → chunk-5sd49vwm.js} +4 -4
- package/dist/{chunk-cn6dteec.js.map → chunk-5sd49vwm.js.map} +4 -3
- package/dist/{chunk-3cvza61a.js → chunk-6w2v33bd.js} +2 -2
- package/dist/{chunk-3cvza61a.js.map → chunk-6w2v33bd.js.map} +1 -1
- package/dist/{chunk-p9syxzxh.js → chunk-70kpm72z.js} +3 -3
- package/dist/{chunk-p9syxzxh.js.map → chunk-70kpm72z.js.map} +1 -1
- package/dist/{chunk-qbsk0jr8.js → chunk-7effp39a.js} +2 -2
- package/dist/{chunk-qbsk0jr8.js.map → chunk-7effp39a.js.map} +1 -1
- package/dist/{chunk-57qnqcrp.js → chunk-7ex7aczc.js} +3 -3
- package/dist/{chunk-57qnqcrp.js.map → chunk-7ex7aczc.js.map} +1 -1
- package/dist/{chunk-r3v2cnrj.js → chunk-7txst143.js} +2 -2
- package/dist/{chunk-r3v2cnrj.js.map → chunk-7txst143.js.map} +1 -1
- package/dist/{chunk-v8fx4vgq.js → chunk-89168m0z.js} +2 -2
- package/dist/{chunk-v8fx4vgq.js.map → chunk-89168m0z.js.map} +1 -1
- package/dist/{chunk-fcqx2t0p.js → chunk-8m9kgynj.js} +2 -2
- package/dist/{chunk-fcqx2t0p.js.map → chunk-8m9kgynj.js.map} +1 -1
- package/dist/{chunk-m8a80sgn.js → chunk-8x0q9h0j.js} +3 -3
- package/dist/{chunk-m8a80sgn.js.map → chunk-8x0q9h0j.js.map} +1 -1
- package/dist/{chunk-7rfw4h2x.js → chunk-95gag2pg.js} +2 -2
- package/dist/{chunk-7rfw4h2x.js.map → chunk-95gag2pg.js.map} +1 -1
- package/dist/{chunk-7bc9ypbk.js → chunk-99be7vbh.js} +3 -3
- package/dist/{chunk-7bc9ypbk.js.map → chunk-99be7vbh.js.map} +1 -1
- package/dist/{chunk-kan3yz82.js → chunk-a5htej1f.js} +2 -2
- package/dist/{chunk-kan3yz82.js.map → chunk-a5htej1f.js.map} +1 -1
- package/dist/chunk-a5qn2sq8.js +4 -0
- package/dist/chunk-a5qn2sq8.js.map +10 -0
- package/dist/{chunk-ctrmztan.js → chunk-akgd3c0k.js} +2 -2
- package/dist/{chunk-ctrmztan.js.map → chunk-akgd3c0k.js.map} +1 -1
- package/dist/{chunk-vb73ddwz.js → chunk-asnk2jqn.js} +2 -2
- package/dist/{chunk-vb73ddwz.js.map → chunk-asnk2jqn.js.map} +1 -1
- package/dist/{chunk-a22h5cby.js → chunk-bwg7genv.js} +2 -2
- package/dist/{chunk-a22h5cby.js.map → chunk-bwg7genv.js.map} +1 -1
- package/dist/{chunk-j144nwvh.js → chunk-cd847h0t.js} +3 -3
- package/dist/{chunk-j144nwvh.js.map → chunk-cd847h0t.js.map} +1 -1
- package/dist/{chunk-664ewdjv.js → chunk-dj6bw2jm.js} +3 -3
- package/dist/{chunk-664ewdjv.js.map → chunk-dj6bw2jm.js.map} +2 -2
- package/dist/{chunk-s0xwqcrf.js → chunk-dkmf4eg1.js} +3 -3
- package/dist/{chunk-s0xwqcrf.js.map → chunk-dkmf4eg1.js.map} +1 -1
- package/dist/{chunk-5qzxyj68.js → chunk-dwxgr189.js} +1 -1
- package/dist/{chunk-79nypedr.js → chunk-e0w1mf72.js} +3 -3
- package/dist/{chunk-79nypedr.js.map → chunk-e0w1mf72.js.map} +1 -1
- package/dist/{chunk-csvffxjh.js → chunk-e9c02bq0.js} +3 -3
- package/dist/{chunk-csvffxjh.js.map → chunk-e9c02bq0.js.map} +1 -1
- package/dist/{chunk-szdbsmq7.js → chunk-egzfxdr1.js} +2 -2
- package/dist/{chunk-szdbsmq7.js.map → chunk-egzfxdr1.js.map} +1 -1
- package/dist/{chunk-yzw2tvqq.js → chunk-fv1r0w0r.js} +2 -2
- package/dist/{chunk-yzw2tvqq.js.map → chunk-fv1r0w0r.js.map} +1 -1
- package/dist/chunk-fy55jd2h.js +58 -0
- package/dist/{chunk-hxe06cgw.js.map → chunk-fy55jd2h.js.map} +3 -3
- package/dist/{chunk-d249m2ct.js → chunk-fyyf44aj.js} +2 -2
- package/dist/{chunk-d249m2ct.js.map → chunk-fyyf44aj.js.map} +1 -1
- package/dist/{chunk-gmeeyg19.js → chunk-g3sryyn4.js} +2 -2
- package/dist/{chunk-gmeeyg19.js.map → chunk-g3sryyn4.js.map} +1 -1
- package/dist/{chunk-rq3wrwfa.js → chunk-g3vasg0d.js} +1 -1
- package/dist/{chunk-qsbtqh47.js → chunk-gcxk8j84.js} +3 -3
- package/dist/{chunk-qsbtqh47.js.map → chunk-gcxk8j84.js.map} +1 -1
- package/dist/{chunk-1xxh48bd.js → chunk-gn8ee1dp.js} +2 -2
- package/dist/{chunk-1xxh48bd.js.map → chunk-gn8ee1dp.js.map} +1 -1
- package/dist/{chunk-0vb4j7cx.js → chunk-h4h8m3yr.js} +3 -3
- package/dist/{chunk-0vb4j7cx.js.map → chunk-h4h8m3yr.js.map} +1 -1
- package/dist/chunk-hdr0m0md.js +5 -0
- package/dist/{chunk-0qrbspbe.js.map → chunk-hdr0m0md.js.map} +1 -1
- package/dist/{chunk-ryq2ezgt.js → chunk-hkp00b9x.js} +3 -3
- package/dist/{chunk-ryq2ezgt.js.map → chunk-hkp00b9x.js.map} +1 -1
- package/dist/{chunk-5pc21syf.js → chunk-hx8vkwsb.js} +2 -2
- package/dist/{chunk-5pc21syf.js.map → chunk-hx8vkwsb.js.map} +1 -1
- package/dist/chunk-jqzymm6j.js +24 -0
- package/dist/{chunk-d3195ypx.js.map → chunk-jqzymm6j.js.map} +3 -3
- package/dist/{chunk-cq16azbw.js → chunk-jry03jqj.js} +4 -4
- package/dist/{chunk-cq16azbw.js.map → chunk-jry03jqj.js.map} +1 -1
- package/dist/{chunk-qz9n2e59.js → chunk-k5xxwr5h.js} +2 -2
- package/dist/{chunk-qz9n2e59.js.map → chunk-k5xxwr5h.js.map} +1 -1
- package/dist/{chunk-p6nkfcn1.js → chunk-kqbnsthz.js} +2 -2
- package/dist/{chunk-p6nkfcn1.js.map → chunk-kqbnsthz.js.map} +1 -1
- package/dist/{chunk-w0rfypzx.js → chunk-kscwjycy.js} +2 -2
- package/dist/{chunk-w0rfypzx.js.map → chunk-kscwjycy.js.map} +1 -1
- package/dist/{chunk-pyyhmeg1.js → chunk-kt83h150.js} +3 -3
- package/dist/{chunk-pyyhmeg1.js.map → chunk-kt83h150.js.map} +1 -1
- package/dist/{chunk-msxhf3m6.js → chunk-m683535s.js} +3 -3
- package/dist/{chunk-msxhf3m6.js.map → chunk-m683535s.js.map} +1 -1
- package/dist/{chunk-98byy5m4.js → chunk-mg5gq632.js} +1 -1
- package/dist/{chunk-2ednvght.js → chunk-mqbx7hc4.js} +2 -2
- package/dist/{chunk-2ednvght.js.map → chunk-mqbx7hc4.js.map} +1 -1
- package/dist/{chunk-epvpmakp.js → chunk-mvd4mc8p.js} +2 -2
- package/dist/{chunk-epvpmakp.js.map → chunk-mvd4mc8p.js.map} +1 -1
- package/dist/{chunk-g71ppv6x.js → chunk-mxhy19a9.js} +2 -2
- package/dist/{chunk-g71ppv6x.js.map → chunk-mxhy19a9.js.map} +1 -1
- package/dist/{chunk-3d8jxky6.js → chunk-n3pc62tc.js} +3 -3
- package/dist/{chunk-3d8jxky6.js.map → chunk-n3pc62tc.js.map} +1 -1
- package/dist/{chunk-8z29qvvm.js → chunk-n6ywagxv.js} +2 -2
- package/dist/{chunk-8z29qvvm.js.map → chunk-n6ywagxv.js.map} +1 -1
- package/dist/{chunk-191gkynh.js → chunk-nc1gstvq.js} +3 -3
- package/dist/{chunk-191gkynh.js.map → chunk-nc1gstvq.js.map} +1 -1
- package/dist/chunk-p4ka241x.js +5 -0
- package/dist/{chunk-bzcfw8qd.js.map → chunk-p4ka241x.js.map} +3 -3
- package/dist/{chunk-0qernzn1.js → chunk-pfjky33c.js} +2 -2
- package/dist/{chunk-0qernzn1.js.map → chunk-pfjky33c.js.map} +1 -1
- package/dist/{chunk-3vmc6adw.js → chunk-q4q5mxte.js} +2 -2
- package/dist/{chunk-3vmc6adw.js.map → chunk-q4q5mxte.js.map} +1 -1
- package/dist/{chunk-8m3m5hcf.js → chunk-qttv23e7.js} +3 -3
- package/dist/{chunk-8m3m5hcf.js.map → chunk-qttv23e7.js.map} +1 -1
- package/dist/chunk-qwmw2rrh.js +117 -0
- package/dist/{chunk-jx1crzgg.js.map → chunk-qwmw2rrh.js.map} +7 -7
- package/dist/{chunk-weyv3zrt.js → chunk-r94gpbjv.js} +4 -4
- package/dist/{chunk-weyv3zrt.js.map → chunk-r94gpbjv.js.map} +1 -1
- package/dist/{chunk-tsbxdz4h.js → chunk-rh811v1f.js} +2 -2
- package/dist/{chunk-tsbxdz4h.js.map → chunk-rh811v1f.js.map} +1 -1
- package/dist/{chunk-kk18xqgc.js → chunk-s0z61m9j.js} +2 -2
- package/dist/{chunk-kk18xqgc.js.map → chunk-s0z61m9j.js.map} +1 -1
- package/dist/{chunk-6d6p0q3p.js → chunk-s4nqy979.js} +2 -2
- package/dist/{chunk-6d6p0q3p.js.map → chunk-s4nqy979.js.map} +1 -1
- package/dist/{chunk-0b8m1f07.js → chunk-s7tn2t8x.js} +3 -3
- package/dist/{chunk-0b8m1f07.js.map → chunk-s7tn2t8x.js.map} +1 -1
- package/dist/{chunk-6ytezxzj.js → chunk-s7w7pn80.js} +2 -2
- package/dist/{chunk-6ytezxzj.js.map → chunk-s7w7pn80.js.map} +1 -1
- package/dist/{chunk-xp7x27n8.js → chunk-vqar6ysw.js} +3 -3
- package/dist/{chunk-xp7x27n8.js.map → chunk-vqar6ysw.js.map} +1 -1
- package/dist/{chunk-5c6dfy75.js → chunk-wamxfhh6.js} +2 -2
- package/dist/{chunk-5c6dfy75.js.map → chunk-wamxfhh6.js.map} +1 -1
- package/dist/{chunk-egwz89ze.js → chunk-wgre66wq.js} +2 -2
- package/dist/{chunk-egwz89ze.js.map → chunk-wgre66wq.js.map} +1 -1
- package/dist/{chunk-bqxt1she.js → chunk-xzbhy9n5.js} +1 -1
- package/dist/{chunk-jarsydtr.js → chunk-xzkr8yck.js} +3 -3
- package/dist/{chunk-jarsydtr.js.map → chunk-xzkr8yck.js.map} +1 -1
- package/dist/{chunk-htbvkr11.js → chunk-y4bjsyt4.js} +3 -3
- package/dist/{chunk-htbvkr11.js.map → chunk-y4bjsyt4.js.map} +1 -1
- package/dist/{chunk-4670xxae.js → chunk-yc2pnb1w.js} +2 -2
- package/dist/{chunk-4670xxae.js.map → chunk-yc2pnb1w.js.map} +1 -1
- package/dist/{chunk-v0gjdknx.js → chunk-yvpgy1p1.js} +2 -2
- package/dist/{chunk-v0gjdknx.js.map → chunk-yvpgy1p1.js.map} +1 -1
- package/dist/{chunk-zz2n9pa5.js → chunk-z2btwd27.js} +3 -3
- package/dist/{chunk-zz2n9pa5.js.map → chunk-z2btwd27.js.map} +1 -1
- package/dist/{chunk-day21sfa.js → chunk-z94ms1jv.js} +3 -3
- package/dist/{chunk-day21sfa.js.map → chunk-z94ms1jv.js.map} +1 -1
- package/dist/{chunk-m73mjzeh.js → chunk-zh0knwen.js} +2 -2
- package/dist/{chunk-m73mjzeh.js.map → chunk-zh0knwen.js.map} +1 -1
- package/dist/{chunk-9983zmhx.js → chunk-zzgzz4hb.js} +3 -3
- package/dist/{chunk-9983zmhx.js.map → chunk-zzgzz4hb.js.map} +1 -1
- package/dist/client/index.js +1 -1
- 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/index.js +2 -2
- package/dist/email/index.js.map +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/foundation/index.js +2 -2
- package/dist/foundation/index.js.map +1 -1
- package/dist/http/Metadata.d.ts +29 -1
- package/dist/http/Metadata.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/devFetch.d.ts.map +1 -1
- package/dist/server/httpProd.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/requiredViews.d.ts +7 -0
- package/dist/server/requiredViews.d.ts.map +1 -0
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +1 -1
- package/dist/services/queue/work.js +2 -2
- package/dist/services/queue/work.js.map +1 -1
- package/dist/services/router/DomainRouter.d.ts +3 -0
- package/dist/services/router/DomainRouter.d.ts.map +1 -1
- package/dist/services/router/RouteServiceProvider.d.ts.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +14 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/config.d.ts +15 -1
- package/dist/services/router/config.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/vitest/index.js +2 -2
- package/dist/vitest/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-0qrbspbe.js +0 -5
- package/dist/chunk-982x8jps.js +0 -4
- package/dist/chunk-982x8jps.js.map +0 -10
- package/dist/chunk-bzcfw8qd.js +0 -5
- package/dist/chunk-d3195ypx.js +0 -24
- package/dist/chunk-hxe06cgw.js +0 -58
- package/dist/chunk-jx1crzgg.js +0 -117
- /package/dist/{chunk-5qzxyj68.js.map → chunk-dwxgr189.js.map} +0 -0
- /package/dist/{chunk-rq3wrwfa.js.map → chunk-g3vasg0d.js.map} +0 -0
- /package/dist/{chunk-98byy5m4.js.map → chunk-mg5gq632.js.map} +0 -0
- /package/dist/{chunk-bqxt1she.js.map → chunk-xzbhy9n5.js.map} +0 -0
package/dist/chunk-jx1crzgg.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ih as OK}from"./chunk-7bc9ypbk.js";import{Ch as UK}from"./chunk-3d8jxky6.js";import{$h as q8,Bi as _1,Dh as Y3,Fi as FQ,Gi as n$,Hh as OG,Hi as o$,Ih as kW,Ii as lG,Jh as wW,Kh as O8,Ki as iG,Lh as G8,Oh as K8,Ph as B8,Qh as sZ,Rh as lQ,Sh as _J,Th as WW,Uh as h,_h as C,ai as GZ,bi as D8,ci as z6,ei as I$,fi as g,gi as m4,oi as X6,ui as Q6}from"./chunk-0b8m1f07.js";import{Ni as s1,Oi as Z0,Pi as o1,Qi as yW}from"./chunk-w0rfypzx.js";import{Ri as l$,Si as CJ,Wi as PY,Xi as i4,Yi as N}from"./chunk-bzcfw8qd.js";import{$i as YQ,cj as h3}from"./chunk-ryq2ezgt.js";import{gj as fY,jj as gG}from"./chunk-p9syxzxh.js";import{Bj as N$,Gj as n1}from"./chunk-8tyw6faf.js";import{Uj as hX}from"./chunk-szdbsmq7.js";import{Vj as a$,Yj as yG}from"./chunk-tsbxdz4h.js";import{Zj as L1}from"./chunk-5c6dfy75.js";import{$j as s0,_j as J6,ak as x1,bk as BK,ck as FK,ek as mZ,fk as dG,ok as VK}from"./chunk-j144nwvh.js";import{Dk as C1}from"./chunk-m73mjzeh.js";import{Ik as FG,Nk as LJ}from"./chunk-4vqnv41y.js";import{Uk as BG,Zk as n}from"./chunk-0qernzn1.js";import{_k as iZ,bl as H}from"./chunk-xp7x27n8.js";import{jl as UJ}from"./chunk-9f2ps5v2.js";import{kl as sG}from"./chunk-4670xxae.js";import{ul as GJ}from"./chunk-qbsk0jr8.js";import{vl as $8,xl as DG}from"./chunk-m4pkbndk.js";import{Cl as s4}from"./chunk-egwz89ze.js";function a3($){return typeof $==="function"&&$.prototype!==void 0}var nJ=Symbol.for("gemi.HttpResponse"),CK=new Set([301,302,303,307,308]);class j1{kind;body;status;headers;[nJ]=!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 sJ(J,"json"),new j1("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 j1.json({error:Z},{...J,status:$})}static redirect($,Z={}){let J=Z.status??303;if(!CK.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 j1("empty",void 0,J,Y)}static noContent($={}){return new j1("empty",null,204,new Headers($.headers))}static text($,Z={}){let J=Z.status??200;return sJ(J,"text"),new j1("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 sJ($,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 u1($){return typeof $==="object"&&$!==null&&$[nJ]===!0}function AK($,Z,J={}){return j1.error($,Z,J)}function i0($){return typeof $==="string"?[$]:$}function t3($,Z){let J=Z?"attachment":"inline",W=$.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${J}; filename="${W}"; filename*=UTF-8''${encodeURIComponent($)}`}function SK($){return"total"in $&&"partial"in $&&"body"in $}function oJ(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function eZ($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":B8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function EK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(SK($))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 F8($,Z){if($ instanceof Response)return $;if(!$)return oJ();let J=await EK($),{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 oJ()}let{range:Q}=Z;if(Q){if(z<=0)return eZ(Math.max(z,0));if(!X){if(W instanceof Blob){let B=G8(Q,z);if(!B)return eZ(z);W=W.slice(B.start,B.end+1),Y=B.start,j=B.end,X=!0}}}let G=Boolean(Q)&&X,K=G?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"),G)F.set("Content-Range",K8(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",t3(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:K,headers:F})}return new Response(W,{status:K,headers:F})}class YZ extends Z0{limit;constructor($){super("The request body is too large.",{status:413});this.limit=$}}var aJ={b:1,k:1024,kb:1024,m:1048576,mb:1048576,g:1073741824,gb:1073741824};function Z3($){if(typeof $==="number"){if(Number.isFinite($)&&$>=0)return Math.floor($);if($===1/0)return 1/0}else{let Z=$.trim().toLowerCase();if(Z==="none"||Z==="off")return 1/0;let J=/^(\d+(?:\.\d+)?)\s*([a-z]*)$/.exec(Z);if(J&&(J[2]===""||(J[2]in aJ)))return Math.floor(Number(J[1])*(aJ[J[2]]??1))}throw Error(`Invalid body limit ${JSON.stringify($)}. Use a byte count or a size such as "64kb", "1mb" or "none".`)}var $3=new WeakMap;function rJ($){return $3.has($)}function eJ($){return $3.get($)?.limit??null}function $W($){let Z=$3.get($);return Z?Z.read>Z.limit:!1}function bK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function U8($,Z){let J=bK($);if(J!==null&&J>Z)throw new YZ(Z)}function r3($,Z,J={}){let W=$3.get($);if(W)W.limit=Z;else{let Y={limit:Z,read:0,stream:void 0,used:!1};$3.set($,Y),fK($,Y)}if(J.checkDeclared!==!1)U8($,Z)}function RK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function V8($,Z){if(Z.stream!==void 0)return Z.stream;let J=RK($);if(!J)return Z.stream=null;let W;return Z.stream=new ReadableStream({async pull(Y){W??=J.getReader();let{done:j,value:z}=await W.read();if(j){Y.close();return}if(Z.read+=z.byteLength,Z.read>Z.limit){let X=new YZ(Z.limit);Y.error(X),W.cancel(X).catch(()=>{});return}Y.enqueue(z)},cancel(Y){return W?W.cancel(Y):J.cancel(Y)}},{highWaterMark:0}),Z.stream}async function WZ($,Z){if(U8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=V8($,Z);if(!J)return new Uint8Array(0);let W=J.getReader(),Y=[],j=0;for(;;){let{done:Q,value:G}=await W.read();if(Q)break;Y.push(G),j+=G.byteLength}let z=new Uint8Array(j),X=0;for(let Q of Y)z.set(Q,X),X+=Q.byteLength;return z}function tJ($){return $.headers.get("Content-Type")??""}function fK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>V8($,Z)}),J("bodyUsed",{get:()=>Z.used||Boolean(Z.stream?.locked)||Reflect.get(Object.getPrototypeOf($),"bodyUsed",$)}),J("bytes",{value:()=>WZ($,Z)}),J("arrayBuffer",{value:async()=>{let W=await WZ($,Z);return W.buffer.slice(W.byteOffset,W.byteOffset+W.byteLength)}}),J("text",{value:async()=>new TextDecoder().decode(await WZ($,Z))}),J("json",{value:async()=>JSON.parse(new TextDecoder().decode(await WZ($,Z)))}),J("blob",{value:async()=>new Blob([await WZ($,Z)],{type:tJ($)})}),J("formData",{value:async()=>new Response(await WZ($,Z),{headers:{"Content-Type":tJ($)}}).formData()}),J("clone",{value:()=>{U8($,Z.limit);let W=V8($,Z),Y=null;if(W){let[j,z]=W.tee();Z.stream=j,Y=z}return new Request($.url,{method:$.method,headers:$.headers,body:Y,signal:$.signal,duplex:"half"})}})}function ZW($){return a3($)}class l{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];constructor($,Z,J){this.method=$;this.handler=Z;this.methodName=J;this.handler=Z,this.methodName=J,this.method=$}get source(){if(!ZW(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(ZW(this.handler)){let Z=new this.handler;return Z[this.methodName].bind(Z)()}return this.handler()}middleware($){return this.middlewares=i0($),this}}class YW{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=i0($),this}async run(){let $=new C,Z=$.headers.toJSON();for(let J of WW($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if($W($.rawRequest))throw new YZ(eJ($.rawRequest));throw J}}}class jW{constructor(...$){return new l(...$)}}class zW extends l{__internal_brand="StreamHandler";async run($){let Z=N.getStore(),J=Z?.req?.rawRequest,W=O8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);if(u1(Y))return Y;return await F8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof D8)return eZ(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class XW{constructor(...$){return new zW(...$)}}class QW{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new l("GET",$,"list"),post:new l("POST",$,"store")},this.second={get:new l("GET",$,"show"),put:new l("PUT",$,"update"),delete:new l("DELETE",$,"delete")}}middleware($){if($.list)this.first.get.middleware($.list);if($.store)this.first.post.middleware($.store);if($.show)this.second.get.middleware($.show);if($.update)this.second.put.middleware($.update);if($.delete)this.second.delete.middleware($.delete);return this}}class I0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new l("GET",$,Z)}post($,Z){return new l("POST",$,Z)}put($,Z){return new l("PUT",$,Z)}patch($,Z){return new l("PATCH",$,Z)}delete($,Z){return new l("DELETE",$,Z)}resource($){return new QW($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${JW($)}.`);return kK($)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${JW($)}.`);return wK($)}file($,Z){return new jW("GET",$,Z)}stream($,Z){return new XW("GET",$,Z)}proxy($,Z={}){return new YW($,Z)}}function JW($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function kK($){let Z={stream:new l("POST",$,"stream"),attach:new l("POST",$,"attach"),stop:new l("POST",$,"stop"),upload:new l("POST",$,"upload")};return class extends I0{static __internal_brand="AgentRoute";static controller=$;static handlers=Z;routes={"/":Z.stream,"/attach":Z.attach,"/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);if(W.stop)Z.stop.middleware(W.stop);if(W.upload)Z.upload.middleware(W.upload);return this}}}function wK($){let Z={start:new l("POST",$,"voiceStart"),update:new l("PATCH",$,"voiceUpdate"),end:new l("DELETE",$,"voiceEnd")};return class extends I0{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 l1="access_token";function T$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function e3($,Z){let J=T$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var qK=/^[A-Za-z0-9_-]+$/,yK=/^:[A-Za-z_][A-Za-z0-9_]*$/,GW=/^[A-Za-z0-9_-]{1,128}$/,vK=/^[A-Za-z0-9_.:-]+$/;class p extends Error{constructor($){super($);this.name="InvalidChannelError"}}function KW($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function jZ($){if(typeof $!=="string"||$.length===0)throw new p("A channel pattern must be a non-empty string.");if($.length>255)throw new p(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(yK.test(W)){let Y=W.slice(1);if(J.has(Y))throw new p(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new p(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!qK.test(W))throw new p(`The channel pattern "${$}" has an invalid segment "${W}". Segments are separated by dots and are either letters, digits, "_" and "-", or a param such as ":siteId".`)}return Z}function J3($,Z={}){let J=jZ($),W=new Set,Y=J.map((j)=>{if(!j.startsWith(":"))return j;let z=j.slice(1);W.add(z);let X=Z[z];if(X===void 0||X===null)throw new p(`The channel "${$}" needs the param "${z}".`);let Q=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof Q!=="string"||!GW.test(Q))throw new p(`The param "${z}" of the channel "${$}" must be 1 to 128 letters, digits, "_" or "-". Use a public id in a channel name.`);return Q}).join(".");for(let j of Object.keys(Z))if(!W.has(j))throw new p(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new p(`The topic built from "${$}" is longer than 255 characters.`);return Y}function L8($){if(jZ($).some((J)=>J.startsWith(":")))throw new p(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function BW($){if(typeof $!=="string"||$.length===0||$.length>64||!vK.test($))throw new p(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function FW($,Z){if($===Z)return!0;if($===K0)return Z.startsWith(`${K0}.`)&&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(":")&&GW.test(W[j]))}var K0="user";function zZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return J3(`${K0}.:id`,{id:Z})}class t{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class $6 extends t{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');return r3(this.req.rawRequest,Z3(Z)),{}}}function gK($){let Z=new Map;for(let J of $)if(typeof J==="string"){let[W,Y=""]=J.split(":");if(W.startsWith("-")){if(Z.has(W.replace("-","")))Z.delete(W.replace("-",""))}else Z.set(W,Y.split(",").filter(Boolean))}else Z.set(J,[]);return Z}var mK={"body-limit":$6};class i1{config;static token="middleware";defaultBodyLimit;constructor($){this.config=$;this.defaultBodyLimit=$.bodyLimit===null||$.bodyLimit===void 0?null:Z3($.bodyLimit)}get aliases(){return{...mK,...this.config.aliases}}applyDefaultBodyLimit($){if(this.defaultBodyLimit!==null&&!rJ($))r3($,this.defaultBodyLimit,{checkDeclared:!1})}assertGlobalMiddleware(){for(let $ of this.config.global){if(typeof $!=="string")continue;let[Z]=$.split(":");if(Z.startsWith("-"))throw Error(`Global middleware "${$}" cancels an alias, but nothing is inherited into the global list. Remove it.`);if(!this.aliases[Z])throw Error(`Global middleware "${Z}" is not a registered alias. Add it to \`aliases\` in the middleware config, or list the class itself.`)}}runGlobalMiddleware(){return this.runMiddleware(this.config.global)}runMiddleware($){let Z=new C,J=this.aliases,W=[];for(let[Y,j]of gK($).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:VW(z)})}}else if(a3(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:VW(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 hK(W.slice(j+1)),z}return Y})()}}function VW($){return $?.runsOnRefusal===!0}async function hK($){for(let Z of $){if(!Z.runsOnRefusal)continue;try{await Z.run()}catch(J){console.error(J)}}}class Z6{visibility;authorizer;middlewares=[];constructor($,Z){this.visibility=$;this.authorizer=Z}middleware($){return this.middlewares=[...this.middlewares,...i0($)],this}events(...$){return this}}class LW{static __brand="ChannelRouter";channels={};public(){return new Z6("public")}private($){return new Z6("private",$)}async authorize($,Z,J={},W={}){try{uK(this)}catch(Q){return console.error("[gemi] The channel router is invalid, so every subscription is refused.",Q),{ok:!1,code:"error"}}let Y=Object.hasOwn(this.channels,Z)?this.channels[Z]:void 0;if(!HW(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===K0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=J3(Z,J??{})}catch(Q){if(Q instanceof p)return{ok:!1,code:"invalid_params"};throw Q}let z=Object.fromEntries(Object.entries(J??{}).map(([Q,G])=>[Q,String(G)])),X=new C($,z,"api",Z);return N.exit(()=>J6.exit(()=>N.run(X,async()=>{let Q=N.getStore();try{if(Y.middlewares.length>0)await H(i1).runMiddleware(Y.middlewares);if(Z===K0){let G=await UW(X);if(!G)return{ok:!1,code:"denied"};if(j=zZ(G),Y.visibility==="private"&&Y.authorizer){if(await OW(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 OW(Y.authorizer,X,z):await UW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(dK(G))return{ok:!1,code:"denied"};return console.error(`[gemi] Authorizing the channel "${Z}" threw, so the subscription was refused.`,G),{ok:!1,code:"error"}}finally{Q.destroy()}},W.carried)))}}async function pK($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;MW(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 HW($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function UW($){if(!N.getStore().user&&T$($)===null)return null;try{return await w0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function OW($,Z,J){if(cK($))return new $().authorize(Z,J);return $(Z,J)}function cK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function dK($){return $?.kind===s1||n1($)||N$($)}var DW=new WeakSet;function uK($){if(DW.has($))return;MW($),DW.add($)}function MW($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!HW(Y))throw new p(`The channel "${W}" is not declared with this.public() or this.private().`);let j=jZ(W);if(j[0].startsWith(":"))throw new p(`The channel pattern "${W}" starts with a param. Start it with a literal segment, such as "site.:siteId", so it cannot overlap another channel.`);if(W!==K0&&j.length===2&&j[0]===K0)throw new p(`The channel pattern "${W}" can build user.<id>, which belongs to the "user" channel (the signed-in user's own). Declare "user" and emit with Broadcast.toUser(user), or name this channel differently.`);if(W!==K0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new p(`The private channel "${W}" has params but no authorization, so every signed-in user could join every one of them. Pass a callback or a policy that checks the params: this.private((req, params) => ...).`);J.push({pattern:W,segments:W===K0?[K0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(lK(J[W].segments,J[Y].segments))throw new p(`The channel patterns "${J[W].pattern}" and "${J[Y].pattern}" can build the same topic, so a subscriber could join one's topics through the other's authorization. Make them differ in a literal segment.`)}function lK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class H8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class W6{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class M8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}function iK($){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 sK($,Z){let J=iK($);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 PW{static __brand="McpRouter";routes={};scopes;param($){return new H8($.as,$.input,$.bind)}fromTool($,Z={}){return new M8($,Z)}fromApiRoute($,Z,J){return new W6($,Z,J)}fromApiRouteFor($,Z,J){let{name:W,audiences:Y,description:j,params:z,files:X,...Q}=J,G=`McpRouter.fromApiRouteFor("${$}", "${Z}")`,K=Object.keys(Y??{});if(K.length===0)throw Error(`${G}: declare at least one audience.`);let F={},B=new Map;for(let U of K){let{name:V,casing:O,description:D,params:L,files:T,...P}=Y[U],I=V??(O?sK(W,O):W);if(B.has(I))throw Error(`${G}: the audiences "${B.get(I)}" and "${U}" are both named "${I}". Give one its own name or casing.`);B.set(I,U);let A=typeof D==="function"?j===void 0?void 0:D(j):D??j;if(typeof A!=="string")throw Error(`${G}: the audience "${U}" has no description, and there is no shared one.`);let E={...Q,...P,description:A};if(z||L)E.params={...z,...L};if(X||T)E.files={...X,...T};F[I]=new W6($,Z,E)}return F}}function B0($,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 P8 extends Z0{constructor($,Z=307){super("Redirect error");this.name="RedirectError",this.payload={api:{status:200,data:{},directive:{kind:"Redirect",path:$}},view:{status:Z,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:$}}}}}class N1{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 P8([B0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new P8($,Z)}}class TW{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 N1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=i0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function T8($,Z){if($ instanceof Response)return $;let J=$ instanceof Blob,W=J?$:$.file,Y=J?$.name:$.name??$.file?.name,j=(J?$.type:$.type??$.file?.type)||"",z=J?!1:$.download??!1,X=J?200:$.status??200;if(!J)for(let[Q,G]of Object.entries($.headers??{}))Z.set(Q,G);if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return new Response("Not found",{status:404})}if(Z.set("Content-Type",j||"application/octet-stream"),W instanceof Blob)Z.set("Content-Length",String(W.size));if(Y)Z.set("Content-Disposition",t3(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class NW{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=i0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function IW($,Z){if(u1($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class _W{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=IW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=i0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class xW{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends I1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends I1{routes=J??{}}}else this.children=class extends I1{routes=Z},this.handler=()=>({})}async run($,Z){let J=IW(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=i0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class I1{middlewares=[];featureGates=[];routes={};view($,Z){return new _W($,Z)}file($){return new NW($)}redirect($){return new TW($)}layout($,Z,J){return new xW($,Z,J)}}function nK($){return $}function oK(){return{aliases:{},global:[],bodyLimit:null}}var z1="redirect";function X1($,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 XZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function aK($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(H(n).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function tK($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function Y6($,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=aK($,!W);if(W||!tK(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(z1,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class CW extends t{async run($){let Z=N.getStore(),J=Z.req;if(Z.user)return{};let W=await e3(H(b),J);if(!W)throw new I$({redirectTo:Y6(J,$)});return Z.setUser(W),{}}}var I8="gemi_same_site",N8="private, no-cache, no-store, max-age=0, must-revalidate";class j6 extends t{run(){let $=N.getStore(),Z=$?.req;if(!Z||$.user)return{};let J=Z.rawRequest;if(Z.kind!=="view"||J.method!=="GET"&&J.method!=="HEAD")return{};let W=new URL(J.url);if(/\.(json|og)$/.test(W.pathname))return{};if(W.searchParams.has(I8))return{};if(T$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(I8,"1"),new AW(`${W.pathname}${W.search}`)}}class AW extends Z0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=rK($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":N8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":N8}},viewData:{status:200,data:{},headers:{"Cache-Control":N8},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 rK($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}class SW extends t{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 EW={"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 bW extends t{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={...EW,...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={...EW,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var eK="Rate limit exceeded";class a1 extends Z0{result;retryAfter;constructor($,Z=eK){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?_8($):{}};this.payload={api:{status:429,data:{error:{...o1("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function _8($){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 Q1{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(RW("window",W),RW("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 a1(W,typeof J==="function"?J(W):J);return W}}function RW($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}import{isIP as x8}from"net";function _$($){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 x8(j)===6?j:null}if(x8(Z))return Z;let J=/^(\d{1,3}(?:\.\d{1,3}){3}):\d{1,5}$/.exec(Z);return J&&x8(J[1])===4?J[1]:null}class qW extends t{async run($,Z){let J=$B();if(!J)return{};let W=await J.consume(this.key(),{limit:fW($)??this.config.limit,window:fW(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(_8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new a1(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=kW(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${QZ(this.req)}:${this.req.routePath??"*"}`}}function $B(){try{let $=H();return $.bound(Q1)?$.make(Q1):null}catch{return null}}function QZ($){let Z=wW($.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.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function fW($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class vW extends t{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new C8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new C8;return{}}}class C8 extends Z0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:yW("csrf","Invalid CSRF token",403)}},view:{}}}class gW{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class mW{all($,Z){return!0}}class A8{options;param;refuse;answers=new WeakMap;constructor($){this.options=$;this.param=$.param,this.refuse=$.refuse??"not_found"}refusal(){return this.refuse==="forbidden"?new GZ:new z6}authorize($,Z){if(typeof Z==="number"&&Number.isFinite(Z))Z=String(Z);if(typeof Z!=="string"||Z==="")return Promise.reject(this.refusal());let J=this.answers.get($.rawRequest);if(!J)J=new Map,this.answers.set($.rawRequest,J);let W=J.get(Z);if(!W)W=this.decide($,Z),J.set(Z,W);return W}async allows($,Z){try{return await this.authorize($,Z),!0}catch(J){if(this.isRefusal(J))return!1;throw J}}fromRoute($=new C,Z=this.param){if(Z===void 0)throw Error('This resource policy has no `param`. Give `defineResourcePolicy` one, or name it: `fromRoute(req, "pageId")`, or `alias:pageId` on the middleware.');return this.authorize($,$.params?.[Z])}get middleware(){if(!this.middlewareClass){let $=(Z,J)=>this.fromRoute(Z,J||void 0);this.middlewareClass=class extends t{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 GZ:$ instanceof z6}}function ZB($){return new A8($)}async function G6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await UB($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return VB(z,Z,J,$.url)}async function VB($,Z,J,W){let Y=$.getReader(),j=[],z=0;try{for(;;){let{done:G,value:K}=await Y.read();if(G)break;if(z+K.byteLength>Z){if(!J)throw new Q6(W,Z);j.push(K.subarray(0,Z-z)),z=Z;break}j.push(K),z+=K.byteLength}}finally{Y.cancel().catch(()=>{})}let X=new Uint8Array(z),Q=0;for(let G of j)X.set(G,Q),Q+=G.byteLength;return X}async function UB($){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 K6($){return new TextDecoder("utf-8").decode($)}var OB={"&":"&","<":"<",">":">",'"':""","'":"'"};function x$($){return $.replace(/[&<>"']/g,(Z)=>OB[Z])}var DB={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function S8($){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 DB[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 E8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function hW($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(S8($.slice(W)));return}if(Y>W)Z.text(S8($.slice(W,Y)));if($.startsWith("<!--",Y)){let j=$.indexOf("-->",Y+4);if(j===-1)return;W=j+3}else if($.startsWith("<![CDATA[",Y)){let j=$.indexOf("]]>",Y+9);if(j===-1)return;Z.text($.slice(Y+9,j)),W=j+3}else if($.startsWith("<?",Y)){let j=$.indexOf("?>",Y+2);if(j===-1)return;W=j+2}else if($.startsWith("<!",Y)){let j=$.indexOf(">",Y+2);if(j===-1)return;let z=$.indexOf("[",Y+2);if(z!==-1&&z<j){let X=$.indexOf("]",z+1);if(X===-1)return;let Q=$.indexOf(">",X+1);if(Q===-1)return;W=Q+1}else W=j+1}else if($[Y+1]==="/"){let j=$.indexOf(">",Y+2);if(j===-1)return;Z.close(E8($.slice(Y+2,j).trim())),W=j+1}else{let j=LB($,Y+1);if(j===-1)return;let z=$.slice(Y+1,j),X=z.endsWith("/");if(X)z=z.slice(0,-1);let Q=z.search(/[\s]|$/),G=E8(z.slice(0,Q));if(G){if(Z.open(G,HB(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function LB($,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 HB($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[E8(W[1])]=S8(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 lW="http://www.sitemaps.org/schemas/sitemap/0.9",MB="http://www.w3.org/1999/xhtml",f8=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
|
-
`,pW=`<urlset xmlns="${lW}" xmlns:xhtml="${MB}">
|
|
4
|
-
`,cW=`</urlset>
|
|
5
|
-
`,C$=50000,W3=52428800,dW=2048,PB=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),TB=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,NB="application/xml; charset=utf-8",uW=new TextEncoder;function k8($,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>dW)throw new J0(`Sitemap: ${Z} is over ${dW} characters: "${W.slice(0,80)}\u2026".`);return W}function iW($,Z){if($ instanceof Date){if(Number.isNaN($.getTime()))throw new J0(`Sitemap: lastmod of ${Z} is an invalid Date.`);return $.toISOString()}if(!TB.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 IB($){let Z=k8($.loc,"loc"),J=`<url><loc>${x$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${x$(iW($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!PB.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=k8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${x$(Y)}" href="${x$(j)}"/>`}return`${J}</url>
|
|
6
|
-
`}function _B($){let Z=$.maxUrls??C$,J=$.maxBytes??W3;if(!Number.isInteger(Z)||Z<1||Z>C$)throw RangeError(`Sitemap: maxUrls must be an integer from 1 to ${C$}.`);if(!Number.isInteger(J)||J<1||J>W3)throw RangeError(`Sitemap: maxBytes must be an integer from 1 to ${W3}.`);return{maxUrls:Z,maxBytes:J}}function sW($,Z={}){let{maxUrls:J,maxBytes:W}=_B(Z),Y=uW.encode(f8+pW+cW).byteLength,j=[],z=[],X=Y,Q=()=>{j.push(f8+pW+z.join("")+cW),z=[],X=Y};for(let G of $){let K=IB(G),F=uW.encode(K).byteLength;if(Y+F>W)throw new J0(`Sitemap: the entry for ${G.loc} alone is over maxBytes (${W}).`);if(z.length===J||X+F>W)Q();z.push(K),X+=F}if(z.length>0||j.length===0)Q();return j}function nW($){let Z="",J=0;for(let W of $){if(++J>C$)throw new J0(`Sitemap: an index can list at most ${C$} sitemaps.`);let Y=k8(W.loc,"sitemap loc");if(Z+=`<sitemap><loc>${x$(Y)}</loc>`,W.lastmod!=null)Z+=`<lastmod>${x$(iW(W.lastmod,Y))}</lastmod>`;Z+=`</sitemap>
|
|
7
|
-
`}return`${f8}<sitemapindex xmlns="${lW}">
|
|
8
|
-
${Z}</sitemapindex>
|
|
9
|
-
`}function b8($,Z,J){let W=new Headers(J);if(!W.has("content-type"))W.set("content-type",NB);return new Response($,{status:Z,headers:W})}function xB($){if($===null||$===void 0||$==="")return null;let Z=String($);return/^[1-9]\d{0,8}$/.test(Z)?Number(Z):NaN}function CB($,Z={}){let J=sW($,Z),W=xB(Z.page);if(W!==null){let j=J[W-1];return j?b8(j,200,Z.headers):new Response("Not found",{status:404,headers:{"cache-control":"no-store"}})}if(J.length===1)return b8(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 b8(nW(J.map((j,z)=>({loc:Y(z+1)}))),200,Z.headers)}function R8($){try{let Z=new URL($.trim());return Z.protocol==="http:"||Z.protocol==="https:"?Z.href:null}catch{return null}}function oW($,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 V=U.trim()?R8(U):null;if(V)B.push({loc:V})}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=[],Q=null,G=null,K="",F=()=>Y==="index"?z.length:j.length;if(hW(W,{stopped:()=>F()>=J,open(B,U){let V=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"&&V==="urlset"||Y==="index"&&B==="sitemap"&&V==="sitemapindex")Q={};else if(Q&&(V==="url"||V==="sitemap")&&(B==="loc"||B==="lastmod"||B==="changefreq"||B==="priority"))G=B,K="";else if(Q&&Y==="urlset"&&V==="url"&&B==="link"){let O=U.href?R8(U.href):null;if(U.rel?.toLowerCase()==="alternate"&&U.hreflang&&O)(Q.alternates??=[]).push({hrefLang:U.hreflang,href:O})}},close(B){let U=X.lastIndexOf(B);if(U===-1)return;if(X.length=U,G&&B===G&&Q)Q[G]=K.trim(),G=null;else if(Q&&(B==="url"||B==="sitemap")){let V=Q;Q=null,G=null;let O=V.loc?R8(V.loc):null;if(!O)return;if(Y==="index"){z.push(V.lastmod?{loc:O,lastmod:V.lastmod}:{loc:O});return}let D={loc:O};if(V.lastmod)D.lastmod=V.lastmod;if(V.changefreq)D.changefreq=V.changefreq;let L=V.priority?Number(V.priority):NaN;if(Number.isFinite(L))D.priority=L;if(V.alternates)D.alternates=V.alternates;j.push(D)}},text(B){if(G)K+=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*AB($,Z={}){let{maxUrls:J=C$,maxSitemaps:W=50,maxDepth:Y=3,maxSize:j=W3,onError:z,...X}=Z,Q=[{url:String($),depth:0}],G=new Set,K=0,F=0;while(Q.length>0&&F<J&&K<W){let B=Q.shift(),U=B.url.replace(/#.*$/,"");if(G.has(U))continue;G.add(U),K++;let V;try{let O=await _1(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 D=K6(await G6(O,j));V=oW(D,{maxUrls:Math.max(J-F,W-K)})}catch(O){if(B.depth===0||!z||X.signal?.aborted)throw O;z(O,B.url);continue}if(V.kind==="index"){if(B.depth>=Y)continue;Q=V.sitemaps.slice(0,W-K).map((D)=>({url:D.loc,depth:B.depth+1})).concat(Q);continue}for(let O of V.urls)if(yield{...O,sitemap:B.url},++F>=J)return}}var aW={response:CB,chunk:sW,index:nW,parse:oW,read:AB,MAX_URLS:C$,MAX_BYTES:W3};var SB=512000,EB=new TextEncoder;function tW($){let Z=$.trim();if(Z==="*")return"*";return(/^[a-zA-Z_-]+/.exec(Z)?.[0]??"").toLowerCase()}function rW($){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 EB.encode(String.fromCodePoint(Y)))Z+=`%${j.toString(16).toUpperCase().padStart(2,"0")}`}else Z+=W}return Z}function bB($,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 KZ{groups;sitemaps;status;constructor($,Z,J="parsed"){this.groups=$;this.sitemaps=Z;this.status=J}groupsFor($){let Z=tW($)||"*";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=rW(J);let W=null;for(let Y of this.groupsFor(Z))for(let j of Y.rules){if(!bB(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 RB={"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 eW($,Z={}){let J=[],W=[],Y=null,j=!1;for(let z of $.replace(/^\uFEFF/,"").split(/\r\n|\r|\n/)){let X=z.indexOf("#"),Q=(X===-1?z:z.slice(0,X)).trim(),G=Q.indexOf(":");if(G===-1)continue;let K=RB[Q.slice(0,G).trim().toLowerCase()],F=Q.slice(G+1).trim();if(!K)continue;if(K==="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(K==="user-agent"){if(!j||!Y)Y={userAgents:[],rules:[]},J.push(Y),j=!0;let B=tW(F);if(B)Y.userAgents.push(B);continue}if(!Y)continue;if(j=!1,K==="crawl-delay"){let B=Number(F);if(Number.isFinite(B)&&B>=0)Y.crawlDelay=B;continue}if(!F)continue;Y.rules.push({type:K,path:rW(F)})}return new KZ(J,W)}async function fB($,Z={}){let{maxSize:J=SB,...W}=Z,Y=new URL("/robots.txt",$),j=await _1(Y,{...W,maxSize:Number.MAX_SAFE_INTEGER}),z=j.status;if(z===429||z>=500)return j.body?.cancel().catch(()=>{}),new KZ([],[],"unreachable");if(z>=400)return j.body?.cancel().catch(()=>{}),new KZ([],[],"unavailable");let X=await G6(j,J,!0),Q=K6(X);if(X.byteLength>=J)Q=Q.slice(0,Math.max(0,Q.lastIndexOf(`
|
|
10
|
-
`)));return eW(Q,{url:j.url})}function w8($){return $===void 0?[]:typeof $==="string"?[$]:$}function B6($,Z){if(/[\r\n]/.test(Z))throw TypeError(`Robots: the ${$} value ${JSON.stringify(Z)} has a line break in it.`);return`${$}: ${Z}
|
|
11
|
-
`}function $Y($){let Z=[];for(let W of $.rules??[]){let Y=w8(W.userAgent);if(Y.length===0)throw TypeError("Robots: a rule needs at least one userAgent.");let j=Y.map((X)=>B6("User-agent",X)).join(""),z=[...w8(W.allow).map((X)=>["Allow",X]),...w8(W.disallow).map((X)=>["Disallow",X])];for(let[X,Q]of z){if(!Q.startsWith("/")&&!Q.startsWith("*"))throw TypeError(`Robots: ${X} "${Q}" must start with "/" or "*".`);j+=B6(X,Q)}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+=B6("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 B6("Sitemap",Y.href)});if(J.length>0)Z.push(J.join(""));return Z.join(`
|
|
13
|
-
`)}function kB($,Z={}){let J=new Headers(Z.headers);if(!J.has("content-type"))J.set("content-type","text/plain; charset=utf-8");return new Response($Y($),{status:200,headers:J})}var ZY={response:kB,text:$Y,parse:eW,fetch:fB};import{createHmac as JY,randomBytes as wB}from"crypto";var y8="v2.";function v8($){return $.startsWith(y8)}function BZ(){let $=process.env.SECRET;if(!$)throw Error("Signing in needs a secret to mint session tokens with. Set SECRET in the environment.");return $}function WY($){let Z=wB(16).toString("hex"),J=JY("sha256",BZ()).update(`${$}:${Z}`).digest("hex");return`${y8}${J}`}function F6($,Z){let J=JY("sha256",BZ()).update(`legacy-session:${Z}:${$}`).digest("hex");return`${y8}${J}`}import{createHash as vB,createHmac as gB,randomInt as mB,timingSafeEqual as zY}from"crypto";function YY($,Z){return Math.floor($/Z)*Z}function qB($,Z){if(Z<=0)return 0;return Math.min(1,Math.max(0,(Z-$)/Z))}function g8($,Z,J,W){return Z*qB(J,W)+$}function yB($){let{current:Z,previous:J,elapsed:W,window:Y,limit:j,cost:z}=$,X=j-z;if(X<0)return Y;let Q=Math.max(0,Y-W);if(J>0){let K=Y*(1-(X-Z)/J);if(K<=Y)return Math.max(0,Math.ceil(K-W))}if(Z<=X)return Q;if(Z<=0)return Q;let G=Y*(1-X/Z);return Q+Math.max(0,Math.ceil(G))}function jY($){let{allowed:Z,current:J,previous:W,now:Y,elapsed:j,window:z,limit:X,cost:Q}=$;if(Z){let K=g8(J,W,j,z);return{allowed:!0,limit:X,remaining:Math.max(0,Math.floor(X-K)),resetAt:Y-j+z,retryAfter:0}}let G=yB({current:J,previous:W,elapsed:j,window:z,limit:X,cost:Q});return{allowed:!1,limit:X,remaining:0,resetAt:Y+G,retryAfter:G}}class m8{}class h8 extends m8{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=YY(j,W),X=j-z,Q=this.roll(Z,W,z);Q.limit=J;let K=g8(Q.current,Q.previous,X,W)+Y<=J;if(K)Q.current+=Y;if(this.buckets.delete(Z),this.buckets.set(Z,Q),this.buckets.size>this.maxKeys)this.evict(j);return jY({allowed:K,current:Q.current,previous:Q.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 GY="h1.";function V6($,Z,J){let W=gB("sha256",BZ()).update(`gemi:one-time:${$}:${Z}:${J}`).digest("hex");return`${GY}${W}`}function j3($,Z,J,W){let Y=typeof W==="string"?W:"",j=typeof J==="string"?J:"",z=j.startsWith(GY),X=V6($,Z,Y),Q=Buffer.from(z?X:Y),G=Buffer.from(j);if(Q.length!==G.length||Y===""||j==="")return zY(Q,Q),!1;return zY(Q,G)}function KY($){let Z="";for(let J=0;J<$;J++)Z+=String(mB(0,10));return Z}var BY=320;function z3($){if(typeof $!=="string")return null;let Z=$.trim();if(Z===""||Z.length>BY)return null;return Z.toLowerCase()}function U6($){if(typeof $!=="string")return null;let Z=$.trim();if(Z.length>BY)return null;let J=Z.toLowerCase();if(J.length<3||J.length>254||!/^[^\s@]+@[^\s@]+$/.test(J))return null;return J}var XY=null;function FY(){try{let $=H();if(typeof $?.bound==="function"&&$.bound(Q1))return $.make(Q1)}catch{}return XY??=new Q1({driver:new h8,limit:1000,window:60}),XY}function QY($){return $.length<=64?$:`sha256:${vB("sha256").update($).digest("hex")}`}async function FZ($,Z,J,W){let Y=FY(),j=[[`auth:code-${$}:ip:${QY(QZ(J))}`,W.perIp]];if(Z!==null)j.push([`auth:code-${$}:email:${QY(Z)}`,W.perEmail]);for(let[z,X]of j){if(!X)continue;let[Q,G]=X,K=await Y.consume(z,{limit:Q,window:G});if(!K.allowed)throw new a1(K)}}async function VY($,Z,J,W=10){let Y=Math.max(86400,Math.ceil(W*60*(J+1)));return(await FY().consume(`auth:code-attempt:${$}:${Z}`,{limit:J,window:Y})).allowed}import{randomBytes as c8}from"crypto";class p8 extends C{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"}}}function O6($,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 hB($={}){for(let Z of["password","magicLink"]){let J=$?.[Z];if(J!==void 0&&typeof J!=="boolean")throw Error(`auth.${Z} must be true or false, got ${JSON.stringify(J)}`)}}function d8($={}){let Z=$.length??6,J=$.expiresInMinutes??10,W=$.linkExpiresInMinutes??10080,Y=$.maxAttempts??5;return O6("length",Z,4,12),O6("expiresInMinutes",J,1),O6("linkExpiresInMinutes",W,1),O6("maxAttempts",Y,1),{enabled:$.enabled??!1,createUser:$.createUser??!1,length:Z,expiresInMinutes:J,linkExpiresInMinutes:W,maxAttempts:Y,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:j,code:z})=>{if(Bun.env.NODE_ENV!=="production")console.info(`[gemi] email code for ${j}: ${z} (set auth.emailCode.send to deliver it)`)})}}async function pB($,Z){if(typeof Z!=="string"||Z==="")return!1;try{return await Bun.password.verify($,Z)}catch{return!1}}function UY($){if(!$)return null;if(typeof $.getRedirectUrl==="function")return{provider:$};let{provider:Z,feature:J}=$;return{provider:Z,...J!==void 0?{feature:J}:{}}}function OY($){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 } with an OAuthProvider.`);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 XP($){return $}function DY($={}){return hB($),{basePath:"/auth",verifyEmail:!0,password:!0,magicLink:!0,redirectPath:"/dashboard",signInPath:"/auth/sign-in",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,cookieDomain:null,migrateLegacySession:null,signUpRequest:p8,oauthProviders:{},oauthFailurePath:null,oauthCompleteProfilePath:null,connections:{},connectionStore:null,onConnected:()=>{},verifyPassword:pB,hashPassword:async(Z)=>await Bun.password.hash(Z),generateForgotPasswordToken:async()=>c8(32).toString("hex"),generateEmailVerificationToken:()=>{if(!($.verifyEmail??!0))return"";return c8(32).toString("hex")},generateMagicLinkToken:()=>c8(32).toString("hex"),extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{},emailCode:d8($.emailCode),generateCode:()=>{return},onAuthenticated:()=>{}}}var cB=new Set(["script","style","textarea","title","xmp","iframe","noembed","noframes","noscript"]),dB=new Set(["svg","math"]);function LY($){return $===32||$===9||$===10||$===12||$===13}function HY($){return $>=65&&$<=90||$>=97&&$<=122}function D6($){return $>=65&&$<=90?$+32:$}function MY(){let $="data",Z="",J=!1,W="",Y=0,j=0,z=!1,X=0,Q=0,G=()=>$==="data"&&X===0&&Q===0,K=()=>{if(!J&&cB.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(dB.has(Z)){if(J)Q=Math.max(0,Q-1);else if(!z)Q+=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(HY(B))$="tagName",J=!1,z=!1,Z=String.fromCharCode(D6(B));else if(B===63)$="bogus";else if(B===60)$="tagOpen";else $="data";return;case"endTagOpen":if(HY(B))$="tagName",J=!0,z=!1,Z=String.fromCharCode(D6(B));else if(B===62)$="data";else $="bogus";return;case"tagName":if(LY(B)||B===47)$="inTag",z=B===47;else if(B===62)K();else Z+=String.fromCharCode(D6(B));return;case"inTag":if(B===62){K();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(D6(B)===W.charCodeAt(Y))Y+=1;else Y=B===60?1:0;return}if(B===62)$="data",Z="";else if(LY(B)||B===47)$="inTag",Z="";else Y=B===60?1:0;return}}};return{scanToInsertionPoint(B){for(let U=0;U<B.length;U++){if(G())return U;F(B[U])}return B.length},write(B){for(let U=0;U<B.length;U++)F(B[U])},isSafe:G}}function G1($){let Z=JSON.stringify($);if(Z===void 0)return"undefined";return Z.replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function uB($){return`<script>(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${G1([$.path,$.variantKey,$.data])})</script>`}function lB($){return`<script>(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${G1([$.id,$.locale,$.strings])})</script>`}function u8($,Z,J={},W){let Y=new TextEncoder,j=[],z=!1,X=!1,Q=()=>{if(X)return;X=!0,J.onClose?.()};Z.onSettle((V)=>{if(V.status!=="resolved")return;j.push(uB(V))}),W?.onUse((V)=>{j.push(lB(V))});let G=$.getReader(),K=MY(),F=(V,O)=>{V.enqueue(O),J.onChunk?.(O)},B=(V)=>{while(j.length>0){let O=Y.encode(j.shift());K.write(O),F(V,O)}},U=(V,O)=>{if(j.length===0){K.write(O),F(V,O);return}let D=K.scanToInsertionPoint(O);if(D>0)F(V,O.subarray(0,D));if(K.isSafe())B(V);let L=O.subarray(D);if(L.length>0)K.write(L),F(V,L)};return new ReadableStream({async pull(V){let O;try{O=await G.read()}catch(T){throw Q(),T}let{done:D,value:L}=O;if(D){B(V),V.close(),Q();return}if(!z){if(z=!0,K.write(L),F(V,L),J.onShell?.(),K.isSafe())B(V);return}U(V,L)},cancel(V){return Q(),G.cancel(V)}})}var iB=/bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;function L6($){if(!$)return!1;return iB.test($)}async function TY($,Z=()=>{}){let J=N.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 sB($,Z),request:{path:Y,routePath:W?.routePath??null,locale:J?.locale??null},anonymousId:PY(),isBot:L6(W?.rawRequest?.headers?.get("user-agent")??null),now:new Date}}function NY($){return{user:$.user??null,attributes:$.attributes??{},request:{path:null,routePath:null,locale:null},anonymousId:$.subjectId??null,isBot:!1,now:new Date}}async function sB($,Z){if(!$.context)return{};try{let J=N.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 IY($,Z){return`${$}:${Z}`}function l8($){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 xY($,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=oB($,Z,J,W.buckets);return _Y(Y,Z.rollout)?{value:!0,reason:"rollout"}:{value:!1,reason:"excluded"}}function nB($){let Z=$.user?.publicId??$.user?.id;if(Z!==void 0&&Z!==null)return String(Z);return $.anonymousId??""}function oB($,Z,J,W){let Y=IY(Z.salt??$,nB(J));if(!W)return l8(Y);let j=W.get(Y);if(j!==void 0)return j;let z=l8(Y);return W.set(Y,z),z}class CY 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 i8{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 CY(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=aB(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 aB($){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 tB{}class rB 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 s8 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 AY 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 SY{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 t1{config;log;static token="features";store;declared;warnedAboutSize=!1;warnedAboutActor=!1;constructor($,Z=()=>{}){this.config=$;this.log=Z;this.declared=$.features??{},this.store=new i8($.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{N.getStore()?.featureEvaluations?.clear()}}async set($,Z,J={}){if(typeof $!=="string"||!Object.hasOwn(this.declared,$))throw new AY(String($));if(typeof Z!=="boolean")throw TypeError(`Features.set("${$}", \u2026) takes a boolean, not ${Z===null?"null":typeof Z}.`);let W=eB(J.actor),Y=this.config.source;if(typeof Y.write!=="function")throw new s8(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 SY(this,NY($))}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($),Q=xY($,j,Z,{active:z,unavailable:X,buckets:J,warn:this.log});return W?.set($,Q),this.notify($,Q,Z),Q}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 $=N.getStore();if($?.featureContext)return $.featureContext;let Z=await TY(this.config,this.log);if($)$.featureContext=Z;return Z}memoFor($){let Z=N.getStore();if(!Z||Z.featureContext!==$)return null;return Z.featureEvaluations??=new Map,Z.featureEvaluations}requestBuckets(){let $=N.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 eB($){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 EY($){if($===void 0)return!0;return await H(t1).enabled($)}async function VZ($,Z){if(typeof Z!=="string"||!Object.hasOwn($,Z))return null;let J=UY($[Z]);if(!J||!await EY(J.feature))return null;return J.provider}async function bY($){let Z=[];for(let J of Object.keys($))if(await VZ($,J))Z.push(J);return Z}function n8($){if($&&typeof $==="object")delete $.password;return $}function $F(){return new Proxy({},{get:($,Z)=>fY(Z)})}var RY=new WeakMap;function kY($){if($&&typeof $==="object"){for(let Z of Object.values($))kY(Z);Object.freeze($)}return $}var ZF={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}},JF=kY({token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:ZF});class o8{models;constructor($=$F()){this.models=$}run($){return this.models.User.asSystem($)}sessionSelect(){return JF}transaction($){return this.models.User.transaction($)}withLegacySessionLock($,Z){let J=this.models.User.$connection??x1(),W=H(C1).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=(RY.get(W)??Promise.resolve()).then(Y,Y);return RY.set(W,z.catch(()=>{})),z}async createUser($){let Z=await this.run(()=>this.models.User.create({data:$}));return n8(Z)}async updateUserPassword($){let Z=await this.run(()=>this.models.User.update({where:{id:$.id},data:{password:$.password}}));return n8(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;try{return await this.run(()=>this.models.Session.findUnique({where:{token:$.token},select:this.sessionSelect()}))}catch(Z){return console.error("findSession failed:",Z),null}}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 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?n8(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 zO}from"crypto";function q0($,Z,J,W,Y){return n0(Z,oY($,Z),J,W,Y)}function n0($,Z,J,W,Y,j){let z=$7(Z,J,W);if(Y&&Z!==z)throw RangeError(fz($,Z,J,W,j));return z}function oY($,Z){let J=$[Z];if(J===void 0)throw TypeError(E2(Z));return J}function V0($){return $!==null&&/object|function/.test(typeof $)}function g0($,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 Q7($){return b$({name:$},1)}function b$($,Z){return r0((J)=>({value:J,configurable:1,writable:!Z}),$)}function aY($){return r0((Z)=>({get:Z,configurable:1}),$)}function k6($){return{[Symbol.toStringTag]:{value:$,configurable:1}}}function PZ($,Z){let J={},W=$.length;for(let Y of Z)J[$[--W]]=Y;return J}function r0($,Z,J){let W={};for(let Y in Z)W[Y]=$(Z[Y],Y,J);return W}function O3($,Z,J){let W={};for(let Y=0;Y<Z.length;Y++){let j=Z[Y];W[j]=$(j,Y,J)}return W}function WF($,Z,J){let W={};for(let Y=0;Y<$.length;Y++)W[Z[Y]]=J[$[Y]];return W}function h0($,Z){let J={};for(let W of $)J[W]=Z[W];return J}function G7($,Z){let J={};for(let W in Z)$.has(W)||(J[W]=Z[W]);return J}function K7($){$={...$};let Z=Object.keys($);for(let J of Z)$[J]===void 0&&delete $[J];return $}function tY($,Z){for(let J of Z)if(!(J in $))return 0;return 1}function rY($,Z,J){for(let W of $)if(Z[W]!==J[W])return 0;return 1}function eY($,Z,J){let W={...J};for(let Y=0;Y<Z;Y++)W[$[Y]]=0;return W}function k($,...Z){return(...J)=>$(...Z,...J)}function wY($){return $[0].toUpperCase()+$.substring(1)}function D3($){return $.slice().sort()}function _6($,Z){return String(Z).padStart($,"0")}function r1($,Z){return Math.sign($-Z)}function $7($,Z,J){return Math.min(Math.max($,Z),J)}function S1($,Z){return[Math.floor($/Z),Q3($,Z)]}function Q3($,Z){return($%Z+Z)%Z}function Z$($,Z){return[w6($,Z),B7($,Z)]}function w6($,Z){return Math.trunc($/Z)||0}function B7($,Z){return $%Z||0}function H6($){return Math.abs($%1)===0.5}function $5($,Z,J){let W=0,Y=0;for(let X=0;X<=Z;X++){let Q=$[J[X]],G=B1[X],K=c/G,[F,B]=Z$(Q,K);W+=B*G,Y+=F}let[j,z]=Z$(W,c);return[Y+j,z]}function q6($,Z,J){let W={};for(let Y=Z;Y>=0;Y--){let j=B1[Y];W[J[Y]]=w6($,j),$=B7($,j)}return W}function Z5($){return $===w?O4:[]}function J5($){return $===w?C3:[]}function W5($){return $===w?["year","day"]:[]}function Y5($){if($!==void 0)return r($)}function j5($){if($!==void 0)return e0($)}function F7($){if($!==void 0)return L3($)}function e0($){return Q5(L3($))}function L3($){return X5(nF($))}function V7($){if($==null)throw TypeError("Cannot be null or undefined");return $}function z5($,Z){if(Z==null)throw RangeError(E2($));return Z}function b1($){if(!V0($))throw TypeError(Rz);return $}function y6($,Z,J=$){if(typeof Z!==$)throw TypeError(I3(J,Z));return Z}function X5($,Z="number"){if(!Number.isInteger($))throw RangeError(MF(Z,$));return $||0}function Q5($,Z="number"){if($<=0)throw RangeError(PF(Z,$));return $}function U7($){if(typeof $=="symbol")throw TypeError(_F);return String($)}function x6($,Z){return V0($)?String($):r($,Z)}function v6($){if(typeof $=="string")return BigInt($);if(typeof $!="bigint")throw TypeError(IF($));return $}function G5($,Z="number"){if(typeof $=="bigint")throw TypeError(NF(Z));if($=Number($),!Number.isFinite($))throw RangeError(TF(Z,$));return $}function _0($,Z){return Math.trunc(G5($,Z))||0}function K5($,Z){return X5(G5($,Z),Z)}function qY($,Z){return Q5(_0($,Z),Z)}function O7($,Z){let[J,W]=Z$(Z,c),Y=$+J,j=Math.sign(Y);return j&&j===-Math.sign(W)&&(Y-=j,W+=j*c),[Y,W]}function OZ($,Z,J=1){return O7($[0]+Z[0]*J,$[1]+Z[1]*J)}function DZ($,Z){return O7($[0],$[1]+Z)}function d0($,Z){return OZ(Z,$,-1)}function C0($,Z){return r1($[0],Z[0])||r1($[1],Z[1])}function B5($,Z,J){return C0($,Z)===-1||C0($,J)===1}function g6($,Z=1){let J=BigInt(c/Z);return[Number($/J),Number($%J)*Z]}function LZ($,Z=1){let J=c/Z,[W,Y]=Z$($,J);return[W,Y*Z]}function F5($,Z=1){let[J,W]=$,Y=Math.floor(W/Z),j=c/Z;return BigInt(J)*BigInt(j)+BigInt(Y)}function u0($,Z=1,J){let[W,Y]=$,[j,z]=Z$(Y,Z);return W*(c/Z)+(j+(J?z/Z:0))}function D7($,Z,J=S1){let[W,Y]=$,[j,z]=J(Y,Z);return[W*(c/Z)+j,z]}function L7($,Z){let J=$.formatToParts(Z),W={};for(let Y of J)W[Y.type]=Y.value;return W}function H7($){return q0($,"isoYear",U3,V3,1),$.isoYear===U3?q0($,"isoMonth",4,12,1):$.isoYear===V3&&q0($,"isoMonth",1,9,1),$}function e1($){return R1({...$,...t0,isoHour:12}),$}function R1($){let Z=q0($,"isoYear",U3,V3,1),J=Z===U3?1:Z===V3?-1:0;return J&&l0(x0({...$,isoDay:$.isoDay+J,isoNanosecond:$.isoNanosecond-J})),$}function l0($){if(!$||B5($,ZV,$V))throw RangeError(B4);return $}function J$($){return $5($,5,W1)[1]}function m6($){let[Z,J]=S1($,c);return[q6(J,5,W1),Z]}function V5($){return U5($)[0]}function U5($){return D7($,a0)}function A0($){return TZ($.isoYear,$.isoMonth,$.isoDay,$.isoHour,$.isoMinute,$.isoSecond,$.isoMillisecond)}function x0($){let Z=A0($);if(Z!==void 0){let[J,W]=Z$(Z,v0);return[J,W*F1+($.isoMicrosecond||0)*m$+($.isoNanosecond||0)]}}function M7($,Z){let[J,W]=m6(J$($)-Z);return l0(x0({...$,isoDay:$.isoDay+W,...J}))}function C6(...$){return TZ(...$)/dz}function TZ(...$){let[Z,J]=O5(...$),W=Z.valueOf();if(!isNaN(W))return W-J*v0}function O5($,Z=1,J=1,W=0,Y=0,j=0,z=0){let X=$===U3?1:$===V3?-1:0,Q=new Date;return Q.setUTCHours(W,Y,j,z),Q.setUTCFullYear($,Z-1,J+X),[Q,X]}function Y$($,Z){let[J,W]=DZ($,Z);W<0&&(W+=c,J-=1);let[Y,j]=S1(W,F1),[z,X]=S1(j,m$);return h6(J*v0+Y,z,X)}function h6($,Z=0,J=0){let W=Math.ceil(Math.max(0,Math.abs($)-eF)/v0)*Math.sign($),Y=new Date($-W*v0);return PZ(L4,[Y.getUTCFullYear(),Y.getUTCMonth()+1,Y.getUTCDate()+W,Y.getUTCHours(),Y.getUTCMinutes(),Y.getUTCSeconds(),Y.getUTCMilliseconds(),Z,J])}function D5($){return[$.isoYear,$.isoMonth,$.isoDay]}function L5(){return A1}function P7($,Z){switch(Z){case 2:return T7($)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function H5($){return T7($)?366:365}function T7($){return $%4==0&&($%100!=0||$%400==0)}function M5($){let[Z,J]=O5($.isoYear,$.isoMonth,$.isoDay);return Q3(Z.getUTCDay()-J,7)||7}function P5({isoYear:$}){return $<1?["bce",1-$]:["ce",$]}function YF($){let Z=A0($);if(Z<WV)return P5($);let J=L7(s2(HZ),Z),{era:W,eraYear:Y}=Rj(J,HZ);return[W,Y]}function p6($){return R$($),c6($,1),$}function R$($){return T5($,1),$}function yY($){return rY(m2,$,T5($))}function T5($,Z){let{isoYear:J}=$,W=q0($,"isoMonth",1,L5(),Z);return{isoYear:J,isoMonth:W,isoDay:q0($,"isoDay",1,P7(J,W),Z)}}function c6($,Z){return PZ(W1,[q0($,"isoHour",0,23,Z),q0($,"isoMinute",0,59,Z),q0($,"isoSecond",0,59,Z),q0($,"isoMillisecond",0,999,Z),q0($,"isoMicrosecond",0,999,Z),q0($,"isoNanosecond",0,999,Z)])}function v($){return $===void 0?0:zX(b1($))}function H3($,Z=0){$=$1($);let J=XX($),W=VV($,Z);return[zX($),W,J]}function N7($){return XX($1($))}function N5($){return $=$1($),c2($,9,6,1)}function NZ($,Z,J,W=9,Y=0,j=4){Z=$1(Z);let z=c2(Z,W,Y),X=x7(Z),Q=S3(Z,j),G=A3(Z,W,Y,1);return z==null?z=Math.max(J,G):C5(z,G),X=C7(X,G,1),$&&(Q=((K)=>K<4?(K+2)%4:K)(Q)),[z,G,X,Q]}function d6($,Z=6,J){let W=x7($=A7($,f6)),Y=S3($,7),j=A3($,Z);return j=z5(f6,j),W=C7(W,j,void 0,J),[j,W,Y]}function I7($){return d2($1($))}function I5($,Z){return _7($1($),Z)}function _7($,Z=4){let J=x5($);return[S3($,4),..._5(A3($,Z),J)]}function _5($,Z){return $!=null?[B1[$],$<4?9-3*$:-1]:[Z===void 0?1:10**(9-Z),Z]}function x7($){let Z=$[G3];return Z===void 0?1:_0(Z,G3)}function C7($,Z,J,W){let Y=W?c:B1[Z+1];if(Y){let j=B1[Z];if(Y%(($=n0(G3,$,1,Y/j-(W?0:1),1))*j))throw RangeError(I3(G3,$))}else $=n0(G3,$,1,J?1e9:1,1);return $}function x5($){let Z=$[e8];if(Z!==void 0){if(typeof Z!="number"){if(U7(Z)==="auto")return;throw RangeError(I3(e8,Z))}Z=n0(e8,Math.floor(Z),0,9,1)}return Z}function $1($){return $===void 0?{}:b1($)}function A7($,Z){return typeof $=="string"?{[Z]:$}:b1($)}function W0($){if($!==void 0){if(V0($))return Object.assign(Object.create(null),$);throw TypeError(Rz)}}function u6($,Z){return $&&Object.assign(Object.create(null),$,{overflow:jV[Z]})}function S7($,Z,J=9,W=0,Y){let j=Z[$];if(j===void 0)return Y?W:void 0;if(j=U7(j),j==="auto")return Y?W:null;let z=Y7[j];if(z===void 0&&(z=tF[j]),z===void 0)throw RangeError(qz($,j,Y7));return n0($,z,W,J,1,x3),z}function f$($,Z,J,W=0){let Y=J[$];if(Y===void 0)return W;let j=U7(Y),z=Z[j];if(z===void 0)throw RangeError(qz($,j,Z));return z}function C5($,Z){if(Z>$)throw RangeError(dF)}function U0($){return{branding:M4,epochNanoseconds:$}}function L0($,Z,J){return{branding:q1,calendar:J,timeZone:Z,epochNanoseconds:$}}function Y0($,Z=$.calendar){return{branding:p$,calendar:Z,...h0(JX,$)}}function j0($,Z=$.calendar){return{branding:h$,calendar:Z,...h0(h2,$)}}function S$($,Z=$.calendar){return{branding:bZ,calendar:Z,...h0(h2,$)}}function A6($,Z=$.calendar){return{branding:RZ,calendar:Z,...h0(h2,$)}}function Z1($){return{branding:H4,...h0(ZX,$)}}function o($){return{branding:P4,sign:j$($),...h0(y2,$)}}function A5($){return V5($.epochNanoseconds)}function l6($){return D7($.epochNanoseconds,F1)[0]}function S5($){return F5($.epochNanoseconds,m$)}function E5($){return F5($.epochNanoseconds)}function b5($){return $.epochNanoseconds}function O0($){return typeof $=="string"?$:r($.id)}function IZ($,Z){return $===Z||O0($)===O0(Z)}function R5($,Z,J,W,Y){let j=E$(W),[z,X]=((D,L)=>{let T=L((D=A7(D,X7))[YX]),P=FV(D);return P=z5(X7,P),[P,T]})(Y,$);if(B3(Math.max(z,j),X))return vY(W,z);if(!X)throw RangeError(F4);let[Q,G,K]=t6(Z,J,X),F=r7(K),B=r6(K),U=e7(K),V=B(G,Q,W),O=U(G,Q,V,z);return B3(z,X)?vY(O,z):((D,L,T,P,I,A,E)=>{let S=j$(D),[f,M]=E7(P,g2(T,D),T,S,I,A,E),_=b7(L,f,M);return D[m[T]]+_*S})(O,F(V),z,G,Q,F,B)}function vY($,Z){return u0(F0($),B1[Z],1)}function E7($,Z,J,W,Y,j,z){let X=m[J],Q={...Z,[X]:Z[X]+W},G=z($,Y,Z),K=z($,Y,Q);return[j(G),j(K)]}function b7($,Z,J){let W=u0(d0(Z,J));if(!W)throw RangeError(_3);return u0(d0(Z,$))/W}function f5($,Z){let[J,W,Y]=d6(Z,5,1);return U0(s6($.epochNanoseconds,J,W,Y,1))}function k5($,Z,J){let{epochNanoseconds:W,timeZone:Y,calendar:j}=Z,[z,X,Q]=d6(J);if(z===0&&X===1)return Z;let G=$(Y);if(z===6)W=((K,F,B,U)=>{let V=S0(B,F),[O,D]=K(V),L=B.epochNanoseconds,T=m0(F,O),P=m0(F,D);if(B5(L,T,P))throw RangeError(_3);return c5(b7(L,T,P),U)?P:T})(h5,G,Z,Q);else{let K=G.getOffsetNanosecondsFor(W);W=w$(G,g5(Y$(W,K),z,X,Q),K,2,0,1)}return L0(W,Y,j)}function w5($,Z){return Y0(g5($,...d6(Z)),$.calendar)}function q5($,Z){let[J,W,Y]=d6(Z,5);var j;return Z1((j=Y,R7($,M3(J,W),j)[0]))}function y5($,Z){let J=$(Z.timeZone),W=S0(Z,J),[Y,j]=h5(W),z=u0(d0(m0(J,Y),m0(J,j)),U4,1);if(z<=0)throw RangeError(_3);return z}function v5($,Z){let{timeZone:J,calendar:W}=Z,Y=((j,z,X)=>m0(z,j(S0(X,z))))(p5,$(J),Z);return L0(Y,J,W)}function g5($,Z,J,W){return m5($,M3(Z,J),W)}function m5($,Z,J){let[W,Y]=R7($,Z,J);return R1({...q$($,Y),...W})}function R7($,Z,J){return m6(W$(J$($),Z,J))}function S6($){return W$($,V4,7)}function M3($,Z){return B1[$]*Z}function h5($){let Z=p5($);return[Z,q$(Z,1)]}function p5($){return rF(6,$)}function jF($,Z,J){let W=Math.min(E$($),6);return xZ(n6(F0($,W),Z,J),W)}function i6($,Z,J,W,Y,j,z,X,Q,G){if(W===0&&Y===1)return $;let K=B3(W,X)?e6(X)&&W<6&&J>=6?XF:zF:QF,[F,B,U]=K($,Z,J,W,Y,j,z,X,Q,G);return U&&W!==7&&(F=((V,O,D,L,T,P,I,A)=>{let E=j$(V);for(let S=L+1;S<=D;S++){if(S===7&&D!==7)continue;let f=g2(S,V);f[m[S]]+=E;let M=u0(d0(I(A(T,P,f)),O));if(M&&Math.sign(M)!==E)break;V=f}return V})(F,B,J,Math.max(6,W),z,X,Q,G)),F}function s6($,Z,J,W,Y){if(Z===6){let j=((z)=>z[0]+z[1]/c)($);return[W$(j,J,W),0]}return n6($,M3(Z,J),W,Y)}function n6($,Z,J,W){let[Y,j]=$;W&&j<0&&(j+=c,Y-=1);let[z,X]=S1(W$(j,Z,J),c);return O7(Y+z,X)}function W$($,Z,J){return c5($/Z,J)*Z}function c5($,Z){return DV[Z]($)}function zF($,Z,J,W,Y,j){let z=j$($),X=F0($),Q=s6(X,W,Y,j),G=d0(X,Q),K=Math.sign(Q[0]-X[0])===z,F=xZ(Q,Math.min(J,6));return[{...$,...F},OZ(Z,G),K]}function XF($,Z,J,W,Y,j,z,X,Q,G){let K=j$($),F=u0(F0($,5)),B=M3(W,Y),U=W$(F,B,j),[V,O]=E7(z,{...$,...v2},6,K,X,Q,G),D=U-u0(d0(V,O)),L=0;D&&Math.sign(D)!==K?Z=DZ(V,U):(L+=K,U=W$(D,B,j),Z=DZ(O,U));let T=Z4(U);return[{...$,...T,days:$.days+L},Z,Boolean(L)]}function QF($,Z,J,W,Y,j,z,X,Q,G){let K=j$($),F=m[W],B=g2(W,$);W===7&&($={...$,weeks:$.weeks+Math.trunc($.days/7)});let U=w6($[F],Y)*Y;B[F]=U;let[V,O]=E7(z,B,W,Y*K,X,Q,G),D=U+b7(Z,V,O)*K*Y,L=W$(D,Y,j),T=Math.sign(L-D)===K;return B[F]=L,[B,T?O:V,T]}function f7($,Z,J,W){let[Y,j,z,X]=((G)=>{let K=_7(G=$1(G));return[G.timeZone,...K]})(W),Q=Y!==void 0;return((G,K,F,B,U,V)=>{F=n6(F,U,B,1);let O=K.getOffsetNanosecondsFor(F);return m7(Y$(F,O),V)+(G?k$(S6(O)):"Z")})(Q,Z(Q?$(Y):c$),J.epochNanoseconds,j,z,X)}function k7($,Z,J){let[W,Y,j,z,X,Q]=((G)=>{G=$1(G);let K=d2(G),F=x5(G),B=OV(G),U=S3(G,4),V=A3(G,4);return[K,UV(G),B,U,..._5(V,F)]})(J);return((G,K,F,B,U,V,O,D,L,T)=>{B=n6(B,L,D,1);let P=G(F).getOffsetNanosecondsFor(B);return m7(Y$(B,P),T)+k$(S6(P),O)+((I,A)=>A!==1?"["+(A===2?"!":"")+O0(I)+"]":"")(F,V)+h7(K,U)})($,Z.calendar,Z.timeZone,Z.epochNanoseconds,W,Y,j,z,X,Q)}function w7($,Z){let[J,W,Y,j]=((G)=>(G=$1(G),[d2(G),..._7(G)]))(Z);return z=$.calendar,X=J,Q=j,m7(m5($,Y,W),Q)+h7(z,X);var z,X,Q}function q7($,Z){return J=$.calendar,W=$,Y=I7(Z),E6(W)+h7(J,Y);var J,W,Y}function y7($,Z){return d5($.calendar,u5,$,I7(Z))}function v7($,Z){return d5($.calendar,GF,$,I7(Z))}function g7($,Z){let[J,W,Y]=I5(Z);return j=Y,l5(R7($,W,J)[0],j);var j}function o6($,Z){let[J,W,Y]=I5(Z,3);return W>1&&($={...$,...jF($,W,J)}),((j,z)=>{let{sign:X}=j,Q=X===-1?E0(j):j,{hours:G,minutes:K}=Q,[F,B]=D7(F0(Q,3),a0,Z$);e5(F);let U=p7(B,z),V=z>=0||!X||U;return(X<0?"-":"")+"P"+gY({Y:A$(Q.years),M:A$(Q.months),W:A$(Q.weeks),D:A$(Q.days)})+(G||K||F||V?"T"+gY({H:A$(G),M:A$(K),S:A$(F,V)+U}):"")})($,Y)}function d5($,Z,J,W){let Y=O0($),j=W>1||W===0&&Y!==w;return W===1?Y===w?Z(J):E6(J):j?E6(J)+i5(Y,W===2):Z(J)}function gY($){let Z=[];for(let J in $){let W=$[J];W&&Z.push(W,J)}return Z.join("")}function m7($,Z){return E6($)+"T"+l5($,Z)}function E6($){return u5($)+"-"+o0($.isoDay)}function u5($){let{isoYear:Z}=$;return(Z<0||Z>9999?s5(Z)+_6(6,Math.abs(Z)):_6(4,Z))+"-"+o0($.isoMonth)}function GF($){return o0($.isoMonth)+"-"+o0($.isoDay)}function l5($,Z){let J=[o0($.isoHour),o0($.isoMinute)];return Z!==-1&&J.push(o0($.isoSecond)+((W,Y,j,z)=>p7(W*F1+Y*m$+j,z))($.isoMillisecond,$.isoMicrosecond,$.isoNanosecond,Z)),J.join(":")}function k$($,Z=0){if(Z===1)return"";let[J,W]=S1(Math.abs($),U4),[Y,j]=S1(W,V4),[z,X]=S1(j,a0);return s5($)+o0(J)+":"+o0(Y)+(z||X?":"+o0(z)+p7(X):"")}function h7($,Z){if(Z!==1){let J=O0($);if(Z>1||Z===0&&J!==w)return i5(J,Z===2)}return""}function i5($,Z){return"["+(Z?"!":"")+"u-ca="+$+"]"}function p7($,Z){let J=_6(9,$);return J=Z===void 0?J.replace(MV,""):J.slice(0,Z),J?"."+J:""}function s5($){return $<0?"-":"+"}function A$($,Z){return $||Z?$.toLocaleString("fullwide",{useGrouping:0}):""}function KF($,Z){let{epochNanoseconds:J}=$,W=(Z.getOffsetNanosecondsFor?Z:Z($.timeZone)).getOffsetNanosecondsFor(J),Y=Y$(J,W);return{calendar:$.calendar,...Y,offsetNanoseconds:W}}function n5($,Z){let J=S0(Z,$);return{calendar:Z.calendar,...h0(JX,J),offset:k$(J.offsetNanoseconds),timeZone:Z.timeZone}}function w$($,Z,J,W=0,Y=0,j,z){if(J!==void 0&&W===1&&(W===1||z))return M7(Z,J);let X=$.getPossibleInstantsFor(Z);if(J!==void 0&&W!==3){let Q=((G,K,F,B)=>{let U=x0(K);B&&(F=S6(F));for(let V of G){let O=u0(d0(V,U));if(B&&(O=S6(O)),O===F)return V}})(X,Z,J,j);if(Q!==void 0)return Q;if(W===0)throw RangeError(vF)}return z?x0(Z):m0($,Z,Y,X)}function m0($,Z,J=0,W=$.getPossibleInstantsFor(Z)){if(W.length===1)return W[0];if(J===1)throw RangeError(gF);if(W.length)return W[J===3?1:0];let Y=x0(Z),j=((X,Q)=>{let G=X.getOffsetNanosecondsFor(DZ(Q,-c));return d7(X.getOffsetNanosecondsFor(DZ(Q,c))-G)})($,Y),z=j*(J===2?-1:1);return(W=$.getPossibleInstantsFor(Y$(Y,z)))[J===2?0:W.length-1]}function c7($){if(Math.abs($)>=c)throw RangeError(qF);return $}function d7($){if($>c)throw RangeError(yF);return $}function u7($,Z,J){return U0(l0(OZ(Z.epochNanoseconds,((W)=>{if($j(W))throw RangeError(pF);return F0(W,5)})($?E0(J):J))))}function l7($,Z,J,W,Y,j=Object.create(null)){let z=Z(W.timeZone),X=$(W.calendar);return{...W,...a7(z,X,W,J?E0(Y):Y,j)}}function i7($,Z,J,W,Y=Object.create(null)){let{calendar:j}=J;return Y0(t7($(j),J,Z?E0(W):W,Y),j)}function s7($,Z,J,W,Y){let{calendar:j}=J;return j0(a6($(j),J,Z?E0(W):W,Y),j)}function n7($,Z,J,W,Y=Object.create(null)){let j=J.calendar,z=$(j),X=K3(z,J);Z&&(W=$4(W)),W.sign<0&&(X=z.dateAdd(X,{...D0,months:1}),X=q$(X,-1));let Q=z.dateAdd(X,W,Y);return S$(K3(z,Q),j)}function o7($,Z,J){return Z1(o5(Z,$?E0(J):J)[0])}function a7($,Z,J,W,Y){let j=F0(W,5),z=J.epochNanoseconds;if($j(W)){let X=S0(J,$);z=OZ(m0($,{...a6(Z,X,{...W,...v2},Y),...h0(W1,X)}),j)}else z=OZ(z,j),v(Y);return{epochNanoseconds:l0(z)}}function t7($,Z,J,W){let[Y,j]=o5(Z,J);return R1({...a6($,Z,{...J,...v2,days:J.days+j},W),...Y})}function a6($,Z,J,W){if(J.years||J.months||J.weeks)return $.dateAdd(Z,J,W);v(W);let Y=J.days+F0(J,5)[0];return Y?e1(q$(Z,Y)):Z}function K3($,Z,J=1){return q$(Z,J-$.day(Z))}function o5($,Z){let[J,W]=F0(Z,5),[Y,j]=m6(J$($)+W);return[Y,J+j]}function q$($,Z){return Z?{...$,...h6(A0($)+Z*v0)}:$}function t6($,Z,J){let W=$(J.calendar);return e6(J)?[J,W,Z(J.timeZone)]:[{...J,...t0},W]}function r7($){return $?b5:x0}function r6($){return $?k(a7,$):t7}function e7($){return $?k(FF,$):VF}function e6($){return $&&$.epochNanoseconds}function B3($,Z){return $<=6-(e6(Z)?1:0)}function $2($,Z,J,W,Y,j,z){let X=$($1(z).relativeTo),Q=Math.max(E$(Y),E$(j));if(B3(Q,X))return o(_Z(((O,D,L,T)=>{let P=OZ(F0(O),F0(D),T?-1:1);if(!Number.isFinite(P[0]))throw RangeError(B4);return{...D0,...xZ(P,L)}})(Y,j,Q,W)));if(!X)throw RangeError(F4);W&&(j=E0(j));let[G,K,F]=t6(Z,J,X),B=r6(F),U=e7(F),V=B(K,G,Y);return o(U(K,G,B(K,V,j),Q))}function a5($,Z,J,W,Y){let j=E$(W),[z,X,Q,G,K]=((E,S,f)=>{E=A7(E,f6);let M=c2(E),_=f(E[YX]),y=x7(E),H$=S3(E,7),T0=A3(E);if(M===void 0&&T0===void 0)throw RangeError(cF);return T0==null&&(T0=0),M==null&&(M=Math.max(T0,S)),C5(M,T0),y=C7(y,T0,1),[M,T0,y,H$,_]})(Y,j,$),F=Math.max(j,z);if(!e6(K)&&F<=6)return o(_Z(((E,S,f,M,_)=>{let y=s6(F0(E),f,M,_);return{...D0,...xZ(y,S)}})(W,z,X,Q,G)));if(!K)throw RangeError(F4);let[B,U,V]=t6(Z,J,K),O=r7(V),D=r6(V),L=e7(V),T=D(U,B,W),P=L(U,B,T,z),I=W.sign,A=j$(P);if(I&&A&&I!==A)throw RangeError(_3);return A&&(P=i6(P,O(T),z,X,Q,G,U,B,O,D)),o(P)}function t5($){return $.sign===-1?$4($):$}function $4($){return o(E0($))}function E0($){let Z={};for(let J of m)Z[J]=-1*$[J]||0;return Z}function r5($){return!$.sign}function j$($,Z=m){let J=0;for(let W of Z){let Y=Math.sign($[W]);if(Y){if(J&&J!==Y)throw RangeError(hF);J=Y}}return J}function _Z($){for(let Z of aF)n0(Z,$[Z],-lY,lY,1);return e5(u0(F0($),a0)),$}function e5($){if(!Number.isSafeInteger($))throw RangeError(mF)}function F0($,Z=6){return $5($,Z,m)}function xZ($,Z=6){let[J,W]=$,Y=q6(W,Z,m);if(Y[m[Z]]+=J*(c/B1[Z]),!Number.isFinite(Y[m[Z]]))throw RangeError(B4);return Y}function Z4($,Z=5){return q6($,Z,m)}function $j($){return Boolean(j$($,$X))}function E$($){let Z=9;for(;Z>0&&!$[m[Z]];Z--);return Z}function BF($,Z){return[$,Z]}function mY($){let Z=Math.floor($/N6)*N6;return[Z,Z+N6]}function Zj($){let Z=z$($=x6($));if(!Z)throw RangeError(y0($));let J;if(Z.m)J=0;else{if(!Z.offset)throw RangeError(y0($));J=CZ(Z.offset)}return Z.timeZone&&Y2(Z.timeZone,1),U0(M7(p6(Z),J))}function Jj($){let Z=z$(r($));if(!Z)throw RangeError(y0($));if(Z.timeZone)return Bj(Z,Z.offset?CZ(Z.offset):void 0);if(Z.m)throw RangeError(y0($));return Vj(Z)}function Wj($,Z){let J=z$(r($));if(!J||!J.timeZone)throw RangeError(y0($));let{offset:W}=J,Y=W?CZ(W):void 0,[,j,z]=H3(Z);return Bj(J,Y,j,z)}function CZ($){let Z=Y2($);if(Z===void 0)throw RangeError(y0($));return Z}function Yj($){let Z=z$(r($));if(!Z||Z.m)throw RangeError(y0($));return Y0(Fj(Z))}function J4($){let Z=z$(r($));if(!Z||Z.m)throw RangeError(y0($));return j0(Z.p?Fj(Z):Vj(Z))}function jj($,Z){let J=J2(r(Z));if(J)return Z2(J),S$(H7(R$(J)));let W=J4(Z);return S$(K3($(W.calendar),W))}function Z2($){if($.calendar!==w)throw RangeError(E1($.calendar))}function zj($,Z){let J=W2(r(Z));if(J)return Z2(J),A6(R$(J));let W=J4(Z),{calendar:Y}=W,j=$(Y),[z,X,Q]=j.h(W),[G,K]=j.I(z,X),[F,B]=j.N(G,K,Q);return A6(e1(j.P(F,B,Q)),Y)}function Xj($){let Z,J=((W)=>{let Y=_V.exec(W);return Y?(W4(Y[10]),Dj(Y)):void 0})(r($));if(!J){if(J=z$($),!J)throw RangeError(y0($));if(!J.p)throw RangeError(y0($));if(J.m)throw RangeError(E1("Z"));Z2(J)}if((Z=J2($))&&yY(Z))throw RangeError(y0($));if((Z=W2($))&&yY(Z))throw RangeError(y0($));return Z1(c6(J,1))}function Qj($){let Z=((J)=>{let W=AV.exec(J);return W?((Y)=>{function j(K,F,B){let U=0,V=0;if(B&&([U,Q]=S1(Q,B1[B])),K!==void 0){if(X)throw RangeError(E1(K));V=((O)=>{let D=parseInt(O);if(!Number.isFinite(D))throw RangeError(E1(O));return D})(K),z=1,F&&(Q=j2(F)*(B1[B]/a0),X=1)}return U+V}let z=0,X=0,Q=0,G={...PZ(m,[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)]),...q6(Q,2,m)};if(!z)throw RangeError(kz(m));return z2(Y[1])<0&&(G=E0(G)),G})(W):void 0})(r($));if(!Z)throw RangeError(y0($));return o(_Z(Z))}function Gj($){let Z=z$($)||J2($)||W2($);return Z?Z.calendar:$}function Kj($){let Z=z$($);return Z&&(Z.timeZone||Z.m&&c$||Z.offset)||$}function Bj($,Z,J=0,W=0){let Y=Y4($.timeZone),j=T4(Y);return L0(w$(j,p6($),Z,J,W,!j.v,$.m),Y,P3($.calendar))}function Fj($){return Uj(R1(p6($)))}function Vj($){return Uj(e1(R$($)))}function Uj($){return{...$,calendar:P3($.calendar)}}function z$($){let Z=IV.exec($);return Z?((J)=>{let W=J[10],Y=(W||"").toUpperCase()==="Z";return{isoYear:Oj(J),isoMonth:parseInt(J[4]),isoDay:parseInt(J[5]),...Dj(J.slice(5)),...W4(J[16]),p:Boolean(J[6]),m:Y,offset:Y?void 0:W}})(Z):void 0}function J2($){let Z=TV.exec($);return Z?((J)=>({isoYear:Oj(J),isoMonth:parseInt(J[4]),isoDay:1,...W4(J[5])}))(Z):void 0}function W2($){let Z=NV.exec($);return Z?((J)=>({isoYear:MZ,isoMonth:parseInt(J[1]),isoDay:parseInt(J[2]),...W4(J[3])}))(Z):void 0}function Y2($,Z){let J=xV.exec($);return J?((W,Y)=>{let j=W[4]||W[5];if(Y&&j)throw RangeError(E1(j));return c7((UZ(W[2])*U4+UZ(W[3])*V4+UZ(W[4])*a0+j2(W[5]||""))*z2(W[1]))})(J,Z):void 0}function Oj($){let Z=z2($[1]),J=parseInt($[2]||$[3]);if(Z<0&&!J)throw RangeError(E1(-0));return Z*J}function Dj($){let Z=UZ($[3]);return{...m6(j2($[4]||""))[0],isoHour:UZ($[1]),isoMinute:UZ($[2]),isoSecond:Z===60?59:Z}}function W4($){let Z,J,W=[];if($.replace(CV,(Y,j,z)=>{let X=Boolean(j),[Q,G]=z.split("=").reverse();if(G){if(G==="u-ca")W.push(Q),Z||(Z=X);else if(X||/[A-Z]/.test(G))throw RangeError(E1(Y))}else{if(J)throw RangeError(E1(Y));J=Q}return""}),W.length>1&&Z)throw RangeError(E1($));return{timeZone:J,calendar:W[0]||w}}function j2($){return parseInt($.padEnd(9,"0"))}function AZ($){return new RegExp(`^${$}$`,"i")}function z2($){return $&&$!=="+"?-1:1}function UZ($){return $===void 0?0:parseInt($)}function Lj($){return Y4(r($))}function Y4($){let Z=X2($);return typeof Z=="number"?k$(Z):Z?((J)=>{if(EV.test(J))throw RangeError(wF);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?wY(j).replace(/island|noronha|murdo|rivadavia|urville/,wY):j)).join("/")})($):c$}function hY($){let Z=X2($);return typeof Z=="number"?Z:Z?Z.resolvedOptions().timeZone:c$}function X2($){let Z=Y2($=$.toUpperCase(),1);return Z!==void 0?Z:$!==c$?SV($):void 0}function Q2($,Z){return C0($.epochNanoseconds,Z.epochNanoseconds)}function G2($,Z){return C0($.epochNanoseconds,Z.epochNanoseconds)}function Hj($,Z,J,W,Y,j){let z=$($1(j).relativeTo),X=Math.max(E$(W),E$(Y));if(rY(m,W,Y))return 0;if(B3(X,z))return C0(F0(W),F0(Y));if(!z)throw RangeError(F4);let[Q,G,K]=t6(Z,J,z),F=r7(K),B=r6(K);return C0(F(B(G,Q,W)),F(B(G,Q,Y)))}function K2($,Z){return y$($,Z)||j4($,Z)}function y$($,Z){return r1(A0($),A0(Z))}function j4($,Z){return r1(J$($),J$(Z))}function Mj($,Z){return!Q2($,Z)}function Pj($,Z){return!G2($,Z)&&!!z4($.timeZone,Z.timeZone)&&IZ($.calendar,Z.calendar)}function Tj($,Z){return!K2($,Z)&&IZ($.calendar,Z.calendar)}function Nj($,Z){return!y$($,Z)&&IZ($.calendar,Z.calendar)}function Ij($,Z){return!y$($,Z)&&IZ($.calendar,Z.calendar)}function _j($,Z){return!y$($,Z)&&IZ($.calendar,Z.calendar)}function xj($,Z){return!j4($,Z)}function z4($,Z){if($===Z)return 1;let J=O0($),W=O0(Z);if(J===W)return 1;try{return hY(J)===hY(W)}catch(Y){}}function B2($,Z,J,W){let Y=NZ($,W0(W),3,5),j=X4(Z.epochNanoseconds,J.epochNanoseconds,...Y);return o($?E0(j):j)}function F2($,Z,J,W,Y,j){let z=G4(W.calendar,Y.calendar),X=W0(j),[Q,G,K,F]=NZ(J,X,5),B=W.epochNanoseconds,U=Y.epochNanoseconds,V=C0(U,B),O;if(V)if(Q<6)O=X4(B,U,Q,G,K,F);else{let D=Z(((T,P)=>{if(!z4(T,P))throw RangeError(mz);return T})(W.timeZone,Y.timeZone)),L=$(z);O=Aj(L,D,W,Y,V,Q,X),O=i6(O,U,Q,G,K,F,L,W,b5,k(a7,D))}else O=D0;return o(J?E0(O):O)}function V2($,Z,J,W,Y){let j=G4(J.calendar,W.calendar),z=W0(Y),[X,Q,G,K]=NZ(Z,z,6),F=x0(J),B=x0(W),U=C0(B,F),V;if(U)if(X<=6)V=X4(F,B,X,Q,G,K);else{let O=$(j);V=Sj(O,J,W,U,X,z),V=i6(V,B,X,Q,G,K,O,J,x0,t7)}else V=D0;return o(Z?E0(V):V)}function U2($,Z,J,W,Y){let j=G4(J.calendar,W.calendar),z=W0(Y);return Cj(Z,()=>$(j),J,W,...NZ(Z,z,6,9,6),z)}function O2($,Z,J,W,Y){let j=G4(J.calendar,W.calendar),z=W0(Y),X=NZ(Z,z,9,9,8),Q=$(j);return Cj(Z,()=>Q,K3(Q,J),K3(Q,W),...X,z)}function Cj($,Z,J,W,Y,j,z,X,Q){let G=x0(J),K=x0(W),F;if(C0(K,G))if(Y===6)F=X4(G,K,Y,j,z,X);else{let B=Z();F=B.dateUntil(J,W,Y,Q),j===6&&z===1||(F=i6(F,K,Y,j,z,X,B,J,x0,a6))}else F=D0;return o($?E0(F):F)}function D2($,Z,J,W){let Y=W0(W),[j,z,X,Q]=NZ($,Y,5,5),G=W$(L2(Z,J),M3(z,X),Q),K={...D0,...Z4(G,j)};return o($?E0(K):K)}function FF($,Z,J,W,Y,j){let z=C0(W.epochNanoseconds,J.epochNanoseconds);return z?Y<6?Ej(J.epochNanoseconds,W.epochNanoseconds,Y):Aj(Z,$,J,W,z,Y,j):D0}function VF($,Z,J,W,Y){let j=x0(Z),z=x0(J),X=C0(z,j);return X?W<=6?Ej(j,z,W):Sj($,Z,J,X,W,Y):D0}function Aj($,Z,J,W,Y,j,z){let[X,Q,G]=((B,U,V,O)=>{function D(){return S={...q$(P,A++*-O),...T},f=m0(B,S),C0(I,f)===-O}let L=S0(U,B),T=h0(W1,L),P=S0(V,B),I=V.epochNanoseconds,A=0,E=L2(L,P),S,f;if(Math.sign(E)===-O&&A++,D()&&(O===-1||D()))throw RangeError(_3);let M=u0(d0(f,I));return[L,S,M]})(Z,J,W,Y);var K,F;return{...j===6?(K=X,F=Q,{...D0,days:bj(K,F)}):$.dateUntil(X,Q,j,z),...Z4(G)}}function Sj($,Z,J,W,Y,j){let[z,X,Q]=((G,K,F)=>{let B=K,U=L2(G,K);return Math.sign(U)===-F&&(B=q$(K,-F),U+=c*F),[G,B,U]})(Z,J,W);return{...$.dateUntil(z,X,Y,j),...Z4(Q)}}function X4($,Z,J,W,Y,j){return{...D0,...xZ(s6(d0($,Z),W,Y,j),J)}}function Ej($,Z,J){return{...D0,...xZ(d0($,Z),J)}}function bj($,Z){return Q4(A0($),A0(Z))}function Q4($,Z){return Math.trunc((Z-$)/v0)}function L2($,Z){return J$(Z)-J$($)}function G4($,Z){if(!IZ($,Z))throw RangeError(f2);return $}function UF($){function Z(Y){return((j,z)=>({...Rj(j,z),F:j.month,day:parseInt(j.day)}))(L7(J,Y),W)}let J=s2($),W=b6($);return{id:$,O:OF(Z),B:DF(Z)}}function OF($){return g0((Z)=>{let J=A0(Z);return $(J)},WeakMap)}function DF($){let Z=$(0).year-JV;return g0((J)=>{let W,Y=TZ(J-Z),j=[],z=[];do Y+=400*v0;while((W=$(Y)).year<=J);do Y+=(1-W.day)*v0,W.year===J&&(j.push(Y),z.push(W.F)),Y-=v0;while((W=$(Y)).year>=J);return{k:j.reverse(),C:cz(z.reverse())}})}function Rj($,Z){let J,W,Y=fj($);if($.era){let j=tz[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=vj(W,j[J]||0))}return{era:J,eraYear:W,year:Y}}function fj($){return parseInt($.relatedYear||$.year)}function Z7($){let{year:Z,F:J,day:W}=this.O($),{C:Y}=this.B(Z);return[Z,Y[J]+1,W]}function F3($,Z=1,J=1){return this.B($).k[Z-1]+(J-1)*v0}function M6($){let Z=cY(this,$),J=cY(this,$-1),W=Z.length;if(W>J.length){let Y=gj(this);if(Y<0)return-Y;for(let j=0;j<W;j++)if(Z[j]!==J[j])return j+1}}function P6($){return Q4(F3.call(this,$),F3.call(this,$+1))}function pY($,Z){let{k:J}=this.B($),W=Z+1,Y=J;return W>J.length&&(W=1,Y=this.B($+1).k),Q4(J[Z-1],Y[W-1])}function T6($){return this.B($).k.length}function cY($,Z){return Object.keys($.B(Z).C)}function kj($){return P3(r($))}function P3($){if(($=$.toLowerCase())!==w&&$!==D4&&b6($)!==b6(s2($).resolvedOptions().calendar))throw RangeError(kF($));return $}function b6($){return $==="islamicc"&&($="islamic"),$.split("-")[0]}function wj($){return this.R($)[0]}function qj($){return this.R($)[1]}function H2($){let[Z]=this.h($);return Q4(this.q(Z),A0($))+1}function yj($){let Z=RV.exec($);if(!Z)throw RangeError(RF($));return[parseInt(Z[1]),Boolean(Z[2])]}function R6($,Z,J){return $+(Z||J&&$>=J?1:0)}function J7($,Z){return $-(Z&&$>=Z?1:0)}function vj($,Z){return(Z+$)*(Math.sign(Z)||1)||0}function W7($){return tz[mj($)]}function gj($){return sF[mj($)]}function mj($){return b6($.id||w)}function hj($,Z,J,W){let Y=X$(J,W,J1,[],sz);if(Y.timeZone!==void 0){let j=J.dateFromFields(Y),z=v$(Y),X=$(Y.timeZone);return{epochNanoseconds:w$(Z(X),{...j,...z},Y.offset!==void 0?CZ(Y.offset):void 0),timeZone:X}}return{...J.dateFromFields(Y),...t0}}function pj($,Z,J,W,Y,j){let z=X$(J,Y,J1,lz,sz),X=$(z.timeZone),[Q,G,K]=H3(j),F=J.dateFromFields(z,u6(j,Q)),B=v$(z,Q);return L0(w$(Z(X),{...F,...B},z.offset!==void 0?CZ(z.offset):void 0,G,K),X,W)}function cj($,Z,J){let W=X$($,Z,J1,[],w1),Y=v(J);return Y0(R1({...$.dateFromFields(W,u6(J,Y)),...v$(W,Y)}))}function M2($,Z,J,W=[]){let Y=X$($,Z,J1,W);return $.dateFromFields(Y,J)}function P2($,Z,J,W){let Y=X$($,Z,q2,W);return $.yearMonthFromFields(Y,J)}function T2($,Z,J,W,Y=[]){let j=X$($,J,J1,Y);return Z&&j.month!==void 0&&j.monthCode===void 0&&j.year===void 0&&(j.year=MZ),$.monthDayFromFields(j,W)}function dj($,Z){let J=v(Z);return Z1(v$(K1($,j7,[],1),J))}function uj($){let Z=K1($,y2);return o(_Z({...D0,...Z}))}function X$($,Z,J,W=[],Y=[]){return K1(Z,[...$.fields(J),...Y].sort(),W)}function K1($,Z,J,W=!J){let Y={},j,z=0;for(let X of Z){if(X===j)throw RangeError(xF(X));if(X==="constructor"||X==="__proto__")throw RangeError(b2(X));let Q=$[X];if(Q!==void 0)z=1,iY[X]&&(Q=iY[X](Q,X)),Y[X]=Q;else if(J){if(J.includes(X))throw TypeError(E2(X));Y[X]=az[X]}j=X}if(W&&!z)throw TypeError(kz(Z));return Y}function v$($,Z){return c6(qV({...az,...$}),Z)}function lj($,Z,J,W,Y,j){let z=W0(j),{calendar:X,timeZone:Q}=J;return L0(((G,K,F,B,U)=>{let V=T3(G,F,B,J1,iz,uz),[O,D,L]=H3(U,2);return w$(K,{...G.dateFromFields(V,u6(U,O)),...v$(V,O)},CZ(V.offset),D,L)})($(X),Z(Q),W,Y,z),Q,X)}function ij($,Z,J,W,Y){let j=W0(Y);return Y0(((z,X,Q,G)=>{let K=T3(z,X,Q,J1,w1),F=v(G);return R1({...z.dateFromFields(K,u6(G,F)),...v$(K,F)})})($(Z.calendar),J,W,j))}function sj($,Z,J,W,Y){let j=W0(Y);return((z,X,Q,G)=>{let K=T3(z,X,Q,J1);return z.dateFromFields(K,G)})($(Z.calendar),J,W,j)}function nj($,Z,J,W,Y){let j=W0(Y);return S$(((z,X,Q,G)=>{let K=T3(z,X,Q,q2);return z.yearMonthFromFields(K,G)})($(Z.calendar),J,W,j))}function oj($,Z,J,W,Y){let j=W0(Y);return((z,X,Q,G)=>{let K=T3(z,X,Q,J1);return z.monthDayFromFields(K,G)})($(Z.calendar),J,W,j)}function aj($,Z,J){return Z1(((W,Y,j)=>{let z=v(j);return v$({...h0(j7,W),...K1(Y,j7)},z)})($,Z,J))}function tj($,Z){return o((J=$,W=Z,_Z({...J,...K1(W,y2)})));var J,W}function T3($,Z,J,W,Y=[],j=[]){let z=[...$.fields(W),...Y].sort(),X=K1(Z,z,j),Q=K1(J,z);return X=$.mergeFields(X,Q),K1(X,z,[])}function N2($,Z){let J=X$($,Z,oz);return $.monthDayFromFields(J)}function I2($,Z,J){let W=X$($,Z,nz);return $.yearMonthFromFields(W,J)}function rj($,Z,J,W,Y){Z=h0(J=$.fields(J),Z),W=K1(W,Y=$.fields(Y),[]);let j=$.mergeFields(Z,W);return j=K1(j,[...J,...Y].sort(),[]),$.dateFromFields(j)}function a8($,Z){let{era:J,eraYear:W,year:Y}=Z,j=W7($);if(J!==void 0||W!==void 0){if(J===void 0||W===void 0)throw TypeError(AF);if(!j)throw RangeError(CF);let z=j[J];if(z===void 0)throw RangeError(EF(J));let X=vj(W,z);if(Y!==void 0&&Y!==X)throw RangeError(SF);Y=X}else if(Y===void 0)throw TypeError(bF(j));return Y}function t8($,Z,J,W){let{month:Y,monthCode:j}=Z;if(j!==void 0){let z=((X,Q,G,K)=>{let F=X.U(G),[B,U]=yj(Q),V=R6(B,U,F);if(U){let O=gj(X);if(O===void 0)throw RangeError(X3);if(O>0){if(V>O)throw RangeError(X3);if(F===void 0){if(K===1)throw RangeError(X3);V--}}else{if(V!==-O)throw RangeError(X3);if(F===void 0&&K===1)throw RangeError(X3)}}return V})($,j,J,W);if(Y!==void 0&&Y!==z)throw RangeError(vz);Y=z,W=1}else if(Y===void 0)throw TypeError(fF);return n0("month",Y,1,$.L(J),W)}function dY($,Z,J,W,Y){return q0(Z,"day",1,$.j(W,J),Y)}function r8($,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 ej($){return U0(l0(g6(v6($))))}function $z($,Z,J,W,Y=w){return L0(l0(g6(v6(J))),Z(W),$(Y))}function Zz($,Z,J,W,Y=0,j=0,z=0,X=0,Q=0,G=0,K=w){return Y0(R1(p6(r0(_0,PZ(L4,[Z,J,W,Y,j,z,X,Q,G])))),$(K))}function Jz($,Z,J,W,Y=w){return j0(e1(R$(r0(_0,{isoYear:Z,isoMonth:J,isoDay:W}))),$(Y))}function Wz($,Z,J,W=w,Y=1){let j=_0(Z),z=_0(J),X=$(W);return S$(H7(R$({isoYear:j,isoMonth:z,isoDay:_0(Y)})),X)}function Yz($,Z,J,W=w,Y=MZ){let j=_0(Z),z=_0(J),X=$(W);return A6(e1(R$({isoYear:_0(Y),isoMonth:j,isoDay:z})),X)}function jz($=0,Z=0,J=0,W=0,Y=0,j=0){return Z1(c6(r0(_0,PZ(W1,[$,Z,J,W,Y,j])),1))}function zz($=0,Z=0,J=0,W=0,Y=0,j=0,z=0,X=0,Q=0,G=0){return o(_Z(r0(K5,PZ(m,[$,Z,J,W,Y,j,z,X,Q,G]))))}function _2($,Z,J=w){return L0($.epochNanoseconds,Z,J)}function Xz($){return U0($.epochNanoseconds)}function x2($,Z){return Y0(S0(Z,$))}function C2($,Z){return j0(S0(Z,$))}function Qz($,Z,J){return I2($(Z.calendar),J)}function Gz($,Z,J){return N2($(Z.calendar),J)}function A2($,Z){return Z1(S0(Z,$))}function Kz($,Z,J,W){let Y=((j,z,X,Q)=>{let G=N7(Q);return m0(j(z),X,G)})($,J,Z,W);return L0(l0(Y),J,Z.calendar)}function Bz($,Z,J){let W=$(Z.calendar);return S$({...Z,...I2(W,J)})}function Fz($,Z,J){return N2($(Z.calendar),J)}function Vz($,Z,J,W,Y){let j=$(Y.timeZone),z=Y.plainTime,X=z!==void 0?Z(z):t0;return L0(m0(J(j),{...W,...X}),j,W.calendar)}function Uz($,Z=t0){return Y0(R1({...$,...Z}))}function Oz($,Z,J){return I2($(Z.calendar),J)}function Dz($,Z,J){return N2($(Z.calendar),J)}function Lz($,Z,J,W){return((Y,j,z)=>rj(Y,j,nz,b1(z),C3))($(Z.calendar),J,W)}function Hz($,Z,J,W){return((Y,j,z)=>rj(Y,j,oz,b1(z),O4))($(Z.calendar),J,W)}function Mz($,Z,J,W,Y){let j=b1(Y),z=Z(j.plainDate),X=$(j.timeZone);return L0(m0(J(X),{...z,...W}),X,z.calendar)}function Pz($,Z){return Y0(R1({...$,...Z}))}function Tz($){return U0(l0(LZ($,a0)))}function Nz($){return U0(l0(LZ($,F1)))}function Iz($){return U0(l0(g6(v6($),m$)))}function _z($){return U0(l0(g6(v6($))))}function xz($,Z,J=t0){let W=Z.timeZone,Y=$(W),j={...S0(Z,Y),...J};return L0(w$(Y,j,j.offsetNanoseconds,2),W,Z.calendar)}function Cz($,Z,J){let W=Z.timeZone,Y=$(W),j={...S0(Z,Y),...J},z=bz(Z.calendar,J.calendar);return L0(w$(Y,j,j.offsetNanoseconds,2),W,z)}function Az($,Z=t0){return Y0({...$,...Z})}function Sz($,Z){return Y0({...$,...Z},bz($.calendar,Z.calendar))}function K4($,Z){return{...$,calendar:Z}}function Ez($,Z){return{...$,timeZone:Z}}function bz($,Z){if($===Z)return $;let J=O0($),W=O0(Z);if(J===W||J===w)return Z;if(W===w)return $;throw RangeError(f2)}function LF($,Z){return(J)=>J===w?$:J===D4||J===HZ?Object.assign(Object.create($),{id:J}):Object.assign(Object.create(Z),bV(J))}function g$($,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=G7(W,Y),$)||Object.assign(Y,Z),J&&(Y.timeZone=c$,["full","long"].includes(Y.timeStyle)&&(Y.timeStyle="medium")),Y)}function f1($,Z=S2){let[J,,,W]=$;return(Y,j=tV,...z)=>{let X=Z(W&&W(...z),Y,j,J),Q=X.resolvedOptions();return[X,...HF($,Q,z)]}}function S2($,Z,J,W){if(J=W(J),$){if(J.timeZone!==void 0)throw TypeError(uF);J.timeZone=$}return new Q$(Z,J)}function HF($,Z,J){let[,W,Y]=$;return J.map((j)=>(j.calendar&&((z,X,Q)=>{if((Q||z!==w)&&z!==X)throw RangeError(f2)})(O0(j.calendar),Z.calendar,Y),W(j,Z)))}function SZ($){let Z=N3();return Y$(Z,$.getOffsetNanosecondsFor(Z))}function N3(){return LZ(Date.now(),F1)}function k1(){return nY||(nY=new Q$().resolvedOptions().timeZone)}var MF=($,Z)=>`Non-integer ${$}: ${Z}`,PF=($,Z)=>`Non-positive ${$}: ${Z}`,TF=($,Z)=>`Non-finite ${$}: ${Z}`,NF=($)=>`Cannot convert bigint to ${$}`,IF=($)=>`Invalid bigint: ${$}`,_F="Cannot convert Symbol to string",Rz="Invalid object",fz=($,Z,J,W,Y)=>Y?fz($,Y[Z],Y[J],Y[W]):I3($,Z)+`; must be between ${J}-${W}`,I3=($,Z)=>`Invalid ${$}: ${Z}`,E2=($)=>`Missing ${$}`,b2=($)=>`Invalid field ${$}`,xF=($)=>`Duplicate field ${$}`,kz=($)=>"No valid fields: "+$.join(),wz="Invalid bag",qz=($,Z,J)=>I3($,Z)+"; must be "+Object.keys(J).join(),yz="Cannot use valueOf",R2="Invalid calling context",CF="Forbidden era/eraYear",AF="Mismatching era/eraYear",SF="Mismatching year/eraYear",EF=($)=>`Invalid era: ${$}`,bF=($)=>"Missing year"+($?"/era/eraYear":""),RF=($)=>`Invalid monthCode: ${$}`,vz="Mismatching month/monthCode",fF="Missing month/monthCode",uY="Cannot guess year",X3="Invalid leap month",gz="Invalid protocol",_3="Invalid protocol results",f2="Mismatching Calendars",kF=($)=>`Invalid Calendar: ${$}`,mz="Mismatching TimeZones",wF="Forbidden ICU TimeZone",qF="Out-of-bounds offset",yF="Out-of-bounds TimeZone gap",vF="Invalid TimeZone offset",gF="Ambiguous offset",B4="Out-of-bounds date",mF="Out-of-bounds duration",hF="Cannot mix duration signs",F4="Missing relativeTo",pF="Cannot use large units",cF="Required smallestUnit or largestUnit",dF="smallestUnit > largestUnit",y0=($)=>`Cannot parse: ${$}`,E1=($)=>`Invalid substring: ${$}`,hz=($)=>`Cannot format ${$}`,pz="Mismatching types for formatting",uF="Cannot specify TimeZone",cz=k(O3,($,Z)=>Z),EZ=k(O3,($,Z,J)=>J),o0=k(_6,2),Y7={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},x3=Object.keys(Y7),v0=86400000,dz=1000,m$=1000,F1=1e6,a0=1e9,V4=60000000000,U4=3600000000000,c=86400000000000,B1=[1,m$,F1,a0,V4,U4,c],w1=x3.slice(0,6),j7=D3(w1),uz=["offset"],lz=["timeZone"],iz=w1.concat(uz),sz=iz.concat(lz),z7=["era","eraYear"],lF=z7.concat(["year"]),O4=["year"],k2=["monthCode"],w2=["month"].concat(k2),C3=["day"],q2=w2.concat(O4),nz=k2.concat(O4),J1=C3.concat(q2),iF=C3.concat(w2),oz=C3.concat(k2),az=EZ(w1,0),w="iso8601",D4="gregory",HZ="japanese",tz={[D4]:{bce:-1,ce:0},[HZ]:{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}},sF={chinese:13,dangi:13,hebrew:-6},r=k(y6,"string"),rz=k(y6,"boolean"),nF=k(y6,"number"),ez=k(y6,"function"),m=x3.map(($)=>$+"s"),y2=D3(m),oF=m.slice(0,6),$X=m.slice(6),aF=$X.slice(1),tF=cz(m),D0=EZ(m,0),v2=EZ(oF,0),g2=k(eY,m),W1=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],m2=["isoDay","isoMonth","isoYear"],L4=W1.concat(m2),h2=D3(m2),ZX=D3(W1),JX=D3(L4),t0=EZ(ZX,0),rF=k(eY,L4),Q$=Intl.DateTimeFormat,WX="en-GB",p2=1e8,eF=p2*v0,$V=[p2,0],ZV=[-p2,0],V3=275760,U3=-271821,JV=1970,MZ=1972,A1=12,WV=TZ(1868,9,8),YV=g0(YF,WeakMap),f6="smallestUnit",X7="unit",G3="roundingIncrement",e8="fractionalSecondDigits",YX="relativeTo",jX={constrain:0,reject:1},jV=Object.keys(jX),zV={compatible:0,reject:1,earlier:2,later:3},XV={reject:0,use:1,prefer:2,ignore:3},QV={auto:0,never:1,critical:2,always:3},GV={auto:0,never:1,critical:2},KV={auto:0,never:1},BV={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},A3=k(S7,f6),c2=k(S7,"largestUnit"),FV=k(S7,X7),zX=k(f$,"overflow",jX),XX=k(f$,"disambiguation",zV),VV=k(f$,"offset",XV),d2=k(f$,"calendarName",QV),UV=k(f$,"timeZoneName",GV),OV=k(f$,"offset",KV),S3=k(f$,"roundingMode",BV),bZ="PlainYearMonth",RZ="PlainMonthDay",h$="PlainDate",p$="PlainDateTime",H4="PlainTime",q1="ZonedDateTime",M4="Instant",P4="Duration",DV=[Math.floor,($)=>H6($)?Math.floor($):Math.round($),Math.ceil,($)=>H6($)?Math.ceil($):Math.round($),Math.trunc,($)=>H6($)?Math.trunc($)||0:Math.round($),($)=>$<0?Math.floor($):Math.ceil($),($)=>Math.sign($)*Math.round(Math.abs($))||0,($)=>H6($)?($=Math.trunc($)||0)+$%2:Math.round($)],c$="UTC",N6=5184000,LV=C6(1847),HV=C6(new Date().getUTCFullYear()+10),MV=/0+$/,S0=g0(KF,WeakMap),lY=4294967295,T4=g0(($)=>{let Z=X2($);return typeof Z=="object"?new GX(Z):new QX(Z||0)});class QX{constructor($){this.v=$}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor($){return[M7($,this.v)]}l(){}}class GX{constructor($){this.$=((Z)=>{function J(Q){let G=$7(Q,z,X),[K,F]=mY(G),B=Y(K),U=Y(F);return B===U?B:W(j(K,F),B,U,Q)}function W(Q,G,K,F){let B,U;for(;(F===void 0||(B=F<Q[0]?G:F>=Q[1]?K:void 0)===void 0)&&(U=Q[1]-Q[0]);){let V=Q[0]+Math.floor(U/2);Z(V)===K?Q[1]=V:Q[0]=V+1}return B}let Y=g0(Z),j=g0(BF),z=LV,X=HV;return{G(Q){let G=J(Q-86400),K=J(Q+86400),F=Q-G,B=Q-K;if(G===K)return[F];let U=J(F);return U===J(B)?[Q-U]:G>K?[F,B]:[]},V:J,l(Q,G){let K=$7(Q,z,X),[F,B]=mY(K),U=N6*G,V=G<0?()=>B>z||(z=K,0):()=>F<X||(X=K,0);for(;V();){let O=Y(F),D=Y(B);if(O!==D){let L=j(F,B);W(L,O,D);let T=L[0];if((r1(T,Q)||1)===G)return T}F+=U,B+=U}}}})(((Z)=>(J)=>{let W=L7(Z,J*dz);return C6(fj(W),parseInt(W.month),parseInt(W.day),parseInt(W.hour),parseInt(W.minute),parseInt(W.second))-J})($))}getOffsetNanosecondsFor($){return this.$.V(V5($))*a0}getPossibleInstantsFor($){let[Z,J]=[C6((W=$).isoYear,W.isoMonth,W.isoDay,W.isoHour,W.isoMinute,W.isoSecond),W.isoMillisecond*F1+W.isoMicrosecond*m$+W.isoNanosecond];var W;return this.$.G(Z).map((Y)=>l0(DZ(LZ(Y,a0),J)))}l($,Z){let[J,W]=U5($),Y=this.$.l(J+(Z>0||W?1:0),Z);if(Y!==void 0)return LZ(Y,a0)}}var u2="([+\u2212-])",I6="(?:[.,](\\d{1,9}))?",KX=`(?:(?:${u2}(\\d{6}))|(\\d{4}))-?(\\d{2})`,l2="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+I6+")?)?",i2=u2+l2,PV=KX+"-?(\\d{2})(?:[T ]"+l2+"(Z|"+i2+")?)?",BX="\\[(!?)([^\\]]*)\\]",N4=`((?:${BX}){0,9})`,TV=AZ(KX+N4),NV=AZ("(?:--)?(\\d{2})-?(\\d{2})"+N4),IV=AZ(PV+N4),_V=AZ("T?"+l2+"(?:"+i2+")?"+N4),xV=AZ(i2),CV=new RegExp(BX,"g"),AV=AZ(`${u2}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${I6}H)?(?:(\\d+)${I6}M)?(?:(\\d+)${I6}S)?)?`),SV=g0(($)=>new Q$(WX,{timeZone:$,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),EV=/^(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$/,bV=g0(UF),s2=g0(($)=>new Q$(WX,{calendar:$,timeZone:c$,era:"short",year:"numeric",month:"short",day:"numeric"})),RV=/^M(\d{2})(L?)$/,fV={era:x6,eraYear:_0,year:_0,month:qY,monthCode:x6,day:qY},kV=EZ(w1,_0),wV=EZ(m,K5),iY=Object.assign({},fV,kV,wV,{offset:x6}),qV=k(WF,w1,W1),sY={dateAdd($,Z,J){let W=v(J),Y,{years:j,months:z,weeks:X,days:Q}=Z;if(Q+=F0(Z,5)[0],j||z)Y=((G,K,F,B,U)=>{let[V,O,D]=G.h(K);if(F){let[L,T]=G.I(V,O);V+=F,O=R6(L,T,G.U(V)),O=n0("month",O,1,G.L(V),U)}return B&&([V,O]=G._(V,O,B)),D=n0("day",D,1,G.j(V,O),U),G.q(V,O,D)})(this,$,j,z,W);else{if(!X&&!Q)return $;Y=A0($)}return Y+=(7*X+Q)*v0,e1(h6(Y))},dateUntil($,Z,J){if(J<=7){let Q=0,G=bj({...$,...t0},{...Z,...t0});return J===7&&([Q,G]=Z$(G,7)),{...D0,weeks:Q,days:G}}let W=this.h($),Y=this.h(Z),[j,z,X]=((Q,G,K,F,B,U,V)=>{let O=B-G,D=U-K,L=V-F;if(O||D){let T=Math.sign(O||D),P=Q.j(B,U),I=0;if(Math.sign(L)===-T){let A=P;[B,U]=Q._(B,U,-T),O=B-G,D=U-K,P=Q.j(B,U),I=T<0?-A:P}if(L=V-Math.min(F,P)+I,O){let[A,E]=Q.I(G,K),[S,f]=Q.I(B,U);if(D=S-A||Number(f)-Number(E),Math.sign(D)===-T){let M=T<0&&-Q.L(B);O=(B-=T)-G,D=U-R6(A,E,Q.U(B))+(M||Q.L(B))}}}return[O,D,L]})(this,...W,...Y);return J===8&&(z+=this.J(j,W[0]),j=0),{...D0,years:j,months:z,days:X}},dateFromFields($,Z){let J=v(Z),W=a8(this,$),Y=t8(this,$,W,J),j=dY(this,$,Y,W,J);return j0(e1(this.P(W,Y,j)),this.id||w)},yearMonthFromFields($,Z){let J=v(Z),W=a8(this,$),Y=t8(this,$,W,J);return S$(H7(this.P(W,Y,1)),this.id||w)},monthDayFromFields($,Z){let J=v(Z),W=!this.id,{monthCode:Y,year:j,month:z}=$,X,Q,G,K,F;if(Y!==void 0){[X,Q]=yj(Y),F=oY($,"day");let B=this.N(X,Q,F);if(!B)throw RangeError(uY);if([G,K]=B,z!==void 0&&z!==K)throw RangeError(vz);W&&(K=n0("month",K,1,A1,1),F=n0("day",F,1,P7(j!==void 0?j:G,K),J))}else{G=j===void 0&&W?MZ:a8(this,$),K=t8(this,$,G,J),F=dY(this,$,K,G,J);let B=this.U(G);Q=K===B,X=J7(K,B);let U=this.N(X,Q,F);if(!U)throw RangeError(uY);[G,K]=U}return A6(e1(this.P(G,K,F)),this.id||w)},fields($){return W7(this)&&$.includes("year")?[...$,...z7]:$},mergeFields($,Z){let J=Object.assign(Object.create(null),$);return r8(J,Z,w2),W7(this)&&(r8(J,Z,lF),this.id===HZ&&r8(J,Z,iF,z7)),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:H2,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"+o0(j)+(z?"L":""))(W,Y)},dayOfWeek:M5,daysInWeek(){return 7}},yV={dayOfYear:H2,h:D5,q:TZ},vV=Object.assign({},yV,{weekOfYear:wj,yearOfWeek:qj,R($){function Z(U){return(7-U<W?7:0)-U}function J(U){let V=H5(B+U),O=U||1,D=Z(Q3(Q+V*O,7));return K=(V+(D-G)*O)/7}let W=this.id?1:4,Y=M5($),j=this.dayOfYear($),z=Q3(Y-1,7),X=j-1,Q=Q3(z-X,7),G=Z(Q),K,F=Math.floor((X-G)/7)+1,B=$.isoYear;return F?F>J(0)&&(F=1,B++):(F=J(-1),B--),[F,B,K]}}),gV={dayOfYear:H2,h:Z7,q:F3,weekOfYear:wj,yearOfWeek:qj,R(){return[]}},fZ=LF(Object.assign({},sY,vV,{h:D5,ee($){return this.id===D4?P5($):this.id===HZ?YV($):[]},I:($,Z)=>[Z,0],N($,Z){if(!Z)return[MZ,$]},K:T7,U(){},L:L5,J:($)=>$*A1,j:P7,X:H5,P:($,Z,J)=>({isoYear:$,isoMonth:Z,isoDay:J}),q:TZ,_:($,Z,J)=>($+=w6(J,A1),(Z+=B7(J,A1))<1?($--,Z+=A1):Z>A1&&($++,Z-=A1),[$,Z]),year($){return $.isoYear},month($){return $.isoMonth},day:($)=>$.isoDay}),Object.assign({},sY,gV,{h:Z7,ee($){let Z=this.O($);return[Z.era,Z.eraYear]},I($,Z){let J=M6.call(this,$);return[J7(Z,J),J===Z]},N($,Z,J){let[W,Y,j]=Z7.call(this,{isoYear:MZ,isoMonth:A1,isoDay:31}),z=M6.call(this,W),X=Y===z;(r1($,J7(Y,z))||r1(Number(Z),Number(X))||r1(J,j))===1&&W--;for(let Q=0;Q<100;Q++){let G=W-Q,K=M6.call(this,G),F=R6($,Z,K);if(Z===(F===K)&&J<=pY.call(this,G,F))return[G,F]}},K($){let Z=P6.call(this,$);return Z>P6.call(this,$-1)&&Z>P6.call(this,$+1)},U:M6,L:T6,J($,Z){let J=Z+$,W=Math.sign($),Y=W<0?-1:0,j=0;for(let z=Z;z!==J;z+=W)j+=T6.call(this,z+Y);return j},j:pY,X:P6,P($,Z,J){return h6(F3.call(this,$,Z,J))},q:F3,_($,Z,J){if(J){if(Z+=J,!Number.isSafeInteger(Z))throw RangeError(B4);if(J<0)for(;Z<1;)Z+=T6.call(this,--$);else{let W;for(;Z>(W=T6.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}})),$$="numeric",kZ=["timeZoneName"],FX={month:$$,day:$$},n2={year:$$,month:$$},o2=Object.assign({},n2,{day:$$}),a2={hour:$$,minute:$$,second:$$},t2=Object.assign({},o2,a2),mV=Object.assign({},t2,{timeZoneName:"short"}),hV=Object.keys(n2),pV=Object.keys(FX),cV=Object.keys(o2),dV=Object.keys(a2),r2=["dateStyle"],uV=hV.concat(r2),lV=pV.concat(r2),e2=cV.concat(r2,["weekday"]),E3=dV.concat(["dayPeriod","timeStyle"]),$9=e2.concat(E3),iV=$9.concat(kZ),sV=kZ.concat(E3),nV=kZ.concat(e2),oV=kZ.concat(["day","weekday"],E3),aV=kZ.concat(["year","weekday"],E3),tV={},Z9=[g$($9,t2),l6],VX=[g$(iV,mV),l6,0,($,Z)=>{let J=O0($.timeZone);if(Z&&O0(Z.timeZone)!==J)throw RangeError(mz);return J}],J9=[g$($9,t2,kZ),A0],W9=[g$(e2,o2,sV),A0],Y9=[g$(E3,a2,nV),($)=>J$($)/F1],j9=[g$(uV,n2,oV),A0,1],z9=[g$(lV,FX,aV),A0,1],nY;function O1($,Z,J,W,Y){function j(...Q){if(!(this instanceof j))throw TypeError(R2);LX(this,Z(...Q))}function z(Q,G){return Object.defineProperties(function(...K){return Q.call(this,X(this),...K)},Q7(G))}function X(Q){let G=P0(Q);if(!G||G.branding!==$)throw TypeError(R2);return G}return Object.defineProperties(j.prototype,{...aY(r0(z,J)),...b$(r0(z,W)),...k6("Temporal."+$)}),Object.defineProperties(j,{...b$(Y),...Q7($)}),[j,(Q)=>{let G=Object.create(j.prototype);return LX(G,Q),G},X]}function PX($){return $=$.concat("id").sort(),(Z)=>{if(!tY(Z,$))throw TypeError(gz);return Z}}function vZ($){if(P0($)||$.calendar!==void 0||$.timeZone!==void 0)throw TypeError(wz);return $}function I4($,Z){let J={};for(let W in $)J[W]=({o:Y},j)=>{let z=P0(j)||{},{branding:X}=z,Q=X===h$||Z.includes(X)?z:R0(j);return Y[W](Q)};return J}function G9($){let Z={};for(let J in $)Z[J]=(W)=>{let{calendar:Y}=W;return(j=Y,typeof j=="string"?fZ(j):(z=j,Object.assign(Object.create(VU),{i:z})))[J](W);var j,z};return Z}function V$(){throw TypeError(yz)}function R3({calendar:$}){return typeof $=="string"?new H9($):$}function UX($,Z){if(Z=W0(Z),V0($)){let W=P0($);if(W&&W.branding===RZ)return v(Z),W;let Y=IX($);return T2(b4(Y||w),!Y,$,Z)}let J=zj(fZ,$);return v(Z),J}function TX($,Z,J){return W=Z.call($,b0(U0(J))),c7(L3(W));var W}function _4($,Z=AX){let J=Object.keys(Z).sort(),W={};for(let Y of J)W[Y]=k(Z[Y],$,ez($[Y]));return W}function d($,Z){return typeof $=="string"?T4($):_4($,Z)}function X0($){return d($,Q9)}function V1($){if(V0($)){let Z=P0($);if(Z)switch(Z.branding){case M4:return Z;case q1:return U0(Z.epochNanoseconds)}}return Zj($)}function OX($,Z,J){let W=Z.l(V1(J).epochNanoseconds,$);return W?b0(U0(W)):null}function i($){return V0($)?(P0($)||{}).timeZone||MU($):((Z)=>Y4(Kj(r(Z))))($)}function G$($,Z){if(V0($)){let J=P0($)||{};switch(J.branding){case H4:return v(Z),J;case p$:return v(Z),Z1(J);case q1:return v(Z),A2(X0,J)}return dj($,Z)}return v(Z),Xj($)}function K9($){return $===void 0?void 0:G$($)}function wZ($,Z){if(Z=W0(Z),V0($)){let W=P0($);return W&&W.branding===bZ?(v(Z),W):P2(S4(f3($)),$,Z)}let J=jj(fZ,$);return v(Z),J}function K$($,Z){if(Z=W0(Z),V0($)){let W=P0($)||{};switch(W.branding){case p$:return v(Z),W;case h$:return v(Z),Y0({...W,...t0});case q1:return v(Z),x2(X0,W)}return cj(E4(f3($)),$,Z)}let J=Yj($);return v(Z),J}function R0($,Z){if(Z=W0(Z),V0($)){let W=P0($)||{};switch(W.branding){case h$:return v(Z),W;case p$:return v(Z),j0(W);case q1:return v(Z),C2(X0,W)}return M2(E4(f3($)),$,Z)}let J=J4($);return v(Z),J}function NX($,Z,J){return e0(Z.call($,$0(j0(J,$))))}function D1($){return(Z)=>typeof Z=="string"?fZ(Z):((J,W)=>{let Y=Object.keys(W).sort(),j={};for(let z of Y)j[z]=k(W[z],J,J[z]);return j})(Z,$)}function e($){if(V0($)){let Z=P0($);return Z&&Z.branding===P4?Z:uj($)}return Qj($)}function b3($){if($!==void 0){if(V0($)){let Z=P0($)||{};switch(Z.branding){case q1:case h$:return Z;case p$:return j0(Z)}let J=f3($);return{...hj(i,d,E4(J),$),calendar:J}}return Jj($)}}function f3($){return IX($)||w}function IX($){let{calendar:Z}=$;if(Z!==void 0)return M0(Z)}function M0($){return V0($)?(P0($)||{}).calendar||wU($):((Z)=>P3(Gj(r(Z))))($)}function qZ($,Z){if(Z=W0(Z),V0($)){let J=P0($);if(J&&J.branding===q1)return H3(Z),J;let W=f3($);return pj(i,d,E4(W),W,$,Z)}return Wj($,Z)}function DX($){return r0((Z)=>(J)=>Z(X9(J)),$)}function X9($){return S0($,X0)}function rV(){let $=Q$.prototype,Z=Object.getOwnPropertyDescriptors($),J=Object.getOwnPropertyDescriptors(Q$),W=function(Y,j={}){if(!(this instanceof W))return new W(Y,j);M9.set(this,((z,X={})=>{let Q=new Q$(z,X),G=Q.resolvedOptions(),K=G.locale,F=h0(Object.keys(X),G),B=g0(ZU),U=(...V)=>{let O,D=V.map((L,T)=>{let P=P0(L),I=(P||{}).branding;if(T&&O&&O!==I)throw TypeError(pz);return O=I,P});return O?B(O)(K,F,...D):[Q,...V]};return U.u=Q,U})(Y,j))};for(let Y in Z){let j=Z[Y],z=Y.startsWith("format")&&eV(Y);typeof j.value=="function"?j.value=Y==="constructor"?W:z||$U(Y):z&&(j.get=function(){return z.bind(this)})}return J.prototype.value=Object.create($,Z),Object.defineProperties(W,J),W}function eV($){return function(...Z){let J=M9.get(this),[W,...Y]=J(...Z);return W[$](...Y)}}function $U($){return function(...Z){return M9.get(this).u[$](...Z)}}function ZU($){let Z=JU[$];if(!Z)throw TypeError(hz($));return f1(Z,g0(S2))}var JU={Instant:Z9,PlainDateTime:J9,PlainDate:W9,PlainTime:Y9,PlainYearMonth:j9,PlainMonthDay:z9},WU=f1(Z9),YU=f1(VX),jU=f1(J9),zU=f1(W9),XU=f1(Y9),QU=f1(j9),GU=f1(z9),B9={era:Y5,eraYear:F7,year:L3,month:e0,daysInMonth:e0,daysInYear:e0,inLeapYear:rz,monthsInYear:e0},C4={monthCode:r},F9={day:e0},_X={dayOfWeek:e0,dayOfYear:e0,weekOfYear:j5,yearOfWeek:F7,daysInWeek:e0},xX=Object.assign({},B9,C4,F9,_X),x4=new WeakMap,P0=x4.get.bind(x4),LX=x4.set.bind(x4),KU={...I4(B9,[bZ]),...I4(_X,[]),...I4(C4,[bZ,RZ]),...I4(F9,[RZ])},V9=G9(xX),BU=G9({...B9,...C4}),FU=G9({...C4,...F9}),k3={calendarId:($)=>O0($.calendar)},VU=r0(($,Z)=>function(J){let{i:W}=this;return $(W[Z]($0(j0(J,W))))},xX),UU=O3(($)=>(Z)=>Z[$],m.concat("sign")),U9=O3(($,Z)=>(J)=>J[W1[Z]],w1),CX={epochSeconds:A5,epochMilliseconds:l6,epochMicroseconds:S5,epochNanoseconds:E5},w3=k(G7,new Set(["branding"])),[OU,yZ,DU]=O1(RZ,k(Yz,M0),{...k3,...FU},{getISOFields:w3,getCalendar:R3,with($,Z,J){return yZ(oj(RU,$,this,vZ(Z),J))},equals:($,Z)=>_j($,UX(Z)),toPlainDate($,Z){return $0(Hz(q3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=GU(Z,J,$);return W.format(Y)},toString:v7,toJSON:($)=>v7($),valueOf:V$},{from:($,Z)=>yZ(UX($,Z))}),AX={getOffsetNanosecondsFor:TX,getPossibleInstantsFor($,Z,J){let W=[...Z.call($,H0(Y0(J,w)))].map((j)=>HU(j).epochNanoseconds),Y=W.length;return Y>1&&(W.sort(C0),d7(u0(d0(W[0],W[Y-1])))),W}},Q9={getOffsetNanosecondsFor:TX},[LU,b0,HU]=O1(M4,ej,CX,{add:($,Z)=>b0(u7(0,$,e(Z))),subtract:($,Z)=>b0(u7(1,$,e(Z))),until:($,Z,J)=>u(B2(0,$,V1(Z),J)),since:($,Z,J)=>u(B2(1,$,V1(Z),J)),round:($,Z)=>b0(f5($,Z)),equals:($,Z)=>Mj($,V1(Z)),toZonedDateTime($,Z){let J=b1(Z);return z0(_2($,i(J.timeZone),M0(J.calendar)))},toZonedDateTimeISO:($,Z)=>z0(_2($,i(Z))),toLocaleString($,Z,J){let[W,Y]=WU(Z,J,$);return W.format(Y)},toString:($,Z)=>f7(i,X0,$,Z),toJSON:($)=>f7(i,X0,$),valueOf:V$},{from:($)=>b0(V1($)),fromEpochSeconds:($)=>b0(Tz($)),fromEpochMilliseconds:($)=>b0(Nz($)),fromEpochMicroseconds:($)=>b0(Iz($)),fromEpochNanoseconds:($)=>b0(_z($)),compare:($,Z)=>Q2(V1($),V1(Z))}),[A4,mP]=O1("TimeZone",($)=>{let Z=Lj($);return{branding:"TimeZone",id:Z,o:T4(Z)}},{id:($)=>$.id},{getPossibleInstantsFor:({o:$},Z)=>$.getPossibleInstantsFor(K$(Z)).map((J)=>b0(U0(J))),getOffsetNanosecondsFor:({o:$},Z)=>$.getOffsetNanosecondsFor(V1(Z).epochNanoseconds),getOffsetStringFor($,Z){let J=V1(Z).epochNanoseconds,W=_4(this,Q9).getOffsetNanosecondsFor(J);return k$(W)},getPlainDateTimeFor($,Z,J=w){let W=V1(Z).epochNanoseconds,Y=_4(this,Q9).getOffsetNanosecondsFor(W);return H0(Y0(Y$(W,Y),M0(J)))},getInstantFor($,Z,J){let W=K$(Z),Y=N7(J),j=_4(this);return b0(U0(m0(j,W,Y)))},getNextTransition:({o:$},Z)=>OX(1,$,Z),getPreviousTransition:({o:$},Z)=>OX(-1,$,Z),equals($,Z){return!!z4(this,i(Z))},toString:($)=>$.id,toJSON:($)=>$.id},{from($){let Z=i($);return typeof Z=="string"?new A4(Z):Z}}),MU=PX(Object.keys(AX)),[PU,B$]=O1(H4,jz,U9,{getISOFields:w3,with($,Z,J){return B$(aj(this,vZ(Z),J))},add:($,Z)=>B$(o7(0,$,e(Z))),subtract:($,Z)=>B$(o7(1,$,e(Z))),until:($,Z,J)=>u(D2(0,$,G$(Z),J)),since:($,Z,J)=>u(D2(1,$,G$(Z),J)),round:($,Z)=>B$(q5($,Z)),equals:($,Z)=>xj($,G$(Z)),toZonedDateTime:($,Z)=>z0(Mz(i,R0,d,$,Z)),toPlainDateTime:($,Z)=>H0(Pz($,R0(Z))),toLocaleString($,Z,J){let[W,Y]=XU(Z,J,$);return W.format(Y)},toString:g7,toJSON:($)=>g7($),valueOf:V$},{from:($,Z)=>B$(G$($,Z)),compare:($,Z)=>j4(G$($),G$(Z))}),[TU,F$,NU]=O1(bZ,k(Wz,M0),{...k3,...BU},{getISOFields:w3,getCalendar:R3,with($,Z,J){return F$(nj(bU,$,this,vZ(Z),J))},add:($,Z,J)=>F$(n7(HX,0,$,e(Z),J)),subtract:($,Z,J)=>F$(n7(HX,1,$,e(Z),J)),until:($,Z,J)=>u(O2(MX,0,$,wZ(Z),J)),since:($,Z,J)=>u(O2(MX,1,$,wZ(Z),J)),equals:($,Z)=>Ij($,wZ(Z)),toPlainDate($,Z){return $0(Lz(q3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=QU(Z,J,$);return W.format(Y)},toString:y7,toJSON:($)=>y7($),valueOf:V$},{from:($,Z)=>F$(wZ($,Z)),compare:($,Z)=>y$(wZ($),wZ(Z))}),[IU,H0]=O1(p$,k(Zz,M0),{...k3,...V9,...U9},{getISOFields:w3,getCalendar:R3,with($,Z,J){return H0(ij(q3,$,this,vZ(Z),J))},withCalendar:($,Z)=>H0(K4($,M0(Z))),withPlainDate:($,Z)=>H0(Sz($,R0(Z))),withPlainTime:($,Z)=>H0(Az($,K9(Z))),add:($,Z,J)=>H0(i7(d$,0,$,e(Z),J)),subtract:($,Z,J)=>H0(i7(d$,1,$,e(Z),J)),until:($,Z,J)=>u(V2(U1,0,$,K$(Z),J)),since:($,Z,J)=>u(V2(U1,1,$,K$(Z),J)),round:($,Z)=>H0(w5($,Z)),equals:($,Z)=>Tj($,K$(Z)),toZonedDateTime:($,Z,J)=>z0(Kz(d,$,i(Z),J)),toPlainDate:($)=>$0(j0($)),toPlainTime:($)=>B$(Z1($)),toPlainYearMonth($){return F$(Bz(S4,$,this))},toPlainMonthDay($){return yZ(Fz(b4,$,this))},toLocaleString($,Z,J){let[W,Y]=jU(Z,J,$);return W.format(Y)},toString:w7,toJSON:($)=>w7($),valueOf:V$},{from:($,Z)=>H0(K$($,Z)),compare:($,Z)=>K2(K$($),K$(Z))}),[_U,$0,SX]=O1(h$,k(Jz,M0),{...k3,...V9},{getISOFields:w3,getCalendar:R3,with($,Z,J){return $0(sj(q3,$,this,vZ(Z),J))},withCalendar:($,Z)=>$0(K4($,M0(Z))),add:($,Z,J)=>$0(s7(d$,0,$,e(Z),J)),subtract:($,Z,J)=>$0(s7(d$,1,$,e(Z),J)),until:($,Z,J)=>u(U2(U1,0,$,R0(Z),J)),since:($,Z,J)=>u(U2(U1,1,$,R0(Z),J)),equals:($,Z)=>Nj($,R0(Z)),toZonedDateTime($,Z){let J=!V0(Z)||Z instanceof A4?{timeZone:Z}:Z;return z0(Vz(i,G$,d,$,J))},toPlainDateTime:($,Z)=>H0(Uz($,K9(Z))),toPlainYearMonth($){return F$(Oz(S4,$,this))},toPlainMonthDay($){return yZ(Dz(b4,$,this))},toLocaleString($,Z,J){let[W,Y]=zU(Z,J,$);return W.format(Y)},toString:q7,toJSON:($)=>q7($),valueOf:V$},{from:($,Z)=>$0(R0($,Z)),compare:($,Z)=>y$(R0($),R0(Z))}),O9={fields($,Z,J){return[...Z.call($,J)]}},EX=Object.assign({dateFromFields($,Z,J,W){return SX(Z.call($,Object.assign(Object.create(null),J),W))}},O9),bX=Object.assign({yearMonthFromFields($,Z,J,W){return NU(Z.call($,Object.assign(Object.create(null),J),W))}},O9),RX=Object.assign({monthDayFromFields($,Z,J,W){return DU(Z.call($,Object.assign(Object.create(null),J),W))}},O9),D9={mergeFields($,Z,J,W){return b1(Z.call($,Object.assign(Object.create(null),J),Object.assign(Object.create(null),W)))}},xU=Object.assign({},EX,D9),CU=Object.assign({},bX,D9),AU=Object.assign({},RX,D9),L9={dateAdd($,Z,J,W,Y){return SX(Z.call($,$0(j0(J,$)),u(o(W)),Y))}},fX=Object.assign({},L9,{dateUntil($,Z,J,W,Y,j){return kU(Z.call($,$0(j0(J,$)),$0(j0(W,$)),Object.assign(Object.create(null),j,{largestUnit:x3[Y]})))}}),SU=Object.assign({},L9,{day:NX}),EU=Object.assign({},fX,{day:NX}),S4=D1(bX),E4=D1(EX),b4=D1(RX),bU=D1(CU),q3=D1(xU),RU=D1(AU),d$=D1(L9),U1=D1(fX),HX=D1(SU),MX=D1(EU),[fU,u,kU]=O1(P4,zz,{...UU,blank:r5},{with:($,Z)=>u(tj($,Z)),negated:($)=>u($4($)),abs:($)=>u(t5($)),add:($,Z,J)=>u($2(b3,U1,d,0,$,e(Z),J)),subtract:($,Z,J)=>u($2(b3,U1,d,1,$,e(Z),J)),round:($,Z)=>u(a5(b3,U1,d,$,Z)),total:($,Z)=>R5(b3,U1,d,$,Z),toLocaleString($,Z,J){return Intl.DurationFormat?new Intl.DurationFormat(Z,J).format(this):o6($)},toString:o6,toJSON:($)=>o6($),valueOf:V$},{from:($)=>u(e($)),compare:($,Z,J)=>Hj(b3,d$,d,e($),e(Z),J)}),kX={toString:($)=>$.id,toJSON:($)=>$.id,...KU,dateAdd:({id:$,o:Z},J,W,Y)=>$0(j0(Z.dateAdd(R0(J),e(W),Y),$)),dateUntil:({o:$},Z,J,W)=>u(o($.dateUntil(R0(Z),R0(J),N5(W)))),dateFromFields:({id:$,o:Z},J,W)=>$0(M2(Z,J,W,W5($))),yearMonthFromFields:({id:$,o:Z},J,W)=>F$(P2(Z,J,W,Z5($))),monthDayFromFields:({id:$,o:Z},J,W)=>yZ(T2(Z,0,J,W,J5($))),fields({o:$},Z){let J=new Set(J1),W=[];for(let Y of Z){if(r(Y),!J.has(Y))throw RangeError(b2(Y));J.delete(Y),W.push(Y)}return $.fields(W)},mergeFields:({o:$},Z,J)=>$.mergeFields(K7(V7(Z)),K7(V7(J)))},[H9]=O1("Calendar",($)=>{let Z=kj($);return{branding:"Calendar",id:Z,o:fZ(Z)}},{id:($)=>$.id},kX,{from($){let Z=M0($);return typeof Z=="string"?new H9(Z):Z}}),wU=PX(Object.keys(kX).slice(4)),[qU,z0]=O1(q1,k($z,M0,i),{...CX,...k3,...DX(V9),...DX(U9),offset:($)=>k$(X9($).offsetNanoseconds),offsetNanoseconds:($)=>X9($).offsetNanoseconds,timeZoneId:($)=>O0($.timeZone),hoursInDay:($)=>y5(d,$)},{getISOFields:($)=>n5(X0,$),getCalendar:R3,getTimeZone:({timeZone:$})=>typeof $=="string"?new A4($):$,with($,Z,J){return z0(lj(q3,d,$,this,vZ(Z),J))},withCalendar:($,Z)=>z0(K4($,M0(Z))),withTimeZone:($,Z)=>z0(Ez($,i(Z))),withPlainDate:($,Z)=>z0(Cz(d,$,R0(Z))),withPlainTime:($,Z)=>z0(xz(d,$,K9(Z))),add:($,Z,J)=>z0(l7(d$,d,0,$,e(Z),J)),subtract:($,Z,J)=>z0(l7(d$,d,1,$,e(Z),J)),until:($,Z,J)=>u(o(F2(U1,d,0,$,qZ(Z),J))),since:($,Z,J)=>u(o(F2(U1,d,1,$,qZ(Z),J))),round:($,Z)=>z0(k5(d,$,Z)),startOfDay:($)=>z0(v5(d,$)),equals:($,Z)=>Pj($,qZ(Z)),toInstant:($)=>b0(Xz($)),toPlainDateTime:($)=>H0(x2(X0,$)),toPlainDate:($)=>$0(C2(X0,$)),toPlainTime:($)=>B$(A2(X0,$)),toPlainYearMonth($){return F$(Qz(S4,$,this))},toPlainMonthDay($){return yZ(Gz(b4,$,this))},toLocaleString($,Z,J={}){let[W,Y]=YU(Z,J,$);return W.format(Y)},toString:($,Z)=>k7(X0,$,Z),toJSON:($)=>k7(X0,$),valueOf:V$},{from:($,Z)=>z0(qZ($,Z)),compare:($,Z)=>G2(qZ($),qZ(Z))}),yU=Object.defineProperties({},{...k6("Temporal.Now"),...b$({timeZoneId:()=>k1(),instant:()=>b0(U0(N3())),zonedDateTime:($,Z=k1())=>z0(L0(N3(),i(Z),M0($))),zonedDateTimeISO:($=k1())=>z0(L0(N3(),i($),w)),plainDateTime:($,Z=k1())=>H0(Y0(SZ(X0(i(Z))),M0($))),plainDateTimeISO:($=k1())=>H0(Y0(SZ(X0(i($))),w)),plainDate:($,Z=k1())=>$0(j0(SZ(X0(i(Z))),M0($))),plainDateISO:($=k1())=>$0(j0(SZ(X0(i($))),w)),plainTimeISO:($=k1())=>B$(Z1(SZ(X0(i($)))))})}),gZ=Object.defineProperties({},{...k6("Temporal"),...b$({PlainYearMonth:TU,PlainMonthDay:OU,PlainDate:_U,PlainTime:PU,PlainDateTime:IU,ZonedDateTime:qU,Instant:LU,Calendar:H9,TimeZone:A4,Duration:fU,Now:yU})}),vU=rV(),M9=new WeakMap,gU=Object.defineProperties(Object.create(Intl),b$({DateTimeFormat:vU}));var R4="x-gemi-socket";var lP="gemi.v1",wX="/__gemi/socket",iP=/^[A-Za-z0-9_-]{1,32}$/,sP={Normal:1000,UnsupportedData:1003,PolicyViolation:1008,Restart:1012,TryAgainLater:1013,Revoked:4001};function tP($){return $}function qX(){return{driver:"memory",redis:{},maxEventBytes:16384,warnEventBytes:4096,path:wX,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 mU,randomBytes as hU}from"crypto";function pU($=process.env.SECRET){if(!$)return"gemi:bc:";return`gemi:bc:${Buffer.from(mU("sha256",$,"gemi","gemi.broadcast.prefix",4)).toString("hex")}:`}var cU="__control",P9=250,dU=1e4,uU=15000;class T9{config;prefix;controlChannel;instanceId=hU(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??pU(),this.controlChannel=this.prefix+cU,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=y3((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 $})(),uU,"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 (${yX(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(dU,P9*2**this.reconnectAttempt);this.reconnectAttempt=Math.min(this.reconnectAttempt+1,16);let Z=Math.max(P9,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;y3($.ping(),this.subscribeTimeoutMs,"ping").catch((Z)=>{if(this.subscriber!==$)return;console.warn(`[gemi] Broadcast: the Redis subscriber did not answer a ping (${yX(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??lU(Math.min(Z,P9));await y3(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 y3(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 y3(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 y3($,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 lU($){return new Promise((Z)=>setTimeout(Z,$))}function yX($){return $ instanceof Error?$.message:String($)}import{createHmac as iU,hkdfSync as sU,randomBytes as vX}from"crypto";function gX($){return iU("sha256",nU()).update($).digest("base64url").slice(0,22)}var f4=null;function nU(){let $=process.env.SECRET||void 0;if(f4&&f4.secret===$)return f4.key;let Z=$?Buffer.from(sU("sha256",$,"gemi","gemi.broadcast.socket-tag",32)):vX(32);return f4={secret:$,key:Z},Z}function JT(){return vX(16).toString("base64url")}var oU=/^[A-Za-z0-9_-]{8,64}$/;function N9($){return typeof $==="string"&&oU.test($)}function mX($,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 pX 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 p0{options;static token="broadcast";config;driver;warnedAboutSize=new Set;started=!1;hooks;channelRouter;constructor($={},Z={}){this.options=Z;this.config=L1(qX(),$),this.driver=rU(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 v3(this,k4($,Z[0]),null)}toUser($){return new v3(this,{topic:zZ($),pattern:K0},null)}toOthers($){return new cX(this,tU($))}broadcastEvent($){let Z=$.broadcastOn(),J=Array.isArray(Z)?Z:[Z],W=$.broadcastAs(),Y=$.broadcastWith(),j=J.map((z)=>this.prepare(k4(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){BW(Z);let Y;try{Y=mX($.topic,Z,J,W?gX(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){mZ(()=>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=aU($);mZ(()=>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 pX(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 v3{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 cX{manager;except;constructor($,Z){this.manager=$;this.except=Z}to($,...Z){return new v3(this.manager,k4($,Z[0]),this.except)}toUser($){return new v3(this.manager,{topic:zZ($),pattern:K0},this.except)}}function k4($,Z){if(KW($))return{topic:L8($.topic),...$.pattern?{pattern:$.pattern}:{}};if(Z!==void 0||$.includes(":"))return{topic:J3($,Z??{}),pattern:$};if($===K0)throw new p('"user" is not a topic: the "user" channel resolves to user.<id> per subscriber. Emit with Broadcast.toUser(user).');return{topic:L8($)}}function aU($){if($&&typeof $==="object"&&"user"in $)return{user:zZ($.user).slice(K0.length+1)};if($&&typeof $==="object"&&"channel"in $)return{topic:k4($.channel,$.params).topic};throw new p("Broadcast.revoke takes { user } or { channel }.")}function tU($){if($===null||$===void 0)return null;if(typeof $==="string")return N9($)?$:null;let J=($ instanceof Request?$.headers:("rawRequest"in $)?$.rawRequest.headers:$.headers)?.get(R4);return N9(J)?J:null}function rU($,Z){let J=$.driver;if(J===void 0||J==="memory")return new hX;if(J==="redis"){let W=Z?.config.get("redis",{})??{},Y=$.redis??{};return new T9({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 I9 extends Error{code;constructor($,Z=`OAuth callback failed: ${$}`){super(Z);this.name="OAuthCallbackError",this.code=$}}class eU{linkByEmail=!0;createUsers=!0;createUsersWithoutEmail=!1}import{createHash as _9,createHmac as $O,randomBytes as dX,timingSafeEqual as iX}from"crypto";var m3=600,w4="gemi_oauth",ZO=`__Host-${w4}`;function hZ($,Z=w4){if(Z===w4)return $?ZO:w4;return $?`__Host-${Z}`:Z}function g3($){return $.toString("base64url")}function sX($){return $O("sha256",BZ()).update(`gemi-oauth-state:${$}`).digest()}function uX($,Z){let J=_9("sha256").update($).digest(),W=_9("sha256").update(Z).digest();return iX(J,W)&&$.length===Z.length}function q4($,Z=Date.now(),J={}){let W=g3(dX(32)),Y=g3(dX(32)),j=JO(Y),z={provider:$,state:W,codeVerifier:Y,expiresAt:Z+m3*1000,...J.subject!==void 0?{subject:J.subject}:{},...J.returnTo!==void 0?{returnTo:J.returnTo}:{}};return{state:W,codeVerifier:Y,codeChallenge:j,cookieValue:WO(z)}}function JO($){return g3(_9("sha256").update($).digest())}function WO($){let Z=g3(Buffer.from(JSON.stringify($)));return`${Z}.${g3(sX(Z))}`}function YO($){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=sX(J);if(W.length!==Y.length||!iX(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")return null;return j}catch{return null}}var U$=new Map,lX=1e4;function jO($,Z,J){if(U$.size>=lX){for(let[W,Y]of U$)if(Y<=J)U$.delete(W);while(U$.size>=lX){let W=U$.keys().next().value;if(W===void 0)break;U$.delete(W)}}U$.set($,Z)}function y4($){let Z=$.now??Date.now();if(!$.cookieValue||!$.returnedState)return{ok:!1,reason:"missing_state"};let J=YO($.cookieValue);if(!J)return{ok:!1,reason:"invalid_state"};let W=uX(J.state,$.returnedState),Y=uX(J.provider,$.provider);if(!W||!Y)return{ok:!1,reason:"invalid_state"};if(J.expiresAt<=Z)return{ok:!1,reason:"expired_state"};if(U$.has(J.state))return{ok:!1,reason:"invalid_state"};return jO(J.state,J.expiresAt,Z),{ok:!0,payload:J}}var x9=new WeakMap;function XO($){let Z=x9.get($);if(!Z)Z=$(zO(32).toString("hex")),x9.set($,Z),Z.catch(()=>x9.delete($));return Z}async function C9($,Z,J){if(typeof J==="string"&&J!=="")return await $.verifyPassword(Z,J);try{await $.verifyPassword(Z,await XO($.hashPassword))}catch{}return!1}async function u$($,Z){let J=Z.user??Z.session?.user;if(!J||!$.onAuthenticated)return;let{password:W,...Y}=J;await $.onAuthenticated({...Z,user:Y})}class S9 extends Error{}function A9($){return typeof $==="string"&&$!==""?$:null}function nX($){return z3($)}var QO=256;function oX($){return typeof $==="string"&&$!==""&&$.length<=QO?$:null}function aX($){let{password:Z,code:J,...W}=$;return W}var v4="intended_url";function rX($){if($.cookies.get(v4))$.ctx().setCookie(v4,"",{maxAge:-1})}function tX($){let Z=$.cookies.get(v4);if(!Z)return null;rX($);try{return X1(decodeURIComponent(Z),"")||null}catch{return null}}class E9 extends C{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class eX extends C{schema={email:{required:"Email is required",email:"Invalid email"}}}class $Q extends C{schema={password:{required:"Password is required",password:"Invalid password"}}}function y1($){if(H(b).config[$]===!1)throw new Z0("Not found",{status:404})}class a extends Y3{async me(){let $=await w0.user();if(!$)throw new q8;return $}async verifyEmail($=new C){y1("password");let Z=await $.input(),{userProvider:J}=H(b),W=A9(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 C){let Z=H(b),{userProvider:J}=Z,W=A9($.search.get("token")),Y=null;try{Y=z3(decodeURIComponent($.search.get("email")??""))}catch{}if(await FZ("link",null,$,{perIp:Z.config.emailCode.verifyLimit.perIp}),!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()),await u$(Z.config,{session:j,isNewUser:!1,method:"magic-link",req:$}),{session:j}}async verifyPinRequest($){y1("magicLink");let Z=H(b),J=await $.input(),{email:W,pin:Y}=J.toJSON(),j=z3(W),z=oX(Y);if(await FZ("verify",j,$,Z.config.emailCode.verifyLimit),!j||!z)throw new h({pin:["Invalid pin"]});let X=await Z.verifyOneTimeCode(j,z);if(X.status==="too_many_attempts")throw new h({pin:["Too many attempts"]});if(X.status!=="ok")throw new h({pin:["Invalid pin"]});return await Z.userProvider.verifyUser(j),j}async signInWithPinV2($=new C){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()),await u$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),W}async signInWithPin($=new C){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()),await u$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),{session:W}}async signInV2($=new E9){y1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await C9(j.config,W,z?.password);if(!z||!X)throw new h({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSessionV2({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,H(b).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await u$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...K}=z;return K}async signIn($=new E9){y1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await C9(j.config,W,z?.password);if(!z||!X)throw new h({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSession({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,H(b).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await u$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...K}=z;return K}async signUp(){y1("password");let $=H(b),{userProvider:Z,config:J}=$,W=new J.signUpRequest,Y=await W.input(),{email:j,password:z,name:X,invitationId:Q}=Y.toJSON(),G={method:"password",input:aX(Y.toJSON())},K=nX(j);if(!K)throw new h({email:["Invalid email"]});if(z!=null&&typeof z!=="string")throw new h({password:["Invalid password"]});if(Q!=null&&typeof Q!=="string")throw new h({invitationId:["Invalid invitation"]});if(await Z.findUserByEmailAddress(K,!1))throw new h({email:["Email address already exists"]});let B=await J.hashPassword(z),U=H(n).detectLocale(W),V;if(Q)V=await Z.findInvitation(Q,K);let O,D="";if(V)O=await Z.transaction(async()=>{await Z.deleteInvitationById(Q);let L=await Z.createUser({email:K,name:X,password:B,emailVerifiedAt:new Date,locale:U});return await Z.createAccount({organizationId:V.organizationId,userId:L.id,organizationRole:V.role}),await J.onUserCreated(L,G),L});else D=await J.generateEmailVerificationToken(K),O=await Z.transaction(async()=>{let L=await Z.createUser({email:K,name:X,password:B,verificationToken:D,locale:U});return await J.onUserCreated(L,G),L});return await J.onSignUp(O,D,W.search.toJSON()),O}async signOut($=new C){let Z=T$($),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)GO(Y.user),Y.user.extension=await W.extendSession(Y.user),await W.onSignOut(Y.user);return{}}async forgotPassword($=new eX){y1("password");let Z=await $.input(),J=nX(Z.get("email"));if(!J)return{};let{userProvider:W,config:Y}=H(b),j=await W.findUserByEmailAddress(J,Y.verifyEmail);if(!j)return{};let z=await Y.generateForgotPasswordToken(j);return await W.createPasswordResetToken({user:j,token:z}),await Y.onForgotPassword(j,z),{}}async resetPassword($=new $Q){y1("password");let{userProvider:Z,config:J}=H(b),W=await $.input(),{password:Y,token:j}=W.toJSON(),z=A9(j),X=z?await Z.findPasswordResetToken({token:z}):null;if(!X)throw new h({token:["Invalid token"]});if(gZ.Instant.from(X.createdAt.toISOString()).add({hours:24}).until(gZ.Now.instant()).sign>=0)throw new h({token:["Token expired"]});await Z.deletePasswordResetToken({token:z});let G=await Z.findUserByEmailAddress(X.user.email,J.verifyEmail);if(!G)throw new h({email:["User not found"]});let K=await J.hashPassword(Y);return await Z.updateUserPassword({id:G.id,password:K}),await Z.deleteAllUserSessions(G.id),await J.onResetPassword(G),{}}async changePassword($=new C){y1("password");let{userProvider:Z,config:J}=H(b),W=await w0.user(),Y=await $.input(),{oldPassword:j,newPassword:z}=Y.toJSON();if(typeof z!=="string")throw new h({newPassword:["Invalid password"]});let X=await Z.findUserByEmailAddress(W.email,J.verifyEmail);if(!(typeof j==="string"&&await C9(J,j,X?.password)))throw new h({oldPassword:["Incorrect password"]});let G=await J.hashPassword(z);return await Z.updateUserPassword({id:W.id,password:G}),await Z.deleteAllUserSessions(W.id),{}}async oauthRedirect($=new C){let{provider:Z}=$.params,J=H(b).config.oauthProviders,W=Object.hasOwn(J,Z),Y=await VZ(J,Z);if(!Y){if(W)throw new Z0("Not found",{status:404});throw Error(`Invalid provider: ${Z}`)}let j=XZ($.rawRequest),z=X1($.search.get(z1),"");if(z)$.ctx().setCookie(v4,encodeURIComponent(z),{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:600});else rX($);let{state:X,codeChallenge:Q,cookieValue:G}=q4(Z);return $.ctx().setCookie(hZ(j),G,{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:m3}),{destination:await Y.getRedirectUrl($,{state:X,codeChallenge:Q,codeChallengeMethod:"S256"})}}async oauthCallback($=new C){let{provider:Z}=$.params,J=H(b),{userProvider:W,config:Y}=J,j=Object.hasOwn(Y.oauthProviders,Z),z=await VZ(Y.oauthProviders,Z);if(j&&!z)throw new Z0("Not found",{status:404});let X=XZ($.rawRequest),Q=hZ(X),G=$.cookies.get(Q);if(G!==void 0&&G!==null)$.ctx().setCookie(Q,"",{httpOnly:!0,sameSite:"Lax",secure:X,maxAge:-1});if(!z)return this.oauthFailure($,"unknown_provider");let K=$.search.get("error");if(K)return this.oauthFailure($,/^[a-z0-9_]{1,64}$/.test(K)?K:"provider_error");let F=y4({provider:Z,cookieValue:G,returnedState:$.search.get("state")});if("reason"in F)return console.error(`Authentication error: OAuth callback refused (${F.reason})`),this.oauthFailure($,F.reason);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(M){if(M instanceof I9)return this.oauthFailure($,M.code);return console.error("Authentication error: OAuth provider callback failed",M),this.oauthFailure($,"provider_error")}let{name:U,username:V,providerId:O,emailVerified:D}=B??{},L=typeof B?.email==="string"?B.email:void 0,T=L?U6(L):null,P=O?await W.findUserBySocialAccount(Z,O):null,I="signin",A=!P&&!T&&!L&&!!O&&z.createUsersWithoutEmail===!0;if(!P&&A){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{P=await this.createOAuthUserWithoutEmail({provider:Z,providerId:O,name:U,username:V,locale:H(n).detectLocale($)}),I="signup"}catch(M){let _=await W.findUserBySocialAccount(Z,O);if(!_)throw M;P=_}}if(!P){if(!T)return console.error("Authentication error: No usable email returned from OAuth provider callback"),this.oauthFailure($,L?"invalid_email":O?"missing_email":"no_identity");if(D===!1)return console.error("Authentication error: OAuth provider returned an unverified email"),this.oauthFailure($,"email_not_verified");let M=H(n).detectLocale($);try{let _=await this.linkOAuthAccount({provider:Z,providerId:O,email:T,rawEmail:L,name:U,username:V,locale:M,linkExisting:z.linkByEmail!==!1,createUser:z.createUsers!==!1});if(_==="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(_==="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(_)P=_.user,I=_.action}catch(_){let y=O?await W.findUserBySocialAccount(Z,O):null;if(!y)throw _;P=y}if(!P)return this.oauthFailure($,"account_conflict")}let E=await J.createOrUpdateSessionV2({email:P.email,id:P.id});if($.ctx().setCookie("access_token",E.token,H(b).accessTokenCookieOptions($,E.expiresAt)),I==="signup")await Y.onSignUp(P,"",$.search.toJSON());else await Y.onSignIn(P,$.search.toJSON());await u$(J.config,{session:E,user:P,isNewUser:I==="signup",method:"oauth",req:$});let S=tX($)??Y.redirectPath,f=Y.oauthCompleteProfilePath?X1(Y.oauthCompleteProfilePath,""):"";if(f&&!P.email){let M=new URL(f,"http://gemi.invalid");M.searchParams.set(z1,S),S=`${M.pathname}${M.search}${M.hash}`}return{session:E,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:{}}),W})}oauthFailure($,Z){let J=tX($),W=H(b).config.oauthFailurePath;if(W){let Y=X1(W,"");if(Y){let j=new URL(Y,"http://gemi.invalid");if(j.searchParams.set("error",Z),J)j.searchParams.set(z1,J);N1.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:Q,config:G}=H(b),K=(V)=>({provider:Z,userId:V,email:W,username:z,providerId:J,expiresAt:new Date,accessToken:"",refreshToken:""}),F=await Q.findUserByEmailAddress(W,!1),B=Y?.trim();if(!F&&B&&B!==W)F=await Q.findUserByEmailAddress(B,!1);if(F){if($.linkExisting===!1)return"account_exists";if(!J)return{user:F,action:"signin"};let V=await Q.findSocialAccounts(F.id,Z);if(V.some((D)=>D.providerId===J))return{user:F,action:"signin"};if(V.some((D)=>D.providerId))return console.error(`Authentication error: user ${F.id} is already linked to a different ${Z} account`),null;let O=V[0];if(O){if(!await Q.claimSocialAccount(O,J))throw Error(`${Z} account link changed concurrently`)}else await Q.createSocialAccount(K(F.id));return{user:F,action:"signin"}}if($.createUser===!1)return"signup_disabled";return{user:await Q.transaction(async()=>{let V=await Q.createUser({email:W,name:j,locale:X,emailVerifiedAt:new Date});if(J)await Q.createSocialAccount(K(V.id));return await G.onUserCreated(V,{method:"oauth",input:{}}),V}),action:"signup"}}async createMagicLinkToken($=new C){y1("magicLink");let Z=await $.input(),J=z3(Z.get("email")),W=H(b),{uniformMagicLinkResponse:Y,requestLimit:j}=W.config.emailCode;if(await FZ("request",J,$,j),!J)return{email:null};let{user:z,pin:X,token:Q}=await W.createMagicLinkToken(J);if(z)return await W.config.onMagicLinkCreated(z,{email:J,pin:X,token:Q}),{email:J};return{email:Y?J:null}}async requestEmailCode($=new C){let Z=H(b),J=Z.config.emailCode;if(!J.enabled)throw new Z0("Not found",{status:404});let W=await $.input(),Y=U6(W.get("email"));if(await FZ("request",Y,$,J.requestLimit),!Y)throw new h({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 C){let Z=H(b),{userProvider:J,config:W}=Z;if(!W.emailCode.enabled)throw new Z0("Not found",{status:404});let Y=await $.input(),{email:j,code:z,name:X}=Y.toJSON(),Q=U6(j),G=oX(z);if(await FZ("verify",Q,$,W.emailCode.verifyLimit),!Q||!G)throw new h({code:["invalid_code"]});let K=await Z.verifyOneTimeCode(Q,G,{claim:!1});if(K.status==="too_many_attempts")throw new h({code:["too_many_attempts"]});if(K.status!=="ok")throw new h({code:["invalid_code"]});let F=K.row,B=await J.findUserByEmailAddress(Q,!1),U=!1;if(B){if(!await J.claimMagicLinkToken(F.id))throw new h({code:["invalid_code"]});await J.verifyUser(Q)}else if(W.emailCode.createUser){let O=H(n).detectLocale($);try{B=await J.transaction(async()=>{if(!await J.claimMagicLinkToken(F.id))throw new S9;let D=await J.createUser({email:Q,name:typeof X==="string"?X.trim():"",emailVerifiedAt:new Date,locale:O});return await W.onUserCreated(D,{method:"email-code",input:aX(Y.toJSON())}),D}),U=!0}catch(D){if(D instanceof S9)throw new h({code:["invalid_code"]});throw D}}else throw await J.claimMagicLinkToken(F.id),new h({code:["invalid_code"]});let V=await Z.createOrUpdateSessionV2({email:Q,id:B.id});return $.ctx().setCookie("access_token",V.token,H(b).accessTokenCookieOptions($,V.expiresAt)),await W.onSignIn(V,$.search.toJSON()),await u$(Z.config,{session:V,isNewUser:U,method:"email-code",req:$}),{session:V,isNewUser:U}}}function GO($){try{let Z=$?.id;if(Z===void 0||Z===null)return;let J=H();if(typeof J?.bound!=="function"||!J.bound(p0))return;J.make(p0).revoke({user:{id:Z}})}catch(Z){console.error("[gemi] Revoking the signed-out user's sockets failed:",Z)}}var ZQ="gemi_oauth_connection";class g4 extends Y3{async connect($=new C){let Z=String($.params.provider??""),W=H(h3).providers[Z],Y=await w0.user(),j=X1($.search.get(z1),"");if(!W)return this.finish(j,Z,"unknown_provider");let z=XZ($.rawRequest),{state:X,codeChallenge:Q,cookieValue:G}=q4(JQ(Z),Date.now(),{subject:String(Y.id),...j?{returnTo:j}:{}});return $.ctx().setCookie(hZ(z,ZQ),G,{httpOnly:!0,sameSite:"Lax",secure:z,maxAge:m3}),N1.external(W.authorizationUrl({state:X,codeChallenge:Q,redirectUri:WQ($,Z,W.config.redirectUri)})),{destination:"/"}}async callback($=new C){let Z=String($.params.provider??""),J=H(h3),W=await w0.user(),Y=XZ($.rawRequest),j=hZ(Y,ZQ),z=$.cookies.get(j);if(z!==void 0&&z!==null)$.ctx().setCookie(j,"",{httpOnly:!0,sameSite:"Lax",secure:Y,maxAge:-1});let X=y4({provider:JQ(Z),cookieValue:z,returnedState:$.search.get("state")}),Q="payload"in X?X.payload.returnTo??"":"",G=J.providers[Z];if(!G)return this.finish(Q,Z,"unknown_provider");let K=$.search.get("error");if(K)return this.finish(Q,Z,/^[a-z0-9_]{1,64}$/.test(K)?K:"provider_error");if("reason"in X)return console.error(`OAuth connection refused (${X.reason})`),this.finish(Q,Z,X.reason);if(X.payload.subject!==String(W.id))return this.finish(Q,Z,"user_mismatch");let F=$.search.get("code");if(!F)return this.finish(Q,Z,"missing_code");try{let B=await G.exchangeCode({code:F,codeVerifier:X.payload.codeVerifier,redirectUri:WQ($,Z,G.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 YQ)return console.error(`OAuth connection to ${Z} failed: ${B.message}`),this.finish(Q,Z,B.providerError??B.code);throw B}return this.finish(Q,Z)}finish($,Z,J){let W=$||X1(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 N1.external(`${Y.pathname}${Y.search}${Y.hash}`),Error("unreachable: Redirect.external throws")}}function JQ($){return`connection:${$}`}function WQ($,Z,J){if(J)return J;return`${l$()??new URL($.rawRequest.url).origin}/auth/connections/${encodeURIComponent(Z)}/callback`}class jQ extends I1{middlewares=["cache:private"];routes={"/:provider":this.view("_Redirect",[a,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[a,"oauthCallback"])}}class zQ extends I1{middlewares=["cache:private"];routes={"/:provider":this.redirect([g4,"connect"]).middleware(["auth"]),"/:provider/callback":this.redirect([g4,"callback"]).middleware([j6,"auth"])}}class b9 extends I1{middlewares=["cache:private"];routes={"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[a,"signInWithMagicLink"]),"/oauth":jQ,"/connections":zQ}}class R9 extends I0{middlewares=["cache:private"];routes={"/sign-in":this.post(a,"signIn"),"/sign-in-v2":this.post(a,"signInV2"),"/sign-up":this.post(a,"signUp"),"/sign-out":this.post(a,"signOut"),"/forgot-password":this.post(a,"forgotPassword"),"/reset-password":this.post(a,"resetPassword"),"/change-password":this.post(a,"changePassword"),"/verify-email":this.post(a,"verifyEmail"),"/me":this.get(a,"me").middleware(["auth"]),"/magic-link":this.post(a,"createMagicLinkToken"),"/sign-in-with-pin":this.post(a,"signInWithPin"),"/sign-in-with-pin-v2":this.post(a,"signInWithPinV2"),"/email-code":this.post(a,"requestEmailCode"),"/email-code/verify":this.post(a,"verifyEmailCode")}}class f9 extends I0{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(async()=>{let Z=new C().params.locale;return await H(n).onLocaleChange(Z),{locale:Z}}),"/translations/:locale/:scope*":this.get(async()=>{let $=new C,Z=`/${$.params.scope??""}`,J=$.params.locale,W=H(n),Y=J??W.detectLocale($),j=W.getPageTranslations(Y,Z);return $.ctx().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000)}),{[Y]:j}})}}class k9{}class w9 extends k9{async resize($,Z){let{height:J,width:W,quality:Y,fit:j}=Z;return await(await m4("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 FN($){return $}function XQ(){return{driver:new w9,allowedHosts:[],maxSize:10485760,timeout:1e4}}class Q0 extends Error{status;constructor($,Z,J){super(Z,J);this.status=$;this.name="ImageSourceError"}}var KO=new Set([301,302,303,307,308]),BO="/api/__gemi__/services/image/";async function GQ($,Z){let J=Z.maxRedirects??5,W=AbortSignal.timeout(Z.timeout),Y=Z.ownOrigins[0]??Z.localOrigin,j=QQ($,Y);try{for(let z=0;;z++){let X=await FO(j,Z,W),Q=X.headers.get("location");if(KO.has(X.status)&&Q){if(await X.body?.cancel().catch(()=>{}),z>=J)throw new Q0(502,"The image redirects too many times");j=QQ(Q,j.href);continue}if(!X.ok)throw await X.body?.cancel().catch(()=>{}),new Q0(404,"Image not found");if(!X.headers.get("content-type")?.split(";")[0].trim().toLowerCase()?.startsWith("image/"))throw await X.body?.cancel().catch(()=>{}),new Q0(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 UO(z,W)}}function QQ($,Z){let J;try{J=new URL($,Z)}catch{throw new Q0(400,"The url parameter is not a URL")}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new Q0(400,"Only http(s) images can be resized");return J}async function FO($,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(BO))throw new Q0(403,"This image source is not allowed");if(VO($.pathname))throw new Q0(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 _1(z,{...W,allowPrivate:!0,ports:"any"});Y=z}if(Z.allowedHosts.length===0)throw new Q0(403,"This image source is not allowed");return _1(Y,{...Z.external,...W,allow:Z.allowedHosts})}function VO($){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 UO($,Z){if($ instanceof Q0)return $;if(Z.aborted)return new Q0(504,"The image took too long to load",{cause:$});if($ instanceof X6)switch($.code){case"blocked-host":case"blocked-address":case"invalid-url":return new Q0(403,"This image source is not allowed",{cause:$});case"too-large":return new Q0(413,"The image is too large",{cause:$});case"timeout":return new Q0(504,"The image took too long to load",{cause:$})}return new Q0(502,"The image could not be loaded",{cause:$})}class q9 extends I0{routes={"/resize":this.file(async()=>{let $=new C,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 KQ(400,"url query parameter is required");let X=H(BQ),Q=[Z.origin,`${Z.protocol==="https:"?"http":"https"}://${Z.host}`],G=l$();if(G&&URL.canParse(G))Q.push(new URL(G).origin);let K;try{K=await GQ(J,{ownOrigins:Q,localOrigin:`http://localhost:${process.env.PORT||5173}`,allowedHosts:X.allowedHosts,maxSize:X.maxSize,timeout:X.timeout})}catch(U){if(U instanceof Q0)return KQ(U.status,U.message);throw U}let F=await X.resize(K.bytes,{height:Y,width:W,fit:j,quality:z}),B=new Headers({"Content-Type":"image/webp","Content-Length":`${F.byteLength}`});if(K.cacheControl)B.set("Cache-Control",K.cacheControl);return new Response(new Uint8Array(F),{headers:B})})}}function KQ($,Z){return Response.json({error:Z},{status:$})}class BQ{static token="image";driver;allowedHosts;maxSize;timeout;constructor($={}){let Z=XQ();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 y9 extends I0{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let $=Bun.file(H(FQ).currentLogFilePath);return new Response(await $.text(),{headers:{"Content-Type":"text/plain"}})})}}function AN($){return $}function VQ(){return{onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{}}}function UQ(){return{partialRendering:!0,localeRouting:"prefix",theme:{},onNotFound:()=>{},onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{},onStreamComplete:()=>{}}}function OO($){return"run"in $}function DO($){return Object.hasOwn($,"get")||Object.hasOwn($,"post")||Object.hasOwn($,"put")||Object.hasOwn($,"patch")||Object.hasOwn($,"delete")}function LO($){return Object.hasOwn($,"first")&&Object.hasOwn($,"second")}function HO($){if("__brand"in $)return $.__brand==="ApiRouter";return!1}function MO($){if("__internal_brand"in $)return $.__internal_brand==="ProxyHandler";return!1}function OQ($){if("__internal_brand"in $)return $.__internal_brand==="StreamHandler";return!1}function PO($){let Z=$.replace(/(?<!:\w*)\([\w-]+\)/g,"");if(Z===$)return $;let J=`/${Z}`.replace(/\/{2,}/g,"/");return J.length>1?J.replace(/\/$/,""):J}function v9($,Z="",J=[]){let W={};function Y(j,z,X,Q,G){let K=j==="/"?"":j,F=Z==="/"?"":Z,B=PO((`${F}${K}`===""?"/":`${F}${K}`).replaceAll("//","/"));if(!W[B])W[B]={};W[B][z.toUpperCase()]={exec:X,middleware:[...J,...Q],...G?{source:G}:{}},W[B].OPTIONS={exec:()=>{let V=new C().ctx().headers;return new Response(null,{headers:V,status:204})},middleware:[]}}for(let[j,z]of Object.entries($)){if(MO(z)){let X=z;for(let Q of["GET","POST","PUT","DELETE"])Y(j,Q,X.run.bind(X),X.middlewares);continue}if(OO(z)){let X=z,Q=X.method,G=X.middlewares,K=X.run.bind(X);if(Y(j,Q,K,G,X.source),OQ(z))Y(j,"HEAD",K,G,X.source)}if(DO(z))for(let[X,Q]of Object.entries(z)){let G=Q,K=G.middlewares,F=G.run.bind(G);if(Y(j,X,F,K,G.source),X==="get"&&OQ(G))Y(j,"HEAD",F,K,G.source)}if(HO(z)){let X=new z,Q=v9(X.routes,`${Z}${j}`,[...J,...X.middlewares]);for(let[G,K]of Object.entries(Q)){let F=G.replaceAll("//","/");W[F]={...W[F],...K}}}if(LO(z)){let{first:X,second:Q}=z;for(let[G,K]of Object.entries(X)){let F=K.middlewares,B=K.run.bind(K),[U,...V]=j.split("/").reverse();if(!U.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Y(V.reverse().join("/"),G,B,F,K.source)}for(let[G,K]of Object.entries(Q)){let F=K.middlewares,B=K.run.bind(K);Y(j,G,B,F,K.source)}}}return Object.fromEntries(Object.entries(W).sort(([j],[z])=>{let X=j.split("/").length+j.split(":").length,Q=z.split("/").length+z.split(":").length;return X-Q}))}function h4($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function g9($,Z){if($==="/")return Z;if(Z==="/")return $;return`${$}${Z}`}function m9($){let Z=h4($);return Z.length>1?Z.replace(/\/$/,""):Z}function DQ($,Z){return Z.map((J)=>({...J,path:m9(g9($,J.path))}))}function p4($){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=p4(j.routes);for(let[X,{exec:Q,middleware:G,segments:K,features:F,static:B}]of Object.entries(z)){let U=g9(J,X),V=(O)=>Y.run.call(Y,O,J);Z[h4(U)]={exec:[V,...Q],middleware:[...Y.middlewares,...G],features:[...Y.featureGates,...F],viewPath:Y.viewPath,segments:[{path:m9(J),viewPath:Y.viewPath,...Y.alwaysRuns?{alwaysRun:!0}:{}},...DQ(J,K)],...B?{static:B}:{}}}}else{let j=(z)=>Y.run.call(Y,z,J);Z[h4(J)]={exec:[j],middleware:Y.middlewares,features:Y.featureGates,viewPath:Y.viewPath,segments:[{path:m9(J),viewPath:Y.viewPath}],..."staticOptions"in Y&&Y.staticOptions?{static:Y.staticOptions}:{}}}}else{let Y=new W,j=p4(Y.routes);for(let[z,{exec:X,middleware:Q,viewPath:G,segments:K,features:F,static:B}]of Object.entries(j)){let U=g9(J,z);Z[h4(U)]={exec:X,middleware:[...Y.middlewares,...Q],features:[...Y.featureGates,...F],viewPath:G,segments:DQ(J,K),...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 h9="theme";function LQ($){return $==="light"||$==="dark"||$==="system"}function HQ($){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 TO=Object.defineProperty,x=($,Z)=>TO($,"name",{value:Z,configurable:!0}),dZ=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"}};x(dZ,"Part");var NO=/[$_\p{ID_Start}]/u,IO=/[$_\u200C\u200D\p{ID_Continue}]/u,c9=".*";function MQ($,Z){return(Z?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test($)}x(MQ,"isASCII");function l9($,Z=!1){let J=[],W=0;for(;W<$.length;){let Y=$[W],j=x(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 Q=$.substr(X,1);if(X===W+1&&NO.test(Q)||X!==W+1&&IO.test(Q)){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="",Q=W+1,G=!1;if($[Q]==="?"){j(`Pattern cannot start with "?" at ${Q}`);continue}for(;Q<$.length;){if(!MQ($[Q],!1)){j(`Invalid character '${$[Q]}' at ${Q}.`),G=!0;break}if($[Q]==="\\"){X+=$[Q++]+$[Q++];continue}if($[Q]===")"){if(z--,z===0){Q++;break}}else if($[Q]==="("&&(z++,$[Q+1]!=="?")){j(`Capturing groups are not allowed at ${Q}`),G=!0;break}X+=$[Q++]}if(G)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=Q;continue}J.push({type:"CHAR",index:W,value:$[W++]})}return J.push({type:"END",index:W,value:""}),J}x(l9,"lexer");function i9($,Z={}){let J=l9($);Z.delimiter??="/#?",Z.prefixes??="./";let W=`[^${c0(Z.delimiter)}]+?`,Y=[],j=0,z=0,X="",Q=new Set,G=x((P)=>{if(z<J.length&&J[z].type===P)return J[z++].value},"tryConsume"),K=x(()=>G("OTHER_MODIFIER")??G("ASTERISK"),"tryConsumeModifier"),F=x((P)=>{let I=G(P);if(I!==void 0)return I;let{type:A,index:E}=J[z];throw TypeError(`Unexpected ${A} at ${E}, expected ${P}`)},"mustConsume"),B=x(()=>{let P="",I;for(;I=G("CHAR")??G("ESCAPED_CHAR");)P+=I;return P},"consumeText"),U=x((P)=>P,"DefaultEncodePart"),V=Z.encodePart||U,O="",D=x((P)=>{O+=P},"appendToPendingFixedValue"),L=x(()=>{O.length&&(Y.push(new dZ(3,"","",V(O),"",3)),O="")},"maybeAddPartFromPendingFixedValue"),T=x((P,I,A,E,S)=>{let f=3;switch(S){case"?":f=1;break;case"*":f=0;break;case"+":f=2;break}if(!I&&!A&&f===3){D(P);return}if(L(),!I&&!A){if(!P)return;Y.push(new dZ(3,"","",V(P),"",f));return}let M;A?A==="*"?M=c9:M=A:M=W;let _=2;M===W?(_=1,M=""):M===c9&&(_=0,M="");let y;if(I?y=I:A&&(y=j++),Q.has(y))throw TypeError(`Duplicate name '${y}'.`);Q.add(y),Y.push(new dZ(_,y,V(P),M,V(E),f))},"addPart");for(;z<J.length;){let P=G("CHAR"),I=G("NAME"),A=G("REGEX");if(!I&&!A&&(A=G("ASTERISK")),I||A){let S=P??"";Z.prefixes.indexOf(S)===-1&&(D(S),S=""),L();let f=K();T(S,I,A,"",f);continue}let E=P??G("ESCAPED_CHAR");if(E){D(E);continue}if(G("OPEN")){let S=B(),f=G("NAME"),M=G("REGEX");!f&&!M&&(M=G("ASTERISK"));let _=B();F("CLOSE");let y=K();T(S,f,M,_,y);continue}L(),F("END")}return Y}x(i9,"parse");function c0($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}x(c0,"escapeString");function d9($){return $&&$.ignoreCase?"ui":"u"}x(d9,"flags");function PQ($,Z,J){return s9(i9($,J),Z,J)}x(PQ,"stringToRegexp");function i$($){switch($){case 0:return"*";case 1:return"?";case 2:return"+";case 3:return""}}x(i$,"modifierToString");function s9($,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)})${i$(X.modifier)}`;continue}Z&&Z.push(X.name);let Q=`[^${c0(J.delimiter)}]+?`,G=X.value;if(X.type===1?G=Q:X.type===0&&(G=c9),!X.prefix.length&&!X.suffix.length){X.modifier===3||X.modifier===1?W+=`(${G})${i$(X.modifier)}`:W+=`((?:${G})${i$(X.modifier)})`;continue}if(X.modifier===3||X.modifier===1){W+=`(?:${c0(X.prefix)}(${G})${c0(X.suffix)})`,W+=i$(X.modifier);continue}W+=`(?:${c0(X.prefix)}`,W+=`((?:${G})(?:`,W+=c0(X.suffix),W+=c0(X.prefix),W+=`(?:${G}))*)${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,d9(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,d9(J))}x(s9,"partsToRegexp");var D$={delimiter:"",prefixes:"",sensitive:!0,strict:!0},_O={delimiter:".",prefixes:"",sensitive:!0,strict:!0},xO={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function TQ($,Z){return $.length?$[0]==="/"?!0:!Z||$.length<2?!1:($[0]=="\\"||$[0]=="{")&&$[1]=="/":!1}x(TQ,"isAbsolutePathname");function n9($,Z){return $.startsWith(Z)?$.substring(Z.length,$.length):$}x(n9,"maybeStripPrefix");function NQ($,Z){return $.endsWith(Z)?$.substr(0,$.length-Z.length):$}x(NQ,"maybeStripSuffix");function o9($){return!$||$.length<2?!1:$[0]==="["||($[0]==="\\"||$[0]==="{")&&$[1]==="["}x(o9,"treatAsIPv6Hostname");var IQ=["ftp","file","http","https","ws","wss"];function a9($){if(!$)return!0;for(let Z of IQ)if($.test(Z))return!0;return!1}x(a9,"isSpecialScheme");function _Q($,Z){if($=n9($,"#"),Z||$==="")return $;let J=new URL("https://example.com");return J.hash=$,J.hash?J.hash.substring(1,J.hash.length):""}x(_Q,"canonicalizeHash");function xQ($,Z){if($=n9($,"?"),Z||$==="")return $;let J=new URL("https://example.com");return J.search=$,J.search?J.search.substring(1,J.search.length):""}x(xQ,"canonicalizeSearch");function CQ($,Z){return Z||$===""?$:o9($)?e9($):r9($)}x(CQ,"canonicalizeHostname");function AQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.password=$,J.password}x(AQ,"canonicalizePassword");function SQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.username=$,J.username}x(SQ,"canonicalizeUsername");function EQ($,Z,J){if(J||$==="")return $;if(Z&&!IQ.includes(Z))return new URL(`${Z}:${$}`).pathname;let W=$[0]=="/";return $=new URL(W?$:"/-"+$,"https://example.com").pathname,W||($=$.substring(2,$.length)),$}x(EQ,"canonicalizePathname");function bQ($,Z,J){return t9(Z)===$&&($=""),J||$===""?$:$J($)}x(bQ,"canonicalizePort");function RQ($,Z){return $=NQ($,":"),Z||$===""?$:c4($)}x(RQ,"canonicalizeProtocol");function t9($){switch($){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}x(t9,"defaultPortForProtocol");function c4($){if($==="")return $;if(/^[-+.A-Za-z0-9]*$/.test($))return $.toLowerCase();throw TypeError(`Invalid protocol '${$}'.`)}x(c4,"protocolEncodeCallback");function fQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.username=$,Z.username}x(fQ,"usernameEncodeCallback");function kQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.password=$,Z.password}x(kQ,"passwordEncodeCallback");function r9($){if($==="")return $;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test($))throw TypeError(`Invalid hostname '${$}'`);let Z=new URL("https://example.com");return Z.hostname=$,Z.hostname}x(r9,"hostnameEncodeCallback");function e9($){if($==="")return $;if(/[^0-9a-fA-F[\]:]/g.test($))throw TypeError(`Invalid IPv6 hostname '${$}'`);return $.toLowerCase()}x(e9,"ipv6HostnameEncodeCallback");function $J($){if($===""||/^[0-9]*$/.test($)&&parseInt($)<=65535)return $;throw TypeError(`Invalid port '${$}'.`)}x($J,"portEncodeCallback");function wQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.pathname=$[0]!=="/"?"/-"+$:$,$[0]!=="/"?Z.pathname.substring(2,Z.pathname.length):Z.pathname}x(wQ,"standardURLPathnameEncodeCallback");function qQ($){return $===""?$:new URL(`data:${$}`).pathname}x(qQ,"pathURLPathnameEncodeCallback");function yQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.search=$,Z.search.substring(1,Z.search.length)}x(yQ,"searchEncodeCallback");function vQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.hash=$,Z.hash.substring(1,Z.hash.length)}x(vQ,"hashEncodeCallback");var gQ=class{#j;#W=[];#Z={};#$=0;#Y=1;#G=0;#X=0;#V=0;#U=0;#O=!1;constructor($){this.#j=$}get result(){return this.#Z}parse(){for(this.#W=l9(this.#j,!0);this.#$<this.#W.length;this.#$+=this.#Y){if(this.#Y=1,this.#W[this.#$].type==="END"){if(this.#X===0){this.#M(),this.#K()?this.#J(9,1):this.#B()?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.#V>0)if(this.#C())this.#V-=1;else continue;if(this.#x()){this.#V+=1;continue}switch(this.#X){case 0:this.#P()&&this.#F(1);break;case 1:if(this.#P()){this.#E();let $=7,Z=1;this.#N()?($=2,Z=3):this.#O&&($=2),this.#J($,Z)}break;case 2:this.#L()?this.#F(3):(this.#H()||this.#B()||this.#K())&&this.#F(5);break;case 3:this.#I()?this.#J(4,1):this.#L()&&this.#J(5,1);break;case 4:this.#L()&&this.#J(5,1);break;case 5:this.#A()?this.#U+=1:this.#S()&&(this.#U-=1),this.#_()&&!this.#U?this.#J(6,1):this.#H()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 6:this.#H()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 7:this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 8:this.#K()&&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.#Q();break;case 2:break;case 3:this.#Z.username=this.#Q();break;case 4:this.#Z.password=this.#Q();break;case 5:this.#Z.hostname=this.#Q();break;case 6:this.#Z.port=this.#Q();break;case 7:this.#Z.pathname=this.#Q();break;case 8:this.#Z.search=this.#Q();break;case 9:this.#Z.hash=this.#Q();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.#O?"/":""),[1,2,3,4,5,6,7].includes(this.#X)&&$===9&&(this.#Z.search??="")),this.#T($,Z)}#T($,Z){this.#X=$,this.#G=this.#$+Z,this.#$+=Z,this.#Y=0}#M(){this.#$=this.#G,this.#Y=0}#F($){this.#M(),this.#X=$}#D($){return $<0&&($=this.#W.length-$),$<this.#W.length?this.#W[$]:this.#W[this.#W.length-1]}#z($,Z){let J=this.#D($);return J.value===Z&&(J.type==="CHAR"||J.type==="ESCAPED_CHAR"||J.type==="INVALID_CHAR")}#P(){return this.#z(this.#$,":")}#N(){return this.#z(this.#$+1,"/")&&this.#z(this.#$+2,"/")}#L(){return this.#z(this.#$,"@")}#I(){return this.#z(this.#$,":")}#_(){return this.#z(this.#$,":")}#H(){return this.#z(this.#$,"/")}#B(){if(this.#z(this.#$,"?"))return!0;if(this.#W[this.#$].value!=="?")return!1;let $=this.#D(this.#$-1);return $.type!=="NAME"&&$.type!=="REGEX"&&$.type!=="CLOSE"&&$.type!=="ASTERISK"}#K(){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.#$,"]")}#Q(){let $=this.#W[this.#$],Z=this.#D(this.#G).index;return this.#j.substring(Z,$.index)}#E(){let $={};Object.assign($,D$),$.encodePart=c4;let Z=PQ(this.#Q(),void 0,$);this.#O=a9(Z)}};x(gQ,"Parser");var p9=["protocol","username","password","hostname","port","pathname","search","hash"],O$="*";function u9($,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}}x(u9,"extractValues");function H1($,Z){return Z?cZ($):$}x(H1,"processBaseURLString");function pZ($,Z,J){let W;if(typeof Z.baseURL=="string")try{W=new URL(Z.baseURL),Z.protocol===void 0&&($.protocol=H1(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=H1(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=H1(W.password,J)),Z.protocol===void 0&&Z.hostname===void 0&&($.hostname=H1(W.hostname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&($.port=H1(W.port,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&($.pathname=H1(W.pathname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&Z.search===void 0&&($.search=H1(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=H1(W.hash.substring(1,W.hash.length),J))}catch{throw TypeError(`invalid baseURL '${Z.baseURL}'.`)}if(typeof Z.protocol=="string"&&($.protocol=RQ(Z.protocol,J)),typeof Z.username=="string"&&($.username=SQ(Z.username,J)),typeof Z.password=="string"&&($.password=AQ(Z.password,J)),typeof Z.hostname=="string"&&($.hostname=CQ(Z.hostname,J)),typeof Z.port=="string"&&($.port=bQ(Z.port,$.protocol,J)),typeof Z.pathname=="string"){if($.pathname=Z.pathname,W&&!TQ($.pathname,J)){let Y=W.pathname.lastIndexOf("/");Y>=0&&($.pathname=H1(W.pathname.substring(0,Y+1),J)+$.pathname)}$.pathname=EQ($.pathname,$.protocol,J)}return typeof Z.search=="string"&&($.search=xQ(Z.search,J)),typeof Z.hash=="string"&&($.hash=_Q(Z.hash,J)),$}x(pZ,"applyInit");function cZ($){return $.replace(/([+*?:{}()\\])/g,"\\$1")}x(cZ,"escapePatternString");function mQ($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}x(mQ,"escapeRegexpString");function hQ($,Z){Z.delimiter??="/#?",Z.prefixes??="./",Z.sensitive??=!1,Z.strict??=!1,Z.end??=!0,Z.start??=!0,Z.endsWith="";let J=".*",W=`[^${mQ(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+=cZ(X.value);continue}j+=`{${cZ(X.value)}}${i$(X.modifier)}`;continue}let Q=X.hasCustomName(),G=!!X.suffix.length||!!X.prefix.length&&(X.prefix.length!==1||!Z.prefixes.includes(X.prefix)),K=z>0?$[z-1]:null,F=z<$.length-1?$[z+1]:null;if(!G&&Q&&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]:"";G=Y.test(B)}else G=!F.hasCustomName();if(!G&&!X.prefix.length&&K&&K.type===3){let B=K.value[K.value.length-1];G=Z.prefixes.includes(B)}G&&(j+="{"),j+=cZ(X.prefix),Q&&(j+=`:${X.name}`),X.type===2?j+=`(${X.value})`:X.type===1?Q||(j+=`(${W})`):X.type===0&&(!Q&&(!K||K.type===3||K.modifier!==3||G||X.prefix!=="")?j+="*":j+=`(${J})`),X.type===1&&Q&&X.suffix.length&&Y.test(X.suffix[0])&&(j+="\\"),j+=cZ(X.suffix),G&&(j+="}"),X.modifier!==3&&(j+=i$(X.modifier))}return j}x(hQ,"partsToPattern");var ZJ=class{#j;#W={};#Z={};#$={};#Y={};#G=!1;constructor($={},Z,J){try{let W;if(typeof Z=="string"?W=Z:J=Z,typeof $=="string"){let X=new gQ($);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:O$,protocol:O$,username:O$,password:O$,hostname:O$,port:O$,search:O$,hash:O$};this.#j=pZ(j,$,!0),t9(this.#j.protocol)===this.#j.port&&(this.#j.port="");let z;for(z of p9){if(!(z in this.#j))continue;let X={},Q=this.#j[z];switch(this.#Z[z]=[],z){case"protocol":Object.assign(X,D$),X.encodePart=c4;break;case"username":Object.assign(X,D$),X.encodePart=fQ;break;case"password":Object.assign(X,D$),X.encodePart=kQ;break;case"hostname":Object.assign(X,_O),o9(Q)?X.encodePart=e9:X.encodePart=r9;break;case"port":Object.assign(X,D$),X.encodePart=$J;break;case"pathname":a9(this.#W.protocol)?(Object.assign(X,xO,Y),X.encodePart=wQ):(Object.assign(X,D$,Y),X.encodePart=qQ);break;case"search":Object.assign(X,D$,Y),X.encodePart=yQ;break;case"hash":Object.assign(X,D$,Y),X.encodePart=vQ;break}try{this.#Y[z]=i9(Q,X),this.#W[z]=s9(this.#Y[z],this.#Z[z],X),this.#$[z]=hQ(this.#Y[z],X),this.#G=this.#G||this.#Y[z].some((G)=>G.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=pZ(J,$,!1):J=pZ(J,u9($,Z),!1)}catch{return!1}let W;for(W of p9)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=pZ(J,$,!1):J=pZ(J,u9($,Z),!1)}catch{return null}let W={};Z?W.inputs=[$,Z]:W.inputs=[$];let Y;for(Y of p9){let j=this.#W[Y].exec(J[Y]);if(!j)return null;let z={};for(let[X,Q]of this.#Z[Y].entries())if(typeof Q=="string"||typeof Q=="number"){let G=j[X+1];z[Q]=G}W[Y]={input:J[Y]??"",groups:z}}return W}static compareComponent($,Z,J){let W=x((X,Q)=>{for(let G of["type","modifier","prefix","value","suffix"]){if(X[G]<Q[G])return-1;if(X[G]===Q[G])continue;return 1}return 0},"comparePart"),Y=new dZ(3,"","","","",3),j=new dZ(0,"","","","",3),z=x((X,Q)=>{let G=0;for(;G<Math.min(X.length,Q.length);++G){let K=W(X[G],Q[G]);if(K)return K}return X.length===Q.length?0:W(X[G]??Y,Q[G]??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.#G}};x(ZJ,"URLPattern");function p3($,Z){for(let[J,W]of Object.entries($)){let Y=new ZJ({pathname:J});if(Y.test({pathname:Z}))return{routePath:J,params:Y.exec({pathname:Z})?.pathname.groups??{},route:W}}return null}var s$={startIndex:0,carriedViews:[]};function pQ($,Z){let J=B0($.path,Z);return J.includes("*")?null:J}function CO($,Z){if(!$)return s$;if($.search!==Z.search)return s$;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=pQ(Y,$.params),X=pQ(j,Z.params);if(z===null||X===null||z!==X)break;W++}if(W===0)return s$;return{startIndex:W,carriedViews:Z.segments.slice(0,W).map(({viewPath:Y})=>Y)}}function AO($,Z){let[,J,...W]=$.split("/");if(!Z.includes(J))return $;let Y=`/${W.join("/")}`;return Y==="/"?"/":Y.replace(/\/$/,"")}function cQ($){let{flatViewRoutes:Z,supportedLocales:J,from:W,origin:Y,to:j}=$;if(!W)return s$;let z;try{z=new URL(W,Y)}catch{return s$}if(z.origin!==Y)return s$;let X=p3(Z,AO(z.pathname,J));if(!X)return s$;return CO({segments:X.route.segments,params:X.params,search:z.search},j)}var JJ="x-gemi-from";import{createElement as g1,Fragment as QG}from"react";function SO($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function d4($){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=d4(j.routes);for(let[X,Q]of Object.entries(z)){let G=J==="/"?X:`${J}${X}`,K=X==="/"&&J!=="/"?J:G;Z[K]=[Y,...Q]}if(Z[J].length===1)delete Z[J]}else Z[J]=[Y]}else{let Y=new W,j=d4(Y.routes);for(let[z,X]of Object.entries(j)){let Q=J==="/"?z:`${J}${z}`,G=z==="/"&&J!=="/"?J:Q;Z[G]=X}}return Object.fromEntries(Object.entries(Z).map(([J,W])=>[SO(J),W]))}function u4($,Z){let[J,W]=Z,Y=$.find(([j])=>j===J);if(!Y){$.push([J,[...W]]);return}for(let j of W)u4(Y[1],j)}function l4($){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=l4(j.routes);u4(Z,[Y,z])}else u4(Z,[Y,[]])}else{let Y=new W,j=l4(Y.routes);for(let z of j)u4(Z,z)}return Z}function WJ($){let Z=[];for(let[J,W]of $)Z.push(J,...WJ(W).flat());return Array.from(new Set(Z))}function dQ($,Z){let[,J,...W]=$.split("/");if(J===void 0||!Z.includes(J))return{locale:null,pathname:$||"/"};return{locale:J,pathname:`/${W.join("/")}`}}class L$ extends g{static getFacadeAccessor(){return n}static getSupportedLocales(){return this.getFacadeRoot().supportedLocales}static getDefaultLocale(){return this.getFacadeRoot().defaultLocale}static locale(){let $=this.getFacadeRoot(),Z=N.getStore();if(Z)return Z.locale??$.detectLocale(Z.req);return $.defaultLocale}static timeZone(){return this.getFacadeRoot().detectTimeZone(N.getStore()?.req)}static formatter($={}){return this.getFacadeRoot().formatter($.locale??L$.locale(),$.timeZone??L$.timeZone())}static setLocale($=L$.locale(),Z={}){let J=this.getFacadeRoot(),W=$;if(!J.supportedLocales.includes($))W=J.defaultLocale;let Y=N.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 YJ{id;static token="kernel.id";constructor($=crypto.randomUUID()){this.id=$}}function uQ($){return Object.fromEntries(Object.entries($).filter(([,Z])=>{return Z!==null&&Z!==void 0}))}var EO=50;class uZ{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.`)}read($,Z){return this.entries.get(this.keyFor($,Z))}ensure($,Z={},J="render"){let W=Z.params??{},Y=new URLSearchParams(uQ(Z.search??{}));Y.delete("json"),Y.sort();let j=B0($,W),z=Y.toString(),X=this.keyFor(j,z),Q=this.entries.get(X);if(Q)return Q;let G;if(J==="render"&&this.renderStartedAt!==null){let U=Math.round(performance.now()-this.renderStartedAt);if(U>EO)G=U}let K,F=new Promise((U)=>{K=U}),B={path:j,patternPath:$,variantKey:z,lateBy:G,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);K()}),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 v1 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 lZ(){let $=JSON.stringify({error:o1("permission","Forbidden",403)});return new Response($,{status:403,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}function jJ(){return{status:403,error:{message:"Forbidden"}}}function c3($){let Z=iZ.getStore();return(J,W,Y)=>{let j=new URL($.url).origin,z=[B0(J,W),Y.toString()].filter((K)=>K.length>0).join("?"),X=new Request(`${j}/${z}`,{headers:$.headers,signal:$.signal}),Q=lQ($);if(Q)sZ(X,Q);let G=new C(X,W);return iZ.run(Z,()=>N.run(G,async()=>{try{let K=H(Y1).dispatchers(Q).api,F=await K.runRouteMiddleware(J,G)??await K.getRouteData(J);if(u1(F)){if(!F.ok)throw new v1(B0(J,W),Y.toString(),F.status,F.body);return F.body}if(F instanceof Response){let B=await F.json().catch(()=>null);if(!F.ok)throw new v1(B0(J,W),Y.toString(),F.status,B);return B}return F}catch(K){if(K instanceof v1)throw K;let F=new v1(B0(J,W),Y.toString(),500,{message:K instanceof Error?K.message:String(K)});throw F.cause=K,F}}))}}var bO=new Set(["script","style","template","title"]),RO=/\shidden([\s=/]|$)/i,fO=/"[^"]*"|'[^']*'/g;function kO($){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 Q=$.slice(j+1,X);Y=X+1;let G=/^\/?([a-zA-Z][a-zA-Z0-9-]*)/.exec(Q)?.[1]?.toLowerCase();if(!G)continue;let K=Q.startsWith("/");if(!K&&bO.has(G)&&!Q.endsWith("/")){let F=$.indexOf(`</${G}`,Y);Y=F===-1?$.length:F;continue}if(G!=="div")continue;if(K){if(W>0)W-=1}else if(W>0)W+=1;else if(RO.test(Q.replace(fO,'""')))W=1}return{shellChars:Z,deferredChars:J}}var wO=1000,qO=64;function yO($){return $>=1000?`${($/1000).toFixed(1)} kB`:`${$} chars`}function vO($,Z){if(Z.deferredChars<wO)return null;if(Z.shellChars>=qO)return null;return`[gemi] GET ${$} streams ${yO(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 iQ($=console.warn){let Z=new Set;return{shouldObserve(J){return!Z.has(J)},report(J,W){if(Z.has(J))return;let Y=vO(J,W);if(!Y)return;Z.add(J),$(Y)}}}function sQ(){let $=new TextDecoder,Z="";return{onChunk(J){Z+=$.decode(J,{stream:!0})},measure(){return Z+=$.decode(),kO(Z)}}}function nQ($,Z,J=1e4,W){let Y=new TextEncoder,j=()=>{};return new ReadableStream({start(z){let X=!1,Q=(K)=>{if(X)return;X=!0,clearTimeout(G);try{z.close()}catch{}W?.({aborted:K})};j=Q,z.enqueue(Y.encode(`${JSON.stringify($)}
|
|
20
|
-
`)),Z.onSettle((K)=>{if(X||K.status!=="resolved")return;z.enqueue(Y.encode(`${JSON.stringify([K.path,K.variantKey,K.data])}
|
|
21
|
-
`))});let G=setTimeout(()=>Q(!0),J);Z.allSettled().then(()=>Q(!1),()=>Q(!1))},cancel(){j(!1)}})}import{Fragment as MI,createContext as gO,createElement as PI,lazy as TI,use as NI,useContext as II}from"react";function oQ($){return{islands:[],render:$,instances:new WeakMap,count:0}}var d3="gemi-slot",aQ="data-slot",tQ="data-gemi-slot";var mO=Symbol.for("gemi.staticRender"),rQ=globalThis[mO]??=gO(null);import{createHash as WG}from"crypto";var zJ='var r=document,i=window,a=history;i.__gemi_nav?.d();var L=new AbortController,h=(t,e,n,s)=>t.addEventListener(e,n,{signal:L.signal,...s}),q=i.__gemi_nav={d:()=>L.abort()},v=(t,e)=>{if(!t.g)t.g=1,import(e.s).then((n)=>{if(t.isConnected)t.r=n.h(t,n.m[e.e])}).catch((n)=>console.error(n))},D=(t)=>{let e=t.getElementById("gemi-islands");return e?JSON.parse(e.textContent):{i:[]}},R=(t,e)=>{for(let n of t.querySelectorAll("gemi-island")){let s=e.i[n.dataset.island];if(!s||n.o)continue;if(s.l=="eager")v(n,s);else if(s.l=="idle"||!i.IntersectionObserver||!n.children.length)(i.requestIdleCallback||setTimeout)(()=>v(n,s));else{let l=new IntersectionObserver((m)=>{if(m.some((d)=>d.isIntersecting))l.disconnect(),v(n,s)});for(let m of n.children)l.observe(m)}}},O=\'meta[name="gemi-static"]\',A="style:not([data-gemi-fonts])",T=A+",link[rel=stylesheet]",K=`head>${A},body>${A},link[rel=stylesheet]`,I=\'meta[name]:not([name=viewport]),meta[property],link[rel~=canonical],link[rel~=alternate],link[rel~=icon],link[rel=preload][as=font],style[data-gemi-fonts],script[type="application/ld+json"]\',w=(t)=>t.querySelector(O)?.content,C=(t)=>[...t.querySelectorAll(K)].map((e)=>e.outerHTML).join(),c=(t)=>t.href.split("#")[0],p=r.createElement("div");p.setAttribute("aria-live","polite");p.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap";r.body.append(p);var _=(t)=>{q.p={url:location.href,title:r.title,initial:t},r.dispatchEvent(new CustomEvent("gemi:page-load",{detail:q.p}))},f=new Map,k=(t)=>{let e=f.get(t);if(!e||Date.now()-e[0]>30000){let n=fetch(t,{headers:{accept:"text/html","x-gemi-navigate":"1"},signal:AbortSignal.timeout(1e4)}).then((s)=>{if(!s.ok||!/^text\\/html/.test(s.headers.get("content-type"))||new URL(s.url||t).origin!=location.origin)throw s;return s.text().then((l)=>[s.url||t,l])});e=[Date.now(),n],n.catch(()=>f.get(t)==e&&f.delete(t))}if(f.delete(t),f.set(t,e),f.size>10)f.delete(f.keys().next().value);return e[1]},M=(t)=>{let e=t.target.closest?.("a[href]"),n=e?.getAttribute("target");if(!e||n&&n!="_self"||e.hasAttribute("download")||/(^|\\s)external(\\s|$)/i.test(e.getAttribute("rel"))||e.closest("[data-gemi-reload]"))return;let s=new URL(e.getAttribute("href"),r.baseURI);if(s.origin==location.origin&&!(s.href.includes("#")&&c(s)==c(location)))return s},y={},U=()=>Math.random().toString(36).slice(2),E=()=>a.state?.g||a.replaceState({...a.state,g:U()},""),P=c(location),b=0,N=(t)=>{if(!t.hasAttribute("tabindex"))t.setAttribute("tabindex","-1"),t.addEventListener("blur",()=>t.removeAttribute("tabindex"),{once:!0});t.focus({preventScroll:!0})},Y=(t)=>{let e=r.body,n=t.body,s=D(t),l=r.documentElement;r.title=t.title;for(let o of["lang","dir"]){let u=t.documentElement.getAttribute(o);if(u==null)l.removeAttribute(o);else l.setAttribute(o,u)}for(let o of r.head.querySelectorAll(I))o.remove();let m=new Set([...r.querySelectorAll("link[rel=modulepreload]")].map((o)=>o.getAttribute("href")));r.head.append(...t.head.querySelectorAll(I),...[...t.head.querySelectorAll("link[rel=modulepreload]")].filter((o)=>!m.has(o.getAttribute("href"))));let d=new Map([...e.querySelectorAll("[data-gemi-persist]")].map((o)=>[o.dataset.gemiPersist,o])),g=[...n.querySelectorAll("[data-gemi-persist]")].map((o)=>[o,d.get(o.dataset.gemiPersist)]).filter((o)=>o[1]);for(let o of[...e.querySelectorAll("gemi-island")].reverse())if(o.o=1,!g.some((u)=>u[1].contains(o)))try{o.r?.unmount()}catch(u){console.error(u)}for(let[o,u]of g)o.replaceWith(u);for(let o of[...e.childNodes])if(!o.matches?.(T))o.remove();for(let o of[...n.children])if(o.matches(T))o.remove();for(let o of[...e.attributes])e.removeAttribute(o.name);for(let o of n.attributes)e.setAttribute(o.name,o.value);e.append(...n.childNodes,p),R(e,s)},H=async(t,e)=>{let n=++b,s=!e&&y[a.state?.g];a.scrollRestoration="manual";try{let[l,m]=await k(c(t));if(n!=b)return;let d=new DOMParser().parseFromString(m,"text/html");if(w(d)==null||w(d)!=w(r)||C(d)!=C(r))throw 0;if(e){let o=new URL(l);o.hash=t.hash,a.pushState({g:U()},"",o.href)}P=c(location),Y(d);let g=e&&t.hash&&r.getElementById(decodeURIComponent(t.hash.slice(1)));if(g)g.scrollIntoView({behavior:"instant"});else i.scrollTo({left:s?.[0]||0,top:s?.[1]||0,behavior:"instant"});if(e)N(g||r.querySelector("h1")||r.querySelector("main")||r.body);p.textContent=r.title,_(!1)}catch{if(n!=b)return;if(e)location.assign(t.href);else location.reload()}};h(r,"click",(t)=>{if(t.defaultPrevented||t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let e=M(t);if(e&&r.dispatchEvent(new CustomEvent("gemi:before-navigate",{cancelable:!0,detail:{url:e.href}})))t.preventDefault(),E(),y[a.state.g]=[i.scrollX,i.scrollY],H(e,1)});h(i,"popstate",()=>{if(b++,c(location)==P){let t=y[a.state?.g];if(t)i.scrollTo({left:t[0],top:t[1],behavior:"instant"})}else if(a.state?.g)H(new URL(location.href),0);else location.reload()});h(i,"hashchange",E);h(i,"scroll",()=>a.state?.g&&(y[a.state.g]=[i.scrollX,i.scrollY]),{passive:!0});var S,x=(t)=>{if(r.querySelector(O)?.dataset.prefetch=="none"||navigator.connection?.saveData)return;let e=M(t);if(e&&c(e)!=c(location))k(c(e))};h(r,"pointerover",(t)=>{clearTimeout(S),S=setTimeout(()=>x(t),65)});h(r,"pointerout",()=>clearTimeout(S));h(r,"focusin",x);h(r,"touchstart",x,{passive:!0});E();R(r,D(r));_(!0);';import{createHash as hO}from"crypto";import{existsSync as $G,readFileSync as pO}from"fs";import{join as KJ}from"path";var ZG=".script",cO=[".ts",".js"],dO="document-scripts.json",JG="data-gemi-script",uO=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function lO($){if(typeof $!=="string"||!uO.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 iO($,Z){for(let J of cO){let W=KJ($,"views",`${Z}${ZG}${J}`);if($G(W))return W}return null}async function eQ($){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 sO($){return`'sha256-${hO("sha256").update($).digest("base64")}'`}var XJ,QJ=new Map;function nO(){if(XJ===void 0){let $=KJ(GJ(),"dist","server",dO);XJ=$G($)?JSON.parse(pO($,"utf8")):null}return XJ??null}async function BJ($){lO($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=nO()?.[$];if(j!==void 0)return j;let z=QJ.get($);if(z)return z}let J=KJ(GJ(),"app"),W=iO(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${ZG}.ts (or .js).`);if(!Z)return eQ(W);let Y=eQ(W);return QJ.set($,Y),Y.catch(()=>QJ.delete($)),Y}async function bI($){return sO(await BJ($))}var oO="gemi-islands",gI=`'sha256-${WG("sha256").update(UJ).digest("base64")}'`;function FJ($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var VJ=($)=>$.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),mI=`'sha256-${WG("sha256").update(zJ).digest("base64")}'`,aO='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',tO="gemi-static";function YG($,Z,J,W,Y,j){let z=new Set,X=[];if(J)X=Z.islands.map((V)=>{let O=V.module?J(V.module):void 0;if(!O)return console.error(`[gemi] island ${V.module??"(unknown module)"}: no client build entry. Declare it as island(() => import("./Component")) so gemi's Vite plugin builds it.`),null;if(V.load==="eager"){for(let D of O.preload)z.add(D);if(V.preloadDynamic)for(let D of O.dynamicPreload??[])z.add(D)}return{s:O.src,e:V.export,l:V.load}});let Q=X.some((V)=>V!==null),G=j?`<script type="module" ${JG}="${VJ(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return FJ($,"</head>",G,!1);let F=(Y?`<meta name="${tO}" content="${VJ(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((V)=>`<link rel="modulepreload" href="${VJ(V)}"/>`).join("")+G,B=Y?zJ:UJ,U=(Q?`<script type="application/json" id="${oO}">${G1({i:X})}</script>`:"")+`<script type="module">${W?aO+B:B}</script>`;return FJ(FJ($,"</head>",F,!1),"</body>",U,!0)}function rO($,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 jG($){let Z=`<template ${tQ}="`;for(let J=$.lastIndexOf(Z);J!==-1;J=$.lastIndexOf(Z)){let W=rO($,J);if(W===-1)break;let Y=J+Z.length,j=$.slice(Y,$.indexOf('"',Y)),z=$.indexOf(">",Y)+1,X=$.slice(z,W-11);$=$.slice(0,J)+$.slice(W);let Q=`<${d3} ${aQ}="${j}" style="display:contents"></${d3}>`;$=$.split(Q).join(`<${d3} style="display:contents">${X}</${d3}>`)}return $}function zG($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function XG($,Z){if($.getSetCookie().length>0){if(Z.cacheControl&&Bun.env.NODE_ENV!=="production")console.warn(`[gemi] A static view with cacheControl "${Z.cacheControl}" set a cookie, so it was sent "private, no-store" instead. Static pages are cacheable only when nothing on them sets a cookie.`);$.set("Cache-Control","private, no-store");return}if(Z.cacheControl&&!$.has("Cache-Control"))$.set("Cache-Control",Z.cacheControl)}var eO=async()=>(await import("./chunk-pyyhmeg1.js")).default,OJ,u3=async(...$)=>{return OJ??=import("react-dom/server.browser").catch((Z)=>{throw OJ=void 0,Z}),(await OJ).renderToReadableStream(...$)},GG=1e4,KG="no-locale",$D="no-theme";async function ZD($,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 HJ="/assets";function JD($){return $===HJ||$.startsWith(`${HJ}/`)}function WD($){let Z=$.filter(JD);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 "${HJ}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function YD($){let Z=H(Y1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function DJ($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function jD($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class l3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];staticRoutes=[];root=null;shellReporter=iQ();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;theme;constructor($){let Z=UQ();this.partialRendering=$.partialRendering??Z.partialRendering,this.localeRouting=$.localeRouting??Z.localeRouting,this.theme=$.theme??Z.theme,this.hooks={onNotFound:$.onNotFound??Z.onNotFound,onRequestStart:$.onRequestStart??Z.onRequestStart,onRequestEnd:$.onRequestEnd??Z.onRequestEnd,onRequestFail:$.onRequestFail??Z.onRequestFail,onStreamComplete:$.onStreamComplete??Z.onStreamComplete};let J={"/":$.rootRouter,"/auth":b9};this.flatViewRoutes=p4(J),WD(Object.keys(this.flatViewRoutes)),this.routeManifest=d4(J),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,W])=>W.at(-1)!=="FILE")),this.componentTree=l4(J),this.flatComponentTree=WJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,W])=>W.static).map(([W])=>W);for(let W of this.staticRoutes){let Y=this.flatViewRoutes[W].static?.layout;if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=H(t1);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)i4();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{n$.error(W?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(W)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(J)}catch(W){J(W)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:J,views:W,routeKey:Y}=$,j=()=>{let Q=new Set(Z?.preload??[]);for(let G of W)for(let K of J?.[G]??[])Q.add(K);return[...Q].map((G)=>g1("link",{key:`modulepreload:${G}`,rel:"modulepreload",href:G}))};if(!J)return j();let z=this.preloadCache.get(J);if(!z||z.clientEntry!==Z)z={clientEntry:Z,byRoute:new Map},this.preloadCache.set(J,z);let X=z.byRoute.get(Y);if(!X)X=j(),z.byRoute.set(Y,X);return X}async renderStatic($){let{req:Z,runInRequestScope:J,staticView:W,currentViews:Y,data:j,serverQueries:z,headers:X}=$,Q;if(W.layout){if(Q=$.viewImportMap[W.layout],!Q)throw Error(`The static layout "${W.layout}" was not found. It is a view path: a file at app/views/${W.layout}.tsx whose default export renders the document.`)}let G=await $.getStyles(Y,{static:!0,layout:W.layout});z.markRenderStart();let K=LJ(),F=new AbortController,B=setTimeout(()=>F.abort(),GG),U=(O)=>{if(Bun.env.NODE_ENV!=="production")console.error(O)},V=oQ(async(O,D)=>{let L=await u3(O,{signal:F.signal,identifierPrefix:D,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:U});return await L.allReady.catch(()=>{}),await new Response(L).text()});try{let O,D=typeof W.script==="function"?await J(()=>W.script(Z)):W.script;if(D)O={name:D,source:await BJ(D)};let L;if(W.navigation){let I=W.navigation===!0?{}:W.navigation,A=I.version?String(await J(()=>I.version(Z))):"";L={identity:[W.layout??"",$.buildId??"",O?.name??"",A].join("|"),prefetch:I.prefetch==="none"?"none":"intent"}}let T=await u3(g1(rQ.Provider,{value:V,children:g1(QG,{children:[...G,g1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:K,rootLayout:Q,key:"root"})]})}),{signal:F.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:U});await T.allReady.catch(()=>{});let P=jG(await new Response(T).text());return new Response(YG(P,V,$.resolveIsland,Bun.env.NODE_ENV!=="production",L,O),{status:200,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:Q,serverQueries:G,userAgent:K,noStream:F,noTheme:B,url:U,user:V,viewData:O,breadcrumbs:D,urlLocaleSegment:L,meta:T,isOgRequest:P,appId:I,features:A,staticView:E}=$,S=this.theme===!1||B||E?null:{cookie:this.theme.cookie??h9,default:this.theme.default??null,value:zD(Z,this.theme.cookie??h9)},f=L?dQ(Q,[L]).pathname:Q,M={kind:"view",data:{meta:T,pageData:{[f]:O},__csrf:W.toString("base64"),prefetchedData:{},i18n:z,auth:{user:V},routeManifest:this.clientRouteManifest,breadcrumbs:D,router:{urlLocaleSegment:L,pathname:Y,params:X,currentPath:Q,searchParams:U.search,is404:!Y?!0:!1,domain:Z.domain?YD(Z):null},appId:I,features:A,theme:S,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},_=this.root,y=this.routeManifest[Y];return async(H$)=>{let{bootstrapModules:T0=[],loaders:h1,getStyles:s,viewImportMap:q,cssManifest:N0,ogMap:t$,viewModules:s3,clientEntry:M$,modulePreloadManifest:p1,assetBase:c1,resolveIsland:r$,buildId:G0}=H$,tZ=M$?[]:T0,n3=(k0)=>[k0,`window.loaders=${h1}`,...M$?[`import(${JSON.stringify(M$.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(P){let k0=null,ZZ=null;for(let JZ of y??[])if(typeof t$[JZ]==="function")ZZ=JZ,k0=t$[JZ];if(!k0)return new Response("Not found",{status:404});let LK=Object.values(M.data.pageData)[0];try{await u3(g1(k0,LK[ZZ]),{onError:()=>{}})}catch(JZ){let{fonts:HK,...MK}=JZ.satoriOptions,PK=await Promise.all(HK.map((o3)=>{return ZD(o3.name,o3.weight,o3.style).then((xK)=>({...o3,data:xK}))})),iJ=new Headers(j);iJ.set("Content-Type","image/png");let[TK,NK]=await Promise.all([eO(),m4("Rendering an OG image")]),IK=await TK(JZ.jsx,{...MK,fonts:PK}),_K=await NK(Buffer.from(IK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(_K),{headers:iJ})}return new Response("data")}if(E&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:E,currentViews:y,data:M.data,serverQueries:G,headers:j,getStyles:s,viewImportMap:q,viewModules:s3,resolveIsland:r$,buildId:G0});if(M.data.cssManifest=N0,M.data.modulePreloadManifest=p1??{},c1&&c1!=="/")M.data.assetBase=c1;let e$=this.modulePreloadLinks({clientEntry:M$,modulePreloadManifest:p1,views:y??["404"],routeKey:Y??"404"}),rZ=await s(y??["404"]);M.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let d1=new AbortController,P$=setTimeout(()=>d1.abort(),GG),R=L6(K)||F,f0=Bun.env.NODE_ENV!=="production"&&!R&&Y&&this.shellReporter.shouldObserve(Y)?sQ():null,$Z=LJ();try{let k0=await u3(g1(QG,{children:[...e$,...rZ,...S?[g1("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:HQ(G1({cookie:S.cookie,default:S.default}))}})]:[],g1(_,{data:M.data,viewImportMap:q,viewModules:s3,serverQueries:G,dictionarySink:$Z,key:"root"})]}),{bootstrapScriptContent:n3(`window.__GEMI_DATA__ = ${G1(M.data)}`),bootstrapModules:tZ,signal:d1.signal,...R?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(ZZ){if(Bun.env.NODE_ENV!=="production")console.error(ZZ)}});if(k0.allReady.catch(()=>{}).finally(()=>clearTimeout(P$)),R)await k0.allReady.catch(()=>{});return new Response(u8(k0,G,{onShell:R?void 0:()=>G.markShell(),onChunk:f0?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,G.summarize(d1.signal.aborted)),f0)this.shellReporter.report(Y,f0.measure())})},$Z),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(k0){if(clearTimeout(P$),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,G.summarize(d1.signal.aborted))),k0;let ZZ=await u3(g1("div"),{bootstrapScriptContent:n3(`window.error= ${G1(k0.message)}; window.stack_trace=${G1(k0.stack)};window.__GEMI_DATA__ = ${G1(M.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...tZ]:tZ});return new Response(u8(ZZ,G,{onClose:()=>J(()=>this.completeStream(Z,G.summarize(d1.signal.aborted)))}),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(N$(Z))return 404;if(Z?.kind===s1){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if(n1(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof v1&&(Z.status===403||Z.status===404))return Z.status;return null}async handleViewRequest($,Z){let J=new URL($.url),W=J.pathname.endsWith(".json"),Y=J.pathname.endsWith(".og"),j=J.pathname.replace(".json","").replace(".og",""),[,z,...X]=j.split("/"),Q=j,G=null,K=null,F=H(n),B=p3(this.flatViewRoutes,j),U=F.isLocaleAware&&this.localeRouting==="prefix"&&!B?.route.middleware.includes(KG);if(U&&F.supportedLocales.includes(z))Q=`/${X.join("/")}`,G=z,K=z;if(($.method==="GET"||$.method==="HEAD")&&!W&&!Y&&B===null&&J.pathname.endsWith("/")&&!J.pathname.startsWith("//")){let M=J.pathname.replace(/\/+$/,""),_=U&&F.supportedLocales.includes(M.slice(1));if(M&&!_)return new Response("",{status:301,headers:{Location:`${M}${J.search}`}})}if(U&&!Y&&K===null&&!(K===null&&B!==null)){let M=BG(z,F.supportedLocales,F.defaultLocale);if(M){let _=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${M}${_}${W?".json":""}${J.search}`}})}}if(U&&!Y){let M=H(n).detectLocale(new C($,{},"view",Q));if(K===null&&M!==F.defaultLocale){let _=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${M}${_}${J.search}`}})}}Q=Q.replace("//","/");let O=[],D=[],L=null,T={},P=null,I=!1,A=!1,E=[],S;try{let M=p3(this.flatViewRoutes,Q);if(K&&M?.route.middleware.includes(KG))M=null;if(M){if(L=M.routePath,T=M.params,O=M.route.exec,D=M.route.middleware,E=M.route.features,I=D.includes("no-stream"),A=D.includes($D),S=M.route.static,W&&this.partialRendering){let _=$.headers.get(JJ),y=cQ({flatViewRoutes:this.flatViewRoutes,supportedLocales:H(n).supportedLocales,from:_,origin:J.origin,to:{segments:M.route.segments,params:T,search:J.search}});if(y.startIndex>0)O=O.slice(y.startIndex),P={from:_,carriedViews:y.carriedViews}}}}catch(M){throw M}if(S&&W)return new Response("Not found",{status:404});let f=new C($,T,"view",L);return this.hooks.onRequestStart(f),await N.run(f,async()=>{let M=null,_=N.getStore(),y=iZ.getStore(),H$=(q)=>iZ.run(y,()=>N.runWith(_,q));_.serverQueries=new uZ(c3($));let T0=new Set;_.serverQueries.onQueryFail((q)=>{T0.add(q.error);try{H$(()=>Promise.resolve(this.hooks.onRequestFail(s,q.error)).catch(()=>{}))}catch{}});let h1=zG(S);if(K){let q=K.replaceAll("/","");L$.setLocale(q,{cookie:h1.locale})}else if(F.isLocaleAware&&!U)_.setLocale(F.defaultLocale);else L$.setLocale(void 0,{cookie:h1.locale});let s=_.req;if(h1.session)i4();try{let q=null;try{await H(i1).runMiddleware(D)}catch(R){if(q=this.viewRefusalStatus(s,R,T0),q===null)throw R}if(q!==null||E.length>0&&!await this.passesFeatureGates(E))L=null,O=[],s.routePath="";let N0=H(n),t$=N0.isEnabled,s3=N0.isLocaleAware,M$=new C($,s.params),p1={defaultLocale:N0.defaultLocale,timeZone:N0.detectTimeZone(M$)};if(s3){let R=null;if(K)R=K.replaceAll("/",""),_.setLocale(R);else if(!U)R=_.locale??N0.defaultLocale;else R=N0.detectLocale(M$),_.setLocale(R);let f0=t$?N0.getPageTranslations(R,s.routePath):{};p1={...p1,supportedLocales:N0.supportedLocales,currentLocale:R,dictionary:{[R]:f0},defaultLocale:N0.defaultLocale,...U?{}:{localeRouting:"off"}}}await FG(p1.currentLocale??"");let c1;try{c1=await Promise.all(O.map((R)=>R(s)))}catch(R){if(q=this.viewRefusalStatus(s,R,T0),q===null)throw R;L=null,O=[],s.routePath="",c1=[]}if(L===null)await this.hooks.onNotFound(s,{status:q??404});let{cookies:r$,headers:G0}=_;if(q!==null)G0.set("Cache-Control","no-store");M={data:c1,cookies:r$,headers:G0,user:_.user,prefetchedData:_.serverQueries.snapshotResolved(),currentPathName:L,params:s.params,urlLocaleSegment:G,meta:_.renderMeta(),appId:H(YJ).id,features:await H(t1).forClient()};let{params:tZ,user:n3}=M,e$={},rZ={};for(let R of c1??[]){let[f0,$Z]=Object.entries(R)?.[0]??[];if(!f0||!$Z)continue;rZ[`${f0}:${L}`]=$Z.breadcrumb,e$[f0]=$Z}let d1=e$.FILE;if(d1){for(let R of r$)G0.append("Set-Cookie",R.toString());try{await this.onRequestEnd(s)}catch(R){n$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}return await T8(d1,G0)}if(W){G0.set("Content-Type","application/x-ndjson; charset=utf-8"),G0.append("Vary",JJ),r$.forEach((f0)=>G0.append("Set-Cookie",f0.toString())),await this.hooks.onRequestEnd(s);let R={meta:P&&!_.metadata.touched?null:M.meta,data:{[Q]:e$},breadcrumbs:rZ,prefetchedData:_.serverQueries.snapshotResolved(),i18n:p1,features:M.features,is404:!L,appId:M.appId,partial:P};return new Response(nQ(R,_.serverQueries,void 0,({aborted:f0})=>H$(()=>this.completeStream(s,_.serverQueries.summarize(f0)))),{headers:G0})}if(G0.set("Content-Type","text/html; charset=utf-8"),!I&&!(S&&L))G0.append("Vary","User-Agent");let P$=Boolean(S&&L);if(!P$||h1.session)i4();for(let R of r$)G0.append("Set-Cookie",R.toString());if(!P$||h1.csrf){let R=Bun.CSRF.generate(process.env.SECRET);G0.append("Set-Cookie",`csrf_token=${R}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(s,{mintSession:!P$||h1.session})}catch(R){n$.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}if(P$)XG(G0,S);return await this.render({req:s,runInRequestScope:H$,csrfTokenHMAC:Buffer.from(""),currentPathName:L,headers:G0,i18n:p1,params:tZ,pathname:J.pathname,serverQueries:_.serverQueries,userAgent:$.headers.get("user-agent"),noStream:I,noTheme:A,url:J,user:n3,viewData:e$,breadcrumbs:rZ,urlLocaleSegment:G,meta:M.meta,appId:M.appId,features:M.features,isOgRequest:Y,staticView:L?S:void 0,refusedStatus:q??void 0})}catch(q){if(q.kind===s1){let N0=W?jD(q.payload.viewData??q.payload.api):DJ(q.payload.view);for(let t$ of _.cookies)N0.headers.append("Set-Cookie",t$.toString());return N0}if(!T0.has(q))this.hooks.onRequestFail(s,q);if(n1(q))return console.error(q),W?lZ():DJ(jJ());if(q instanceof v1&&q.status===403)return W?lZ():DJ(jJ());throw q}},Z)}}function zD($,Z){let J=$.cookies?.get(Z);return LQ(J)?J:null}function MJ(){let $=JSON.stringify({error:o1("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 LG extends I0{routes={"/api-routes":this.get(()=>{let $=H(n4).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(l3).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 XD=new Set([l1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),QD=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,GD=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function KD($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(XD.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===l1)throw Error(`dispatchAs: credentials may not set the "${l1}" cookie. The access token stays the initiator's.`);if(!QD.test(Y)||!GD.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function BD($,Z){let J=$.body.getReader(),W=!1,Y=()=>{if(W)return;W=!0;try{Z()}catch(z){console.error(z)}},j=new ReadableStream({async pull(z){let X;try{X=await J.read()}catch(Q){Y(),z.error(Q);return}if(X.done){Y();try{z.close()}catch{}return}try{z.enqueue(X.value)}catch{}},async cancel(z){try{await J.cancel(z)}finally{Y()}}},{highWaterMark:0});return new Response(j,{status:$.status,statusText:$.statusText,headers:$.headers})}function VG($){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 UG($,Z,J){let W=[];Z?.forEach((z,X)=>W.push([X,z]));let Y=[...typeof Z?.getSetCookie==="function"?Z.getSetCookie():[],...Array.from(J??[])];if(W.length===0&&Y.length===0)return $;let j=(z)=>{for(let[X,Q]of W){if(X.toLowerCase()==="set-cookie")continue;if(!z.has(X))z.set(X,Q)}for(let X of Y)z.append("Set-Cookie",X)};try{return j($.headers),$}catch{let z=new Headers($.headers);return j(z),new Response($.body,{status:$.status,statusText:$.statusText,headers:z})}}function FD(){return Bun.env.NODE_ENV==="development"}class n4{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=VQ();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=v9({"/":$.rootRouter,"/auth":R9,"/__gemi__/services/i18n":f9,"/__gemi__/services/image":q9,...FD()?{"/__gemi__/services/logs":y9,"/__gemi__/debug":LG}:{}})}getRouteHandlerAndParams($){let Z=new URL($.url),J=DG(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(i1).runMiddleware(W)}catch(Y){if(Y.kind===s1)return VG(Y.payload.api);else{if(N$(Y))return MJ();if(this.onRequestFail(Z,Y),console.error(Y),n1(Y))return lZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=N.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===s1)return VG(j.payload.api);if(N$(j))return MJ();if(this.onRequestFail(J.req,j),console.error(j),n1(j))return lZ();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){n$.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:o1("not_found","Not found",404)}),{status:404});let j=new C($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await N.run(j,async()=>{let z=N.getStore(),X=!1,Q=async()=>{X=!0,await this.endRequest(z,j,W)};try{let G=H(n);if(G.isEnabled){let O=G.detectLocale(j);z.setLocale(O)}z.setRequest(j),H(i1).applyDefaultBodyLimit($);let K=await this.runRouteMiddleware(W,j);if(K instanceof Response){let O=UG(K,z.headers,z.cookies);return await Q(),O}let F=await this.getRouteData(W),B=z.headers,U=z.cookies;if(F instanceof Response){let O=UG(F,B,U);if(this.isOpenEndedBody($,O)){let D=BD(O,()=>this.endRequest(z,j,W));return X=!0,D}return await Q(),O}let V=(u1(F)?F:j1.json(F)).toResponse(B,U);return await Q(),V}catch(G){if(!X)try{await Q()}catch(K){console.error(K)}throw G}},Z)}async dispatchAs($,Z,J,W,Y){let j=new URL($.rawRequest.url).origin,z=new URL(`${j}/api${J}`),X=`/api${J.split(/[?#]/)[0]}`;if(!J.startsWith("/")||z.origin!==j||z.pathname!==X||z.hash!==""||z.pathname.startsWith("/api/__gemi__")||z.pathname==="/api/auth"||z.pathname.startsWith("/api/auth/"))throw Error(`dispatchAs: "${J}" is not an app api path. Pass the route's own path, without "/api", with every param encoded.`);let Q=Y?.identity;if(Q!==void 0&&(typeof Q!=="object"||!Q?.user))throw Error("dispatchAs: identity needs the user to dispatch as.");let G=new Headers,K=[],F=Q?null:$.cookies.get(l1);if(F)K.push(`${l1}=${F}`);if(Y?.credentials)KD(G,K,Y.credentials,Q!==void 0);if(K.length>0)G.set("Cookie",K.join("; "));let B=Q?null:$.headers.get(l1);if(B)G.set(l1,B);let U=$.headers.get("User-Agent");if(U)G.set("User-Agent",U);let V;if(W instanceof FormData)V=W;else if(W!==void 0)G.set("Content-Type","application/json"),V=JSON.stringify(W);let O=new Request(z,{method:Z,headers:G,body:V,...Y?.signal?{signal:Y.signal}:{}});if(OG(O,QZ($),Q?.grant,Y?.progress),$.domain)sZ(O,$.domain);let D=Q?{user:Q.user}:void 0;return N.exit(()=>J6.exit(()=>this.handleApiRequest(O,D)))}}import{timingSafeEqual as VD}from"crypto";var t4="",NJ="*",UD=60000,OD=1e4,TJ=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,o4=16,PJ=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,a4="x-forwarded-host";function HG($){return $.startsWith(":")}function nZ($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&VD(J,W)}function DD($){if(!$)return null;if($===!0)return{header:a4,clientIpHeader:null,secret:null};return{header:($.hostHeader??a4).toLowerCase(),clientIpHeader:$.clientIpHeader?.toLowerCase()??null,secret:$.secret?{header:$.secret.header.toLowerCase(),value:$.secret.value}:null}}function LD($){if(!$||$===!0)return;let{hostHeader:Z,clientIpHeader:J,secret:W}=$;if(Z!==void 0&&(typeof Z!=="string"||!PJ.test(Z)))throw Error(`\`route.domains.trustProxy.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(Z)}.`);if(J!==void 0){if(typeof J!=="string"||!PJ.test(J))throw Error(`\`route.domains.trustProxy.clientIpHeader\` must be a single header name, e.g. "x-client-ip". Got ${JSON.stringify(J)}.`);if(!W)throw Error("`route.domains.trustProxy.clientIpHeader` needs `secret`: without proof the proxy sent it, any client that reaches the app directly picks its own address.");if(J.toLowerCase()===(Z??a4).toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `hostHeader`.");if(typeof W.header==="string"&&J.toLowerCase()===W.header.toLowerCase())throw Error("`route.domains.trustProxy.clientIpHeader` names the same header as `secret.header`.")}if(!W)return;if(typeof W.header!=="string"||!PJ.test(W.header))throw Error(`\`route.domains.trustProxy.secret.header\` must be a header name. Got "${W.header}".`);if(W.header.toLowerCase()===(Z??a4).toLowerCase())throw Error("`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.");if(typeof W.value!=="string"||W.value.length<o4)throw Error(`\`route.domains.trustProxy.secret.value\` must be at least ${o4} characters. A guessable one lets any client name its own host.`)}function M1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function HD($){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 MD($){let Z=M1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>TJ.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<o4)throw Error(`\`route.domains.ask.secret\` must be at least ${o4} characters. A guessable one is worse than leaving \`ask\` out.`);LD($.trustProxy);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),HG(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)=>TJ.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 IJ{root;hostTrust;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeader;constructor($){MD($),this.root=M1($.root),this.hostTrust=DD($.trustProxy);for(let Z of $.groups??[])if(HG(Z.subdomain))this.param={...Z,name:Z.subdomain.slice(1)};else this.fixed.set(Z.subdomain.toLowerCase(),Z);this.custom=$.custom??null,this.cacheTtlMs=this.custom?.cacheTtlMs??UD,this.askSecret=$.ask?.secret??null,this.proxySecretHeader=this.hostTrust?.secret?.header??null}forwardedHost($){let Z=this.hostTrust;if(!Z)return null;if(Z.secret&&!nZ($.headers.get(Z.secret.header),Z.secret.value))return null;return $.headers.get(Z.header)?.split(",")[0]?.trim()||null}trustedClientIp($){let Z=this.hostTrust;if(!Z?.clientIpHeader||!Z.secret)return null;if(!nZ($.headers.get(Z.secret.header),Z.secret.value))return null;let J=$.headers.get(Z.clientIpHeader)?.split(",")[0];return J===void 0?null:_$(J)}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return M1(this.forwardedHost($))??M1(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&&M1(Y)?HD(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:NJ,params:{},custom:!0};return null}async allows($,Z){let J=M1($);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:t4,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&&TJ.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>=OD)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=M1($);if(Z)this.cache.delete(Z)}}}var PD={kind:"none"};function Qx($){let Z=($??"").trim().toLowerCase();if(Z===""||Z==="false"||Z==="off"||Z==="0")return PD;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 Gx($,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:_$(z))??Z}if(W)$.set("x-forwarded-for",W);else $.delete("x-forwarded-for")}var MG=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,PG=16;function Kx($){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(!MG.test(Z))throw Error(`GEMI_CLIENT_IP_HEADER must be a single header name, e.g. "x-azure-clientip". Got ${JSON.stringify(Z)}.`);if(!MG.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<PG)throw Error(`GEMI_PROXY_SECRET must be at least ${PG} characters. A guessable one lets any client name its own address.`);return{header:Z.toLowerCase(),secretHeader:J.toLowerCase(),secret:W}}function TG($,Z){if(!nZ($.get(Z.secretHeader),Z.secret))return null;let J=$.get(Z.header)?.split(",")[0];return J===void 0?null:_$(J)}var TD="/__gemi__/domains/ask";class Y1{static token="router.domains";resolver;acceptsCustomDomains;clientIpTrust;groups=new Map;constructor($,Z){this.groups.set(t4,$),this.clientIpTrust=Z.clientIpTrust??null;let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new IJ(J);let W=(Y)=>({api:Y.api?new n4({...Z.api,...Y.api}):$.api,view:Y.view?new l3({...Z.view,...Y.view}):$.view});for(let Y of J.groups??[])this.groups.set(Y.subdomain,W(Y));if(J.custom?.fallback)this.groups.set(NJ,W(J.custom.fallback))}applyClientIp($){let Z=this.clientIpTrust;if(Z)_J($,Z.secretHeader);let J=this.resolver?.trustedClientIp($)??(Z?TG($.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);if(this.resolver.proxySecretHeader)_J($,this.resolver.proxySecretHeader);let Z=await this.resolver.resolve($);if(!Z)return null;return sZ($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==TD)return null;if(!nZ(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??t4)}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 r4($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var NG=600000;function IG($,Z){return[F6($,Z),F6($,Z-1)]}class b{static token="auth";config;provider;constructor($={},Z=new o8){OY($.oauthProviders),this.config={...L1(DY($),$),emailCode:d8($.emailCode)},this.provider=Z}async oauthProvider($){return await VZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await bY(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(Y1)?H(Y1).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(Y1).resolver?.root:M1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??M1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!v8($))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=r4(J.expiresAt),j=r4(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=N.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/NG),z=null,X=await this.userProvider.findSession({token:$,userAgent:Z});if(X?.user){if(!await J(X,{token:$,req:W,userAgent:Z}))return null;let G=F6($,j),K=X.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:G,userId:K,userAgent:Z,...this.freshLifetime(Y)}),!0}))z=G}if(!z){for(let G of IG($,j))if((await this.userProvider.findSession({token:G,userAgent:Z}))?.user){z=G;break}}if(!z)return null;let Q=await this.getSession(z,Z);if(Q)W.ctx().setCookie("access_token",z,this.accessTokenCookieOptions(W,new Date(Q.expiresAt)));return Q}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(v8($)||!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()/NG),W=IG($,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=N.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let J=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=J/2)return $;let W=new Date(Math.min(Z+J,new Date($.absoluteExpiresAt).getTime())),Y=await this.userProvider.updateSession({token:$.token,expiresAt:W}),j=this.requestCarryingCookie($.token);if(j)j.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(j,W));if(!Y)return $;return{...$,expiresAt:Y.expiresAt??W}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let J=await this.createOrUpdateSession({email:$,id:Z.id}),W=new C;if(W.ctx().setCookie("access_token",J.token,this.accessTokenCookieOptions(W,J.expiresAt)),J?.user)J.user.extension=await this.config.extendSession(J.user);return J}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),J=null;if(Z?.user)J=await this.config.extendSession(Z.user),Z.user.extension=J;return Z}async createOrUpdateSession($){let Z=new C,J=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!J)throw new I$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=WY(J),j=await this.userProvider.createSessionV2({token:Y,userId:J,userAgent:W,...this.freshLifetime(Date.now())}),z=await this.userProvider.findSession({token:Y,userAgent:W??""});return z?.user?z:j}async createMagicLinkToken($){let Z=await this.userProvider.findUserByEmailAddress($,!1);if(Z){let{pin:J,token:W}=await this.issueOneTimeCode($,6);return{user:Z,email:$,pin:J,token:W}}return{}}async issueOneTimeCode($,Z){await this.userProvider.deleteMagicLinkToken($);let J=await this.config.generateMagicLinkToken($),W=await this.config.generateCode($),Y=typeof W==="string"&&W!==""?W:KY(Z);return await this.userProvider.createMagicLinkToken({email:$,token:V6("link",$,J),pin:V6("pin",$,Y)}),{email:$,pin:Y,token:J}}async verifyOneTimeCode($,Z,J={}){let{expiresInMinutes:W,maxAttempts:Y}=this.config.emailCode,j=await this.userProvider.findMagicLinkTokenByEmail($);if(!j)return j3("pin",$,null,Z),{status:"invalid"};let z=r4(j.createdAt);if(z+W*60000<=Date.now())return j3("pin",$,null,Z),{status:"expired"};if(!await VY(j.id,z,Y,W))return await this.userProvider.claimMagicLinkToken(j.id),{status:"too_many_attempts"};if(!j3("pin",$,j.pin,Z))return{status:"invalid"};if(J.claim!==!1&&!await this.userProvider.claimMagicLinkToken(j.id))return{status:"invalid"};return{status:"ok",row:j}}async verifyMagicLinkToken($,Z){let J=await this.userProvider.findMagicLinkTokenByEmail($),W=j3("link",$,J?.token,Z);if(!J||!W)return!1;if(r4(J.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.userProvider.claimMagicLinkToken(J.id)}}class w0 extends g{static getFacadeAccessor(){return b}static async user(){let $=await w0.userOrNull();if($)return $;throw new I$({redirectTo:Y6(N.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=N.getStore();if($?.user)return $.user;let Z=await e3(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=N.getStore()?.req;return X1(Z?.search.get(z1),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await w0.user();if(!await $(Z))throw new GZ}static async guardSafe($){let Z=await w0.user();try{return await $(Z)}catch(J){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async oauthProviders(){return await this.getFacadeRoot().oauthProviderNames()}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class e4{static ensure($,Z={}){let J=N.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new uZ(c3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=e4.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){e4.ensure($,Z[0])}static noPrefetch(){let $=N.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new uZ(c3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function ND($){return(Array.isArray($)?$:String($).split("/")).map((J)=>encodeURIComponent(String(J))).join("/")}function xJ($,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==="*"?ND(z):encodeURIComponent(String(z))}`});return`${$8}${J==="/"?"":J}`||$8}var _G=new Map;function xG($,Z){let J=_G.get($);if(!J)J=new URLPattern({pathname:`${$8}${$==="/"?"":$}`}),_G.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 CG($,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=ID(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 ID($){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 AG{static origin($){return CJ($)}static absolute($,...Z){return`${l$()}${B0(String($),Z[0]??{})}`}static relative($,...Z){return B0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=H(Y1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=N.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):l$();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return CG({root:W.root,origin:j},$,B0(String(Z),J[0]??{}))}static api($,...Z){return xJ(String($),Z[0]??{})}static apiAbsolute($,...Z){return`${CJ()}${xJ(String($),Z[0]??{})}`}static matchApi($,Z){return xG(String($),Z)}}class SG{name="Meta";static description($){N.getStore().metadata.description($)}static title($){N.getStore().metadata.title($)}static openGraph($){N.getStore().metadata.openGraph($)}static htmlAttributes($){N.getStore().metadata.htmlAttributes($)}static canonical($){N.getStore().metadata.canonical($)}static alternates($){N.getStore().metadata.alternates($)}static robots($){N.getStore().metadata.robots($)}static fonts($){N.getStore().metadata.fonts($)}}var _D={set($,Z,J){N.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(N.getStore().req.cookies.has($))return!1;return N.getStore().setCookie($,Z,J),!0},delete($,Z){N.getStore().deleteCookie($,Z)}};class m1 extends g{static getFacadeAccessor(){return o$}static get client(){return this.getFacadeRoot().client}static get($){return m1.client.get($)}static set($,Z){return m1.client.set($,Z)}static del(...$){return m1.client.del(...$)}static exists($){return m1.client.exists($)}static incr($){return m1.client.incr($)}static expire($,Z){return m1.client.expire($,Z)}static ttl($){return m1.client.ttl($)}}function XC($){return $}function EG(){return{store:"memory",ttl:null}}class AJ{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 xD="500";class SJ{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=`${CD(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",xD]),[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(o$)?$.make(o$).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 CD($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var AD="k:",bG="tag:",SD="t:";class EJ{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 bJ extends EJ{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=L1(EG(),$),this.config.ttl!==null&&this.config.ttl!==void 0)a$(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 fG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return AD+kG($)}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=bG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=RG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(bG+Z,RG(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:a$(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new AJ(this.config.memory);if($==="redis"){let Z=this.options.application;return new SJ({...this.config.redis,client:Z?{send:(J,W)=>Z.make(o$).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 fG extends EJ{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){kG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${SD}${Z.join(",")}:${$}`}}function kG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function RG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class wG extends g{static getFacadeAccessor(){return bJ}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 qG extends g{static getFacadeAccessor(){return Q1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class vG extends g{static getFacadeAccessor(){return yG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class mG extends g{static getFacadeAccessor(){return gG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class hG extends g{static getFacadeAccessor(){return h3}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 qC($){return $}function pG(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function Z8($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function RJ($){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:ED}=globalThis.Bun;function bD(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var RD=async($)=>{let Z=new ED($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},fD=async($)=>{let Z;try{Z=(await import("./chunk-98byy5m4.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(()=>{})}},cG=($)=>bD()?RD($):fD($);var kD=/^[A-Za-z_][A-Za-z0-9_]*$/;class fJ{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(!kD.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??cG}async createTable(){for(let $ of wD(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 dG(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||x1()!==this.connection)return;return $}}function wD($,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 kJ{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 nG=new TextEncoder;function uG($,Z){return nG.encode(`id: ${$}
|
|
50
|
-
data: ${JSON.stringify(Z)}
|
|
51
|
-
|
|
52
|
-
`)}function oG($,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 J8))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,Q=!1,G=!1,K=(B)=>{if(X)clearInterval(X);if(X=null,z.close(),G)return;G=!0;try{B.close()}catch{}},F=new ReadableStream({start(B){X=setInterval(()=>{if(sG())return K(B);try{B.enqueue(nG.encode(lG))}catch{K(B)}},$.config.keepaliveInterval)},async pull(B){try{if(!Q){if(await z.ready(),Q=!0,!G)B.enqueue(uG(z.cursor,{type:"ready"}));return}let U=await z.next();if(U.done||G)return K(B);B.enqueue(uG(z.cursor,U.value))}catch(U){if(!G)console.error("[gemi] A change feed stream failed.",U);K(B)}},cancel(){if(G=!0,X)clearInterval(X);X=null,z.close()}});return new Response(F,{headers:iG()})}var aG=255,tG=500,qD=30000;class J8 extends Error{limit;constructor($){super(`The change feed holds its limit of ${$} subscriptions.`);this.limit=$;this.name="ChangeFeedFullError"}}class oZ{options;static token="changeFeed";driver;config;followers=new Map;all=new Set;listenState="off";listening=null;retryTimer=null;backoffMs=tG;pollTimer=null;polling=null;constructor($={},Z={}){this.options=Z;this.config=L1(pG(),$),this.driver=vD(this.config.driver,Z.application)}get subscriptions(){return this.all.size}get isListening(){return this.listenState==="listening"}async publish($,Z){qJ($);let J=Z===void 0?null:Z;if(s0()!==void 0&&!this.driver.joinsTransaction?.())return mZ(async()=>{this.wake($,await this.driver.publish($,J))}),null;let W=await this.driver.publish($,J);return mZ(()=>this.wake($,W)),W}async head($){return qJ($),(await this.driver.heads([$])).get($)??0}async cursor($){let Z=wJ($);return Z8(await this.driver.heads(Z))}subscribe($,Z={}){let J=wJ($);if(this.all.size>=this.config.maxSubscriptions)throw new J8(this.config.maxSubscriptions);let W=new rG(this,J,yD(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 oG(this,$,wJ(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=tG,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,qD)}}}class rG{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 Z8(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 qJ($){if(typeof $!=="string"||$===""||$.length>aG)throw Error(`A change feed channel is a string of 1 to ${aG} characters; got ${JSON.stringify($)}.`)}function wJ($){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)qJ(J);return Z}function yD($){if($===void 0||$===null)return new Map;if(typeof $==="string")return RJ($);let Z=$ instanceof Map?[...$]:Object.entries($);return RJ(Z8(new Map(Z)))}function vD($,Z){if($==="memory")return new kJ;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 fJ(Z.make(C1));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 eG extends g{static getFacadeAccessor(){return oZ}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 i3 extends p0{application;previous;sent=[];revoked=[];static install($){let Z=$.bound(p0)?$.make(p0):void 0;if(Z instanceof i3)return Z;let J=new i3($,Z);return $.instance(p0,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(p0,this.previous);return}this.application.forget(p0)}assertSent($,Z,J){if(this.matching($,Z,J).length>0)return;throw Error(`Expected ${yJ($,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 ${yJ($,Z,J)} not to have been broadcast, but it was broadcast ${vJ(W.length)}: ${gJ(W)}.`)}assertSentTimes($,Z,J,W){let Y=this.matching($,J,W);if(Y.length===Z)return;throw Error(`Expected ${yJ($,J,W)} to have been broadcast ${vJ(Z)}, but it was broadcast ${vJ(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"}: ${gJ(this.sent)}.`)}matching($,Z,J){return jZ($),this.sent.filter((W)=>(W.pattern===$||FW($,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: ${gJ(this.sent)}.`}}function yJ($,Z,J){return`${Z?`"${Z}" on `:"an event on "}"${$}"`+(J?" matching the predicate":"")}function vJ($){return`${$} ${$===1?"time":"times"}`}function gJ($){return $.map((Z)=>`${Z.topic} ${Z.event}(${gD(Z.data)})`).join(", ")}function gD($){if($===void 0)return"";try{return JSON.stringify($)??String($)}catch{return String($)}}class $K extends g{static getFacadeAccessor(){return p0}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 i3.install(H())}}function UA($){return $}function ZK(){return{store:"memory",sweepLimit:500}}var mJ=["completed","failed","cancelled","timed_out"],P1=["pending","running"];function T1($){return mJ.includes($)}class hJ{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,pJ($.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(T1(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(P1.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 pJ($){if($===void 0)return 50;return Math.max(0,Math.floor($))}class uJ{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 mD(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
|
-
${Y8($.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]?dJ(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 (${W8(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 ${pJ($.limit)}
|
|
64
|
-
`).map(dJ)}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(T1(J.status))j.push(W`finished_at = ${Y}`)}if("progress"in J)j.push(W`progress = ${Y8(J.progress)}`);if("result"in J)j.push(W`result = ${Y8(J.result)}`);if("error"in J)j.push(W`error = ${Y8(J.error)}`);let z=j.reduce((Q,G)=>W`${Q}, ${G}`),X=await W`
|
|
65
|
-
UPDATE ${this.name(W)} SET ${z}
|
|
66
|
-
WHERE id = ${$} AND status IN (${W8(W,Z)})
|
|
67
|
-
`;if(WK(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 (${W8(J,P1)})
|
|
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(dJ)}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 (${W8(Z,mJ)})
|
|
76
|
-
AND finished_at <= ${this.clock(Z)} - ${this.ms(Z,$)}
|
|
77
|
-
`;return WK(J)}joinable(){if(this.connection===void 0)return;let $=s0();if($===void 0||x1()!==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 W8($,Z){return Z.map((J)=>$`${J}`).reduce((J,W)=>$`${J}, ${W}`)}function Y8($){return $===void 0||$===null?null:JSON.stringify($)}function j8($){if($===null||$===void 0)return null;return JSON.parse(String($))}function cJ($){return $===null||$===void 0?null:Number($)}function JK($){return $===null||$===void 0?null:String($)}function dJ($){return{id:String($.id),kind:String($.kind),subject:JK($.subject),owner:JK($.owner),status:String($.status),meta:j8($.meta),progress:j8($.progress),result:j8($.result),error:j8($.error),version:Number($.version),createdAt:Number($.created_at),startedAt:cJ($.started_at),updatedAt:Number($.updated_at),finishedAt:cJ($.finished_at),deadlineAt:cJ($.deadline_at)}}function WK($){let Z=$;return Math.max(Number(Z.count??0),Number(Z.affectedRows??0))}function mD($,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 YK=191,jK=30000;class z8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class X8 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 lJ{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=L1(ZK(),$),this.store=cD(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make(oZ);return this.ownFeed??=new oZ,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){QK("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;QK("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:a$($.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 pD(Z),this.change($,P1,{status:"running",progress:Z})}complete($,Z){return this.change($,P1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,P1,{status:"failed",error:XK(Z)})}cancel($,Z){return this.change($,P1,{status:"cancelled",error:{message:Z??"The run was cancelled.",code:"cancelled"}})}async execute($,Z){let J=this.feed.subscribe(this.channel($));try{await J.ready();let W=await this.start($)??await this.store.get($);if(!W)throw new z8($);if(T1(W.status))return W;let Y=new AbortController,j=this.watch($,W,J,Y),z={id:$,record:W,signal:Y.signal,progress:async(Q)=>{if(Y.signal.aborted)return;await this.progress($,Q)}},X;try{let Q=await Z(z);X=await this.complete($,Q)}catch(Q){if(!(Q instanceof X8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,P1,{status:"failed",error:Q instanceof X8?XK(Q):{message:"The run failed.",code:"error"}})}finally{Y.abort(),J.close(),await j}return X??await this.store.get($)??W}finally{J.close()}}async wait($,Z={}){let{signal:J}=Z;J?.throwIfAborted();let W=Z.timeout===void 0?1/0:Date.now()+a$(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new z8($);let z=null;for(;;){if(T1(j.status))return j;J?.throwIfAborted();let X=await this.untilDeadline(j);if(X!==null&&X<=0){j=await this.expire($)??await this.store.get($)??j;continue}let Q=W-Date.now();if(Q<=0)return j;if(z??=Y.isClosed?new Promise(()=>{}):Y.next(),await zK(z,Math.min(Q,X??1/0,jK),J))z=null;j=await this.store.get($)??j}}finally{Y.close()}}async*subscribe($,Z={}){let J=this.feed.subscribe(this.channel($),{signal:Z.signal});try{await J.ready();let W=await this.store.get($);if(!W)throw new z8($);if(yield W,T1(W.status))return;for await(let Y of J){let j=hD(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,T1(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=a$($);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||T1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,P1,{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(T1(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,zK(j,Math.min(z??1/0,jK))]);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 zK($,Z,J){return new Promise((W,Y)=>{let j=Number.isFinite(Z)?setTimeout(()=>Q(!1),Math.max(0,Z)):null,z=()=>{X(),Y(J.reason)},X=()=>{if(j)clearTimeout(j);J?.removeEventListener("abort",z)},Q=(G)=>{X(),W(G)};J?.addEventListener("abort",z,{once:!0}),$.then(()=>Q(!0),()=>Q(!0))})}function hD($,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 XK($){if(typeof $==="string")return{message:$};if($ instanceof X8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function QK($,Z){if(typeof Z!=="string"||Z===""||Z.length>YK)throw TypeError(`A run's ${$} is a string of 1 to ${YK} characters; got ${JSON.stringify(Z)}.`)}function pD($){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 cD($,Z){if($==="memory")return new hJ;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(C1).connection();return new uJ(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 GK extends g{static getFacadeAccessor(){return lJ}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 KK extends g{static getFacadeAccessor(){return t1}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 Q8{bound;constructor($){this.bound=$}get name(){return this.bound??x1()}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 VK(J.sql,(W)=>BK(Z,()=>$(W)),{slowTransactionThreshold:J.config.slowTransactionThreshold,connection:Z})}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-bqxt1she.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=OK($,UK(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=s0();if($===void 0)return;return x1()===this.name?$:void 0}connection($=this.name){return FK($),H(C1).connection($)}}var aZ=new Q8;class DK extends g{static getFacadeAccessor(){return C1}static connection($){return new Q8($)}static get sql(){return aZ.sql}static get dialect(){return aZ.dialect}static query($){return aZ.query($)}static execute($){return aZ.execute($)}static transaction($){return aZ.transaction($)}static schema(){return aZ.schema()}static close(){return this.getFacadeRoot().close()}}export{j1 as fe,AK as ge,i0 as he,eZ as ie,F8 as je,YZ as ke,Z3 as le,I0 as me,e3 as ne,y8 as oe,v8 as pe,WY as qe,a1 as re,Q1 as se,_$ as te,t as ue,qW as ve,QZ as we,YY as xe,jY as ye,m8 as ze,h8 as Ae,V6 as Be,j3 as Ce,hB as De,XP as Ee,DY as Fe,IY as Ge,l8 as He,_Y as Ie,xY as Je,nB as Ke,CY as Le,i8 as Me,tB as Ne,rB as Oe,s8 as Pe,AY as Qe,SY as Re,t1 as Se,EY as Te,JF as Ue,o8 as Ve,I8 as We,j6 as Xe,N1 as Ye,T8 as Ze,I1 as _e,L$ as $e,e4 as af,AG as bf,SG as cf,_D as df,m1 as ef,XC as ff,EG as gf,AJ as hf,SJ as if,bJ as jf,fG as kf,wG as lf,qG as mf,vG as nf,mG as of,hG as pf,qC as qf,pG as rf,Z8 as sf,RJ as tf,fJ as uf,kJ as vf,J8 as wf,oZ as xf,rG as yf,eG as zf,p as Af,J3 as Bf,R4 as Cf,lP as Df,iP as Ef,sP as Ff,tP as Gf,qX as Hf,T9 as If,gX as Jf,JT as Kf,pX as Lf,p0 as Mf,v3 as Nf,cX as Of,$K as Pf,UA as Qf,mJ as Rf,P1 as Sf,T1 as Tf,hJ as Uf,uJ as Vf,mD as Wf,z8 as Xf,X8 as Yf,lJ as Zf,GK as _f,KK as $f,Q8 as ag,DK as bg,I9 as cg,eU as dg,k9 as eg,w9 as fg,FN as gg,XQ as hg,BQ as ig,$6 as jg,i1 as kg,AN as lg,VQ as mg,UQ as ng,YJ as og,lZ as pg,jJ as qg,bI as rg,gI as sg,mI as tg,HJ as ug,JD as vg,DJ as wg,jD as xg,l3 as yg,MJ as zg,VG as Ag,UG as Bg,n4 as Cg,Qx as Dg,Gx as Eg,Kx as Fg,Y1 as Gg,b as Hg,w0 as Ig,Z6 as Jg,LW as Kg,pK as Lg,UW as Mg,MW as Ng,H8 as Og,W6 as Pg,M8 as Qg,PW as Rg,nK as Sg,oK as Tg,CW as Ug,SW as Vg,bW as Wg,vW as Xg,gW as Yg,mW as Zg,A8 as _g,ZB as $g,J0 as ah,aW as bh,KZ as ch,ZY as dh};
|
|
116
|
-
|
|
117
|
-
//# debugId=2C38B3DEA590988C64756E2164756E21
|