gemi 0.172.0 → 0.173.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.
Files changed (203) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/bun/plugin.js +1 -1
  5. package/dist/bun/preload.js +1 -1
  6. package/dist/{chunk-thbs63gy.js → chunk-05k9gmr9.js} +1 -1
  7. package/dist/{chunk-fb77hwk0.js → chunk-0v46hne6.js} +3 -3
  8. package/dist/{chunk-fb77hwk0.js.map → chunk-0v46hne6.js.map} +1 -1
  9. package/dist/{chunk-njem61cd.js → chunk-1hhwqx50.js} +2 -2
  10. package/dist/{chunk-njem61cd.js.map → chunk-1hhwqx50.js.map} +1 -1
  11. package/dist/chunk-1pvfgfhj.js +117 -0
  12. package/dist/{chunk-mm5p3tvh.js.map → chunk-1pvfgfhj.js.map} +6 -6
  13. package/dist/chunk-2mvz2pjr.js +5 -0
  14. package/dist/{chunk-f4nanvkm.js.map → chunk-2mvz2pjr.js.map} +1 -1
  15. package/dist/{chunk-q3511sb5.js → chunk-2p7zph5z.js} +2 -2
  16. package/dist/{chunk-q3511sb5.js.map → chunk-2p7zph5z.js.map} +1 -1
  17. package/dist/{chunk-c46vhvk4.js → chunk-3esnjxv9.js} +2 -2
  18. package/dist/{chunk-c46vhvk4.js.map → chunk-3esnjxv9.js.map} +1 -1
  19. package/dist/{chunk-5n21z4n8.js → chunk-4dnr1vg7.js} +2 -2
  20. package/dist/{chunk-5n21z4n8.js.map → chunk-4dnr1vg7.js.map} +1 -1
  21. package/dist/{chunk-z0bzca7f.js → chunk-4hhvaa7a.js} +2 -2
  22. package/dist/{chunk-z0bzca7f.js.map → chunk-4hhvaa7a.js.map} +1 -1
  23. package/dist/{chunk-df2zeevj.js → chunk-5yvy70d7.js} +2 -2
  24. package/dist/{chunk-df2zeevj.js.map → chunk-5yvy70d7.js.map} +1 -1
  25. package/dist/{chunk-31np60bx.js → chunk-6016sfy5.js} +2 -2
  26. package/dist/{chunk-31np60bx.js.map → chunk-6016sfy5.js.map} +1 -1
  27. package/dist/{chunk-sdn3dmpp.js → chunk-699j2epd.js} +4 -4
  28. package/dist/{chunk-sdn3dmpp.js.map → chunk-699j2epd.js.map} +1 -1
  29. package/dist/{chunk-gwphn604.js → chunk-6rh3brnr.js} +3 -3
  30. package/dist/{chunk-gwphn604.js.map → chunk-6rh3brnr.js.map} +1 -1
  31. package/dist/{chunk-s71e6k9m.js → chunk-6srzhv88.js} +3 -3
  32. package/dist/{chunk-s71e6k9m.js.map → chunk-6srzhv88.js.map} +1 -1
  33. package/dist/{chunk-0wet87jm.js → chunk-6vmc8eak.js} +2 -2
  34. package/dist/{chunk-0wet87jm.js.map → chunk-6vmc8eak.js.map} +1 -1
  35. package/dist/{chunk-rpdekb8t.js → chunk-7gc1jp2z.js} +2 -2
  36. package/dist/{chunk-rpdekb8t.js.map → chunk-7gc1jp2z.js.map} +1 -1
  37. package/dist/{chunk-y3s05q6b.js → chunk-7mp369vg.js} +2 -2
  38. package/dist/{chunk-y3s05q6b.js.map → chunk-7mp369vg.js.map} +1 -1
  39. package/dist/{chunk-44y62yav.js → chunk-8tzmat5s.js} +3 -3
  40. package/dist/{chunk-44y62yav.js.map → chunk-8tzmat5s.js.map} +1 -1
  41. package/dist/{chunk-sv86v56c.js → chunk-97aeny79.js} +3 -3
  42. package/dist/{chunk-sv86v56c.js.map → chunk-97aeny79.js.map} +1 -1
  43. package/dist/{chunk-978pc27j.js → chunk-9bcsfce4.js} +2 -2
  44. package/dist/{chunk-978pc27j.js.map → chunk-9bcsfce4.js.map} +1 -1
  45. package/dist/{chunk-sp77zwpn.js → chunk-9pet8zmd.js} +2 -2
  46. package/dist/{chunk-sp77zwpn.js.map → chunk-9pet8zmd.js.map} +1 -1
  47. package/dist/{chunk-4mtqbcc5.js → chunk-9r4rvyfr.js} +2 -2
  48. package/dist/{chunk-4mtqbcc5.js.map → chunk-9r4rvyfr.js.map} +1 -1
  49. package/dist/{chunk-vfvjfw5k.js → chunk-9zcsshgb.js} +2 -2
  50. package/dist/{chunk-vfvjfw5k.js.map → chunk-9zcsshgb.js.map} +1 -1
  51. package/dist/{chunk-krdq5s4y.js → chunk-b1grj1t0.js} +2 -2
  52. package/dist/{chunk-krdq5s4y.js.map → chunk-b1grj1t0.js.map} +1 -1
  53. package/dist/{chunk-q788x8pm.js → chunk-bs8mrewm.js} +2 -2
  54. package/dist/{chunk-q788x8pm.js.map → chunk-bs8mrewm.js.map} +1 -1
  55. package/dist/{chunk-8b9ks729.js → chunk-bsnp7h5w.js} +3 -3
  56. package/dist/{chunk-8b9ks729.js.map → chunk-bsnp7h5w.js.map} +1 -1
  57. package/dist/{chunk-z4dhd5pk.js → chunk-c9q856yk.js} +2 -2
  58. package/dist/{chunk-z4dhd5pk.js.map → chunk-c9q856yk.js.map} +1 -1
  59. package/dist/{chunk-2v7wq01w.js → chunk-cx05t002.js} +2 -2
  60. package/dist/{chunk-2v7wq01w.js.map → chunk-cx05t002.js.map} +1 -1
  61. package/dist/{chunk-p56zntmt.js → chunk-d084zwp9.js} +3 -3
  62. package/dist/{chunk-p56zntmt.js.map → chunk-d084zwp9.js.map} +1 -1
  63. package/dist/{chunk-6t1t7h05.js → chunk-d7a79eqm.js} +2 -2
  64. package/dist/{chunk-6t1t7h05.js.map → chunk-d7a79eqm.js.map} +1 -1
  65. package/dist/{chunk-aj1jrwwh.js → chunk-df0nx9d6.js} +2 -2
  66. package/dist/{chunk-aj1jrwwh.js.map → chunk-df0nx9d6.js.map} +1 -1
  67. package/dist/{chunk-hwpp9b7f.js → chunk-dqj22m1r.js} +2 -2
  68. package/dist/{chunk-9wcv7e1a.js.map → chunk-dqj22m1r.js.map} +1 -1
  69. package/dist/chunk-dxtry1gh.js +10 -0
  70. package/dist/{chunk-qv2zapxa.js.map → chunk-dxtry1gh.js.map} +3 -3
  71. package/dist/{chunk-kbw6y0ag.js → chunk-erwawm84.js} +2 -2
  72. package/dist/{chunk-kbw6y0ag.js.map → chunk-erwawm84.js.map} +1 -1
  73. package/dist/{chunk-9ft0ayhf.js → chunk-eykb93pv.js} +2 -2
  74. package/dist/{chunk-9ft0ayhf.js.map → chunk-eykb93pv.js.map} +1 -1
  75. package/dist/{chunk-8hfyscnn.js → chunk-f1my4jah.js} +1 -1
  76. package/dist/{chunk-drwjwtmj.js → chunk-f4wkm07x.js} +2 -2
  77. package/dist/{chunk-drwjwtmj.js.map → chunk-f4wkm07x.js.map} +1 -1
  78. package/dist/{chunk-4tt14jnx.js → chunk-fqw81xgw.js} +2 -2
  79. package/dist/{chunk-4tt14jnx.js.map → chunk-fqw81xgw.js.map} +1 -1
  80. package/dist/{chunk-hgpvfhtp.js → chunk-g3m7t5zc.js} +1 -1
  81. package/dist/{chunk-0wk992a5.js → chunk-h041bq3j.js} +2 -2
  82. package/dist/{chunk-0wk992a5.js.map → chunk-h041bq3j.js.map} +1 -1
  83. package/dist/{chunk-sxf94q13.js → chunk-h3jb2g2g.js} +2 -2
  84. package/dist/{chunk-sxf94q13.js.map → chunk-h3jb2g2g.js.map} +1 -1
  85. package/dist/{chunk-vnk4vaer.js → chunk-hr9twa8v.js} +3 -3
  86. package/dist/{chunk-vnk4vaer.js.map → chunk-hr9twa8v.js.map} +1 -1
  87. package/dist/{chunk-21hppqtb.js → chunk-jhn1h70n.js} +2 -2
  88. package/dist/{chunk-21hppqtb.js.map → chunk-jhn1h70n.js.map} +1 -1
  89. package/dist/{chunk-wp9hw3we.js → chunk-jv48eg0a.js} +2 -2
  90. package/dist/{chunk-wp9hw3we.js.map → chunk-jv48eg0a.js.map} +1 -1
  91. package/dist/{chunk-3682hkq0.js → chunk-k9ndr16q.js} +2 -2
  92. package/dist/{chunk-3682hkq0.js.map → chunk-k9ndr16q.js.map} +1 -1
  93. package/dist/{chunk-4qpyz627.js → chunk-kknybxbv.js} +2 -2
  94. package/dist/{chunk-4qpyz627.js.map → chunk-kknybxbv.js.map} +1 -1
  95. package/dist/{chunk-a9frf7ym.js → chunk-ksgeqtcv.js} +2 -2
  96. package/dist/{chunk-a9frf7ym.js.map → chunk-ksgeqtcv.js.map} +1 -1
  97. package/dist/{chunk-ta2wsjz6.js → chunk-kxgxeead.js} +2 -2
  98. package/dist/{chunk-ta2wsjz6.js.map → chunk-kxgxeead.js.map} +1 -1
  99. package/dist/{chunk-xkas0yp8.js → chunk-m0nvysa5.js} +3 -3
  100. package/dist/{chunk-xkas0yp8.js.map → chunk-m0nvysa5.js.map} +1 -1
  101. package/dist/{chunk-fcbgshf5.js → chunk-m250ejpg.js} +2 -2
  102. package/dist/{chunk-fcbgshf5.js.map → chunk-m250ejpg.js.map} +1 -1
  103. package/dist/{chunk-embwksec.js → chunk-mbshptjq.js} +2 -2
  104. package/dist/{chunk-embwksec.js.map → chunk-mbshptjq.js.map} +1 -1
  105. package/dist/{chunk-m6sj1q1q.js → chunk-nfj6k1a6.js} +2 -2
  106. package/dist/{chunk-m6sj1q1q.js.map → chunk-nfj6k1a6.js.map} +1 -1
  107. package/dist/{chunk-yem48znp.js → chunk-pbc3w7mq.js} +2 -2
  108. package/dist/{chunk-yem48znp.js.map → chunk-pbc3w7mq.js.map} +1 -1
  109. package/dist/{chunk-zppfpg1m.js → chunk-psmwxtf5.js} +2 -2
  110. package/dist/{chunk-zppfpg1m.js.map → chunk-psmwxtf5.js.map} +1 -1
  111. package/dist/{chunk-777v6242.js → chunk-qfqn7rz8.js} +1 -1
  112. package/dist/{chunk-ktfc7jmg.js → chunk-r1n2fkfz.js} +2 -2
  113. package/dist/{chunk-ktfc7jmg.js.map → chunk-r1n2fkfz.js.map} +1 -1
  114. package/dist/{chunk-d54afkwy.js → chunk-r22svpab.js} +3 -3
  115. package/dist/{chunk-d54afkwy.js.map → chunk-r22svpab.js.map} +1 -1
  116. package/dist/{chunk-jxx9mctk.js → chunk-rjsd8f8q.js} +2 -2
  117. package/dist/{chunk-jxx9mctk.js.map → chunk-rjsd8f8q.js.map} +1 -1
  118. package/dist/{chunk-k87tqe29.js → chunk-sgarq1q9.js} +2 -2
  119. package/dist/{chunk-k87tqe29.js.map → chunk-sgarq1q9.js.map} +1 -1
  120. package/dist/{chunk-jd079awh.js → chunk-sjg5g92s.js} +2 -2
  121. package/dist/{chunk-jd079awh.js.map → chunk-sjg5g92s.js.map} +1 -1
  122. package/dist/{chunk-3rp908gn.js → chunk-srvsz7vm.js} +1 -1
  123. package/dist/{chunk-gjwf07hy.js → chunk-tbf76adx.js} +2 -2
  124. package/dist/{chunk-gjwf07hy.js.map → chunk-tbf76adx.js.map} +1 -1
  125. package/dist/{chunk-17272ccy.js → chunk-tzne38pa.js} +3 -3
  126. package/dist/{chunk-17272ccy.js.map → chunk-tzne38pa.js.map} +1 -1
  127. package/dist/{chunk-m950vw4c.js → chunk-vpmbynke.js} +2 -2
  128. package/dist/{chunk-m950vw4c.js.map → chunk-vpmbynke.js.map} +1 -1
  129. package/dist/{chunk-s4fb4njt.js → chunk-vzz91xsm.js} +2 -2
  130. package/dist/{chunk-s4fb4njt.js.map → chunk-vzz91xsm.js.map} +1 -1
  131. package/dist/{chunk-5nz46dyw.js → chunk-w65gftzm.js} +2 -2
  132. package/dist/{chunk-5nz46dyw.js.map → chunk-w65gftzm.js.map} +1 -1
  133. package/dist/{chunk-g1jfc50d.js → chunk-w8hre8gz.js} +2 -2
  134. package/dist/{chunk-g1jfc50d.js.map → chunk-w8hre8gz.js.map} +1 -1
  135. package/dist/{chunk-wt1yzzbw.js → chunk-x2e20w8g.js} +1 -1
  136. package/dist/{chunk-9wcv7e1a.js → chunk-xe126csw.js} +2 -2
  137. package/dist/{chunk-hwpp9b7f.js.map → chunk-xe126csw.js.map} +1 -1
  138. package/dist/{chunk-0q65jzhv.js → chunk-xtj7cgsx.js} +2 -2
  139. package/dist/{chunk-0q65jzhv.js.map → chunk-xtj7cgsx.js.map} +1 -1
  140. package/dist/{chunk-5rzb2c9n.js → chunk-yeaftz5a.js} +2 -2
  141. package/dist/{chunk-5rzb2c9n.js.map → chunk-yeaftz5a.js.map} +1 -1
  142. package/dist/{chunk-9akefv1y.js → chunk-ykd2ayw8.js} +2 -2
  143. package/dist/{chunk-9akefv1y.js.map → chunk-ykd2ayw8.js.map} +1 -1
  144. package/dist/{chunk-z5g56ds0.js → chunk-ywcfezjq.js} +2 -2
  145. package/dist/{chunk-z5g56ds0.js.map → chunk-ywcfezjq.js.map} +1 -1
  146. package/dist/{chunk-f82m70ek.js → chunk-z58zh5gm.js} +2 -2
  147. package/dist/{chunk-f82m70ek.js.map → chunk-z58zh5gm.js.map} +1 -1
  148. package/dist/{chunk-ecdjbd2w.js → chunk-zdpxwpc3.js} +3 -3
  149. package/dist/{chunk-ecdjbd2w.js.map → chunk-zdpxwpc3.js.map} +1 -1
  150. package/dist/config/index.js +1 -1
  151. package/dist/console/run.js +2 -2
  152. package/dist/console/run.js.map +1 -1
  153. package/dist/container/index.js +2 -2
  154. package/dist/container/index.js.map +1 -1
  155. package/dist/database/index.js +2 -2
  156. package/dist/database/index.js.map +1 -1
  157. package/dist/email/index.js +2 -2
  158. package/dist/email/index.js.map +1 -1
  159. package/dist/facades/index.js +2 -2
  160. package/dist/facades/index.js.map +1 -1
  161. package/dist/foundation/index.js +2 -2
  162. package/dist/foundation/index.js.map +1 -1
  163. package/dist/http/contentDisposition.d.ts +1 -1
  164. package/dist/http/contentDisposition.d.ts.map +1 -1
  165. package/dist/http/index.js +2 -2
  166. package/dist/http/index.js.map +1 -1
  167. package/dist/i18n/dictionaryRuntime.js +2 -2
  168. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  169. package/dist/i18n/index.js +2 -2
  170. package/dist/i18n/index.js.map +1 -1
  171. package/dist/kernel/index.js +2 -2
  172. package/dist/kernel/index.js.map +1 -1
  173. package/dist/orm/index.js +2 -2
  174. package/dist/orm/index.js.map +1 -1
  175. package/dist/probe/index.js +2 -2
  176. package/dist/probe/index.js.map +1 -1
  177. package/dist/server/index.js +2 -2
  178. package/dist/server/index.js.map +1 -1
  179. package/dist/services/index.js +2 -2
  180. package/dist/services/index.js.map +1 -1
  181. package/dist/services/queue/work.js +2 -2
  182. package/dist/services/queue/work.js.map +1 -1
  183. package/dist/services/router/ViewRouteDispatcher.d.ts +2 -0
  184. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  185. package/dist/services/router/config.d.ts +22 -3
  186. package/dist/services/router/config.d.ts.map +1 -1
  187. package/dist/services/router/globalMiddleware.d.ts.map +1 -1
  188. package/dist/services/router/staticCache.d.ts +8 -0
  189. package/dist/services/router/staticCache.d.ts.map +1 -1
  190. package/dist/stats/route-table.js +1 -1
  191. package/dist/support/index.js +2 -2
  192. package/dist/support/index.js.map +1 -1
  193. package/dist/vitest/index.js +1 -1
  194. package/package.json +1 -1
  195. package/dist/chunk-f4nanvkm.js +0 -5
  196. package/dist/chunk-mm5p3tvh.js +0 -117
  197. package/dist/chunk-qv2zapxa.js +0 -10
  198. /package/dist/{chunk-thbs63gy.js.map → chunk-05k9gmr9.js.map} +0 -0
  199. /package/dist/{chunk-8hfyscnn.js.map → chunk-f1my4jah.js.map} +0 -0
  200. /package/dist/{chunk-hgpvfhtp.js.map → chunk-g3m7t5zc.js.map} +0 -0
  201. /package/dist/{chunk-777v6242.js.map → chunk-qfqn7rz8.js.map} +0 -0
  202. /package/dist/{chunk-3rp908gn.js.map → chunk-srvsz7vm.js.map} +0 -0
  203. /package/dist/{chunk-wt1yzzbw.js.map → chunk-x2e20w8g.js.map} +0 -0
@@ -0,0 +1,117 @@
1
+ // @bun
2
+ import{mh as CK}from"./chunk-hr9twa8v.js";import{Gh as xK}from"./chunk-m0nvysa5.js";import{Fi as S1,Hh as Q3,Ji as xQ,Ki as ZZ,Lh as CG,Li as JZ,Mh as dW,Mi as YK,Nh as uW,Oh as P8,Oi as jK,Ph as D8,Sh as O8,Th as L8,Uh as tZ,Vh as a4,Wh as RJ,Xh as FW,Yh as d,ci as C,di as p8,ei as FZ,fi as N8,gi as B6,ii as b$,ji as m,ki as d4,si as V6,yi as F6}from"./chunk-r22svpab.js";import{Ri as $$,Si as z0,Ti as J$,Ui as iW}from"./chunk-4dnr1vg7.js";import{$i as r4,Vi as t$,Wi as kJ,_i as bY,aj as P}from"./chunk-4hhvaa7a.js";import{dj as UQ,gj as u3}from"./chunk-6srzhv88.js";import{kj as cY,nj as rG}from"./chunk-0v46hne6.js";import{Fj as E$,Kj as Z$}from"./chunk-rjsd8f8q.js";import{Yj as aX}from"./chunk-vzz91xsm.js";import{Zj as WZ,ak as oG}from"./chunk-d7a79eqm.js";import{bk as T1}from"./chunk-ksgeqtcv.js";import{ck as X6,dk as l0,ek as E1,fk as eJ,gk as IK,ik as uZ,jk as JK,sk as $W}from"./chunk-6rh3brnr.js";import{Hk as b1}from"./chunk-vpmbynke.js";import{Mk as IG,Rk as IJ}from"./chunk-9bcsfce4.js";import{Yk as _J,bl as c}from"./chunk-9zcsshgb.js";import{cl as rZ,fl as M}from"./chunk-bsnp7h5w.js";import{nl as HJ}from"./chunk-9pet8zmd.js";import{ol as zK}from"./chunk-ykd2ayw8.js";import{yl as UJ}from"./chunk-7gc1jp2z.js";import{Bl as AG,zl as j8}from"./chunk-sjg5g92s.js";import{Gl as t4}from"./chunk-xe126csw.js";function Z6($){return typeof $==="function"&&$.prototype!==void 0}var YW=Symbol.for("gemi.HttpResponse"),kK=new Set([301,302,303,307,308]);class Q1{kind;body;status;headers;[YW]=!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 WW(J,"json"),new Q1("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 Q1.json({error:Z},{...J,status:$})}static redirect($,Z={}){let J=Z.status??303;if(!kK.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 Q1("empty",void 0,J,Y)}static noContent($={}){return new Q1("empty",null,204,new Headers($.headers))}static text($,Z={}){let J=Z.status??200;return WW(J,"text"),new Q1("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 WW($,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 r1($){return typeof $==="object"&&$!==null&&$[YW]===!0}function wK($,Z,J={}){return Q1.error($,Z,J)}function o0($){return typeof $==="string"?[$]:$}function J6($,Z){let J=$.split(/[\\/]/).pop()??"",W=Z?"attachment":"inline",Y=J.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${W}; filename="${Y}"; filename*=UTF-8''${encodeURIComponent(J)}`}function qK($){return"total"in $&&"partial"in $&&"body"in $}function jW(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function W3($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":L8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function yK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(qK($))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 M8($,Z){if($ instanceof Response)return $;if(!$)return jW();let J=await yK($),{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 jW()}let{range:Q}=Z;if(Q){if(z<=0)return W3(Math.max(z,0));if(!X){if(W instanceof Blob){let K=D8(Q,z);if(!K)return W3(z);W=W.slice(K.start,K.end+1),Y=K.start,j=K.end,X=!0}}}let G=Boolean(Q)&&X,B=G?206:J.status,V=new Headers;if(V.set("Accept-Ranges","bytes"),V.set("Content-Type",J.type||"application/octet-stream"),V.set("X-Content-Type-Options","nosniff"),G)V.set("Content-Range",O8(Y,j,z)),V.set("Content-Length",String(j-Y+1));else if(z>=0)V.set("Content-Length",String(z));if(J.name)V.set("Content-Disposition",J6(J.name,J.download));if(J.etag)V.set("ETag",J.etag);if(J.lastModified)V.set("Last-Modified",J.lastModified.toUTCString());for(let[K,F]of Object.entries(J.extraHeaders))V.set(K,F);if((Z.method??"GET").toUpperCase()==="HEAD"){if(W&&"cancel"in W&&typeof W.cancel==="function")await W.cancel();return new Response(null,{status:B,headers:V})}return new Response(W,{status:B,headers:V})}class QZ extends z0{limit;constructor($){super("The request body is too large.",{status:413});this.limit=$}}var zW={b:1,k:1024,kb:1024,m:1048576,mb:1048576,g:1073741824,gb:1073741824};function j3($){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 zW)))return Math.floor(Number(J[1])*(zW[J[2]]??1))}throw Error(`Invalid body limit ${JSON.stringify($)}. Use a byte count or a size such as "64kb", "1mb" or "none".`)}var Y3=new WeakMap;function QW($){return Y3.has($)}function GW($){return Y3.get($)?.limit??null}function KW($){let Z=Y3.get($);return Z?Z.read>Z.limit:!1}function vK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function T8($,Z){let J=vK($);if(J!==null&&J>Z)throw new QZ(Z)}function W6($,Z,J={}){let W=Y3.get($);if(W)W.limit=Z;else{let Y={limit:Z,read:0,stream:void 0,used:!1};Y3.set($,Y),mK($,Y)}if(J.checkDeclared!==!1)T8($,Z)}function gK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function H8($,Z){if(Z.stream!==void 0)return Z.stream;let J=gK($);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 QZ(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 XZ($,Z){if(T8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=H8($,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 XW($){return $.headers.get("Content-Type")??""}function mK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>H8($,Z)}),J("bodyUsed",{get:()=>Z.used||Boolean(Z.stream?.locked)||Reflect.get(Object.getPrototypeOf($),"bodyUsed",$)}),J("bytes",{value:()=>XZ($,Z)}),J("arrayBuffer",{value:async()=>{let W=await XZ($,Z);return W.buffer.slice(W.byteOffset,W.byteOffset+W.byteLength)}}),J("text",{value:async()=>new TextDecoder().decode(await XZ($,Z))}),J("json",{value:async()=>JSON.parse(new TextDecoder().decode(await XZ($,Z)))}),J("blob",{value:async()=>new Blob([await XZ($,Z)],{type:XW($)})}),J("formData",{value:async()=>new Response(await XZ($,Z),{headers:{"Content-Type":XW($)}}).formData()}),J("clone",{value:()=>{T8($,Z.limit);let W=H8($,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 BW($){return Z6($)}class o{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(!BW(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(BW(this.handler)){let Z=new this.handler;return Z[this.methodName].bind(Z)()}return this.handler()}middleware($){return this.middlewares=o0($),this}}class UW{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=o0($),this}async run(){let $=new C,Z=$.headers.toJSON();for(let J of FW($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if(KW($.rawRequest))throw new QZ(GW($.rawRequest));throw J}}}class DW{constructor(...$){return new o(...$)}}class OW extends o{__internal_brand="StreamHandler";async run($){let Z=P.getStore(),J=Z?.req?.rawRequest,W=P8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);if(r1(Y))return Y;return await M8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof N8)return W3(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class LW{constructor(...$){return new OW(...$)}}class MW{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new o("GET",$,"list"),post:new o("POST",$,"store")},this.second={get:new o("GET",$,"show"),put:new o("PUT",$,"update"),delete:new o("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 C0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new o("GET",$,Z)}post($,Z){return new o("POST",$,Z)}put($,Z){return new o("PUT",$,Z)}patch($,Z){return new o("PATCH",$,Z)}delete($,Z){return new o("DELETE",$,Z)}resource($){return new MW($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${VW($)}.`);return hK($)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${VW($)}.`);return pK($)}file($,Z){return new DW("GET",$,Z)}stream($,Z){return new LW("GET",$,Z)}proxy($,Z={}){return new UW($,Z)}}function VW($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function hK($){let Z={stream:new o("POST",$,"stream"),attach:new o("POST",$,"attach"),stop:new o("POST",$,"stop"),upload:new o("POST",$,"upload")};return class extends C0{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 pK($){let Z={start:new o("POST",$,"voiceStart"),update:new o("PATCH",$,"voiceUpdate"),end:new o("DELETE",$,"voiceEnd")};return class extends C0{static __internal_brand="VoiceRoute";static controller=$;static handlers=Z;routes={"/":Z.start,"/:sessionId":{patch:Z.update,delete:Z.end}};static middleware(W){if(W.start)Z.start.middleware(W.start);if(W.update)Z.update.middleware(W.update);if(W.end)Z.end.middleware(W.end);return this}}}var t1="access_token";function S$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function Y6($,Z){let J=S$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var cK=/^[A-Za-z0-9_-]+$/,dK=/^:[A-Za-z_][A-Za-z0-9_]*$/,HW=/^[A-Za-z0-9_-]{1,128}$/,uK=/^[A-Za-z0-9_.:-]+$/;class u extends Error{constructor($){super($);this.name="InvalidChannelError"}}function TW($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function GZ($){if(typeof $!=="string"||$.length===0)throw new u("A channel pattern must be a non-empty string.");if($.length>255)throw new u(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(dK.test(W)){let Y=W.slice(1);if(J.has(Y))throw new u(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new u(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!cK.test(W))throw new u(`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 z3($,Z={}){let J=GZ($),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 u(`The channel "${$}" needs the param "${z}".`);let Q=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof Q!=="string"||!HW.test(Q))throw new u(`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 u(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new u(`The topic built from "${$}" is longer than 255 characters.`);return Y}function _8($){if(GZ($).some((J)=>J.startsWith(":")))throw new u(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function PW($){if(typeof $!=="string"||$.length===0||$.length>64||!uK.test($))throw new u(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function NW($,Z){if($===Z)return!0;if($===U0)return Z.startsWith(`${U0}.`)&&Z.split(".").length===2;let J=$.split("."),W=Z.split(".");if(J.length!==W.length)return!1;return J.every((Y,j)=>Y===W[j]||Y.startsWith(":")&&HW.test(W[j]))}var U0="user";function KZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return z3(`${U0}.:id`,{id:Z})}class Z0{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class j6 extends Z0{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');return W6(this.req.rawRequest,j3(Z)),{}}}function lK($){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 iK={"body-limit":j6};class e1{config;static token="middleware";defaultBodyLimit;constructor($){this.config=$;this.defaultBodyLimit=$.bodyLimit===null||$.bodyLimit===void 0?null:j3($.bodyLimit)}get aliases(){return{...iK,...this.config.aliases}}applyDefaultBodyLimit($){if(this.defaultBodyLimit!==null&&!QW($))W6($,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 lK($).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:_W(z)})}}else if(Z6(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:_W(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 sK(W.slice(j+1)),z}return Y})()}}function _W($){return $?.runsOnRefusal===!0}async function sK($){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,...o0($)],this}events(...$){return this}}class AW{static __brand="ChannelRouter";channels={};public(){return new z6("public")}private($){return new z6("private",$)}async authorize($,Z,J={},W={}){try{rK(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(!SW(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===U0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=z3(Z,J??{})}catch(Q){if(Q instanceof u)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 P.exit(()=>X6.exit(()=>P.run(X,async()=>{let Q=P.getStore();try{if(Y.middlewares.length>0)await M(e1).runMiddleware(Y.middlewares);if(Z===U0){let G=await IW(X);if(!G)return{ok:!1,code:"denied"};if(j=KZ(G),Y.visibility==="private"&&Y.authorizer){if(await xW(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 xW(Y.authorizer,X,z):await IW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(aK(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 nK($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;EW(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 SW($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function IW($){if(!P.getStore().user&&S$($)===null)return null;try{return await q0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function xW($,Z,J){if(oK($))return new $().authorize(Z,J);return $(Z,J)}function oK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function aK($){return $?.kind===$$||Z$($)||E$($)}var CW=new WeakSet;function rK($){if(CW.has($))return;EW($),CW.add($)}function EW($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!SW(Y))throw new u(`The channel "${W}" is not declared with this.public() or this.private().`);let j=GZ(W);if(j[0].startsWith(":"))throw new u(`The channel pattern "${W}" starts with a param. Start it with a literal segment, such as "site.:siteId", so it cannot overlap another channel.`);if(W!==U0&&j.length===2&&j[0]===U0)throw new u(`The channel pattern "${W}" can build user.<id>, which belongs to the "user" channel (the signed-in user's own). Declare "user" and emit with Broadcast.toUser(user), or name this channel differently.`);if(W!==U0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new u(`The private channel "${W}" has params but no authorization, so every signed-in user could join every one of them. Pass a callback or a policy that checks the params: this.private((req, params) => ...).`);J.push({pattern:W,segments:W===U0?[U0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(tK(J[W].segments,J[Y].segments))throw new u(`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 tK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class I8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class Q6{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class x8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}function eK($){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 $B($,Z){let J=eK($);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 bW{static __brand="McpRouter";routes={};scopes;param($){return new I8($.as,$.input,$.bind)}fromTool($,Z={}){return new x8($,Z)}fromApiRoute($,Z,J){return new Q6($,Z,J)}fromApiRouteFor($,Z,J){let{name:W,audiences:Y,description:j,params:z,files:X,...Q}=J,G=`McpRouter.fromApiRouteFor("${$}", "${Z}")`,B=Object.keys(Y??{});if(B.length===0)throw Error(`${G}: declare at least one audience.`);let V={},K=new Map;for(let F of B){let{name:U,casing:D,description:O,params:L,files:T,...H}=Y[F],I=U??(D?$B(W,D):W);if(K.has(I))throw Error(`${G}: the audiences "${K.get(I)}" and "${F}" are both named "${I}". Give one its own name or casing.`);K.set(I,F);let S=typeof O==="function"?j===void 0?void 0:O(j):O??j;if(typeof S!=="string")throw Error(`${G}: the audience "${F}" has no description, and there is no shared one.`);let A={...Q,...H,description:S};if(z||L)A.params={...z,...L};if(X||T)A.files={...X,...T};V[I]=new Q6($,Z,A)}return V}}function D0($,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 C8 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 C1{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 C8([D0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new C8($,Z)}}class RW{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 C1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=o0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function A8($,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",J6(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class fW{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=o0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function kW($,Z){if(r1($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class wW{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=kW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=o0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class qW{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends A1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends A1{routes=J??{}}}else this.children=class extends A1{routes=Z},this.handler=()=>({})}async run($,Z){let J=kW(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=o0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class A1{middlewares=[];featureGates=[];routes={};view($,Z){return new wW($,Z)}file($){return new fW($)}redirect($){return new RW($)}layout($,Z,J){return new qW($,Z,J)}}function ZB($){return $}function JB(){return{aliases:{},global:[],bodyLimit:null}}var G1="redirect";function K1($,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 BZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function WB($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(M(c).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function YB($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function G6($,Z){let J=Z||M(E).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=WB($,!W);if(W||!YB(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(G1,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class yW extends Z0{async run($){let Z=P.getStore(),J=Z.req;if(Z.user)return{};let W=await Y6(M(E),J);if(!W)throw new b$({redirectTo:G6(J,$)});return Z.setUser(W),{}}}var E8="gemi_same_site",S8="private, no-cache, no-store, max-age=0, must-revalidate";class K6 extends Z0{run(){let $=P.getStore(),Z=$?.req;if(!Z||$.user)return{};let J=Z.rawRequest;if(Z.kind!=="view"||J.method!=="GET"&&J.method!=="HEAD")return{};let W=new URL(J.url);if(/\.(json|og)$/.test(W.pathname))return{};if(W.searchParams.has(E8))return{};if(S$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(E8,"1"),new vW(`${W.pathname}${W.search}`)}}class vW extends z0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=jB($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":S8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":S8}},viewData:{status:200,data:{},headers:{"Cache-Control":S8},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 jB($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}class gW extends Z0{async run(...$){let[Z="public",J="864000",...W]=$,Y=`${Z}, max-age=${J}${W.length>0?", ":""}${W.join(", ")}`;if($.length===0)Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="public")Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="private")Y="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",Y);return{}}}var mW={"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 hW extends Z0{static runsOnRefusal=!0;config={origins:{"":{"Access-Control-Allow-Methods":"GET, HEAD, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"}}};run(){let $=this.req,Z=$.rawRequest.headers.get("Origin");if(Z&&this.config.origins[Z]){$.ctx().setHeaders("Access-Control-Allow-Origin",Z);let J={...mW,...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={...mW,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var zB="Rate limit exceeded";class W$ extends z0{result;retryAfter;constructor($,Z=zB){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?b8($):{}};this.payload={api:{status:429,data:{error:{...J$("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function b8($){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 B1{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(pW("window",W),pW("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 W$(W,typeof J==="function"?J(W):J);return W}}function pW($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}import{isIP as R8}from"net";function R$($){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 R8(j)===6?j:null}if(R8(Z))return Z;let J=/^(\d{1,3}(?:\.\d{1,3}){3}):\d{1,5}$/.exec(Z);return J&&R8(J[1])===4?J[1]:null}class lW extends Z0{async run($,Z){let J=XB();if(!J)return{};let W=await J.consume(this.key(),{limit:cW($)??this.config.limit,window:cW(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(b8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new W$(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=dW(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${VZ(this.req)}:${this.req.routePath??"*"}`}}function XB(){try{let $=M();return $.bound(B1)?$.make(B1):null}catch{return null}}function VZ($){let Z=uW($.rawRequest);if(Z!==void 0)return Z;let J=$.headers.get("x-forwarded-for");if(J){let[W]=J.split(",");if(W?.trim())return R$(W)??W.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function cW($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class sW extends Z0{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new f8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new f8;return{}}}class f8 extends z0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:iW("csrf","Invalid CSRF token",403)}},view:{}}}class nW{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class oW{all($,Z){return!0}}class k8{options;param;refuse;answers=new WeakMap;constructor($){this.options=$;this.param=$.param,this.refuse=$.refuse??"not_found"}refusal(){return this.refuse==="forbidden"?new FZ:new B6}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 Z0{async run(J){await $(this.req,J)}}}return this.middlewareClass}middlewareClass;forAgent($){return{authorize:async(Z,{threadId:J,body:W})=>{let Y;if(J!==void 0){if(Y=$.thread?await $.thread(J,Z):null,Y===null||Y===void 0)throw this.refusal()}if(W!==void 0){let j=await $.body(W,Z);if(await this.authorize(Z,j),J!==void 0&&String(Y)!==String(j))throw this.refusal();return}if(J!==void 0)await this.authorize(Z,Y)}}}async decide($,Z){let J=await this.options.load(Z,$);if(J===null||J===void 0||!await this.options.allow(J,$))throw this.refusal();return J}isRefusal($){return this.refuse==="forbidden"?$ instanceof FZ:$ instanceof B6}}function QB($){return new k8($)}async function U6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await PB($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return TB(z,Z,J,$.url)}async function TB($,Z,J,W){let Y=$.getReader(),j=[],z=0;try{for(;;){let{done:G,value:B}=await Y.read();if(G)break;if(z+B.byteLength>Z){if(!J)throw new F6(W,Z);j.push(B.subarray(0,Z-z)),z=Z;break}j.push(B),z+=B.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 PB($){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 D6($){return new TextDecoder("utf-8").decode($)}var NB={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"};function f$($){return $.replace(/[&<>"']/g,(Z)=>NB[Z])}var _B={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function w8($){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 _B[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 q8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function aW($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(w8($.slice(W)));return}if(Y>W)Z.text(w8($.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(q8($.slice(Y+2,j).trim())),W=j+1}else{let j=IB($,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=q8(z.slice(0,Q));if(G){if(Z.open(G,xB(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function IB($,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 xB($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[q8(W[1])]=w8(W[2]??W[3]??"");return Z}class X0 extends Error{url;status;constructor($,Z=null,J=null){super($);this.url=Z;this.status=J;this.name="SitemapError"}}var ZY="http://www.sitemaps.org/schemas/sitemap/0.9",CB="http://www.w3.org/1999/xhtml",g8=`<?xml version="1.0" encoding="UTF-8"?>
3
+ `,rW=`<urlset xmlns="${ZY}" xmlns:xhtml="${CB}">
4
+ `,tW=`</urlset>
5
+ `,k$=50000,X3=52428800,eW=2048,AB=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),SB=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,EB="application/xml; charset=utf-8",$Y=new TextEncoder;function m8($,Z){let J;try{J=new URL($)}catch{throw new X0(`Sitemap: ${Z} "${$}" is not an absolute URL.`)}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new X0(`Sitemap: ${Z} "${$}" is not an http(s) URL.`);let W=J.href;if(W.length>eW)throw new X0(`Sitemap: ${Z} is over ${eW} characters: "${W.slice(0,80)}\u2026".`);return W}function JY($,Z){if($ instanceof Date){if(Number.isNaN($.getTime()))throw new X0(`Sitemap: lastmod of ${Z} is an invalid Date.`);return $.toISOString()}if(!SB.test($))throw new X0(`Sitemap: lastmod "${$}" of ${Z} is not a W3C datetime (e.g. "2026-10-07" or "2026-10-07T12:00:00Z").`);return $}function bB($){let Z=m8($.loc,"loc"),J=`<url><loc>${f$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${f$(JY($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!AB.has($.changefreq))throw new X0(`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 X0(`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 X0(`Sitemap: an alternate of ${Z} has no hrefLang.`);let j=m8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${f$(Y)}" href="${f$(j)}"/>`}return`${J}</url>
6
+ `}function RB($){let Z=$.maxUrls??k$,J=$.maxBytes??X3;if(!Number.isInteger(Z)||Z<1||Z>k$)throw RangeError(`Sitemap: maxUrls must be an integer from 1 to ${k$}.`);if(!Number.isInteger(J)||J<1||J>X3)throw RangeError(`Sitemap: maxBytes must be an integer from 1 to ${X3}.`);return{maxUrls:Z,maxBytes:J}}function WY($,Z={}){let{maxUrls:J,maxBytes:W}=RB(Z),Y=$Y.encode(g8+rW+tW).byteLength,j=[],z=[],X=Y,Q=()=>{j.push(g8+rW+z.join("")+tW),z=[],X=Y};for(let G of $){let B=bB(G),V=$Y.encode(B).byteLength;if(Y+V>W)throw new X0(`Sitemap: the entry for ${G.loc} alone is over maxBytes (${W}).`);if(z.length===J||X+V>W)Q();z.push(B),X+=V}if(z.length>0||j.length===0)Q();return j}function YY($){let Z="",J=0;for(let W of $){if(++J>k$)throw new X0(`Sitemap: an index can list at most ${k$} sitemaps.`);let Y=m8(W.loc,"sitemap loc");if(Z+=`<sitemap><loc>${f$(Y)}</loc>`,W.lastmod!=null)Z+=`<lastmod>${f$(JY(W.lastmod,Y))}</lastmod>`;Z+=`</sitemap>
7
+ `}return`${g8}<sitemapindex xmlns="${ZY}">
8
+ ${Z}</sitemapindex>
9
+ `}function y8($,Z,J){let W=new Headers(J);if(!W.has("content-type"))W.set("content-type",EB);return new Response($,{status:Z,headers:W})}function fB($){if($===null||$===void 0||$==="")return null;let Z=String($);return/^[1-9]\d{0,8}$/.test(Z)?Number(Z):NaN}function kB($,Z={}){let J=WY($,Z),W=fB(Z.page);if(W!==null){let j=J[W-1];return j?y8(j,200,Z.headers):new Response("Not found",{status:404,headers:{"cache-control":"no-store"}})}if(J.length===1)return y8(J[0],200,Z.headers);let Y=Z.pageUrl;if(!Y)throw new X0(`Sitemap: the entries need ${J.length} files, so Sitemap.response needs \`pageUrl\` to list them in an index.`);return y8(YY(J.map((j,z)=>({loc:Y(z+1)}))),200,Z.headers)}function v8($){try{let Z=new URL($.trim());return Z.protocol==="http:"||Z.protocol==="https:"?Z.href:null}catch{return null}}function jY($,Z={}){let J=Z.maxUrls??1/0,W=$.replace(/^\uFEFF/,"").trimStart();if(!W.startsWith("<")){let K=[];for(let F of W.split(/\r?\n/)){if(K.length>=J)break;let U=F.trim()?v8(F):null;if(U)K.push({loc:U})}if(K.length===0&&W.length>0)throw new X0("Sitemap: the document is neither XML nor a list of URLs.");return{kind:"urlset",urls:K}}let Y=null,j=[],z=[],X=[],Q=null,G=null,B="",V=()=>Y==="index"?z.length:j.length;if(aW(W,{stopped:()=>V()>=J,open(K,F){let U=X[X.length-1];if(X.push(K),Y===null){if(K==="urlset")Y="urlset";else if(K==="sitemapindex")Y="index";return}if(Y==="urlset"&&K==="url"&&U==="urlset"||Y==="index"&&K==="sitemap"&&U==="sitemapindex")Q={};else if(Q&&(U==="url"||U==="sitemap")&&(K==="loc"||K==="lastmod"||K==="changefreq"||K==="priority"))G=K,B="";else if(Q&&Y==="urlset"&&U==="url"&&K==="link"){let D=F.href?v8(F.href):null;if(F.rel?.toLowerCase()==="alternate"&&F.hreflang&&D)(Q.alternates??=[]).push({hrefLang:F.hreflang,href:D})}},close(K){let F=X.lastIndexOf(K);if(F===-1)return;if(X.length=F,G&&K===G&&Q)Q[G]=B.trim(),G=null;else if(Q&&(K==="url"||K==="sitemap")){let U=Q;Q=null,G=null;let D=U.loc?v8(U.loc):null;if(!D)return;if(Y==="index"){z.push(U.lastmod?{loc:D,lastmod:U.lastmod}:{loc:D});return}let O={loc:D};if(U.lastmod)O.lastmod=U.lastmod;if(U.changefreq)O.changefreq=U.changefreq;let L=U.priority?Number(U.priority):NaN;if(Number.isFinite(L))O.priority=L;if(U.alternates)O.alternates=U.alternates;j.push(O)}},text(K){if(G)B+=K}}),Y===null)throw new X0("Sitemap: the document has no <urlset> or <sitemapindex>.");return Y==="index"?{kind:Y,sitemaps:z}:{kind:Y,urls:j}}async function*wB($,Z={}){let{maxUrls:J=k$,maxSitemaps:W=50,maxDepth:Y=3,maxSize:j=X3,onError:z,...X}=Z,Q=[{url:String($),depth:0}],G=new Set,B=0,V=0;while(Q.length>0&&V<J&&B<W){let K=Q.shift(),F=K.url.replace(/#.*$/,"");if(G.has(F))continue;G.add(F),B++;let U;try{let D=await S1(K.url,{...X,maxSize:j});if(!D.ok)throw D.body?.cancel().catch(()=>{}),new X0(`Sitemap: ${K.url} answered ${D.status}.`,K.url,D.status);let O=D6(await U6(D,j));U=jY(O,{maxUrls:Math.max(J-V,W-B)})}catch(D){if(K.depth===0||!z||X.signal?.aborted)throw D;z(D,K.url);continue}if(U.kind==="index"){if(K.depth>=Y)continue;Q=U.sitemaps.slice(0,W-B).map((O)=>({url:O.loc,depth:K.depth+1})).concat(Q);continue}for(let D of U.urls)if(yield{...D,sitemap:K.url},++V>=J)return}}var zY={response:kB,chunk:WY,index:YY,parse:jY,read:wB,MAX_URLS:k$,MAX_BYTES:X3};var qB=512000,yB=new TextEncoder;function XY($){let Z=$.trim();if(Z==="*")return"*";return(/^[a-zA-Z_-]+/.exec(Z)?.[0]??"").toLowerCase()}function QY($){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 yB.encode(String.fromCodePoint(Y)))Z+=`%${j.toString(16).toUpperCase().padStart(2,"0")}`}else Z+=W}return Z}function vB($,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 UZ{groups;sitemaps;status;constructor($,Z,J="parsed"){this.groups=$;this.sitemaps=Z;this.status=J}groupsFor($){let Z=XY($)||"*";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=QY(J);let W=null;for(let Y of this.groupsFor(Z))for(let j of Y.rules){if(!vB(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 gB={"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 GY($,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 B=gB[Q.slice(0,G).trim().toLowerCase()],V=Q.slice(G+1).trim();if(!B)continue;if(B==="sitemap"){if(!V||/\s/.test(V))continue;try{let K=Z.url?new URL(V,Z.url):new URL(V);if(K.protocol==="http:"||K.protocol==="https:")W.push(K.href)}catch{}continue}if(B==="user-agent"){if(!j||!Y)Y={userAgents:[],rules:[]},J.push(Y),j=!0;let K=XY(V);if(K)Y.userAgents.push(K);continue}if(!Y)continue;if(j=!1,B==="crawl-delay"){let K=Number(V);if(Number.isFinite(K)&&K>=0)Y.crawlDelay=K;continue}if(!V)continue;Y.rules.push({type:B,path:QY(V)})}return new UZ(J,W)}async function mB($,Z={}){let{maxSize:J=qB,...W}=Z,Y=new URL("/robots.txt",$),j=await S1(Y,{...W,maxSize:Number.MAX_SAFE_INTEGER}),z=j.status;if(z===429||z>=500)return j.body?.cancel().catch(()=>{}),new UZ([],[],"unreachable");if(z>=400)return j.body?.cancel().catch(()=>{}),new UZ([],[],"unavailable");let X=await U6(j,J,!0),Q=D6(X);if(X.byteLength>=J)Q=Q.slice(0,Math.max(0,Q.lastIndexOf(`
10
+ `)));return GY(Q,{url:j.url})}function h8($){return $===void 0?[]:typeof $==="string"?[$]:$}function O6($,Z){if(/[\r\n]/.test(Z))throw TypeError(`Robots: the ${$} value ${JSON.stringify(Z)} has a line break in it.`);return`${$}: ${Z}
11
+ `}function KY($){let Z=[];for(let W of $.rules??[]){let Y=h8(W.userAgent);if(Y.length===0)throw TypeError("Robots: a rule needs at least one userAgent.");let j=Y.map((X)=>O6("User-agent",X)).join(""),z=[...h8(W.allow).map((X)=>["Allow",X]),...h8(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+=O6(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+=O6("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 O6("Sitemap",Y.href)});if(J.length>0)Z.push(J.join(""));return Z.join(`
13
+ `)}function hB($,Z={}){let J=new Headers(Z.headers);if(!J.has("content-type"))J.set("content-type","text/plain; charset=utf-8");return new Response(KY($),{status:200,headers:J})}var BY={response:hB,text:KY,parse:GY,fetch:mB};import{createHmac as VY,randomBytes as pB}from"crypto";var c8="v2.";function d8($){return $.startsWith(c8)}function DZ(){let $=process.env.SECRET;if(!$)throw Error("Signing in needs a secret to mint session tokens with. Set SECRET in the environment.");return $}function FY($){let Z=pB(16).toString("hex"),J=VY("sha256",DZ()).update(`${$}:${Z}`).digest("hex");return`${c8}${J}`}function L6($,Z){let J=VY("sha256",DZ()).update(`legacy-session:${Z}:${$}`).digest("hex");return`${c8}${J}`}import{createHash as uB,createHmac as lB,randomInt as iB,timingSafeEqual as OY}from"crypto";function UY($,Z){return Math.floor($/Z)*Z}function cB($,Z){if(Z<=0)return 0;return Math.min(1,Math.max(0,(Z-$)/Z))}function u8($,Z,J,W){return Z*cB(J,W)+$}function dB($){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 B=Y*(1-(X-Z)/J);if(B<=Y)return Math.max(0,Math.ceil(B-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 DY($){let{allowed:Z,current:J,previous:W,now:Y,elapsed:j,window:z,limit:X,cost:Q}=$;if(Z){let B=u8(J,W,j,z);return{allowed:!0,limit:X,remaining:Math.max(0,Math.floor(X-B)),resetAt:Y-j+z,retryAfter:0}}let G=dB({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 l8{}class i8 extends l8{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=UY(j,W),X=j-z,Q=this.roll(Z,W,z);Q.limit=J;let B=u8(Q.current,Q.previous,X,W)+Y<=J;if(B)Q.current+=Y;if(this.buckets.delete(Z),this.buckets.set(Z,Q),this.buckets.size>this.maxKeys)this.evict(j);return DY({allowed:B,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 HY="h1.";function M6($,Z,J){let W=lB("sha256",DZ()).update(`gemi:one-time:${$}:${Z}:${J}`).digest("hex");return`${HY}${W}`}function OZ($,Z,J,W){let Y=typeof W==="string"?W:"",j=typeof J==="string"?J:"",z=j.startsWith(HY),X=M6($,Z,Y),Q=Buffer.from(z?X:Y),G=Buffer.from(j);if(Q.length!==G.length||Y===""||j==="")return OY(Q,Q),!1;return OY(Q,G)}function TY($){let Z="";for(let J=0;J<$;J++)Z+=String(iB(0,10));return Z}var PY=320;function G3($){if(typeof $!=="string")return null;let Z=$.trim();if(Z===""||Z.length>PY)return null;return Z.toLowerCase()}function H6($){if(typeof $!=="string")return null;let Z=$.trim();if(Z.length>PY)return null;let J=Z.toLowerCase();if(J.length<3||J.length>254||!/^[^\s@]+@[^\s@]+$/.test(J))return null;return J}var LY=null;function NY(){try{let $=M();if(typeof $?.bound==="function"&&$.bound(B1))return $.make(B1)}catch{}return LY??=new B1({driver:new i8,limit:1000,window:60}),LY}function MY($){return $.length<=64?$:`sha256:${uB("sha256").update($).digest("hex")}`}async function LZ($,Z,J,W){let Y=NY(),j=[[`auth:code-${$}:ip:${MY(VZ(J))}`,W.perIp]];if(Z!==null)j.push([`auth:code-${$}:email:${MY(Z)}`,W.perEmail]);for(let[z,X]of j){if(!X)continue;let[Q,G]=X,B=await Y.consume(z,{limit:Q,window:G});if(!B.allowed)throw new W$(B)}}async function _Y($,Z,J,W=10){let Y=Math.max(86400,Math.ceil(W*60*(J+1)));return(await NY().consume(`auth:code-attempt:${$}:${Z}`,{limit:J,window:Y})).allowed}import{randomBytes as n8}from"crypto";class s8 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 K3($,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 sB($={}){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 o8($={}){let Z=$.length??6,J=$.expiresInMinutes??10,W=$.linkExpiresInMinutes??10080,Y=$.maxAttempts??5,j=$.activeCodes??1;return K3("length",Z,4,12),K3("expiresInMinutes",J,1),K3("linkExpiresInMinutes",W,1),K3("maxAttempts",Y,1),K3("activeCodes",j,1,5),{enabled:$.enabled??!1,createUser:$.createUser??!1,length:Z,expiresInMinutes:J,linkExpiresInMinutes:W,maxAttempts:Y,activeCodes:j,requestLimit:{perEmail:$.requestLimit?.perEmail??[5,900],perIp:$.requestLimit?.perIp??[20,900]},verifyLimit:{perEmail:$.verifyLimit?.perEmail??[10,900],perIp:$.verifyLimit?.perIp??[50,900]},uniformMagicLinkResponse:$.uniformMagicLinkResponse??!1,send:$.send??(({email:z,code:X})=>{if(Bun.env.NODE_ENV!=="production")console.info(`[gemi] email code for ${z}: ${X} (set auth.emailCode.send to deliver it)`)})}}async function nB($,Z){if(typeof Z!=="string"||Z==="")return!1;try{return await Bun.password.verify($,Z)}catch{return!1}}function IY($){if(!$)return null;if(typeof $.getRedirectUrl==="function")return{provider:$};let{provider:Z,feature:J}=$;return{provider:Z,...J!==void 0?{feature:J}:{}}}function xY($){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 LT($){return $}function CY($={}){return sB($),{basePath:"/auth",verifyEmail:!0,password:!0,magicLink:!0,redirectPath:"/dashboard",signInPath:"/auth/sign-in",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,cookieDomain:null,migrateLegacySession:null,signUpRequest:s8,oauthProviders:{},oauthFailurePath:null,oauthCompleteProfilePath:null,connections:{},connectionStore:null,onConnected:()=>{},verifyPassword:nB,hashPassword:async(Z)=>await Bun.password.hash(Z),generateForgotPasswordToken:async()=>n8(32).toString("hex"),generateEmailVerificationToken:()=>{if(!($.verifyEmail??!0))return"";return n8(32).toString("hex")},generateMagicLinkToken:()=>n8(32).toString("hex"),extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{},emailCode:o8($.emailCode),generateCode:()=>{return},onAuthenticated:()=>{}}}var oB=new Set(["script","style","textarea","title","xmp","iframe","noembed","noframes","noscript"]),aB=new Set(["svg","math"]);function AY($){return $===32||$===9||$===10||$===12||$===13}function SY($){return $>=65&&$<=90||$>=97&&$<=122}function T6($){return $>=65&&$<=90?$+32:$}function EY(){let $="data",Z="",J=!1,W="",Y=0,j=0,z=!1,X=0,Q=0,G=()=>$==="data"&&X===0&&Q===0,B=()=>{if(!J&&oB.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(aB.has(Z)){if(J)Q=Math.max(0,Q-1);else if(!z)Q+=1}Z=""},V=(K)=>{switch($){case"data":if(K===60)$="tagOpen";return;case"tagOpen":if(K===33)$="bang",j=0;else if(K===47)$="endTagOpen";else if(SY(K))$="tagName",J=!1,z=!1,Z=String.fromCharCode(T6(K));else if(K===63)$="bogus";else if(K===60)$="tagOpen";else $="data";return;case"endTagOpen":if(SY(K))$="tagName",J=!0,z=!1,Z=String.fromCharCode(T6(K));else if(K===62)$="data";else $="bogus";return;case"tagName":if(AY(K)||K===47)$="inTag",z=K===47;else if(K===62)B();else Z+=String.fromCharCode(T6(K));return;case"inTag":if(K===62){B();return}if(z=K===47,K===34)$="attrDouble";else if(K===39)$="attrSingle";return;case"attrDouble":if(K===34)$="inTag";z=!1;return;case"attrSingle":if(K===39)$="inTag";z=!1;return;case"bang":if(K===45){if(j+=1,j===2)$="comment",j=0}else if(K===62)$="data";else $="bogus";return;case"bogus":if(K===62)$="data";return;case"comment":if(K===45)j=j<2?j+1:2;else if(K===62&&j>=2)$="data",j=0;else j=0;return;case"rawText":{if(Y<W.length){if(T6(K)===W.charCodeAt(Y))Y+=1;else Y=K===60?1:0;return}if(K===62)$="data",Z="";else if(AY(K)||K===47)$="inTag",Z="";else Y=K===60?1:0;return}}};return{scanToInsertionPoint(K){for(let F=0;F<K.length;F++){if(G())return F;V(K[F])}return K.length},write(K){for(let F=0;F<K.length;F++)V(K[F])},isSafe:G}}function V1($){let Z=JSON.stringify($);if(Z===void 0)return"undefined";return Z.replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function rB($){return`<script>(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${V1([$.path,$.variantKey,$.data])})</script>`}function tB($){return`<script>(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${V1([$.id,$.locale,$.strings])})</script>`}function a8($,Z,J={},W){let Y=new TextEncoder,j=[],z=!1,X=!1,Q=()=>{if(X)return;X=!0,J.onClose?.()};Z.onSettle((U)=>{if(U.status!=="resolved")return;j.push(rB(U))}),W?.onUse((U)=>{j.push(tB(U))});let G=$.getReader(),B=EY(),V=(U,D)=>{U.enqueue(D),J.onChunk?.(D)},K=(U)=>{while(j.length>0){let D=Y.encode(j.shift());B.write(D),V(U,D)}},F=(U,D)=>{if(j.length===0){B.write(D),V(U,D);return}let O=B.scanToInsertionPoint(D);if(O>0)V(U,D.subarray(0,O));if(B.isSafe())K(U);let L=D.subarray(O);if(L.length>0)B.write(L),V(U,L)};return new ReadableStream({async pull(U){let D;try{D=await G.read()}catch(T){throw Q(),T}let{done:O,value:L}=D;if(O){K(U),U.close(),Q();return}if(!z){if(z=!0,B.write(L),V(U,L),J.onShell?.(),B.isSafe())K(U);return}F(U,L)},cancel(U){return Q(),G.cancel(U)}})}var eB=/bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;function P6($){if(!$)return!1;return eB.test($)}async function RY($,Z=()=>{}){let J=P.getStore(),W=J?.req??null,Y=null;if(W?.rawRequest?.url)try{Y=new URL(W.rawRequest.url).pathname}catch{Y=null}return{user:J?.user??null,attributes:await $V($,Z),request:{path:Y,routePath:W?.routePath??null,locale:J?.locale??null},anonymousId:bY(),isBot:P6(W?.rawRequest?.headers?.get("user-agent")??null),now:new Date}}function fY($){return{user:$.user??null,attributes:$.attributes??{},request:{path:null,routePath:null,locale:null},anonymousId:$.subjectId??null,isBot:!1,now:new Date}}async function $V($,Z){if(!$.context)return{};try{let J=P.getStore();return await $.context(J?.req??null)??{}}catch(J){return Z(`The \`context\` hook in app/config/features.ts threw; evaluating with no attributes. ${J instanceof Error?J.message:String(J)}`),{}}}function kY($,Z){return`${$}:${Z}`}function r8($){let Z=new Bun.CryptoHasher("sha1").update($).digest("hex"),J=Number.parseInt(Z.slice(0,8),16);return Math.floor(J/4294967296*1e4)}function wY($,Z){if(Z>=100)return!0;if(Z<=0)return!1;return $<Math.round(Z*100)}function qY($,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=JV($,Z,J,W.buckets);return wY(Y,Z.rollout)?{value:!0,reason:"rollout"}:{value:!1,reason:"excluded"}}function ZV($){let Z=$.user?.publicId??$.user?.id;if(Z!==void 0&&Z!==null)return String(Z);return $.anonymousId??""}function JV($,Z,J,W){let Y=kY(Z.salt??$,ZV(J));if(!W)return r8(Y);let j=W.get(Y);if(j!==void 0)return j;let z=r8(Y);return W.set(Y,z),z}class yY 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 t8{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 yY(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=WV(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 WV($){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 YV{}class jV 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 e8 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 vY 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 gY{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 Y${config;log;static token="features";store;declared;warnedAboutSize=!1;warnedAboutActor=!1;constructor($,Z=()=>{}){this.config=$;this.log=Z;this.declared=$.features??{},this.store=new t8($.source,this.declared,Math.max(0,$.ttl)*1000,this.log)}declarations(){return this.declared}async list(){let{active:$,audit:Z,unavailable:J}=await this.switches();return{unavailable:J,features:Object.entries(this.declared).map(([W,Y])=>({key:W,describe:Y.describe,rollout:Y.rollout,targeted:Y.when!==void 0,serverOnly:Y.serverOnly,salt:Y.salt,active:$.get(W),...Z.get(W)}))}}async refresh(){if(!this.config.enabled)return;if(Object.keys(this.declared).length===0)return;await this.store.refresh()}async invalidate(){try{if(this.config.enabled&&Object.keys(this.declared).length>0)await this.store.invalidate()}finally{P.getStore()?.featureEvaluations?.clear()}}async set($,Z,J={}){if(typeof $!=="string"||!Object.hasOwn(this.declared,$))throw new vY(String($));if(typeof Z!=="boolean")throw TypeError(`Features.set("${$}", \u2026) takes a boolean, not ${Z===null?"null":typeof Z}.`);let W=zV(J.actor),Y=this.config.source;if(typeof Y.write!=="function")throw new e8(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 gY(this,fY($))}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=qY($,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 $=P.getStore();if($?.featureContext)return $.featureContext;let Z=await RY(this.config,this.log);if($)$.featureContext=Z;return Z}memoFor($){let Z=P.getStore();if(!Z||Z.featureContext!==$)return null;return Z.featureEvaluations??=new Map,Z.featureEvaluations}requestBuckets(){let $=P.getStore();if(!$)return new Map;return $.featureBuckets??=new Map,$.featureBuckets}notify($,Z,J){if(!this.config.onEvaluate)return;try{this.config.onEvaluate($,Z,J)}catch(W){this.log(`The \`onEvaluate\` hook in app/config/features.ts threw for "${$}". ${W instanceof Error?W.message:String(W)}`)}}warnIfOversized($){if(this.warnedAboutSize||$<=this.config.maxClientFlags)return;this.warnedAboutSize=!0,this.log(`${$} client-visible features are embedded in every document. Mark the ones only the server reads with \`serverOnly: true\` to keep them out of the payload.`)}}function zV($){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 mY($){if($===void 0)return!0;return await M(Y$).enabled($)}async function MZ($,Z){if(typeof Z!=="string"||!Object.hasOwn($,Z))return null;let J=IY($[Z]);if(!J||!await mY(J.feature))return null;return J.provider}async function hY($){let Z=[];for(let J of Object.keys($))if(await MZ($,J))Z.push(J);return Z}function $7($){if($&&typeof $==="object")delete $.password;return $}function XV(){return new Proxy({},{get:($,Z)=>cY(Z)})}var pY=new WeakMap;function dY($){if($&&typeof $==="object"){for(let Z of Object.values($))dY(Z);Object.freeze($)}return $}var QV={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}},GV=dY({token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:QV});class Z7{models;constructor($=XV()){this.models=$}run($){return this.models.User.asSystem($)}sessionSelect(){return GV}transaction($){return this.models.User.transaction($)}withLegacySessionLock($,Z){let J=this.models.User.$connection??E1(),W=M(b1).connection(J),Y=()=>this.transaction(async()=>{if(W.dialect==="postgres"){let X=`gemi:legacy-session:${$}`;await l0()`SELECT pg_advisory_xact_lock(hashtextextended(${X}, 0))`}return Z()});if(W.dialect!=="sqlite"||l0())return Y();let z=(pY.get(W)??Promise.resolve()).then(Y,Y);return pY.set(W,z.catch(()=>{})),z}async createUser($){let Z=await this.run(()=>this.models.User.create({data:$}));return $7(Z)}async updateUserPassword($){let Z=await this.run(()=>this.models.User.update({where:{id:$.id},data:{password:$.password}}));return $7(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 listMagicLinkTokensByEmail($,Z){return await this.run(()=>this.models.MagicLinkToken.findMany({where:{email:$},orderBy:{id:"desc"},take:Z}))}async deleteMagicLinkTokensExcept($,Z){await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{email:$,id:{notIn:Z}}}))}async claimMagicLinkToken($){let{count:Z}=await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{id:$}}));return Z===1}async deleteMagicLinkToken($){await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{email:$}}))}async createSocialAccount($){return await this.run(()=>this.models.SocialAccount.create({data:$}))}async findUserBySocialAccount($,Z){if(!Z)return null;let J=await this.run(()=>this.models.SocialAccount.findFirst({where:{provider:$,providerId:Z},include:{user:!0}}));return J?$7(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 FD}from"crypto";function y0($,Z,J,W,Y){return a0(Z,j5($,Z),J,W,Y)}function a0($,Z,J,W,Y,j){let z=z7(Z,J,W);if(Y&&Z!==z)throw RangeError(cz($,Z,J,W,j));return z}function j5($,Z){let J=$[Z];if(J===void 0)throw TypeError(q2(Z));return J}function L0($){return $!==null&&/object|function/.test(typeof $)}function m0($,Z=Map){let J=new Z;return(W,...Y)=>{if(J.has(W))return J.get(W);let j=$(W,...Y);return J.set(W,j),j}}function U7($){return v$({name:$},1)}function v$($,Z){return $1((J)=>({value:J,configurable:1,writable:!Z}),$)}function z5($){return $1((Z)=>({get:Z,configurable:1}),$)}function v6($){return{[Symbol.toStringTag]:{value:$,configurable:1}}}function xZ($,Z){let J={},W=$.length;for(let Y of Z)J[$[--W]]=Y;return J}function $1($,Z,J){let W={};for(let Y in Z)W[Y]=$(Z[Y],Y,J);return W}function H3($,Z,J){let W={};for(let Y=0;Y<Z.length;Y++){let j=Z[Y];W[j]=$(j,Y,J)}return W}function KV($,Z,J){let W={};for(let Y=0;Y<$.length;Y++)W[Z[Y]]=J[$[Y]];return W}function p0($,Z){let J={};for(let W of $)J[W]=Z[W];return J}function D7($,Z){let J={};for(let W in Z)$.has(W)||(J[W]=Z[W]);return J}function O7($){$={...$};let Z=Object.keys($);for(let J of Z)$[J]===void 0&&delete $[J];return $}function X5($,Z){for(let J of Z)if(!(J in $))return 0;return 1}function Q5($,Z,J){for(let W of $)if(Z[W]!==J[W])return 0;return 1}function G5($,Z,J){let W={...J};for(let Y=0;Y<Z;Y++)W[$[Y]]=0;return W}function w($,...Z){return(...J)=>$(...Z,...J)}function uY($){return $[0].toUpperCase()+$.substring(1)}function T3($){return $.slice().sort()}function S6($,Z){return String(Z).padStart($,"0")}function j$($,Z){return Math.sign($-Z)}function z7($,Z,J){return Math.min(Math.max($,Z),J)}function f1($,Z){return[Math.floor($/Z),V3($,Z)]}function V3($,Z){return($%Z+Z)%Z}function Q$($,Z){return[g6($,Z),L7($,Z)]}function g6($,Z){return Math.trunc($/Z)||0}function L7($,Z){return $%Z||0}function N6($){return Math.abs($%1)===0.5}function K5($,Z,J){let W=0,Y=0;for(let X=0;X<=Z;X++){let Q=$[J[X]],G=U1[X],B=l/G,[V,K]=Q$(Q,B);W+=K*G,Y+=V}let[j,z]=Q$(W,l);return[Y+j,z]}function m6($,Z,J){let W={};for(let Y=Z;Y>=0;Y--){let j=U1[Y];W[J[Y]]=g6($,j),$=L7($,j)}return W}function B5($){return $===q?H4:[]}function V5($){return $===q?b3:[]}function F5($){return $===q?["year","day"]:[]}function U5($){if($!==void 0)return J0($)}function D5($){if($!==void 0)return Z1($)}function M7($){if($!==void 0)return P3($)}function Z1($){return M5(P3($))}function P3($){return L5(ZF($))}function H7($){if($==null)throw TypeError("Cannot be null or undefined");return $}function O5($,Z){if(Z==null)throw RangeError(q2($));return Z}function w1($){if(!L0($))throw TypeError(pz);return $}function h6($,Z,J=$){if(typeof Z!==$)throw TypeError(A3(J,Z));return Z}function L5($,Z="number"){if(!Number.isInteger($))throw RangeError(CV(Z,$));return $||0}function M5($,Z="number"){if($<=0)throw RangeError(AV(Z,$));return $}function T7($){if(typeof $=="symbol")throw TypeError(RV);return String($)}function E6($,Z){return L0($)?String($):J0($,Z)}function p6($){if(typeof $=="string")return BigInt($);if(typeof $!="bigint")throw TypeError(bV($));return $}function H5($,Z="number"){if(typeof $=="bigint")throw TypeError(EV(Z));if($=Number($),!Number.isFinite($))throw RangeError(SV(Z,$));return $}function A0($,Z){return Math.trunc(H5($,Z))||0}function T5($,Z){return L5(H5($,Z),Z)}function lY($,Z){return M5(A0($,Z),Z)}function P7($,Z){let[J,W]=Q$(Z,l),Y=$+J,j=Math.sign(Y);return j&&j===-Math.sign(W)&&(Y-=j,W+=j*l),[Y,W]}function TZ($,Z,J=1){return P7($[0]+Z[0]*J,$[1]+Z[1]*J)}function PZ($,Z){return P7($[0],$[1]+Z)}function i0($,Z){return TZ(Z,$,-1)}function E0($,Z){return j$($[0],Z[0])||j$($[1],Z[1])}function P5($,Z,J){return E0($,Z)===-1||E0($,J)===1}function c6($,Z=1){let J=BigInt(l/Z);return[Number($/J),Number($%J)*Z]}function NZ($,Z=1){let J=l/Z,[W,Y]=Q$($,J);return[W,Y*Z]}function N5($,Z=1){let[J,W]=$,Y=Math.floor(W/Z),j=l/Z;return BigInt(J)*BigInt(j)+BigInt(Y)}function s0($,Z=1,J){let[W,Y]=$,[j,z]=Q$(Y,Z);return W*(l/Z)+(j+(J?z/Z:0))}function N7($,Z,J=f1){let[W,Y]=$,[j,z]=J(Y,Z);return[W*(l/Z)+j,z]}function _7($,Z){let J=$.formatToParts(Z),W={};for(let Y of J)W[Y.type]=Y.value;return W}function I7($){return y0($,"isoYear",M3,L3,1),$.isoYear===M3?y0($,"isoMonth",4,12,1):$.isoYear===L3&&y0($,"isoMonth",1,9,1),$}function z$($){return q1({...$,...e0,isoHour:12}),$}function q1($){let Z=y0($,"isoYear",M3,L3,1),J=Z===M3?1:Z===L3?-1:0;return J&&n0(S0({...$,isoDay:$.isoDay+J,isoNanosecond:$.isoNanosecond-J})),$}function n0($){if(!$||P5($,QF,XF))throw RangeError(D4);return $}function G$($){return K5($,5,j1)[1]}function d6($){let[Z,J]=f1($,l);return[m6(J,5,j1),Z]}function _5($){return I5($)[0]}function I5($){return N7($,t0)}function b0($){return CZ($.isoYear,$.isoMonth,$.isoDay,$.isoHour,$.isoMinute,$.isoSecond,$.isoMillisecond)}function S0($){let Z=b0($);if(Z!==void 0){let[J,W]=Q$(Z,g0);return[J,W*D1+($.isoMicrosecond||0)*i$+($.isoNanosecond||0)]}}function x7($,Z){let[J,W]=d6(G$($)-Z);return n0(S0({...$,isoDay:$.isoDay+W,...J}))}function b6(...$){return CZ(...$)/ez}function CZ(...$){let[Z,J]=x5(...$),W=Z.valueOf();if(!isNaN(W))return W-J*g0}function x5($,Z=1,J=1,W=0,Y=0,j=0,z=0){let X=$===M3?1:$===L3?-1:0,Q=new Date;return Q.setUTCHours(W,Y,j,z),Q.setUTCFullYear($,Z-1,J+X),[Q,X]}function B$($,Z){let[J,W]=PZ($,Z);W<0&&(W+=l,J-=1);let[Y,j]=f1(W,D1),[z,X]=f1(j,i$);return u6(J*g0+Y,z,X)}function u6($,Z=0,J=0){let W=Math.ceil(Math.max(0,Math.abs($)-zF)/g0)*Math.sign($),Y=new Date($-W*g0);return xZ(P4,[Y.getUTCFullYear(),Y.getUTCMonth()+1,Y.getUTCDate()+W,Y.getUTCHours(),Y.getUTCMinutes(),Y.getUTCSeconds(),Y.getUTCMilliseconds(),Z,J])}function C5($){return[$.isoYear,$.isoMonth,$.isoDay]}function A5(){return R1}function C7($,Z){switch(Z){case 2:return A7($)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function S5($){return A7($)?366:365}function A7($){return $%4==0&&($%100!=0||$%400==0)}function E5($){let[Z,J]=x5($.isoYear,$.isoMonth,$.isoDay);return V3(Z.getUTCDay()-J,7)||7}function b5({isoYear:$}){return $<1?["bce",1-$]:["ce",$]}function BV($){let Z=b0($);if(Z<KF)return b5($);let J=_7(e2(_Z),Z),{era:W,eraYear:Y}=pj(J,_Z);return[W,Y]}function l6($){return g$($),i6($,1),$}function g$($){return R5($,1),$}function iY($){return Q5(l2,$,R5($))}function R5($,Z){let{isoYear:J}=$,W=y0($,"isoMonth",1,A5(),Z);return{isoYear:J,isoMonth:W,isoDay:y0($,"isoDay",1,C7(J,W),Z)}}function i6($,Z){return xZ(j1,[y0($,"isoHour",0,23,Z),y0($,"isoMinute",0,59,Z),y0($,"isoSecond",0,59,Z),y0($,"isoMillisecond",0,999,Z),y0($,"isoMicrosecond",0,999,Z),y0($,"isoNanosecond",0,999,Z)])}function g($){return $===void 0?0:OX(w1($))}function N3($,Z=0){$=J1($);let J=LX($),W=TF($,Z);return[OX($),W,J]}function S7($){return LX(J1($))}function f5($){return $=J1($),n2($,9,6,1)}function AZ($,Z,J,W=9,Y=0,j=4){Z=J1(Z);let z=n2(Z,W,Y),X=R7(Z),Q=f3(Z,j),G=R3(Z,W,Y,1);return z==null?z=Math.max(J,G):y5(z,G),X=f7(X,G,1),$&&(Q=((B)=>B<4?(B+2)%4:B)(Q)),[z,G,X,Q]}function s6($,Z=6,J){let W=R7($=k7($,y6)),Y=f3($,7),j=R3($,Z);return j=O5(y6,j),W=f7(W,j,void 0,J),[j,W,Y]}function E7($){return o2(J1($))}function k5($,Z){return b7(J1($),Z)}function b7($,Z=4){let J=q5($);return[f3($,4),...w5(R3($,Z),J)]}function w5($,Z){return $!=null?[U1[$],$<4?9-3*$:-1]:[Z===void 0?1:10**(9-Z),Z]}function R7($){let Z=$[F3];return Z===void 0?1:A0(Z,F3)}function f7($,Z,J,W){let Y=W?l:U1[Z+1];if(Y){let j=U1[Z];if(Y%(($=a0(F3,$,1,Y/j-(W?0:1),1))*j))throw RangeError(A3(F3,$))}else $=a0(F3,$,1,J?1e9:1,1);return $}function q5($){let Z=$[j7];if(Z!==void 0){if(typeof Z!="number"){if(T7(Z)==="auto")return;throw RangeError(A3(j7,Z))}Z=a0(j7,Math.floor(Z),0,9,1)}return Z}function J1($){return $===void 0?{}:w1($)}function k7($,Z){return typeof $=="string"?{[Z]:$}:w1($)}function Q0($){if($!==void 0){if(L0($))return Object.assign(Object.create(null),$);throw TypeError(pz)}}function n6($,Z){return $&&Object.assign(Object.create(null),$,{overflow:VF[Z]})}function w7($,Z,J=9,W=0,Y){let j=Z[$];if(j===void 0)return Y?W:void 0;if(j=T7(j),j==="auto")return Y?W:null;let z=K7[j];if(z===void 0&&(z=YF[j]),z===void 0)throw RangeError(lz($,j,K7));return a0($,z,W,J,1,E3),z}function m$($,Z,J,W=0){let Y=J[$];if(Y===void 0)return W;let j=T7(Y),z=Z[j];if(z===void 0)throw RangeError(lz($,j,Z));return z}function y5($,Z){if(Z>$)throw RangeError(aV)}function M0($){return{branding:_4,epochNanoseconds:$}}function N0($,Z,J){return{branding:m1,calendar:J,timeZone:Z,epochNanoseconds:$}}function G0($,Z=$.calendar){return{branding:n$,calendar:Z,...p0(VX,$)}}function K0($,Z=$.calendar){return{branding:s$,calendar:Z,...p0(i2,$)}}function q$($,Z=$.calendar){return{branding:qZ,calendar:Z,...p0(i2,$)}}function R6($,Z=$.calendar){return{branding:yZ,calendar:Z,...p0(i2,$)}}function W1($){return{branding:N4,...p0(BX,$)}}function t($){return{branding:I4,sign:V$($),...p0(c2,$)}}function v5($){return _5($.epochNanoseconds)}function o6($){return N7($.epochNanoseconds,D1)[0]}function g5($){return N5($.epochNanoseconds,i$)}function m5($){return N5($.epochNanoseconds)}function h5($){return $.epochNanoseconds}function T0($){return typeof $=="string"?$:J0($.id)}function SZ($,Z){return $===Z||T0($)===T0(Z)}function p5($,Z,J,W,Y){let j=y$(W),[z,X]=((O,L)=>{let T=L((O=k7(O,F7))[UX]),H=HF(O);return H=O5(F7,H),[H,T]})(Y,$);if(D3(Math.max(z,j),X))return sY(W,z);if(!X)throw RangeError(O4);let[Q,G,B]=Z4(Z,J,X),V=Y2(B),K=J4(B),F=j2(B),U=K(G,Q,W),D=F(G,Q,U,z);return D3(z,X)?sY(D,z):((O,L,T,H,I,S,A)=>{let b=V$(O),[k,N]=q7(H,u2(T,O),T,b,I,S,A),v=y7(L,k,N);return O[h[T]]+v*b})(D,V(U),z,G,Q,V,K)}function sY($,Z){return s0(O0($),U1[Z],1)}function q7($,Z,J,W,Y,j,z){let X=h[J],Q={...Z,[X]:Z[X]+W},G=z($,Y,Z),B=z($,Y,Q);return[j(G),j(B)]}function y7($,Z,J){let W=s0(i0(Z,J));if(!W)throw RangeError(S3);return s0(i0(Z,$))/W}function c5($,Z){let[J,W,Y]=s6(Z,5,1);return M0(r6($.epochNanoseconds,J,W,Y,1))}function d5($,Z,J){let{epochNanoseconds:W,timeZone:Y,calendar:j}=Z,[z,X,Q]=s6(J);if(z===0&&X===1)return Z;let G=$(Y);if(z===6)W=((B,V,K,F)=>{let U=R0(K,V),[D,O]=B(U),L=K.epochNanoseconds,T=h0(V,D),H=h0(V,O);if(P5(L,T,H))throw RangeError(S3);return t5(y7(L,T,H),F)?H:T})(a5,G,Z,Q);else{let B=G.getOffsetNanosecondsFor(W);W=p$(G,n5(B$(W,B),z,X,Q),B,2,0,1)}return N0(W,Y,j)}function u5($,Z){return G0(n5($,...s6(Z)),$.calendar)}function l5($,Z){let[J,W,Y]=s6(Z,5);var j;return W1((j=Y,v7($,_3(J,W),j)[0]))}function i5($,Z){let J=$(Z.timeZone),W=R0(Z,J),[Y,j]=a5(W),z=s0(i0(h0(J,Y),h0(J,j)),M4,1);if(z<=0)throw RangeError(S3);return z}function s5($,Z){let{timeZone:J,calendar:W}=Z,Y=((j,z,X)=>h0(z,j(R0(X,z))))(r5,$(J),Z);return N0(Y,J,W)}function n5($,Z,J,W){return o5($,_3(Z,J),W)}function o5($,Z,J){let[W,Y]=v7($,Z,J);return q1({...c$($,Y),...W})}function v7($,Z,J){return d6(K$(G$($),Z,J))}function f6($){return K$($,L4,7)}function _3($,Z){return U1[$]*Z}function a5($){let Z=r5($);return[Z,c$(Z,1)]}function r5($){return jF(6,$)}function VV($,Z,J){let W=Math.min(y$($),6);return bZ(t6(O0($,W),Z,J),W)}function a6($,Z,J,W,Y,j,z,X,Q,G){if(W===0&&Y===1)return $;let B=D3(W,X)?W4(X)&&W<6&&J>=6?UV:FV:DV,[V,K,F]=B($,Z,J,W,Y,j,z,X,Q,G);return F&&W!==7&&(V=((U,D,O,L,T,H,I,S)=>{let A=V$(U);for(let b=L+1;b<=O;b++){if(b===7&&O!==7)continue;let k=u2(b,U);k[h[b]]+=A;let N=s0(i0(I(S(T,H,k)),D));if(N&&Math.sign(N)!==A)break;U=k}return U})(V,K,J,Math.max(6,W),z,X,Q,G)),V}function r6($,Z,J,W,Y){if(Z===6){let j=((z)=>z[0]+z[1]/l)($);return[K$(j,J,W),0]}return t6($,_3(Z,J),W,Y)}function t6($,Z,J,W){let[Y,j]=$;W&&j<0&&(j+=l,Y-=1);let[z,X]=f1(K$(j,Z,J),l);return P7(Y+z,X)}function K$($,Z,J){return t5($/Z,J)*Z}function t5($,Z){return _F[Z]($)}function FV($,Z,J,W,Y,j){let z=V$($),X=O0($),Q=r6(X,W,Y,j),G=i0(X,Q),B=Math.sign(Q[0]-X[0])===z,V=bZ(Q,Math.min(J,6));return[{...$,...V},TZ(Z,G),B]}function UV($,Z,J,W,Y,j,z,X,Q,G){let B=V$($),V=s0(O0($,5)),K=_3(W,Y),F=K$(V,K,j),[U,D]=q7(z,{...$,...d2},6,B,X,Q,G),O=F-s0(i0(U,D)),L=0;O&&Math.sign(O)!==B?Z=PZ(U,F):(L+=B,F=K$(O,K,j),Z=PZ(D,F));let T=j4(F);return[{...$,...T,days:$.days+L},Z,Boolean(L)]}function DV($,Z,J,W,Y,j,z,X,Q,G){let B=V$($),V=h[W],K=u2(W,$);W===7&&($={...$,weeks:$.weeks+Math.trunc($.days/7)});let F=g6($[V],Y)*Y;K[V]=F;let[U,D]=q7(z,K,W,Y*B,X,Q,G),O=F+y7(Z,U,D)*B*Y,L=K$(O,Y,j),T=Math.sign(L-O)===B;return K[V]=L,[K,T?D:U,T]}function g7($,Z,J,W){let[Y,j,z,X]=((G)=>{let B=b7(G=J1(G));return[G.timeZone,...B]})(W),Q=Y!==void 0;return((G,B,V,K,F,U)=>{V=t6(V,F,K,1);let D=B.getOffsetNanosecondsFor(V);return l7(B$(V,D),U)+(G?h$(f6(D)):"Z")})(Q,Z(Q?$(Y):o$),J.epochNanoseconds,j,z,X)}function m7($,Z,J){let[W,Y,j,z,X,Q]=((G)=>{G=J1(G);let B=o2(G),V=q5(G),K=NF(G),F=f3(G,4),U=R3(G,4);return[B,PF(G),K,F,...w5(U,V)]})(J);return((G,B,V,K,F,U,D,O,L,T)=>{K=t6(K,L,O,1);let H=G(V).getOffsetNanosecondsFor(K);return l7(B$(K,H),T)+h$(f6(H),D)+((I,S)=>S!==1?"["+(S===2?"!":"")+T0(I)+"]":"")(V,U)+i7(B,F)})($,Z.calendar,Z.timeZone,Z.epochNanoseconds,W,Y,j,z,X,Q)}function h7($,Z){let[J,W,Y,j]=((G)=>(G=J1(G),[o2(G),...b7(G)]))(Z);return z=$.calendar,X=J,Q=j,l7(o5($,Y,W),Q)+i7(z,X);var z,X,Q}function p7($,Z){return J=$.calendar,W=$,Y=E7(Z),k6(W)+i7(J,Y);var J,W,Y}function c7($,Z){return e5($.calendar,$j,$,E7(Z))}function d7($,Z){return e5($.calendar,OV,$,E7(Z))}function u7($,Z){let[J,W,Y]=k5(Z);return j=Y,Zj(v7($,W,J)[0],j);var j}function e6($,Z){let[J,W,Y]=k5(Z,3);return W>1&&($={...$,...VV($,W,J)}),((j,z)=>{let{sign:X}=j,Q=X===-1?f0(j):j,{hours:G,minutes:B}=Q,[V,K]=N7(O0(Q,3),t0,Q$);Gj(V);let F=s7(K,z),U=z>=0||!X||F;return(X<0?"-":"")+"P"+nY({Y:w$(Q.years),M:w$(Q.months),W:w$(Q.weeks),D:w$(Q.days)})+(G||B||V||U?"T"+nY({H:w$(G),M:w$(B),S:w$(V,U)+F}):"")})($,Y)}function e5($,Z,J,W){let Y=T0($),j=W>1||W===0&&Y!==q;return W===1?Y===q?Z(J):k6(J):j?k6(J)+Jj(Y,W===2):Z(J)}function nY($){let Z=[];for(let J in $){let W=$[J];W&&Z.push(W,J)}return Z.join("")}function l7($,Z){return k6($)+"T"+Zj($,Z)}function k6($){return $j($)+"-"+r0($.isoDay)}function $j($){let{isoYear:Z}=$;return(Z<0||Z>9999?Wj(Z)+S6(6,Math.abs(Z)):S6(4,Z))+"-"+r0($.isoMonth)}function OV($){return r0($.isoMonth)+"-"+r0($.isoDay)}function Zj($,Z){let J=[r0($.isoHour),r0($.isoMinute)];return Z!==-1&&J.push(r0($.isoSecond)+((W,Y,j,z)=>s7(W*D1+Y*i$+j,z))($.isoMillisecond,$.isoMicrosecond,$.isoNanosecond,Z)),J.join(":")}function h$($,Z=0){if(Z===1)return"";let[J,W]=f1(Math.abs($),M4),[Y,j]=f1(W,L4),[z,X]=f1(j,t0);return Wj($)+r0(J)+":"+r0(Y)+(z||X?":"+r0(z)+s7(X):"")}function i7($,Z){if(Z!==1){let J=T0($);if(Z>1||Z===0&&J!==q)return Jj(J,Z===2)}return""}function Jj($,Z){return"["+(Z?"!":"")+"u-ca="+$+"]"}function s7($,Z){let J=S6(9,$);return J=Z===void 0?J.replace(CF,""):J.slice(0,Z),J?"."+J:""}function Wj($){return $<0?"-":"+"}function w$($,Z){return $||Z?$.toLocaleString("fullwide",{useGrouping:0}):""}function LV($,Z){let{epochNanoseconds:J}=$,W=(Z.getOffsetNanosecondsFor?Z:Z($.timeZone)).getOffsetNanosecondsFor(J),Y=B$(J,W);return{calendar:$.calendar,...Y,offsetNanoseconds:W}}function Yj($,Z){let J=R0(Z,$);return{calendar:Z.calendar,...p0(VX,J),offset:h$(J.offsetNanoseconds),timeZone:Z.timeZone}}function p$($,Z,J,W=0,Y=0,j,z){if(J!==void 0&&W===1&&(W===1||z))return x7(Z,J);let X=$.getPossibleInstantsFor(Z);if(J!==void 0&&W!==3){let Q=((G,B,V,K)=>{let F=S0(B);K&&(V=f6(V));for(let U of G){let D=s0(i0(U,F));if(K&&(D=f6(D)),D===V)return U}})(X,Z,J,j);if(Q!==void 0)return Q;if(W===0)throw RangeError(uV)}return z?S0(Z):h0($,Z,Y,X)}function h0($,Z,J=0,W=$.getPossibleInstantsFor(Z)){if(W.length===1)return W[0];if(J===1)throw RangeError(lV);if(W.length)return W[J===3?1:0];let Y=S0(Z),j=((X,Q)=>{let G=X.getOffsetNanosecondsFor(PZ(Q,-l));return o7(X.getOffsetNanosecondsFor(PZ(Q,l))-G)})($,Y),z=j*(J===2?-1:1);return(W=$.getPossibleInstantsFor(B$(Y,z)))[J===2?0:W.length-1]}function n7($){if(Math.abs($)>=l)throw RangeError(cV);return $}function o7($){if($>l)throw RangeError(dV);return $}function a7($,Z,J){return M0(n0(TZ(Z.epochNanoseconds,((W)=>{if(Kj(W))throw RangeError(nV);return O0(W,5)})($?f0(J):J))))}function r7($,Z,J,W,Y,j=Object.create(null)){let z=Z(W.timeZone),X=$(W.calendar);return{...W,...J2(z,X,W,J?f0(Y):Y,j)}}function t7($,Z,J,W,Y=Object.create(null)){let{calendar:j}=J;return G0(W2($(j),J,Z?f0(W):W,Y),j)}function e7($,Z,J,W,Y){let{calendar:j}=J;return K0($4($(j),J,Z?f0(W):W,Y),j)}function $2($,Z,J,W,Y=Object.create(null)){let j=J.calendar,z=$(j),X=U3(z,J);Z&&(W=Y4(W)),W.sign<0&&(X=z.dateAdd(X,{...P0,months:1}),X=c$(X,-1));let Q=z.dateAdd(X,W,Y);return q$(U3(z,Q),j)}function Z2($,Z,J){return W1(jj(Z,$?f0(J):J)[0])}function J2($,Z,J,W,Y){let j=O0(W,5),z=J.epochNanoseconds;if(Kj(W)){let X=R0(J,$);z=TZ(h0($,{...$4(Z,X,{...W,...d2},Y),...p0(j1,X)}),j)}else z=TZ(z,j),g(Y);return{epochNanoseconds:n0(z)}}function W2($,Z,J,W){let[Y,j]=jj(Z,J);return q1({...$4($,Z,{...J,...d2,days:J.days+j},W),...Y})}function $4($,Z,J,W){if(J.years||J.months||J.weeks)return $.dateAdd(Z,J,W);g(W);let Y=J.days+O0(J,5)[0];return Y?z$(c$(Z,Y)):Z}function U3($,Z,J=1){return c$(Z,J-$.day(Z))}function jj($,Z){let[J,W]=O0(Z,5),[Y,j]=d6(G$($)+W);return[Y,J+j]}function c$($,Z){return Z?{...$,...u6(b0($)+Z*g0)}:$}function Z4($,Z,J){let W=$(J.calendar);return W4(J)?[J,W,Z(J.timeZone)]:[{...J,...e0},W]}function Y2($){return $?h5:S0}function J4($){return $?w(J2,$):W2}function j2($){return $?w(HV,$):TV}function W4($){return $&&$.epochNanoseconds}function D3($,Z){return $<=6-(W4(Z)?1:0)}function z2($,Z,J,W,Y,j,z){let X=$(J1(z).relativeTo),Q=Math.max(y$(Y),y$(j));if(D3(Q,X))return t(EZ(((D,O,L,T)=>{let H=TZ(O0(D),O0(O),T?-1:1);if(!Number.isFinite(H[0]))throw RangeError(D4);return{...P0,...bZ(H,L)}})(Y,j,Q,W)));if(!X)throw RangeError(O4);W&&(j=f0(j));let[G,B,V]=Z4(Z,J,X),K=J4(V),F=j2(V),U=K(B,G,Y);return t(F(B,G,K(B,U,j),Q))}function zj($,Z,J,W,Y){let j=y$(W),[z,X,Q,G,B]=((A,b,k)=>{A=k7(A,y6);let N=n2(A),v=k(A[UX]),_=R7(A),f=f3(A,7),H0=R3(A);if(N===void 0&&H0===void 0)throw RangeError(oV);return H0==null&&(H0=0),N==null&&(N=Math.max(H0,b)),y5(N,H0),_=f7(_,H0,1),[N,H0,_,f,v]})(Y,j,$),V=Math.max(j,z);if(!W4(B)&&V<=6)return t(EZ(((A,b,k,N,v)=>{let _=r6(O0(A),k,N,v);return{...P0,...bZ(_,b)}})(W,z,X,Q,G)));if(!B)throw RangeError(O4);let[K,F,U]=Z4(Z,J,B),D=Y2(U),O=J4(U),L=j2(U),T=O(F,K,W),H=L(F,K,T,z),I=W.sign,S=V$(H);if(I&&S&&I!==S)throw RangeError(S3);return S&&(H=a6(H,D(T),z,X,Q,G,F,K,D,O)),t(H)}function Xj($){return $.sign===-1?Y4($):$}function Y4($){return t(f0($))}function f0($){let Z={};for(let J of h)Z[J]=-1*$[J]||0;return Z}function Qj($){return!$.sign}function V$($,Z=h){let J=0;for(let W of Z){let Y=Math.sign($[W]);if(Y){if(J&&J!==Y)throw RangeError(sV);J=Y}}return J}function EZ($){for(let Z of WF)a0(Z,$[Z],-Z5,Z5,1);return Gj(s0(O0($),t0)),$}function Gj($){if(!Number.isSafeInteger($))throw RangeError(iV)}function O0($,Z=6){return K5($,Z,h)}function bZ($,Z=6){let[J,W]=$,Y=m6(W,Z,h);if(Y[h[Z]]+=J*(l/U1[Z]),!Number.isFinite(Y[h[Z]]))throw RangeError(D4);return Y}function j4($,Z=5){return m6($,Z,h)}function Kj($){return Boolean(V$($,KX))}function y$($){let Z=9;for(;Z>0&&!$[h[Z]];Z--);return Z}function MV($,Z){return[$,Z]}function oY($){let Z=Math.floor($/C6)*C6;return[Z,Z+C6]}function Bj($){let Z=F$($=E6($));if(!Z)throw RangeError(v0($));let J;if(Z.m)J=0;else{if(!Z.offset)throw RangeError(v0($));J=RZ(Z.offset)}return Z.timeZone&&K2(Z.timeZone,1),M0(x7(l6(Z),J))}function Vj($){let Z=F$(J0($));if(!Z)throw RangeError(v0($));if(Z.timeZone)return Pj(Z,Z.offset?RZ(Z.offset):void 0);if(Z.m)throw RangeError(v0($));return _j(Z)}function Fj($,Z){let J=F$(J0($));if(!J||!J.timeZone)throw RangeError(v0($));let{offset:W}=J,Y=W?RZ(W):void 0,[,j,z]=N3(Z);return Pj(J,Y,j,z)}function RZ($){let Z=K2($);if(Z===void 0)throw RangeError(v0($));return Z}function Uj($){let Z=F$(J0($));if(!Z||Z.m)throw RangeError(v0($));return G0(Nj(Z))}function z4($){let Z=F$(J0($));if(!Z||Z.m)throw RangeError(v0($));return K0(Z.p?Nj(Z):_j(Z))}function Dj($,Z){let J=Q2(J0(Z));if(J)return X2(J),q$(I7(g$(J)));let W=z4(Z);return q$(U3($(W.calendar),W))}function X2($){if($.calendar!==q)throw RangeError(k1($.calendar))}function Oj($,Z){let J=G2(J0(Z));if(J)return X2(J),R6(g$(J));let W=z4(Z),{calendar:Y}=W,j=$(Y),[z,X,Q]=j.h(W),[G,B]=j.I(z,X),[V,K]=j.N(G,B,Q);return R6(z$(j.P(V,K,Q)),Y)}function Lj($){let Z,J=((W)=>{let Y=RF.exec(W);return Y?(X4(Y[10]),Cj(Y)):void 0})(J0($));if(!J){if(J=F$($),!J)throw RangeError(v0($));if(!J.p)throw RangeError(v0($));if(J.m)throw RangeError(k1("Z"));X2(J)}if((Z=Q2($))&&iY(Z))throw RangeError(v0($));if((Z=G2($))&&iY(Z))throw RangeError(v0($));return W1(i6(J,1))}function Mj($){let Z=((J)=>{let W=wF.exec(J);return W?((Y)=>{function j(B,V,K){let F=0,U=0;if(K&&([F,Q]=f1(Q,U1[K])),B!==void 0){if(X)throw RangeError(k1(B));U=((D)=>{let O=parseInt(D);if(!Number.isFinite(O))throw RangeError(k1(D));return O})(B),z=1,V&&(Q=B2(V)*(U1[K]/t0),X=1)}return F+U}let z=0,X=0,Q=0,G={...xZ(h,[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)]),...m6(Q,2,h)};if(!z)throw RangeError(dz(h));return V2(Y[1])<0&&(G=f0(G)),G})(W):void 0})(J0($));if(!Z)throw RangeError(v0($));return t(EZ(Z))}function Hj($){let Z=F$($)||Q2($)||G2($);return Z?Z.calendar:$}function Tj($){let Z=F$($);return Z&&(Z.timeZone||Z.m&&o$||Z.offset)||$}function Pj($,Z,J=0,W=0){let Y=Q4($.timeZone),j=x4(Y);return N0(p$(j,l6($),Z,J,W,!j.v,$.m),Y,I3($.calendar))}function Nj($){return Ij(q1(l6($)))}function _j($){return Ij(z$(g$($)))}function Ij($){return{...$,calendar:I3($.calendar)}}function F$($){let Z=bF.exec($);return Z?((J)=>{let W=J[10],Y=(W||"").toUpperCase()==="Z";return{isoYear:xj(J),isoMonth:parseInt(J[4]),isoDay:parseInt(J[5]),...Cj(J.slice(5)),...X4(J[16]),p:Boolean(J[6]),m:Y,offset:Y?void 0:W}})(Z):void 0}function Q2($){let Z=SF.exec($);return Z?((J)=>({isoYear:xj(J),isoMonth:parseInt(J[4]),isoDay:1,...X4(J[5])}))(Z):void 0}function G2($){let Z=EF.exec($);return Z?((J)=>({isoYear:IZ,isoMonth:parseInt(J[1]),isoDay:parseInt(J[2]),...X4(J[3])}))(Z):void 0}function K2($,Z){let J=fF.exec($);return J?((W,Y)=>{let j=W[4]||W[5];if(Y&&j)throw RangeError(k1(j));return n7((HZ(W[2])*M4+HZ(W[3])*L4+HZ(W[4])*t0+B2(W[5]||""))*V2(W[1]))})(J,Z):void 0}function xj($){let Z=V2($[1]),J=parseInt($[2]||$[3]);if(Z<0&&!J)throw RangeError(k1(-0));return Z*J}function Cj($){let Z=HZ($[3]);return{...d6(B2($[4]||""))[0],isoHour:HZ($[1]),isoMinute:HZ($[2]),isoSecond:Z===60?59:Z}}function X4($){let Z,J,W=[];if($.replace(kF,(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(k1(Y))}else{if(J)throw RangeError(k1(Y));J=Q}return""}),W.length>1&&Z)throw RangeError(k1($));return{timeZone:J,calendar:W[0]||q}}function B2($){return parseInt($.padEnd(9,"0"))}function fZ($){return new RegExp(`^${$}$`,"i")}function V2($){return $&&$!=="+"?-1:1}function HZ($){return $===void 0?0:parseInt($)}function Aj($){return Q4(J0($))}function Q4($){let Z=F2($);return typeof Z=="number"?h$(Z):Z?((J)=>{if(yF.test(J))throw RangeError(pV);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?uY(j).replace(/island|noronha|murdo|rivadavia|urville/,uY):j)).join("/")})($):o$}function aY($){let Z=F2($);return typeof Z=="number"?Z:Z?Z.resolvedOptions().timeZone:o$}function F2($){let Z=K2($=$.toUpperCase(),1);return Z!==void 0?Z:$!==o$?qF($):void 0}function U2($,Z){return E0($.epochNanoseconds,Z.epochNanoseconds)}function D2($,Z){return E0($.epochNanoseconds,Z.epochNanoseconds)}function Sj($,Z,J,W,Y,j){let z=$(J1(j).relativeTo),X=Math.max(y$(W),y$(Y));if(Q5(h,W,Y))return 0;if(D3(X,z))return E0(O0(W),O0(Y));if(!z)throw RangeError(O4);let[Q,G,B]=Z4(Z,J,z),V=Y2(B),K=J4(B);return E0(V(K(G,Q,W)),V(K(G,Q,Y)))}function O2($,Z){return d$($,Z)||G4($,Z)}function d$($,Z){return j$(b0($),b0(Z))}function G4($,Z){return j$(G$($),G$(Z))}function Ej($,Z){return!U2($,Z)}function bj($,Z){return!D2($,Z)&&!!K4($.timeZone,Z.timeZone)&&SZ($.calendar,Z.calendar)}function Rj($,Z){return!O2($,Z)&&SZ($.calendar,Z.calendar)}function fj($,Z){return!d$($,Z)&&SZ($.calendar,Z.calendar)}function kj($,Z){return!d$($,Z)&&SZ($.calendar,Z.calendar)}function wj($,Z){return!d$($,Z)&&SZ($.calendar,Z.calendar)}function qj($,Z){return!G4($,Z)}function K4($,Z){if($===Z)return 1;let J=T0($),W=T0(Z);if(J===W)return 1;try{return aY(J)===aY(W)}catch(Y){}}function L2($,Z,J,W){let Y=AZ($,Q0(W),3,5),j=B4(Z.epochNanoseconds,J.epochNanoseconds,...Y);return t($?f0(j):j)}function M2($,Z,J,W,Y,j){let z=F4(W.calendar,Y.calendar),X=Q0(j),[Q,G,B,V]=AZ(J,X,5),K=W.epochNanoseconds,F=Y.epochNanoseconds,U=E0(F,K),D;if(U)if(Q<6)D=B4(K,F,Q,G,B,V);else{let O=Z(((T,H)=>{if(!K4(T,H))throw RangeError(oz);return T})(W.timeZone,Y.timeZone)),L=$(z);D=vj(L,O,W,Y,U,Q,X),D=a6(D,F,Q,G,B,V,L,W,h5,w(J2,O))}else D=P0;return t(J?f0(D):D)}function H2($,Z,J,W,Y){let j=F4(J.calendar,W.calendar),z=Q0(Y),[X,Q,G,B]=AZ(Z,z,6),V=S0(J),K=S0(W),F=E0(K,V),U;if(F)if(X<=6)U=B4(V,K,X,Q,G,B);else{let D=$(j);U=gj(D,J,W,F,X,z),U=a6(U,K,X,Q,G,B,D,J,S0,W2)}else U=P0;return t(Z?f0(U):U)}function T2($,Z,J,W,Y){let j=F4(J.calendar,W.calendar),z=Q0(Y);return yj(Z,()=>$(j),J,W,...AZ(Z,z,6,9,6),z)}function P2($,Z,J,W,Y){let j=F4(J.calendar,W.calendar),z=Q0(Y),X=AZ(Z,z,9,9,8),Q=$(j);return yj(Z,()=>Q,U3(Q,J),U3(Q,W),...X,z)}function yj($,Z,J,W,Y,j,z,X,Q){let G=S0(J),B=S0(W),V;if(E0(B,G))if(Y===6)V=B4(G,B,Y,j,z,X);else{let K=Z();V=K.dateUntil(J,W,Y,Q),j===6&&z===1||(V=a6(V,B,Y,j,z,X,K,J,S0,$4))}else V=P0;return t($?f0(V):V)}function N2($,Z,J,W){let Y=Q0(W),[j,z,X,Q]=AZ($,Y,5,5),G=K$(_2(Z,J),_3(z,X),Q),B={...P0,...j4(G,j)};return t($?f0(B):B)}function HV($,Z,J,W,Y,j){let z=E0(W.epochNanoseconds,J.epochNanoseconds);return z?Y<6?mj(J.epochNanoseconds,W.epochNanoseconds,Y):vj(Z,$,J,W,z,Y,j):P0}function TV($,Z,J,W,Y){let j=S0(Z),z=S0(J),X=E0(z,j);return X?W<=6?mj(j,z,W):gj($,Z,J,X,W,Y):P0}function vj($,Z,J,W,Y,j,z){let[X,Q,G]=((K,F,U,D)=>{function O(){return b={...c$(H,S++*-D),...T},k=h0(K,b),E0(I,k)===-D}let L=R0(F,K),T=p0(j1,L),H=R0(U,K),I=U.epochNanoseconds,S=0,A=_2(L,H),b,k;if(Math.sign(A)===-D&&S++,O()&&(D===-1||O()))throw RangeError(S3);let N=s0(i0(k,I));return[L,b,N]})(Z,J,W,Y);var B,V;return{...j===6?(B=X,V=Q,{...P0,days:hj(B,V)}):$.dateUntil(X,Q,j,z),...j4(G)}}function gj($,Z,J,W,Y,j){let[z,X,Q]=((G,B,V)=>{let K=B,F=_2(G,B);return Math.sign(F)===-V&&(K=c$(B,-V),F+=l*V),[G,K,F]})(Z,J,W);return{...$.dateUntil(z,X,Y,j),...j4(Q)}}function B4($,Z,J,W,Y,j){return{...P0,...bZ(r6(i0($,Z),W,Y,j),J)}}function mj($,Z,J){return{...P0,...bZ(i0($,Z),J)}}function hj($,Z){return V4(b0($),b0(Z))}function V4($,Z){return Math.trunc((Z-$)/g0)}function _2($,Z){return G$(Z)-G$($)}function F4($,Z){if(!SZ($,Z))throw RangeError(g2);return $}function PV($){function Z(Y){return((j,z)=>({...pj(j,z),F:j.month,day:parseInt(j.day)}))(_7(J,Y),W)}let J=e2($),W=w6($);return{id:$,O:NV(Z),B:_V(Z)}}function NV($){return m0((Z)=>{let J=b0(Z);return $(J)},WeakMap)}function _V($){let Z=$(0).year-GF;return m0((J)=>{let W,Y=CZ(J-Z),j=[],z=[];do Y+=400*g0;while((W=$(Y)).year<=J);do Y+=(1-W.day)*g0,W.year===J&&(j.push(Y),z.push(W.F)),Y-=g0;while((W=$(Y)).year>=J);return{k:j.reverse(),C:tz(z.reverse())}})}function pj($,Z){let J,W,Y=cj($);if($.era){let j=XX[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=sj(W,j[J]||0))}return{era:J,eraYear:W,year:Y}}function cj($){return parseInt($.relatedYear||$.year)}function X7($){let{year:Z,F:J,day:W}=this.O($),{C:Y}=this.B(Z);return[Z,Y[J]+1,W]}function O3($,Z=1,J=1){return this.B($).k[Z-1]+(J-1)*g0}function _6($){let Z=tY(this,$),J=tY(this,$-1),W=Z.length;if(W>J.length){let Y=nj(this);if(Y<0)return-Y;for(let j=0;j<W;j++)if(Z[j]!==J[j])return j+1}}function I6($){return V4(O3.call(this,$),O3.call(this,$+1))}function rY($,Z){let{k:J}=this.B($),W=Z+1,Y=J;return W>J.length&&(W=1,Y=this.B($+1).k),V4(J[Z-1],Y[W-1])}function x6($){return this.B($).k.length}function tY($,Z){return Object.keys($.B(Z).C)}function dj($){return I3(J0($))}function I3($){if(($=$.toLowerCase())!==q&&$!==T4&&w6($)!==w6(e2($).resolvedOptions().calendar))throw RangeError(hV($));return $}function w6($){return $==="islamicc"&&($="islamic"),$.split("-")[0]}function uj($){return this.R($)[0]}function lj($){return this.R($)[1]}function I2($){let[Z]=this.h($);return V4(this.q(Z),b0($))+1}function ij($){let Z=gF.exec($);if(!Z)throw RangeError(gV($));return[parseInt(Z[1]),Boolean(Z[2])]}function q6($,Z,J){return $+(Z||J&&$>=J?1:0)}function Q7($,Z){return $-(Z&&$>=Z?1:0)}function sj($,Z){return(Z+$)*(Math.sign(Z)||1)||0}function G7($){return XX[oj($)]}function nj($){return $F[oj($)]}function oj($){return w6($.id||q)}function aj($,Z,J,W){let Y=U$(J,W,Y1,[],WX);if(Y.timeZone!==void 0){let j=J.dateFromFields(Y),z=u$(Y),X=$(Y.timeZone);return{epochNanoseconds:p$(Z(X),{...j,...z},Y.offset!==void 0?RZ(Y.offset):void 0),timeZone:X}}return{...J.dateFromFields(Y),...e0}}function rj($,Z,J,W,Y,j){let z=U$(J,Y,Y1,ZX,WX),X=$(z.timeZone),[Q,G,B]=N3(j),V=J.dateFromFields(z,n6(j,Q)),K=u$(z,Q);return N0(p$(Z(X),{...V,...K},z.offset!==void 0?RZ(z.offset):void 0,G,B),X,W)}function tj($,Z,J){let W=U$($,Z,Y1,[],g1),Y=g(J);return G0(q1({...$.dateFromFields(W,n6(J,Y)),...u$(W,Y)}))}function x2($,Z,J,W=[]){let Y=U$($,Z,Y1,W);return $.dateFromFields(Y,J)}function C2($,Z,J,W){let Y=U$($,Z,p2,W);return $.yearMonthFromFields(Y,J)}function A2($,Z,J,W,Y=[]){let j=U$($,J,Y1,Y);return Z&&j.month!==void 0&&j.monthCode===void 0&&j.year===void 0&&(j.year=IZ),$.monthDayFromFields(j,W)}function ej($,Z){let J=g(Z);return W1(u$(F1($,B7,[],1),J))}function $z($){let Z=F1($,c2);return t(EZ({...P0,...Z}))}function U$($,Z,J,W=[],Y=[]){return F1(Z,[...$.fields(J),...Y].sort(),W)}function F1($,Z,J,W=!J){let Y={},j,z=0;for(let X of Z){if(X===j)throw RangeError(fV(X));if(X==="constructor"||X==="__proto__")throw RangeError(y2(X));let Q=$[X];if(Q!==void 0)z=1,J5[X]&&(Q=J5[X](Q,X)),Y[X]=Q;else if(J){if(J.includes(X))throw TypeError(q2(X));Y[X]=zX[X]}j=X}if(W&&!z)throw TypeError(dz(Z));return Y}function u$($,Z){return i6(cF({...zX,...$}),Z)}function Zz($,Z,J,W,Y,j){let z=Q0(j),{calendar:X,timeZone:Q}=J;return N0(((G,B,V,K,F)=>{let U=x3(G,V,K,Y1,JX,$X),[D,O,L]=N3(F,2);return p$(B,{...G.dateFromFields(U,n6(F,D)),...u$(U,D)},RZ(U.offset),O,L)})($(X),Z(Q),W,Y,z),Q,X)}function Jz($,Z,J,W,Y){let j=Q0(Y);return G0(((z,X,Q,G)=>{let B=x3(z,X,Q,Y1,g1),V=g(G);return q1({...z.dateFromFields(B,n6(G,V)),...u$(B,V)})})($(Z.calendar),J,W,j))}function Wz($,Z,J,W,Y){let j=Q0(Y);return((z,X,Q,G)=>{let B=x3(z,X,Q,Y1);return z.dateFromFields(B,G)})($(Z.calendar),J,W,j)}function Yz($,Z,J,W,Y){let j=Q0(Y);return q$(((z,X,Q,G)=>{let B=x3(z,X,Q,p2);return z.yearMonthFromFields(B,G)})($(Z.calendar),J,W,j))}function jz($,Z,J,W,Y){let j=Q0(Y);return((z,X,Q,G)=>{let B=x3(z,X,Q,Y1);return z.monthDayFromFields(B,G)})($(Z.calendar),J,W,j)}function zz($,Z,J){return W1(((W,Y,j)=>{let z=g(j);return u$({...p0(B7,W),...F1(Y,B7)},z)})($,Z,J))}function Xz($,Z){return t((J=$,W=Z,EZ({...J,...F1(W,c2)})));var J,W}function x3($,Z,J,W,Y=[],j=[]){let z=[...$.fields(W),...Y].sort(),X=F1(Z,z,j),Q=F1(J,z);return X=$.mergeFields(X,Q),F1(X,z,[])}function S2($,Z){let J=U$($,Z,jX);return $.monthDayFromFields(J)}function E2($,Z,J){let W=U$($,Z,YX);return $.yearMonthFromFields(W,J)}function Qz($,Z,J,W,Y){Z=p0(J=$.fields(J),Z),W=F1(W,Y=$.fields(Y),[]);let j=$.mergeFields(Z,W);return j=F1(j,[...J,...Y].sort(),[]),$.dateFromFields(j)}function J7($,Z){let{era:J,eraYear:W,year:Y}=Z,j=G7($);if(J!==void 0||W!==void 0){if(J===void 0||W===void 0)throw TypeError(wV);if(!j)throw RangeError(kV);let z=j[J];if(z===void 0)throw RangeError(yV(J));let X=sj(W,z);if(Y!==void 0&&Y!==X)throw RangeError(qV);Y=X}else if(Y===void 0)throw TypeError(vV(j));return Y}function W7($,Z,J,W){let{month:Y,monthCode:j}=Z;if(j!==void 0){let z=((X,Q,G,B)=>{let V=X.U(G),[K,F]=ij(Q),U=q6(K,F,V);if(F){let D=nj(X);if(D===void 0)throw RangeError(B3);if(D>0){if(U>D)throw RangeError(B3);if(V===void 0){if(B===1)throw RangeError(B3);U--}}else{if(U!==-D)throw RangeError(B3);if(V===void 0&&B===1)throw RangeError(B3)}}return U})($,j,J,W);if(Y!==void 0&&Y!==z)throw RangeError(sz);Y=z,W=1}else if(Y===void 0)throw TypeError(mV);return a0("month",Y,1,$.L(J),W)}function eY($,Z,J,W,Y){return y0(Z,"day",1,$.j(W,J),Y)}function Y7($,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 Gz($){return M0(n0(c6(p6($))))}function Kz($,Z,J,W,Y=q){return N0(n0(c6(p6(J))),Z(W),$(Y))}function Bz($,Z,J,W,Y=0,j=0,z=0,X=0,Q=0,G=0,B=q){return G0(q1(l6($1(A0,xZ(P4,[Z,J,W,Y,j,z,X,Q,G])))),$(B))}function Vz($,Z,J,W,Y=q){return K0(z$(g$($1(A0,{isoYear:Z,isoMonth:J,isoDay:W}))),$(Y))}function Fz($,Z,J,W=q,Y=1){let j=A0(Z),z=A0(J),X=$(W);return q$(I7(g$({isoYear:j,isoMonth:z,isoDay:A0(Y)})),X)}function Uz($,Z,J,W=q,Y=IZ){let j=A0(Z),z=A0(J),X=$(W);return R6(z$(g$({isoYear:A0(Y),isoMonth:j,isoDay:z})),X)}function Dz($=0,Z=0,J=0,W=0,Y=0,j=0){return W1(i6($1(A0,xZ(j1,[$,Z,J,W,Y,j])),1))}function Oz($=0,Z=0,J=0,W=0,Y=0,j=0,z=0,X=0,Q=0,G=0){return t(EZ($1(T5,xZ(h,[$,Z,J,W,Y,j,z,X,Q,G]))))}function b2($,Z,J=q){return N0($.epochNanoseconds,Z,J)}function Lz($){return M0($.epochNanoseconds)}function R2($,Z){return G0(R0(Z,$))}function f2($,Z){return K0(R0(Z,$))}function Mz($,Z,J){return E2($(Z.calendar),J)}function Hz($,Z,J){return S2($(Z.calendar),J)}function k2($,Z){return W1(R0(Z,$))}function Tz($,Z,J,W){let Y=((j,z,X,Q)=>{let G=S7(Q);return h0(j(z),X,G)})($,J,Z,W);return N0(n0(Y),J,Z.calendar)}function Pz($,Z,J){let W=$(Z.calendar);return q$({...Z,...E2(W,J)})}function Nz($,Z,J){return S2($(Z.calendar),J)}function _z($,Z,J,W,Y){let j=$(Y.timeZone),z=Y.plainTime,X=z!==void 0?Z(z):e0;return N0(h0(J(j),{...W,...X}),j,W.calendar)}function Iz($,Z=e0){return G0(q1({...$,...Z}))}function xz($,Z,J){return E2($(Z.calendar),J)}function Cz($,Z,J){return S2($(Z.calendar),J)}function Az($,Z,J,W){return((Y,j,z)=>Qz(Y,j,YX,w1(z),b3))($(Z.calendar),J,W)}function Sz($,Z,J,W){return((Y,j,z)=>Qz(Y,j,jX,w1(z),H4))($(Z.calendar),J,W)}function Ez($,Z,J,W,Y){let j=w1(Y),z=Z(j.plainDate),X=$(j.timeZone);return N0(h0(J(X),{...z,...W}),X,z.calendar)}function bz($,Z){return G0(q1({...$,...Z}))}function Rz($){return M0(n0(NZ($,t0)))}function fz($){return M0(n0(NZ($,D1)))}function kz($){return M0(n0(c6(p6($),i$)))}function wz($){return M0(n0(c6(p6($))))}function qz($,Z,J=e0){let W=Z.timeZone,Y=$(W),j={...R0(Z,Y),...J};return N0(p$(Y,j,j.offsetNanoseconds,2),W,Z.calendar)}function yz($,Z,J){let W=Z.timeZone,Y=$(W),j={...R0(Z,Y),...J},z=hz(Z.calendar,J.calendar);return N0(p$(Y,j,j.offsetNanoseconds,2),W,z)}function vz($,Z=e0){return G0({...$,...Z})}function gz($,Z){return G0({...$,...Z},hz($.calendar,Z.calendar))}function U4($,Z){return{...$,calendar:Z}}function mz($,Z){return{...$,timeZone:Z}}function hz($,Z){if($===Z)return $;let J=T0($),W=T0(Z);if(J===W||J===q)return Z;if(W===q)return $;throw RangeError(g2)}function IV($,Z){return(J)=>J===q?$:J===T4||J===_Z?Object.assign(Object.create($),{id:J}):Object.assign(Object.create(Z),vF(J))}function l$($,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=D7(W,Y),$)||Object.assign(Y,Z),J&&(Y.timeZone=o$,["full","long"].includes(Y.timeStyle)&&(Y.timeStyle="medium")),Y)}function y1($,Z=w2){let[J,,,W]=$;return(Y,j=YU,...z)=>{let X=Z(W&&W(...z),Y,j,J),Q=X.resolvedOptions();return[X,...xV($,Q,z)]}}function w2($,Z,J,W){if(J=W(J),$){if(J.timeZone!==void 0)throw TypeError(rV);J.timeZone=$}return new D$(Z,J)}function xV($,Z,J){let[,W,Y]=$;return J.map((j)=>(j.calendar&&((z,X,Q)=>{if((Q||z!==q)&&z!==X)throw RangeError(g2)})(T0(j.calendar),Z.calendar,Y),W(j,Z)))}function kZ($){let Z=C3();return B$(Z,$.getOffsetNanosecondsFor(Z))}function C3(){return NZ(Date.now(),D1)}function v1(){return Y5||(Y5=new D$().resolvedOptions().timeZone)}var CV=($,Z)=>`Non-integer ${$}: ${Z}`,AV=($,Z)=>`Non-positive ${$}: ${Z}`,SV=($,Z)=>`Non-finite ${$}: ${Z}`,EV=($)=>`Cannot convert bigint to ${$}`,bV=($)=>`Invalid bigint: ${$}`,RV="Cannot convert Symbol to string",pz="Invalid object",cz=($,Z,J,W,Y)=>Y?cz($,Y[Z],Y[J],Y[W]):A3($,Z)+`; must be between ${J}-${W}`,A3=($,Z)=>`Invalid ${$}: ${Z}`,q2=($)=>`Missing ${$}`,y2=($)=>`Invalid field ${$}`,fV=($)=>`Duplicate field ${$}`,dz=($)=>"No valid fields: "+$.join(),uz="Invalid bag",lz=($,Z,J)=>A3($,Z)+"; must be "+Object.keys(J).join(),iz="Cannot use valueOf",v2="Invalid calling context",kV="Forbidden era/eraYear",wV="Mismatching era/eraYear",qV="Mismatching year/eraYear",yV=($)=>`Invalid era: ${$}`,vV=($)=>"Missing year"+($?"/era/eraYear":""),gV=($)=>`Invalid monthCode: ${$}`,sz="Mismatching month/monthCode",mV="Missing month/monthCode",$5="Cannot guess year",B3="Invalid leap month",nz="Invalid protocol",S3="Invalid protocol results",g2="Mismatching Calendars",hV=($)=>`Invalid Calendar: ${$}`,oz="Mismatching TimeZones",pV="Forbidden ICU TimeZone",cV="Out-of-bounds offset",dV="Out-of-bounds TimeZone gap",uV="Invalid TimeZone offset",lV="Ambiguous offset",D4="Out-of-bounds date",iV="Out-of-bounds duration",sV="Cannot mix duration signs",O4="Missing relativeTo",nV="Cannot use large units",oV="Required smallestUnit or largestUnit",aV="smallestUnit > largestUnit",v0=($)=>`Cannot parse: ${$}`,k1=($)=>`Invalid substring: ${$}`,az=($)=>`Cannot format ${$}`,rz="Mismatching types for formatting",rV="Cannot specify TimeZone",tz=w(H3,($,Z)=>Z),wZ=w(H3,($,Z,J)=>J),r0=w(S6,2),K7={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},E3=Object.keys(K7),g0=86400000,ez=1000,i$=1000,D1=1e6,t0=1e9,L4=60000000000,M4=3600000000000,l=86400000000000,U1=[1,i$,D1,t0,L4,M4,l],g1=E3.slice(0,6),B7=T3(g1),$X=["offset"],ZX=["timeZone"],JX=g1.concat($X),WX=JX.concat(ZX),V7=["era","eraYear"],tV=V7.concat(["year"]),H4=["year"],m2=["monthCode"],h2=["month"].concat(m2),b3=["day"],p2=h2.concat(H4),YX=m2.concat(H4),Y1=b3.concat(p2),eV=b3.concat(h2),jX=b3.concat(m2),zX=wZ(g1,0),q="iso8601",T4="gregory",_Z="japanese",XX={[T4]:{bce:-1,ce:0},[_Z]:{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}},$F={chinese:13,dangi:13,hebrew:-6},J0=w(h6,"string"),QX=w(h6,"boolean"),ZF=w(h6,"number"),GX=w(h6,"function"),h=E3.map(($)=>$+"s"),c2=T3(h),JF=h.slice(0,6),KX=h.slice(6),WF=KX.slice(1),YF=tz(h),P0=wZ(h,0),d2=wZ(JF,0),u2=w(G5,h),j1=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],l2=["isoDay","isoMonth","isoYear"],P4=j1.concat(l2),i2=T3(l2),BX=T3(j1),VX=T3(P4),e0=wZ(BX,0),jF=w(G5,P4),D$=Intl.DateTimeFormat,FX="en-GB",s2=1e8,zF=s2*g0,XF=[s2,0],QF=[-s2,0],L3=275760,M3=-271821,GF=1970,IZ=1972,R1=12,KF=CZ(1868,9,8),BF=m0(BV,WeakMap),y6="smallestUnit",F7="unit",F3="roundingIncrement",j7="fractionalSecondDigits",UX="relativeTo",DX={constrain:0,reject:1},VF=Object.keys(DX),FF={compatible:0,reject:1,earlier:2,later:3},UF={reject:0,use:1,prefer:2,ignore:3},DF={auto:0,never:1,critical:2,always:3},OF={auto:0,never:1,critical:2},LF={auto:0,never:1},MF={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},R3=w(w7,y6),n2=w(w7,"largestUnit"),HF=w(w7,F7),OX=w(m$,"overflow",DX),LX=w(m$,"disambiguation",FF),TF=w(m$,"offset",UF),o2=w(m$,"calendarName",DF),PF=w(m$,"timeZoneName",OF),NF=w(m$,"offset",LF),f3=w(m$,"roundingMode",MF),qZ="PlainYearMonth",yZ="PlainMonthDay",s$="PlainDate",n$="PlainDateTime",N4="PlainTime",m1="ZonedDateTime",_4="Instant",I4="Duration",_F=[Math.floor,($)=>N6($)?Math.floor($):Math.round($),Math.ceil,($)=>N6($)?Math.ceil($):Math.round($),Math.trunc,($)=>N6($)?Math.trunc($)||0:Math.round($),($)=>$<0?Math.floor($):Math.ceil($),($)=>Math.sign($)*Math.round(Math.abs($))||0,($)=>N6($)?($=Math.trunc($)||0)+$%2:Math.round($)],o$="UTC",C6=5184000,IF=b6(1847),xF=b6(new Date().getUTCFullYear()+10),CF=/0+$/,R0=m0(LV,WeakMap),Z5=4294967295,x4=m0(($)=>{let Z=F2($);return typeof Z=="object"?new HX(Z):new MX(Z||0)});class MX{constructor($){this.v=$}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor($){return[x7($,this.v)]}l(){}}class HX{constructor($){this.$=((Z)=>{function J(Q){let G=z7(Q,z,X),[B,V]=oY(G),K=Y(B),F=Y(V);return K===F?K:W(j(B,V),K,F,Q)}function W(Q,G,B,V){let K,F;for(;(V===void 0||(K=V<Q[0]?G:V>=Q[1]?B:void 0)===void 0)&&(F=Q[1]-Q[0]);){let U=Q[0]+Math.floor(F/2);Z(U)===B?Q[1]=U:Q[0]=U+1}return K}let Y=m0(Z),j=m0(MV),z=IF,X=xF;return{G(Q){let G=J(Q-86400),B=J(Q+86400),V=Q-G,K=Q-B;if(G===B)return[V];let F=J(V);return F===J(K)?[Q-F]:G>B?[V,K]:[]},V:J,l(Q,G){let B=z7(Q,z,X),[V,K]=oY(B),F=C6*G,U=G<0?()=>K>z||(z=B,0):()=>V<X||(X=B,0);for(;U();){let D=Y(V),O=Y(K);if(D!==O){let L=j(V,K);W(L,D,O);let T=L[0];if((j$(T,Q)||1)===G)return T}V+=F,K+=F}}}})(((Z)=>(J)=>{let W=_7(Z,J*ez);return b6(cj(W),parseInt(W.month),parseInt(W.day),parseInt(W.hour),parseInt(W.minute),parseInt(W.second))-J})($))}getOffsetNanosecondsFor($){return this.$.V(_5($))*t0}getPossibleInstantsFor($){let[Z,J]=[b6((W=$).isoYear,W.isoMonth,W.isoDay,W.isoHour,W.isoMinute,W.isoSecond),W.isoMillisecond*D1+W.isoMicrosecond*i$+W.isoNanosecond];var W;return this.$.G(Z).map((Y)=>n0(PZ(NZ(Y,t0),J)))}l($,Z){let[J,W]=I5($),Y=this.$.l(J+(Z>0||W?1:0),Z);if(Y!==void 0)return NZ(Y,t0)}}var a2="([+\u2212-])",A6="(?:[.,](\\d{1,9}))?",TX=`(?:(?:${a2}(\\d{6}))|(\\d{4}))-?(\\d{2})`,r2="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+A6+")?)?",t2=a2+r2,AF=TX+"-?(\\d{2})(?:[T ]"+r2+"(Z|"+t2+")?)?",PX="\\[(!?)([^\\]]*)\\]",C4=`((?:${PX}){0,9})`,SF=fZ(TX+C4),EF=fZ("(?:--)?(\\d{2})-?(\\d{2})"+C4),bF=fZ(AF+C4),RF=fZ("T?"+r2+"(?:"+t2+")?"+C4),fF=fZ(t2),kF=new RegExp(PX,"g"),wF=fZ(`${a2}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${A6}H)?(?:(\\d+)${A6}M)?(?:(\\d+)${A6}S)?)?`),qF=m0(($)=>new D$(FX,{timeZone:$,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),yF=/^(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$/,vF=m0(PV),e2=m0(($)=>new D$(FX,{calendar:$,timeZone:o$,era:"short",year:"numeric",month:"short",day:"numeric"})),gF=/^M(\d{2})(L?)$/,mF={era:E6,eraYear:A0,year:A0,month:lY,monthCode:E6,day:lY},hF=wZ(g1,A0),pF=wZ(h,T5),J5=Object.assign({},mF,hF,pF,{offset:E6}),cF=w(KV,g1,j1),W5={dateAdd($,Z,J){let W=g(J),Y,{years:j,months:z,weeks:X,days:Q}=Z;if(Q+=O0(Z,5)[0],j||z)Y=((G,B,V,K,F)=>{let[U,D,O]=G.h(B);if(V){let[L,T]=G.I(U,D);U+=V,D=q6(L,T,G.U(U)),D=a0("month",D,1,G.L(U),F)}return K&&([U,D]=G._(U,D,K)),O=a0("day",O,1,G.j(U,D),F),G.q(U,D,O)})(this,$,j,z,W);else{if(!X&&!Q)return $;Y=b0($)}return Y+=(7*X+Q)*g0,z$(u6(Y))},dateUntil($,Z,J){if(J<=7){let Q=0,G=hj({...$,...e0},{...Z,...e0});return J===7&&([Q,G]=Q$(G,7)),{...P0,weeks:Q,days:G}}let W=this.h($),Y=this.h(Z),[j,z,X]=((Q,G,B,V,K,F,U)=>{let D=K-G,O=F-B,L=U-V;if(D||O){let T=Math.sign(D||O),H=Q.j(K,F),I=0;if(Math.sign(L)===-T){let S=H;[K,F]=Q._(K,F,-T),D=K-G,O=F-B,H=Q.j(K,F),I=T<0?-S:H}if(L=U-Math.min(V,H)+I,D){let[S,A]=Q.I(G,B),[b,k]=Q.I(K,F);if(O=b-S||Number(k)-Number(A),Math.sign(O)===-T){let N=T<0&&-Q.L(K);D=(K-=T)-G,O=F-q6(S,A,Q.U(K))+(N||Q.L(K))}}}return[D,O,L]})(this,...W,...Y);return J===8&&(z+=this.J(j,W[0]),j=0),{...P0,years:j,months:z,days:X}},dateFromFields($,Z){let J=g(Z),W=J7(this,$),Y=W7(this,$,W,J),j=eY(this,$,Y,W,J);return K0(z$(this.P(W,Y,j)),this.id||q)},yearMonthFromFields($,Z){let J=g(Z),W=J7(this,$),Y=W7(this,$,W,J);return q$(I7(this.P(W,Y,1)),this.id||q)},monthDayFromFields($,Z){let J=g(Z),W=!this.id,{monthCode:Y,year:j,month:z}=$,X,Q,G,B,V;if(Y!==void 0){[X,Q]=ij(Y),V=j5($,"day");let K=this.N(X,Q,V);if(!K)throw RangeError($5);if([G,B]=K,z!==void 0&&z!==B)throw RangeError(sz);W&&(B=a0("month",B,1,R1,1),V=a0("day",V,1,C7(j!==void 0?j:G,B),J))}else{G=j===void 0&&W?IZ:J7(this,$),B=W7(this,$,G,J),V=eY(this,$,B,G,J);let K=this.U(G);Q=B===K,X=Q7(B,K);let F=this.N(X,Q,V);if(!F)throw RangeError($5);[G,B]=F}return R6(z$(this.P(G,B,V)),this.id||q)},fields($){return G7(this)&&$.includes("year")?[...$,...V7]:$},mergeFields($,Z){let J=Object.assign(Object.create(null),$);return Y7(J,Z,h2),G7(this)&&(Y7(J,Z,tV),this.id===_Z&&Y7(J,Z,eV,V7)),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:I2,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"+r0(j)+(z?"L":""))(W,Y)},dayOfWeek:E5,daysInWeek(){return 7}},dF={dayOfYear:I2,h:C5,q:CZ},uF=Object.assign({},dF,{weekOfYear:uj,yearOfWeek:lj,R($){function Z(F){return(7-F<W?7:0)-F}function J(F){let U=S5(K+F),D=F||1,O=Z(V3(Q+U*D,7));return B=(U+(O-G)*D)/7}let W=this.id?1:4,Y=E5($),j=this.dayOfYear($),z=V3(Y-1,7),X=j-1,Q=V3(z-X,7),G=Z(Q),B,V=Math.floor((X-G)/7)+1,K=$.isoYear;return V?V>J(0)&&(V=1,K++):(V=J(-1),K--),[V,K,B]}}),lF={dayOfYear:I2,h:X7,q:O3,weekOfYear:uj,yearOfWeek:lj,R(){return[]}},vZ=IV(Object.assign({},W5,uF,{h:C5,ee($){return this.id===T4?b5($):this.id===_Z?BF($):[]},I:($,Z)=>[Z,0],N($,Z){if(!Z)return[IZ,$]},K:A7,U(){},L:A5,J:($)=>$*R1,j:C7,X:S5,P:($,Z,J)=>({isoYear:$,isoMonth:Z,isoDay:J}),q:CZ,_:($,Z,J)=>($+=g6(J,R1),(Z+=L7(J,R1))<1?($--,Z+=R1):Z>R1&&($++,Z-=R1),[$,Z]),year($){return $.isoYear},month($){return $.isoMonth},day:($)=>$.isoDay}),Object.assign({},W5,lF,{h:X7,ee($){let Z=this.O($);return[Z.era,Z.eraYear]},I($,Z){let J=_6.call(this,$);return[Q7(Z,J),J===Z]},N($,Z,J){let[W,Y,j]=X7.call(this,{isoYear:IZ,isoMonth:R1,isoDay:31}),z=_6.call(this,W),X=Y===z;(j$($,Q7(Y,z))||j$(Number(Z),Number(X))||j$(J,j))===1&&W--;for(let Q=0;Q<100;Q++){let G=W-Q,B=_6.call(this,G),V=q6($,Z,B);if(Z===(V===B)&&J<=rY.call(this,G,V))return[G,V]}},K($){let Z=I6.call(this,$);return Z>I6.call(this,$-1)&&Z>I6.call(this,$+1)},U:_6,L:x6,J($,Z){let J=Z+$,W=Math.sign($),Y=W<0?-1:0,j=0;for(let z=Z;z!==J;z+=W)j+=x6.call(this,z+Y);return j},j:rY,X:I6,P($,Z,J){return u6(O3.call(this,$,Z,J))},q:O3,_($,Z,J){if(J){if(Z+=J,!Number.isSafeInteger(Z))throw RangeError(D4);if(J<0)for(;Z<1;)Z+=x6.call(this,--$);else{let W;for(;Z>(W=x6.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}})),X$="numeric",gZ=["timeZoneName"],NX={month:X$,day:X$},$9={year:X$,month:X$},Z9=Object.assign({},$9,{day:X$}),J9={hour:X$,minute:X$,second:X$},W9=Object.assign({},Z9,J9),iF=Object.assign({},W9,{timeZoneName:"short"}),sF=Object.keys($9),nF=Object.keys(NX),oF=Object.keys(Z9),aF=Object.keys(J9),Y9=["dateStyle"],rF=sF.concat(Y9),tF=nF.concat(Y9),j9=oF.concat(Y9,["weekday"]),k3=aF.concat(["dayPeriod","timeStyle"]),z9=j9.concat(k3),eF=z9.concat(gZ),$U=gZ.concat(k3),ZU=gZ.concat(j9),JU=gZ.concat(["day","weekday"],k3),WU=gZ.concat(["year","weekday"],k3),YU={},X9=[l$(z9,W9),o6],_X=[l$(eF,iF),o6,0,($,Z)=>{let J=T0($.timeZone);if(Z&&T0(Z.timeZone)!==J)throw RangeError(oz);return J}],Q9=[l$(z9,W9,gZ),b0],G9=[l$(j9,Z9,$U),b0],K9=[l$(k3,J9,ZU),($)=>G$($)/D1],B9=[l$(rF,$9,JU),b0,1],V9=[l$(tF,NX,WU),b0,1],Y5;function M1($,Z,J,W,Y){function j(...Q){if(!(this instanceof j))throw TypeError(v2);AX(this,Z(...Q))}function z(Q,G){return Object.defineProperties(function(...B){return Q.call(this,X(this),...B)},U7(G))}function X(Q){let G=x0(Q);if(!G||G.branding!==$)throw TypeError(v2);return G}return Object.defineProperties(j.prototype,{...z5($1(z,J)),...v$($1(z,W)),...v6("Temporal."+$)}),Object.defineProperties(j,{...v$(Y),...U7($)}),[j,(Q)=>{let G=Object.create(j.prototype);return AX(G,Q),G},X]}function bX($){return $=$.concat("id").sort(),(Z)=>{if(!X5(Z,$))throw TypeError(nz);return Z}}function cZ($){if(x0($)||$.calendar!==void 0||$.timeZone!==void 0)throw TypeError(uz);return $}function A4($,Z){let J={};for(let W in $)J[W]=({o:Y},j)=>{let z=x0(j)||{},{branding:X}=z,Q=X===s$||Z.includes(X)?z:w0(j);return Y[W](Q)};return J}function D9($){let Z={};for(let J in $)Z[J]=(W)=>{let{calendar:Y}=W;return(j=Y,typeof j=="string"?vZ(j):(z=j,Object.assign(Object.create(TU),{i:z})))[J](W);var j,z};return Z}function T$(){throw TypeError(iz)}function q3({calendar:$}){return typeof $=="string"?new I9($):$}function IX($,Z){if(Z=Q0(Z),L0($)){let W=x0($);if(W&&W.branding===yZ)return g(Z),W;let Y=kX($);return A2(w4(Y||q),!Y,$,Z)}let J=Oj(vZ,$);return g(Z),J}function RX($,Z,J){return W=Z.call($,k0(M0(J))),n7(P3(W));var W}function S4($,Z=vX){let J=Object.keys(Z).sort(),W={};for(let Y of J)W[Y]=w(Z[Y],$,GX($[Y]));return W}function i($,Z){return typeof $=="string"?x4($):S4($,Z)}function V0($){return i($,U9)}function O1($){if(L0($)){let Z=x0($);if(Z)switch(Z.branding){case _4:return Z;case m1:return M0(Z.epochNanoseconds)}}return Bj($)}function xX($,Z,J){let W=Z.l(O1(J).epochNanoseconds,$);return W?k0(M0(W)):null}function a($){return L0($)?(x0($)||{}).timeZone||CU($):((Z)=>Q4(Tj(J0(Z))))($)}function O$($,Z){if(L0($)){let J=x0($)||{};switch(J.branding){case N4:return g(Z),J;case n$:return g(Z),W1(J);case m1:return g(Z),k2(V0,J)}return ej($,Z)}return g(Z),Lj($)}function O9($){return $===void 0?void 0:O$($)}function mZ($,Z){if(Z=Q0(Z),L0($)){let W=x0($);return W&&W.branding===qZ?(g(Z),W):C2(f4(y3($)),$,Z)}let J=Dj(vZ,$);return g(Z),J}function L$($,Z){if(Z=Q0(Z),L0($)){let W=x0($)||{};switch(W.branding){case n$:return g(Z),W;case s$:return g(Z),G0({...W,...e0});case m1:return g(Z),R2(V0,W)}return tj(k4(y3($)),$,Z)}let J=Uj($);return g(Z),J}function w0($,Z){if(Z=Q0(Z),L0($)){let W=x0($)||{};switch(W.branding){case s$:return g(Z),W;case n$:return g(Z),K0(W);case m1:return g(Z),f2(V0,W)}return x2(k4(y3($)),$,Z)}let J=z4($);return g(Z),J}function fX($,Z,J){return Z1(Z.call($,Y0(K0(J,$))))}function H1($){return(Z)=>typeof Z=="string"?vZ(Z):((J,W)=>{let Y=Object.keys(W).sort(),j={};for(let z of Y)j[z]=w(W[z],J,J[z]);return j})(Z,$)}function W0($){if(L0($)){let Z=x0($);return Z&&Z.branding===I4?Z:$z($)}return Mj($)}function w3($){if($!==void 0){if(L0($)){let Z=x0($)||{};switch(Z.branding){case m1:case s$:return Z;case n$:return K0(Z)}let J=y3($);return{...aj(a,i,k4(J),$),calendar:J}}return Vj($)}}function y3($){return kX($)||q}function kX($){let{calendar:Z}=$;if(Z!==void 0)return I0(Z)}function I0($){return L0($)?(x0($)||{}).calendar||pU($):((Z)=>I3(Hj(J0(Z))))($)}function hZ($,Z){if(Z=Q0(Z),L0($)){let J=x0($);if(J&&J.branding===m1)return N3(Z),J;let W=y3($);return rj(a,i,k4(W),W,$,Z)}return Fj($,Z)}function CX($){return $1((Z)=>(J)=>Z(F9(J)),$)}function F9($){return R0($,V0)}function jU(){let $=D$.prototype,Z=Object.getOwnPropertyDescriptors($),J=Object.getOwnPropertyDescriptors(D$),W=function(Y,j={}){if(!(this instanceof W))return new W(Y,j);x9.set(this,((z,X={})=>{let Q=new D$(z,X),G=Q.resolvedOptions(),B=G.locale,V=p0(Object.keys(X),G),K=m0(QU),F=(...U)=>{let D,O=U.map((L,T)=>{let H=x0(L),I=(H||{}).branding;if(T&&D&&D!==I)throw TypeError(rz);return D=I,H});return D?K(D)(B,V,...O):[Q,...U]};return F.u=Q,F})(Y,j))};for(let Y in Z){let j=Z[Y],z=Y.startsWith("format")&&zU(Y);typeof j.value=="function"?j.value=Y==="constructor"?W:z||XU(Y):z&&(j.get=function(){return z.bind(this)})}return J.prototype.value=Object.create($,Z),Object.defineProperties(W,J),W}function zU($){return function(...Z){let J=x9.get(this),[W,...Y]=J(...Z);return W[$](...Y)}}function XU($){return function(...Z){return x9.get(this).u[$](...Z)}}function QU($){let Z=GU[$];if(!Z)throw TypeError(az($));return y1(Z,m0(w2))}var GU={Instant:X9,PlainDateTime:Q9,PlainDate:G9,PlainTime:K9,PlainYearMonth:B9,PlainMonthDay:V9},KU=y1(X9),BU=y1(_X),VU=y1(Q9),FU=y1(G9),UU=y1(K9),DU=y1(B9),OU=y1(V9),L9={era:U5,eraYear:M7,year:P3,month:Z1,daysInMonth:Z1,daysInYear:Z1,inLeapYear:QX,monthsInYear:Z1},b4={monthCode:J0},M9={day:Z1},wX={dayOfWeek:Z1,dayOfYear:Z1,weekOfYear:D5,yearOfWeek:M7,daysInWeek:Z1},qX=Object.assign({},L9,b4,M9,wX),E4=new WeakMap,x0=E4.get.bind(E4),AX=E4.set.bind(E4),LU={...A4(L9,[qZ]),...A4(wX,[]),...A4(b4,[qZ,yZ]),...A4(M9,[yZ])},H9=D9(qX),MU=D9({...L9,...b4}),HU=D9({...b4,...M9}),v3={calendarId:($)=>T0($.calendar)},TU=$1(($,Z)=>function(J){let{i:W}=this;return $(W[Z](Y0(K0(J,W))))},qX),PU=H3(($)=>(Z)=>Z[$],h.concat("sign")),T9=H3(($,Z)=>(J)=>J[j1[Z]],g1),yX={epochSeconds:v5,epochMilliseconds:o6,epochMicroseconds:g5,epochNanoseconds:m5},g3=w(D7,new Set(["branding"])),[NU,pZ,_U]=M1(yZ,w(Uz,I0),{...v3,...HU},{getISOFields:g3,getCalendar:q3,with($,Z,J){return pZ(jz(gU,$,this,cZ(Z),J))},equals:($,Z)=>wj($,IX(Z)),toPlainDate($,Z){return Y0(Sz(m3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=OU(Z,J,$);return W.format(Y)},toString:d7,toJSON:($)=>d7($),valueOf:T$},{from:($,Z)=>pZ(IX($,Z))}),vX={getOffsetNanosecondsFor:RX,getPossibleInstantsFor($,Z,J){let W=[...Z.call($,_0(G0(J,q)))].map((j)=>xU(j).epochNanoseconds),Y=W.length;return Y>1&&(W.sort(E0),o7(s0(i0(W[0],W[Y-1])))),W}},U9={getOffsetNanosecondsFor:RX},[IU,k0,xU]=M1(_4,Gz,yX,{add:($,Z)=>k0(a7(0,$,W0(Z))),subtract:($,Z)=>k0(a7(1,$,W0(Z))),until:($,Z,J)=>s(L2(0,$,O1(Z),J)),since:($,Z,J)=>s(L2(1,$,O1(Z),J)),round:($,Z)=>k0(c5($,Z)),equals:($,Z)=>Ej($,O1(Z)),toZonedDateTime($,Z){let J=w1(Z);return B0(b2($,a(J.timeZone),I0(J.calendar)))},toZonedDateTimeISO:($,Z)=>B0(b2($,a(Z))),toLocaleString($,Z,J){let[W,Y]=KU(Z,J,$);return W.format(Y)},toString:($,Z)=>g7(a,V0,$,Z),toJSON:($)=>g7(a,V0,$),valueOf:T$},{from:($)=>k0(O1($)),fromEpochSeconds:($)=>k0(Rz($)),fromEpochMilliseconds:($)=>k0(fz($)),fromEpochMicroseconds:($)=>k0(kz($)),fromEpochNanoseconds:($)=>k0(wz($)),compare:($,Z)=>U2(O1($),O1(Z))}),[R4,oT]=M1("TimeZone",($)=>{let Z=Aj($);return{branding:"TimeZone",id:Z,o:x4(Z)}},{id:($)=>$.id},{getPossibleInstantsFor:({o:$},Z)=>$.getPossibleInstantsFor(L$(Z)).map((J)=>k0(M0(J))),getOffsetNanosecondsFor:({o:$},Z)=>$.getOffsetNanosecondsFor(O1(Z).epochNanoseconds),getOffsetStringFor($,Z){let J=O1(Z).epochNanoseconds,W=S4(this,U9).getOffsetNanosecondsFor(J);return h$(W)},getPlainDateTimeFor($,Z,J=q){let W=O1(Z).epochNanoseconds,Y=S4(this,U9).getOffsetNanosecondsFor(W);return _0(G0(B$(W,Y),I0(J)))},getInstantFor($,Z,J){let W=L$(Z),Y=S7(J),j=S4(this);return k0(M0(h0(j,W,Y)))},getNextTransition:({o:$},Z)=>xX(1,$,Z),getPreviousTransition:({o:$},Z)=>xX(-1,$,Z),equals($,Z){return!!K4(this,a(Z))},toString:($)=>$.id,toJSON:($)=>$.id},{from($){let Z=a($);return typeof Z=="string"?new R4(Z):Z}}),CU=bX(Object.keys(vX)),[AU,M$]=M1(N4,Dz,T9,{getISOFields:g3,with($,Z,J){return M$(zz(this,cZ(Z),J))},add:($,Z)=>M$(Z2(0,$,W0(Z))),subtract:($,Z)=>M$(Z2(1,$,W0(Z))),until:($,Z,J)=>s(N2(0,$,O$(Z),J)),since:($,Z,J)=>s(N2(1,$,O$(Z),J)),round:($,Z)=>M$(l5($,Z)),equals:($,Z)=>qj($,O$(Z)),toZonedDateTime:($,Z)=>B0(Ez(a,w0,i,$,Z)),toPlainDateTime:($,Z)=>_0(bz($,w0(Z))),toLocaleString($,Z,J){let[W,Y]=UU(Z,J,$);return W.format(Y)},toString:u7,toJSON:($)=>u7($),valueOf:T$},{from:($,Z)=>M$(O$($,Z)),compare:($,Z)=>G4(O$($),O$(Z))}),[SU,H$,EU]=M1(qZ,w(Fz,I0),{...v3,...MU},{getISOFields:g3,getCalendar:q3,with($,Z,J){return H$(Yz(vU,$,this,cZ(Z),J))},add:($,Z,J)=>H$($2(SX,0,$,W0(Z),J)),subtract:($,Z,J)=>H$($2(SX,1,$,W0(Z),J)),until:($,Z,J)=>s(P2(EX,0,$,mZ(Z),J)),since:($,Z,J)=>s(P2(EX,1,$,mZ(Z),J)),equals:($,Z)=>kj($,mZ(Z)),toPlainDate($,Z){return Y0(Az(m3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=DU(Z,J,$);return W.format(Y)},toString:c7,toJSON:($)=>c7($),valueOf:T$},{from:($,Z)=>H$(mZ($,Z)),compare:($,Z)=>d$(mZ($),mZ(Z))}),[bU,_0]=M1(n$,w(Bz,I0),{...v3,...H9,...T9},{getISOFields:g3,getCalendar:q3,with($,Z,J){return _0(Jz(m3,$,this,cZ(Z),J))},withCalendar:($,Z)=>_0(U4($,I0(Z))),withPlainDate:($,Z)=>_0(gz($,w0(Z))),withPlainTime:($,Z)=>_0(vz($,O9(Z))),add:($,Z,J)=>_0(t7(a$,0,$,W0(Z),J)),subtract:($,Z,J)=>_0(t7(a$,1,$,W0(Z),J)),until:($,Z,J)=>s(H2(L1,0,$,L$(Z),J)),since:($,Z,J)=>s(H2(L1,1,$,L$(Z),J)),round:($,Z)=>_0(u5($,Z)),equals:($,Z)=>Rj($,L$(Z)),toZonedDateTime:($,Z,J)=>B0(Tz(i,$,a(Z),J)),toPlainDate:($)=>Y0(K0($)),toPlainTime:($)=>M$(W1($)),toPlainYearMonth($){return H$(Pz(f4,$,this))},toPlainMonthDay($){return pZ(Nz(w4,$,this))},toLocaleString($,Z,J){let[W,Y]=VU(Z,J,$);return W.format(Y)},toString:h7,toJSON:($)=>h7($),valueOf:T$},{from:($,Z)=>_0(L$($,Z)),compare:($,Z)=>O2(L$($),L$(Z))}),[RU,Y0,gX]=M1(s$,w(Vz,I0),{...v3,...H9},{getISOFields:g3,getCalendar:q3,with($,Z,J){return Y0(Wz(m3,$,this,cZ(Z),J))},withCalendar:($,Z)=>Y0(U4($,I0(Z))),add:($,Z,J)=>Y0(e7(a$,0,$,W0(Z),J)),subtract:($,Z,J)=>Y0(e7(a$,1,$,W0(Z),J)),until:($,Z,J)=>s(T2(L1,0,$,w0(Z),J)),since:($,Z,J)=>s(T2(L1,1,$,w0(Z),J)),equals:($,Z)=>fj($,w0(Z)),toZonedDateTime($,Z){let J=!L0(Z)||Z instanceof R4?{timeZone:Z}:Z;return B0(_z(a,O$,i,$,J))},toPlainDateTime:($,Z)=>_0(Iz($,O9(Z))),toPlainYearMonth($){return H$(xz(f4,$,this))},toPlainMonthDay($){return pZ(Cz(w4,$,this))},toLocaleString($,Z,J){let[W,Y]=FU(Z,J,$);return W.format(Y)},toString:p7,toJSON:($)=>p7($),valueOf:T$},{from:($,Z)=>Y0(w0($,Z)),compare:($,Z)=>d$(w0($),w0(Z))}),P9={fields($,Z,J){return[...Z.call($,J)]}},mX=Object.assign({dateFromFields($,Z,J,W){return gX(Z.call($,Object.assign(Object.create(null),J),W))}},P9),hX=Object.assign({yearMonthFromFields($,Z,J,W){return EU(Z.call($,Object.assign(Object.create(null),J),W))}},P9),pX=Object.assign({monthDayFromFields($,Z,J,W){return _U(Z.call($,Object.assign(Object.create(null),J),W))}},P9),N9={mergeFields($,Z,J,W){return w1(Z.call($,Object.assign(Object.create(null),J),Object.assign(Object.create(null),W)))}},fU=Object.assign({},mX,N9),kU=Object.assign({},hX,N9),wU=Object.assign({},pX,N9),_9={dateAdd($,Z,J,W,Y){return gX(Z.call($,Y0(K0(J,$)),s(t(W)),Y))}},cX=Object.assign({},_9,{dateUntil($,Z,J,W,Y,j){return hU(Z.call($,Y0(K0(J,$)),Y0(K0(W,$)),Object.assign(Object.create(null),j,{largestUnit:E3[Y]})))}}),qU=Object.assign({},_9,{day:fX}),yU=Object.assign({},cX,{day:fX}),f4=H1(hX),k4=H1(mX),w4=H1(pX),vU=H1(kU),m3=H1(fU),gU=H1(wU),a$=H1(_9),L1=H1(cX),SX=H1(qU),EX=H1(yU),[mU,s,hU]=M1(I4,Oz,{...PU,blank:Qj},{with:($,Z)=>s(Xz($,Z)),negated:($)=>s(Y4($)),abs:($)=>s(Xj($)),add:($,Z,J)=>s(z2(w3,L1,i,0,$,W0(Z),J)),subtract:($,Z,J)=>s(z2(w3,L1,i,1,$,W0(Z),J)),round:($,Z)=>s(zj(w3,L1,i,$,Z)),total:($,Z)=>p5(w3,L1,i,$,Z),toLocaleString($,Z,J){return Intl.DurationFormat?new Intl.DurationFormat(Z,J).format(this):e6($)},toString:e6,toJSON:($)=>e6($),valueOf:T$},{from:($)=>s(W0($)),compare:($,Z,J)=>Sj(w3,a$,i,W0($),W0(Z),J)}),dX={toString:($)=>$.id,toJSON:($)=>$.id,...LU,dateAdd:({id:$,o:Z},J,W,Y)=>Y0(K0(Z.dateAdd(w0(J),W0(W),Y),$)),dateUntil:({o:$},Z,J,W)=>s(t($.dateUntil(w0(Z),w0(J),f5(W)))),dateFromFields:({id:$,o:Z},J,W)=>Y0(x2(Z,J,W,F5($))),yearMonthFromFields:({id:$,o:Z},J,W)=>H$(C2(Z,J,W,B5($))),monthDayFromFields:({id:$,o:Z},J,W)=>pZ(A2(Z,0,J,W,V5($))),fields({o:$},Z){let J=new Set(Y1),W=[];for(let Y of Z){if(J0(Y),!J.has(Y))throw RangeError(y2(Y));J.delete(Y),W.push(Y)}return $.fields(W)},mergeFields:({o:$},Z,J)=>$.mergeFields(O7(H7(Z)),O7(H7(J)))},[I9]=M1("Calendar",($)=>{let Z=dj($);return{branding:"Calendar",id:Z,o:vZ(Z)}},{id:($)=>$.id},dX,{from($){let Z=I0($);return typeof Z=="string"?new I9(Z):Z}}),pU=bX(Object.keys(dX).slice(4)),[cU,B0]=M1(m1,w(Kz,I0,a),{...yX,...v3,...CX(H9),...CX(T9),offset:($)=>h$(F9($).offsetNanoseconds),offsetNanoseconds:($)=>F9($).offsetNanoseconds,timeZoneId:($)=>T0($.timeZone),hoursInDay:($)=>i5(i,$)},{getISOFields:($)=>Yj(V0,$),getCalendar:q3,getTimeZone:({timeZone:$})=>typeof $=="string"?new R4($):$,with($,Z,J){return B0(Zz(m3,i,$,this,cZ(Z),J))},withCalendar:($,Z)=>B0(U4($,I0(Z))),withTimeZone:($,Z)=>B0(mz($,a(Z))),withPlainDate:($,Z)=>B0(yz(i,$,w0(Z))),withPlainTime:($,Z)=>B0(qz(i,$,O9(Z))),add:($,Z,J)=>B0(r7(a$,i,0,$,W0(Z),J)),subtract:($,Z,J)=>B0(r7(a$,i,1,$,W0(Z),J)),until:($,Z,J)=>s(t(M2(L1,i,0,$,hZ(Z),J))),since:($,Z,J)=>s(t(M2(L1,i,1,$,hZ(Z),J))),round:($,Z)=>B0(d5(i,$,Z)),startOfDay:($)=>B0(s5(i,$)),equals:($,Z)=>bj($,hZ(Z)),toInstant:($)=>k0(Lz($)),toPlainDateTime:($)=>_0(R2(V0,$)),toPlainDate:($)=>Y0(f2(V0,$)),toPlainTime:($)=>M$(k2(V0,$)),toPlainYearMonth($){return H$(Mz(f4,$,this))},toPlainMonthDay($){return pZ(Hz(w4,$,this))},toLocaleString($,Z,J={}){let[W,Y]=BU(Z,J,$);return W.format(Y)},toString:($,Z)=>m7(V0,$,Z),toJSON:($)=>m7(V0,$),valueOf:T$},{from:($,Z)=>B0(hZ($,Z)),compare:($,Z)=>D2(hZ($),hZ(Z))}),dU=Object.defineProperties({},{...v6("Temporal.Now"),...v$({timeZoneId:()=>v1(),instant:()=>k0(M0(C3())),zonedDateTime:($,Z=v1())=>B0(N0(C3(),a(Z),I0($))),zonedDateTimeISO:($=v1())=>B0(N0(C3(),a($),q)),plainDateTime:($,Z=v1())=>_0(G0(kZ(V0(a(Z))),I0($))),plainDateTimeISO:($=v1())=>_0(G0(kZ(V0(a($))),q)),plainDate:($,Z=v1())=>Y0(K0(kZ(V0(a(Z))),I0($))),plainDateISO:($=v1())=>Y0(K0(kZ(V0(a($))),q)),plainTimeISO:($=v1())=>M$(W1(kZ(V0(a($)))))})}),dZ=Object.defineProperties({},{...v6("Temporal"),...v$({PlainYearMonth:SU,PlainMonthDay:NU,PlainDate:RU,PlainTime:AU,PlainDateTime:bU,ZonedDateTime:cU,Instant:IU,Calendar:I9,TimeZone:R4,Duration:mU,Now:dU})}),uU=jU(),x9=new WeakMap,lU=Object.defineProperties(Object.create(Intl),v$({DateTimeFormat:uU}));var q4="x-gemi-socket";var ZP="gemi.v1",uX="/__gemi/socket",JP=/^[A-Za-z0-9_-]{1,32}$/,WP={Normal:1000,UnsupportedData:1003,PolicyViolation:1008,Restart:1012,TryAgainLater:1013,Revoked:4001};function XP($){return $}function lX(){return{driver:"memory",redis:{},maxEventBytes:16384,warnEventBytes:4096,path:uX,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 iU,randomBytes as sU}from"crypto";function nU($=process.env.SECRET){if(!$)return"gemi:bc:";return`gemi:bc:${Buffer.from(iU("sha256",$,"gemi","gemi.broadcast.prefix",4)).toString("hex")}:`}var oU="__control",C9=250,aU=1e4,rU=15000;class A9{config;prefix;controlChannel;instanceId=sU(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??nU(),this.controlChannel=this.prefix+oU,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=h3((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 $})(),rU,"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 (${iX(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(aU,C9*2**this.reconnectAttempt);this.reconnectAttempt=Math.min(this.reconnectAttempt+1,16);let Z=Math.max(C9,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;h3($.ping(),this.subscribeTimeoutMs,"ping").catch((Z)=>{if(this.subscriber!==$)return;console.warn(`[gemi] Broadcast: the Redis subscriber did not answer a ping (${iX(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??tU(Math.min(Z,C9));await h3(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 h3(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 h3(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 h3($,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 tU($){return new Promise((Z)=>setTimeout(Z,$))}function iX($){return $ instanceof Error?$.message:String($)}import{createHmac as eU,hkdfSync as $D,randomBytes as sX}from"crypto";function nX($){return eU("sha256",ZD()).update($).digest("base64url").slice(0,22)}var y4=null;function ZD(){let $=process.env.SECRET||void 0;if(y4&&y4.secret===$)return y4.key;let Z=$?Buffer.from($D("sha256",$,"gemi","gemi.broadcast.socket-tag",32)):sX(32);return y4={secret:$,key:Z},Z}function VP(){return sX(16).toString("base64url")}var JD=/^[A-Za-z0-9_-]{8,64}$/;function S9($){return typeof $==="string"&&JD.test($)}function oX($,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 rX 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 c0{options;static token="broadcast";config;driver;warnedAboutSize=new Set;started=!1;hooks;channelRouter;constructor($={},Z={}){this.options=Z;this.config=T1(lX(),$),this.driver=jD(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 p3(this,v4($,Z[0]),null)}toUser($){return new p3(this,{topic:KZ($),pattern:U0},null)}toOthers($){return new tX(this,YD($))}broadcastEvent($){let Z=$.broadcastOn(),J=Array.isArray(Z)?Z:[Z],W=$.broadcastAs(),Y=$.broadcastWith(),j=J.map((z)=>this.prepare(v4(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){PW(Z);let Y;try{Y=oX($.topic,Z,J,W?nX(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){uZ(()=>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=WD($);uZ(()=>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 rX(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 p3{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 tX{manager;except;constructor($,Z){this.manager=$;this.except=Z}to($,...Z){return new p3(this.manager,v4($,Z[0]),this.except)}toUser($){return new p3(this.manager,{topic:KZ($),pattern:U0},this.except)}}function v4($,Z){if(TW($))return{topic:_8($.topic),...$.pattern?{pattern:$.pattern}:{}};if(Z!==void 0||$.includes(":"))return{topic:z3($,Z??{}),pattern:$};if($===U0)throw new u('"user" is not a topic: the "user" channel resolves to user.<id> per subscriber. Emit with Broadcast.toUser(user).');return{topic:_8($)}}function WD($){if($&&typeof $==="object"&&"user"in $)return{user:KZ($.user).slice(U0.length+1)};if($&&typeof $==="object"&&"channel"in $)return{topic:v4($.channel,$.params).topic};throw new u("Broadcast.revoke takes { user } or { channel }.")}function YD($){if($===null||$===void 0)return null;if(typeof $==="string")return S9($)?$:null;let J=($ instanceof Request?$.headers:("rawRequest"in $)?$.rawRequest.headers:$.headers)?.get(q4);return S9(J)?J:null}function jD($,Z){let J=$.driver;if(J===void 0||J==="memory")return new aX;if(J==="redis"){let W=Z?.config.get("redis",{})??{},Y=$.redis??{};return new A9({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 E9 extends Error{code;constructor($,Z=`OAuth callback failed: ${$}`){super(Z);this.name="OAuthCallbackError",this.code=$}}class zD{linkByEmail=!0;createUsers=!0;createUsersWithoutEmail=!1}import{createHash as b9,createHmac as XD,randomBytes as eX,timingSafeEqual as JQ}from"crypto";var d3=600,g4="gemi_oauth",QD=`__Host-${g4}`;function lZ($,Z=g4){if(Z===g4)return $?QD:g4;return $?`__Host-${Z}`:Z}function c3($){return $.toString("base64url")}function WQ($){return XD("sha256",DZ()).update(`gemi-oauth-state:${$}`).digest()}function $Q($,Z){let J=b9("sha256").update($).digest(),W=b9("sha256").update(Z).digest();return JQ(J,W)&&$.length===Z.length}function m4($,Z=Date.now(),J={}){let W=c3(eX(32)),Y=c3(eX(32)),j=GD(Y),z={provider:$,state:W,codeVerifier:Y,expiresAt:Z+d3*1000,...J.subject!==void 0?{subject:J.subject}:{},...J.returnTo!==void 0?{returnTo:J.returnTo}:{}};return{state:W,codeVerifier:Y,codeChallenge:j,cookieValue:KD(z)}}function GD($){return c3(b9("sha256").update($).digest())}function KD($){let Z=c3(Buffer.from(JSON.stringify($)));return`${Z}.${c3(WQ(Z))}`}function BD($){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=WQ(J);if(W.length!==Y.length||!JQ(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 P$=new Map,ZQ=1e4;function VD($,Z,J){if(P$.size>=ZQ){for(let[W,Y]of P$)if(Y<=J)P$.delete(W);while(P$.size>=ZQ){let W=P$.keys().next().value;if(W===void 0)break;P$.delete(W)}}P$.set($,Z)}function h4($){let Z=$.now??Date.now();if(!$.cookieValue||!$.returnedState)return{ok:!1,reason:"missing_state"};let J=BD($.cookieValue);if(!J)return{ok:!1,reason:"invalid_state"};let W=$Q(J.state,$.returnedState),Y=$Q(J.provider,$.provider);if(!W||!Y)return{ok:!1,reason:"invalid_state"};if(J.expiresAt<=Z)return{ok:!1,reason:"expired_state"};if(P$.has(J.state))return{ok:!1,reason:"invalid_state"};return VD(J.state,J.expiresAt,Z),{ok:!0,payload:J}}var R9=new WeakMap;function UD($){let Z=R9.get($);if(!Z)Z=$(FD(32).toString("hex")),R9.set($,Z),Z.catch(()=>R9.delete($));return Z}async function f9($,Z,J){if(typeof J==="string"&&J!=="")return await $.verifyPassword(Z,J);try{await $.verifyPassword(Z,await UD($.hashPassword))}catch{}return!1}async function r$($,Z){let J=Z.user??Z.session?.user;if(!J||!$.onAuthenticated)return;let{password:W,...Y}=J;await $.onAuthenticated({...Z,user:Y})}class w9 extends Error{}function k9($){return typeof $==="string"&&$!==""?$:null}function YQ($){return G3($)}var DD=256;function jQ($){return typeof $==="string"&&$!==""&&$.length<=DD?$:null}function zQ($){let{password:Z,code:J,...W}=$;return W}var p4="intended_url";function QQ($){if($.cookies.get(p4))$.ctx().setCookie(p4,"",{maxAge:-1})}function XQ($){let Z=$.cookies.get(p4);if(!Z)return null;QQ($);try{return K1(decodeURIComponent(Z),"")||null}catch{return null}}class q9 extends C{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class GQ extends C{schema={email:{required:"Email is required",email:"Invalid email"}}}class KQ extends C{schema={password:{required:"Password is required",password:"Invalid password"}}}function h1($){if(M(E).config[$]===!1)throw new z0("Not found",{status:404})}class e extends Q3{async me(){let $=await q0.user();if(!$)throw new p8;return $}async verifyEmail($=new C){h1("password");let Z=await $.input(),{userProvider:J}=M(E),W=k9(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=M(E),{userProvider:J}=Z,W=k9($.search.get("token")),Y=null;try{Y=G3(decodeURIComponent($.search.get("email")??""))}catch{}if(await LZ("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,M(E).accessTokenCookieOptions($,j.expiresAt)),await Z.config.onSignIn(j,$.search.toJSON()),await r$(Z.config,{session:j,isNewUser:!1,method:"magic-link",req:$}),{session:j}}async verifyPinRequest($){h1("magicLink");let Z=M(E),J=await $.input(),{email:W,pin:Y}=J.toJSON(),j=G3(W),z=jQ(Y);if(await LZ("verify",j,$,Z.config.emailCode.verifyLimit),!j||!z)throw new d({pin:["Invalid pin"]});let X=await Z.verifyOneTimeCode(j,z);if(X.status==="too_many_attempts")throw new d({pin:["Too many attempts"]});if(X.status!=="ok")throw new d({pin:["Invalid pin"]});return await Z.userProvider.verifyUser(j),j}async signInWithPinV2($=new C){let Z=M(E),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSessionV2({email:J});return $.ctx().setCookie("access_token",W.token,M(E).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON()),await r$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),W}async signInWithPin($=new C){let Z=M(E),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSession({email:J});return $.ctx().setCookie("access_token",W.token,M(E).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON()),await r$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),{session:W}}async signInV2($=new q9){h1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=M(E),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await f9(j.config,W,z?.password);if(!z||!X)throw new d({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSessionV2({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,M(E).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await r$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...B}=z;return B}async signIn($=new q9){h1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=M(E),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await f9(j.config,W,z?.password);if(!z||!X)throw new d({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSession({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,M(E).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await r$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...B}=z;return B}async signUp(){h1("password");let $=M(E),{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:zQ(Y.toJSON())},B=YQ(j);if(!B)throw new d({email:["Invalid email"]});if(z!=null&&typeof z!=="string")throw new d({password:["Invalid password"]});if(Q!=null&&typeof Q!=="string")throw new d({invitationId:["Invalid invitation"]});if(await Z.findUserByEmailAddress(B,!1))throw new d({email:["Email address already exists"]});let K=await J.hashPassword(z),F=M(c).detectLocale(W),U;if(Q)U=await Z.findInvitation(Q,B);let D,O="";if(U)D=await Z.transaction(async()=>{await Z.deleteInvitationById(Q);let L=await Z.createUser({email:B,name:X,password:K,emailVerifiedAt:new Date,locale:F});return await Z.createAccount({organizationId:U.organizationId,userId:L.id,organizationRole:U.role}),await J.onUserCreated(L,G),L});else O=await J.generateEmailVerificationToken(B),D=await Z.transaction(async()=>{let L=await Z.createUser({email:B,name:X,password:K,verificationToken:O,locale:F});return await J.onUserCreated(L,G),L});return await J.onSignUp(D,O,W.search.toJSON()),D}async signOut($=new C){let Z=S$($),J=M(E),{config:W}=J,Y=await J.revokeSession(Z,$.headers.get("User-Agent"));if($.ctx().setCookie("access_token","",M(E).accessTokenCookieOptions($,new Date(0))),M(E).cookieDomain($))$.ctx().setCookie("access_token","",{...M(E).accessTokenCookieOptions($,new Date(0)),domain:void 0});if(Y?.user)OD(Y.user),Y.user.extension=await W.extendSession(Y.user),await W.onSignOut(Y.user);return{}}async forgotPassword($=new GQ){h1("password");let Z=await $.input(),J=YQ(Z.get("email"));if(!J)return{};let{userProvider:W,config:Y}=M(E),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 KQ){h1("password");let{userProvider:Z,config:J}=M(E),W=await $.input(),{password:Y,token:j}=W.toJSON(),z=k9(j),X=z?await Z.findPasswordResetToken({token:z}):null;if(!X)throw new d({token:["Invalid token"]});if(dZ.Instant.from(X.createdAt.toISOString()).add({hours:24}).until(dZ.Now.instant()).sign>=0)throw new d({token:["Token expired"]});await Z.deletePasswordResetToken({token:z});let G=await Z.findUserByEmailAddress(X.user.email,J.verifyEmail);if(!G)throw new d({email:["User not found"]});let B=await J.hashPassword(Y);return await Z.updateUserPassword({id:G.id,password:B}),await Z.deleteAllUserSessions(G.id),await J.onResetPassword(G),{}}async changePassword($=new C){h1("password");let{userProvider:Z,config:J}=M(E),W=await q0.user(),Y=await $.input(),{oldPassword:j,newPassword:z}=Y.toJSON();if(typeof z!=="string")throw new d({newPassword:["Invalid password"]});let X=await Z.findUserByEmailAddress(W.email,J.verifyEmail);if(!(typeof j==="string"&&await f9(J,j,X?.password)))throw new d({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=M(E).config.oauthProviders,W=Object.hasOwn(J,Z),Y=await MZ(J,Z);if(!Y){if(W)throw new z0("Not found",{status:404});throw Error(`Invalid provider: ${Z}`)}let j=BZ($.rawRequest),z=K1($.search.get(G1),"");if(z)$.ctx().setCookie(p4,encodeURIComponent(z),{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:600});else QQ($);let{state:X,codeChallenge:Q,cookieValue:G}=m4(Z);return $.ctx().setCookie(lZ(j),G,{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:d3}),{destination:await Y.getRedirectUrl($,{state:X,codeChallenge:Q,codeChallengeMethod:"S256"})}}async oauthCallback($=new C){let{provider:Z}=$.params,J=M(E),{userProvider:W,config:Y}=J,j=Object.hasOwn(Y.oauthProviders,Z),z=await MZ(Y.oauthProviders,Z);if(j&&!z)throw new z0("Not found",{status:404});let X=BZ($.rawRequest),Q=lZ(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 B=$.search.get("error");if(B)return this.oauthFailure($,/^[a-z0-9_]{1,64}$/.test(B)?B:"provider_error");let V=h4({provider:Z,cookieValue:G,returnedState:$.search.get("state")});if("reason"in V)return console.error(`Authentication error: OAuth callback refused (${V.reason})`),this.oauthFailure($,V.reason);if(!$.search.get("code"))return this.oauthFailure($,"missing_code");let K;try{K=await z.onCallback($,{state:V.payload.state,codeVerifier:V.payload.codeVerifier})}catch(N){if(N instanceof E9)return this.oauthFailure($,N.code);return console.error("Authentication error: OAuth provider callback failed",N),this.oauthFailure($,"provider_error")}let{name:F,username:U,providerId:D,emailVerified:O}=K??{},L=typeof K?.email==="string"?K.email:void 0,T=L?H6(L):null,H=D?await W.findUserBySocialAccount(Z,D):null,I="signin",S=!H&&!T&&!L&&!!D&&z.createUsersWithoutEmail===!0;if(!H&&S){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{H=await this.createOAuthUserWithoutEmail({provider:Z,providerId:D,name:F,username:U,locale:M(c).detectLocale($)}),I="signup"}catch(N){let v=await W.findUserBySocialAccount(Z,D);if(!v)throw N;H=v}}if(!H){if(!T)return console.error("Authentication error: No usable email returned from OAuth provider callback"),this.oauthFailure($,L?"invalid_email":D?"missing_email":"no_identity");if(O===!1)return console.error("Authentication error: OAuth provider returned an unverified email"),this.oauthFailure($,"email_not_verified");let N=M(c).detectLocale($);try{let v=await this.linkOAuthAccount({provider:Z,providerId:D,email:T,rawEmail:L,name:F,username:U,locale:N,linkExisting:z.linkByEmail!==!1,createUser:z.createUsers!==!1});if(v==="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(v==="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(v)H=v.user,I=v.action}catch(v){let _=D?await W.findUserBySocialAccount(Z,D):null;if(!_)throw v;H=_}if(!H)return this.oauthFailure($,"account_conflict")}let A=await J.createOrUpdateSessionV2({email:H.email,id:H.id});if($.ctx().setCookie("access_token",A.token,M(E).accessTokenCookieOptions($,A.expiresAt)),I==="signup")await Y.onSignUp(H,"",$.search.toJSON());else await Y.onSignIn(H,$.search.toJSON());await r$(J.config,{session:A,user:H,isNewUser:I==="signup",method:"oauth",req:$});let b=XQ($)??Y.redirectPath,k=Y.oauthCompleteProfilePath?K1(Y.oauthCompleteProfilePath,""):"";if(k&&!H.email){let N=new URL(k,"http://gemi.invalid");N.searchParams.set(G1,b),b=`${N.pathname}${N.search}${N.hash}`}return{session:A,redirectTo:b}}async createOAuthUserWithoutEmail($){let{userProvider:Z,config:J}=M(E);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=XQ($),W=M(E).config.oauthFailurePath;if(W){let Y=K1(W,"");if(Y){let j=new URL(Y,"http://gemi.invalid");if(j.searchParams.set("error",Z),J)j.searchParams.set(G1,J);C1.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}=M(E),B=(U)=>({provider:Z,userId:U,email:W,username:z,providerId:J,expiresAt:new Date,accessToken:"",refreshToken:""}),V=await Q.findUserByEmailAddress(W,!1),K=Y?.trim();if(!V&&K&&K!==W)V=await Q.findUserByEmailAddress(K,!1);if(V){if($.linkExisting===!1)return"account_exists";if(!J)return{user:V,action:"signin"};let U=await Q.findSocialAccounts(V.id,Z);if(U.some((O)=>O.providerId===J))return{user:V,action:"signin"};if(U.some((O)=>O.providerId))return console.error(`Authentication error: user ${V.id} is already linked to a different ${Z} account`),null;let D=U[0];if(D){if(!await Q.claimSocialAccount(D,J))throw Error(`${Z} account link changed concurrently`)}else await Q.createSocialAccount(B(V.id));return{user:V,action:"signin"}}if($.createUser===!1)return"signup_disabled";return{user:await Q.transaction(async()=>{let U=await Q.createUser({email:W,name:j,locale:X,emailVerifiedAt:new Date});if(J)await Q.createSocialAccount(B(U.id));return await G.onUserCreated(U,{method:"oauth",input:{}}),U}),action:"signup"}}async createMagicLinkToken($=new C){h1("magicLink");let Z=await $.input(),J=G3(Z.get("email")),W=M(E),{uniformMagicLinkResponse:Y,requestLimit:j}=W.config.emailCode;if(await LZ("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=M(E),J=Z.config.emailCode;if(!J.enabled)throw new z0("Not found",{status:404});let W=await $.input(),Y=H6(W.get("email"));if(await LZ("request",Y,$,J.requestLimit),!Y)throw new d({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=M(E),{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=H6(j),G=jQ(z);if(await LZ("verify",Q,$,W.emailCode.verifyLimit),!Q||!G)throw new d({code:["invalid_code"]});let B=await Z.verifyOneTimeCode(Q,G,{claim:!1});if(B.status==="too_many_attempts")throw new d({code:["too_many_attempts"]});if(B.status!=="ok")throw new d({code:["invalid_code"]});let V=B.row,K=await J.findUserByEmailAddress(Q,!1),F=!1;if(K){if(!await Z.claimOneTimeCode(Q,V.id))throw new d({code:["invalid_code"]});await J.verifyUser(Q)}else if(W.emailCode.createUser){let D=M(c).detectLocale($);try{K=await J.transaction(async()=>{if(!await Z.claimOneTimeCode(Q,V.id))throw new w9;let O=await J.createUser({email:Q,name:typeof X==="string"?X.trim():"",emailVerifiedAt:new Date,locale:D});return await W.onUserCreated(O,{method:"email-code",input:zQ(Y.toJSON())}),O}),F=!0}catch(O){if(O instanceof w9)throw new d({code:["invalid_code"]});throw O}}else throw await Z.claimOneTimeCode(Q,V.id),new d({code:["invalid_code"]});let U=await Z.createOrUpdateSessionV2({email:Q,id:K.id});return $.ctx().setCookie("access_token",U.token,M(E).accessTokenCookieOptions($,U.expiresAt)),await W.onSignIn(U,$.search.toJSON()),await r$(Z.config,{session:U,isNewUser:F,method:"email-code",req:$}),{session:U,isNewUser:F}}}function OD($){try{let Z=$?.id;if(Z===void 0||Z===null)return;let J=M();if(typeof J?.bound!=="function"||!J.bound(c0))return;J.make(c0).revoke({user:{id:Z}})}catch(Z){console.error("[gemi] Revoking the signed-out user's sockets failed:",Z)}}var BQ="gemi_oauth_connection";class c4 extends Q3{async connect($=new C){let Z=String($.params.provider??""),W=M(u3).providers[Z],Y=await q0.user(),j=K1($.search.get(G1),"");if(!W)return this.finish(j,Z,"unknown_provider");let z=BZ($.rawRequest),{state:X,codeChallenge:Q,cookieValue:G}=m4(VQ(Z),Date.now(),{subject:String(Y.id),...j?{returnTo:j}:{}});return $.ctx().setCookie(lZ(z,BQ),G,{httpOnly:!0,sameSite:"Lax",secure:z,maxAge:d3}),C1.external(W.authorizationUrl({state:X,codeChallenge:Q,redirectUri:FQ($,Z,W.config.redirectUri)})),{destination:"/"}}async callback($=new C){let Z=String($.params.provider??""),J=M(u3),W=await q0.user(),Y=BZ($.rawRequest),j=lZ(Y,BQ),z=$.cookies.get(j);if(z!==void 0&&z!==null)$.ctx().setCookie(j,"",{httpOnly:!0,sameSite:"Lax",secure:Y,maxAge:-1});let X=h4({provider:VQ(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 B=$.search.get("error");if(B)return this.finish(Q,Z,/^[a-z0-9_]{1,64}$/.test(B)?B:"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 V=$.search.get("code");if(!V)return this.finish(Q,Z,"missing_code");try{let K=await G.exchangeCode({code:V,codeVerifier:X.payload.codeVerifier,redirectUri:FQ($,Z,G.config.redirectUri)}),F=await J.save(W,Z,K);await M(E).config.onConnected({user:W,provider:Z,connection:F,profile:K.profile??null,req:$})}catch(K){if(K instanceof UQ)return console.error(`OAuth connection to ${Z} failed: ${K.message}`),this.finish(Q,Z,K.providerError??K.code);throw K}return this.finish(Q,Z)}finish($,Z,J){let W=$||K1(M(E).config.redirectPath,"/"),Y=new URL(W,"http://gemi.invalid");if(Y.searchParams.set("connection",Z),J)Y.searchParams.set("connection_error",J);throw C1.external(`${Y.pathname}${Y.search}${Y.hash}`),Error("unreachable: Redirect.external throws")}}function VQ($){return`connection:${$}`}function FQ($,Z,J){if(J)return J;return`${t$()??new URL($.rawRequest.url).origin}/auth/connections/${encodeURIComponent(Z)}/callback`}function DQ($){return $.magicLink!==!1||$.emailCode?.enabled===!0}function OQ($){return Object.keys($.oauthProviders??{}).length>0}function LQ($={}){let Z=[];if(DQ($))Z.push({view:"auth/MagicLinkSignIn",requiredBy:$.emailCode?.enabled===!0&&$.magicLink===!1?"auth.emailCode.enabled":`auth.magicLink${$.magicLink===void 0?" (on by default; set `magicLink: false` to turn it off)":""}`});if(OQ($)){let W=`auth.oauthProviders (${Object.keys($.oauthProviders??{}).join(", ")})`;Z.push({view:"_Redirect",requiredBy:W},{view:"auth/OauthCallback",requiredBy:W})}return Z}class MQ extends A1{middlewares=["cache:private"];routes={"/:provider":this.redirect([c4,"connect"]).middleware(["auth"]),"/:provider/callback":this.redirect([c4,"callback"]).middleware([K6,"auth"])}}function HQ($={}){let Z=DQ($),J=OQ($);class W extends A1{middlewares=["cache:private"];routes={"/:provider":this.view("_Redirect",[e,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[e,"oauthCallback"])}}return class extends A1{middlewares=["cache:private"];routes={...Z?{"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[e,"signInWithMagicLink"])}:{},...J?{"/oauth":W}:{},"/connections":MQ}}}class y9 extends C0{middlewares=["cache:private"];routes={"/sign-in":this.post(e,"signIn"),"/sign-in-v2":this.post(e,"signInV2"),"/sign-up":this.post(e,"signUp"),"/sign-out":this.post(e,"signOut"),"/forgot-password":this.post(e,"forgotPassword"),"/reset-password":this.post(e,"resetPassword"),"/change-password":this.post(e,"changePassword"),"/verify-email":this.post(e,"verifyEmail"),"/me":this.get(e,"me").middleware(["auth"]),"/magic-link":this.post(e,"createMagicLinkToken"),"/sign-in-with-pin":this.post(e,"signInWithPin"),"/sign-in-with-pin-v2":this.post(e,"signInWithPinV2"),"/email-code":this.post(e,"requestEmailCode"),"/email-code/verify":this.post(e,"verifyEmailCode")}}class v9 extends C0{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(async()=>{let Z=new C().params.locale;return await M(c).onLocaleChange(Z),{locale:Z}}),"/translations/:locale/:scope*":this.get(async()=>{let $=new C,Z=`/${$.params.scope??""}`,J=$.params.locale,W=M(c),Y=J??W.detectLocale($),j=W.getPageTranslations(Y,Z);return $.ctx().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000)}),{[Y]:j}})}}class g9{}class m9 extends g9{async resize($,Z){let{height:J,width:W,quality:Y,fit:j}=Z;return await(await d4("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 NN($){return $}function TQ(){return{driver:new m9,allowedHosts:[],maxSize:10485760,timeout:1e4}}class F0 extends Error{status;constructor($,Z,J){super(Z,J);this.status=$;this.name="ImageSourceError"}}var LD=new Set([301,302,303,307,308]),MD="/api/__gemi__/services/image/";async function NQ($,Z){let J=Z.maxRedirects??5,W=AbortSignal.timeout(Z.timeout),Y=Z.ownOrigins[0]??Z.localOrigin,j=PQ($,Y);try{for(let z=0;;z++){let X=await HD(j,Z,W),Q=X.headers.get("location");if(LD.has(X.status)&&Q){if(await X.body?.cancel().catch(()=>{}),z>=J)throw new F0(502,"The image redirects too many times");j=PQ(Q,j.href);continue}if(!X.ok)throw await X.body?.cancel().catch(()=>{}),new F0(404,"Image not found");if(!X.headers.get("content-type")?.split(";")[0].trim().toLowerCase()?.startsWith("image/"))throw await X.body?.cancel().catch(()=>{}),new F0(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 PD(z,W)}}function PQ($,Z){let J;try{J=new URL($,Z)}catch{throw new F0(400,"The url parameter is not a URL")}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new F0(400,"Only http(s) images can be resized");return J}async function HD($,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(MD))throw new F0(403,"This image source is not allowed");if(TD($.pathname))throw new F0(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 S1(z,{...W,allowPrivate:!0,ports:"any"});Y=z}if(Z.allowedHosts.length===0)throw new F0(403,"This image source is not allowed");return S1(Y,{...Z.external,...W,allow:Z.allowedHosts})}function TD($){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 PD($,Z){if($ instanceof F0)return $;if(Z.aborted)return new F0(504,"The image took too long to load",{cause:$});if($ instanceof V6)switch($.code){case"blocked-host":case"blocked-address":case"invalid-url":return new F0(403,"This image source is not allowed",{cause:$});case"too-large":return new F0(413,"The image is too large",{cause:$});case"timeout":return new F0(504,"The image took too long to load",{cause:$})}return new F0(502,"The image could not be loaded",{cause:$})}class h9 extends C0{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 _Q(400,"url query parameter is required");let X=M(IQ),Q=[Z.origin,`${Z.protocol==="https:"?"http":"https"}://${Z.host}`],G=t$();if(G&&URL.canParse(G))Q.push(new URL(G).origin);let B;try{B=await NQ(J,{ownOrigins:Q,localOrigin:`http://localhost:${process.env.PORT||5173}`,allowedHosts:X.allowedHosts,maxSize:X.maxSize,timeout:X.timeout})}catch(F){if(F instanceof F0)return _Q(F.status,F.message);throw F}let V=await X.resize(B.bytes,{height:Y,width:W,fit:j,quality:z}),K=new Headers({"Content-Type":"image/webp","Content-Length":`${V.byteLength}`});if(B.cacheControl)K.set("Cache-Control",B.cacheControl);return new Response(new Uint8Array(V),{headers:K})})}}function _Q($,Z){return Response.json({error:Z},{status:$})}class IQ{static token="image";driver;allowedHosts;maxSize;timeout;constructor($={}){let Z=TQ();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 p9 extends C0{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let $=Bun.file(M(xQ).currentLogFilePath);return new Response(await $.text(),{headers:{"Content-Type":"text/plain"}})})}}function vN($){return $}function CQ(){return{onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{}}}function AQ(){return{partialRendering:!0,localeRouting:"prefix",theme:{},publicFiles:!0,assetRoutes:!1,onNotFound:()=>{},onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{},onStreamComplete:()=>{}}}function ND($){return"run"in $}function _D($){return Object.hasOwn($,"get")||Object.hasOwn($,"post")||Object.hasOwn($,"put")||Object.hasOwn($,"patch")||Object.hasOwn($,"delete")}function ID($){return Object.hasOwn($,"first")&&Object.hasOwn($,"second")}function xD($){if("__brand"in $)return $.__brand==="ApiRouter";return!1}function CD($){if("__internal_brand"in $)return $.__internal_brand==="ProxyHandler";return!1}function SQ($){if("__internal_brand"in $)return $.__internal_brand==="StreamHandler";return!1}function AD($){let Z=$.replace(/(?<!:\w*)\([\w-]+\)/g,"");if(Z===$)return $;let J=`/${Z}`.replace(/\/{2,}/g,"/");return J.length>1?J.replace(/\/$/,""):J}function c9($,Z="",J=[]){let W={};function Y(j,z,X,Q,G){let B=j==="/"?"":j,V=Z==="/"?"":Z,K=AD((`${V}${B}`===""?"/":`${V}${B}`).replaceAll("//","/"));if(!W[K])W[K]={};W[K][z.toUpperCase()]={exec:X,middleware:[...J,...Q],...G?{source:G}:{}},W[K].OPTIONS={exec:()=>{let U=new C().ctx().headers;return new Response(null,{headers:U,status:204})},middleware:[]}}for(let[j,z]of Object.entries($)){if(CD(z)){let X=z;for(let Q of["GET","POST","PUT","DELETE"])Y(j,Q,X.run.bind(X),X.middlewares);continue}if(ND(z)){let X=z,Q=X.method,G=X.middlewares,B=X.run.bind(X);if(Y(j,Q,B,G,X.source),SQ(z))Y(j,"HEAD",B,G,X.source)}if(_D(z))for(let[X,Q]of Object.entries(z)){let G=Q,B=G.middlewares,V=G.run.bind(G);if(Y(j,X,V,B,G.source),X==="get"&&SQ(G))Y(j,"HEAD",V,B,G.source)}if(xD(z)){let X=new z,Q=c9(X.routes,`${Z}${j}`,[...J,...X.middlewares]);for(let[G,B]of Object.entries(Q)){let V=G.replaceAll("//","/");W[V]={...W[V],...B}}}if(ID(z)){let{first:X,second:Q}=z;for(let[G,B]of Object.entries(X)){let V=B.middlewares,K=B.run.bind(B),[F,...U]=j.split("/").reverse();if(!F.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Y(U.reverse().join("/"),G,K,V,B.source)}for(let[G,B]of Object.entries(Q)){let V=B.middlewares,K=B.run.bind(B);Y(j,G,K,V,B.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 u4($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function d9($,Z){if($==="/")return Z;if(Z==="/")return $;return`${$}${Z}`}function u9($){let Z=u4($);return Z.length>1?Z.replace(/\/$/,""):Z}function EQ($,Z){return Z.map((J)=>({...J,path:u9(d9($,J.path))}))}function l4($){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=l4(j.routes);for(let[X,{exec:Q,middleware:G,segments:B,features:V,static:K}]of Object.entries(z)){let F=d9(J,X),U=(D)=>Y.run.call(Y,D,J);Z[u4(F)]={exec:[U,...Q],middleware:[...Y.middlewares,...G],features:[...Y.featureGates,...V],viewPath:Y.viewPath,segments:[{path:u9(J),viewPath:Y.viewPath,...Y.alwaysRuns?{alwaysRun:!0}:{}},...EQ(J,B)],...K?{static:K}:{}}}}else{let j=(z)=>Y.run.call(Y,z,J);Z[u4(J)]={exec:[j],middleware:Y.middlewares,features:Y.featureGates,viewPath:Y.viewPath,segments:[{path:u9(J),viewPath:Y.viewPath}],..."staticOptions"in Y&&Y.staticOptions?{static:Y.staticOptions}:{}}}}else{let Y=new W,j=l4(Y.routes);for(let[z,{exec:X,middleware:Q,viewPath:G,segments:B,features:V,static:K}]of Object.entries(j)){let F=d9(J,z);Z[u4(F)]={exec:X,middleware:[...Y.middlewares,...Q],features:[...Y.featureGates,...V],viewPath:G,segments:EQ(J,B),...K?{static:K}:{}}}}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 l9="theme";function bQ($){return $==="light"||$==="dark"||$==="system"}function RQ($){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 SD=Object.defineProperty,x=($,Z)=>SD($,"name",{value:Z,configurable:!0}),nZ=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(nZ,"Part");var ED=/[$_\p{ID_Start}]/u,bD=/[$_\u200C\u200D\p{ID_Continue}]/u,s9=".*";function fQ($,Z){return(Z?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test($)}x(fQ,"isASCII");function a9($,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&&ED.test(Q)||X!==W+1&&bD.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(!fQ($[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(a9,"lexer");function r9($,Z={}){let J=a9($);Z.delimiter??="/#?",Z.prefixes??="./";let W=`[^${d0(Z.delimiter)}]+?`,Y=[],j=0,z=0,X="",Q=new Set,G=x((H)=>{if(z<J.length&&J[z].type===H)return J[z++].value},"tryConsume"),B=x(()=>G("OTHER_MODIFIER")??G("ASTERISK"),"tryConsumeModifier"),V=x((H)=>{let I=G(H);if(I!==void 0)return I;let{type:S,index:A}=J[z];throw TypeError(`Unexpected ${S} at ${A}, expected ${H}`)},"mustConsume"),K=x(()=>{let H="",I;for(;I=G("CHAR")??G("ESCAPED_CHAR");)H+=I;return H},"consumeText"),F=x((H)=>H,"DefaultEncodePart"),U=Z.encodePart||F,D="",O=x((H)=>{D+=H},"appendToPendingFixedValue"),L=x(()=>{D.length&&(Y.push(new nZ(3,"","",U(D),"",3)),D="")},"maybeAddPartFromPendingFixedValue"),T=x((H,I,S,A,b)=>{let k=3;switch(b){case"?":k=1;break;case"*":k=0;break;case"+":k=2;break}if(!I&&!S&&k===3){O(H);return}if(L(),!I&&!S){if(!H)return;Y.push(new nZ(3,"","",U(H),"",k));return}let N;S?S==="*"?N=s9:N=S:N=W;let v=2;N===W?(v=1,N=""):N===s9&&(v=0,N="");let _;if(I?_=I:S&&(_=j++),Q.has(_))throw TypeError(`Duplicate name '${_}'.`);Q.add(_),Y.push(new nZ(v,_,U(H),N,U(A),k))},"addPart");for(;z<J.length;){let H=G("CHAR"),I=G("NAME"),S=G("REGEX");if(!I&&!S&&(S=G("ASTERISK")),I||S){let b=H??"";Z.prefixes.indexOf(b)===-1&&(O(b),b=""),L();let k=B();T(b,I,S,"",k);continue}let A=H??G("ESCAPED_CHAR");if(A){O(A);continue}if(G("OPEN")){let b=K(),k=G("NAME"),N=G("REGEX");!k&&!N&&(N=G("ASTERISK"));let v=K();V("CLOSE");let _=B();T(b,k,N,v,_);continue}L(),V("END")}return Y}x(r9,"parse");function d0($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}x(d0,"escapeString");function n9($){return $&&$.ignoreCase?"ui":"u"}x(n9,"flags");function kQ($,Z,J){return t9(r9($,J),Z,J)}x(kQ,"stringToRegexp");function e$($){switch($){case 0:return"*";case 1:return"?";case 2:return"+";case 3:return""}}x(e$,"modifierToString");function t9($,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+=d0(X.value):W+=`(?:${d0(X.value)})${e$(X.modifier)}`;continue}Z&&Z.push(X.name);let Q=`[^${d0(J.delimiter)}]+?`,G=X.value;if(X.type===1?G=Q:X.type===0&&(G=s9),!X.prefix.length&&!X.suffix.length){X.modifier===3||X.modifier===1?W+=`(${G})${e$(X.modifier)}`:W+=`((?:${G})${e$(X.modifier)})`;continue}if(X.modifier===3||X.modifier===1){W+=`(?:${d0(X.prefix)}(${G})${d0(X.suffix)})`,W+=e$(X.modifier);continue}W+=`(?:${d0(X.prefix)}`,W+=`((?:${G})(?:`,W+=d0(X.suffix),W+=d0(X.prefix),W+=`(?:${G}))*)${d0(X.suffix)})`,X.modifier===0&&(W+="?")}let Y=`[${d0(J.endsWith)}]|$`,j=`[${d0(J.delimiter)}]`;if(J.end)return J.strict||(W+=`${j}?`),J.endsWith.length?W+=`(?=${Y})`:W+="$",new RegExp(W,n9(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,n9(J))}x(t9,"partsToRegexp");var _$={delimiter:"",prefixes:"",sensitive:!0,strict:!0},RD={delimiter:".",prefixes:"",sensitive:!0,strict:!0},fD={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function wQ($,Z){return $.length?$[0]==="/"?!0:!Z||$.length<2?!1:($[0]=="\\"||$[0]=="{")&&$[1]=="/":!1}x(wQ,"isAbsolutePathname");function e9($,Z){return $.startsWith(Z)?$.substring(Z.length,$.length):$}x(e9,"maybeStripPrefix");function qQ($,Z){return $.endsWith(Z)?$.substr(0,$.length-Z.length):$}x(qQ,"maybeStripSuffix");function $J($){return!$||$.length<2?!1:$[0]==="["||($[0]==="\\"||$[0]==="{")&&$[1]==="["}x($J,"treatAsIPv6Hostname");var yQ=["ftp","file","http","https","ws","wss"];function ZJ($){if(!$)return!0;for(let Z of yQ)if($.test(Z))return!0;return!1}x(ZJ,"isSpecialScheme");function vQ($,Z){if($=e9($,"#"),Z||$==="")return $;let J=new URL("https://example.com");return J.hash=$,J.hash?J.hash.substring(1,J.hash.length):""}x(vQ,"canonicalizeHash");function gQ($,Z){if($=e9($,"?"),Z||$==="")return $;let J=new URL("https://example.com");return J.search=$,J.search?J.search.substring(1,J.search.length):""}x(gQ,"canonicalizeSearch");function mQ($,Z){return Z||$===""?$:$J($)?YJ($):WJ($)}x(mQ,"canonicalizeHostname");function hQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.password=$,J.password}x(hQ,"canonicalizePassword");function pQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.username=$,J.username}x(pQ,"canonicalizeUsername");function cQ($,Z,J){if(J||$==="")return $;if(Z&&!yQ.includes(Z))return new URL(`${Z}:${$}`).pathname;let W=$[0]=="/";return $=new URL(W?$:"/-"+$,"https://example.com").pathname,W||($=$.substring(2,$.length)),$}x(cQ,"canonicalizePathname");function dQ($,Z,J){return JJ(Z)===$&&($=""),J||$===""?$:jJ($)}x(dQ,"canonicalizePort");function uQ($,Z){return $=qQ($,":"),Z||$===""?$:i4($)}x(uQ,"canonicalizeProtocol");function JJ($){switch($){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}x(JJ,"defaultPortForProtocol");function i4($){if($==="")return $;if(/^[-+.A-Za-z0-9]*$/.test($))return $.toLowerCase();throw TypeError(`Invalid protocol '${$}'.`)}x(i4,"protocolEncodeCallback");function lQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.username=$,Z.username}x(lQ,"usernameEncodeCallback");function iQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.password=$,Z.password}x(iQ,"passwordEncodeCallback");function WJ($){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(WJ,"hostnameEncodeCallback");function YJ($){if($==="")return $;if(/[^0-9a-fA-F[\]:]/g.test($))throw TypeError(`Invalid IPv6 hostname '${$}'`);return $.toLowerCase()}x(YJ,"ipv6HostnameEncodeCallback");function jJ($){if($===""||/^[0-9]*$/.test($)&&parseInt($)<=65535)return $;throw TypeError(`Invalid port '${$}'.`)}x(jJ,"portEncodeCallback");function sQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.pathname=$[0]!=="/"?"/-"+$:$,$[0]!=="/"?Z.pathname.substring(2,Z.pathname.length):Z.pathname}x(sQ,"standardURLPathnameEncodeCallback");function nQ($){return $===""?$:new URL(`data:${$}`).pathname}x(nQ,"pathURLPathnameEncodeCallback");function oQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.search=$,Z.search.substring(1,Z.search.length)}x(oQ,"searchEncodeCallback");function aQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.hash=$,Z.hash.substring(1,Z.hash.length)}x(aQ,"hashEncodeCallback");var rQ=class{#j;#W=[];#Z={};#$=0;#Y=1;#G=0;#X=0;#F=0;#U=0;#D=!1;constructor($){this.#j=$}get result(){return this.#Z}parse(){for(this.#W=a9(this.#j,!0);this.#$<this.#W.length;this.#$+=this.#Y){if(this.#Y=1,this.#W[this.#$].type==="END"){if(this.#X===0){this.#H(),this.#K()?this.#J(9,1):this.#B()?this.#J(8,1):this.#J(7,0);continue}else if(this.#X===2){this.#V(5);continue}this.#J(10,0);break}if(this.#F>0)if(this.#C())this.#F-=1;else continue;if(this.#x()){this.#F+=1;continue}switch(this.#X){case 0:this.#T()&&this.#V(1);break;case 1:if(this.#T()){this.#E();let $=7,Z=1;this.#N()?($=2,Z=3):this.#D&&($=2),this.#J($,Z)}break;case 2:this.#L()?this.#V(3):(this.#M()||this.#B()||this.#K())&&this.#V(5);break;case 3:this.#_()?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.#I()&&!this.#U?this.#J(6,1):this.#M()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 6:this.#M()?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.#D?"/":""),[1,2,3,4,5,6,7].includes(this.#X)&&$===9&&(this.#Z.search??="")),this.#P($,Z)}#P($,Z){this.#X=$,this.#G=this.#$+Z,this.#$+=Z,this.#Y=0}#H(){this.#$=this.#G,this.#Y=0}#V($){this.#H(),this.#X=$}#O($){return $<0&&($=this.#W.length-$),$<this.#W.length?this.#W[$]:this.#W[this.#W.length-1]}#z($,Z){let J=this.#O($);return J.value===Z&&(J.type==="CHAR"||J.type==="ESCAPED_CHAR"||J.type==="INVALID_CHAR")}#T(){return this.#z(this.#$,":")}#N(){return this.#z(this.#$+1,"/")&&this.#z(this.#$+2,"/")}#L(){return this.#z(this.#$,"@")}#_(){return this.#z(this.#$,":")}#I(){return this.#z(this.#$,":")}#M(){return this.#z(this.#$,"/")}#B(){if(this.#z(this.#$,"?"))return!0;if(this.#W[this.#$].value!=="?")return!1;let $=this.#O(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.#O(this.#G).index;return this.#j.substring(Z,$.index)}#E(){let $={};Object.assign($,_$),$.encodePart=i4;let Z=kQ(this.#Q(),void 0,$);this.#D=ZJ(Z)}};x(rQ,"Parser");var i9=["protocol","username","password","hostname","port","pathname","search","hash"],N$="*";function o9($,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(o9,"extractValues");function P1($,Z){return Z?sZ($):$}x(P1,"processBaseURLString");function iZ($,Z,J){let W;if(typeof Z.baseURL=="string")try{W=new URL(Z.baseURL),Z.protocol===void 0&&($.protocol=P1(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=P1(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=P1(W.password,J)),Z.protocol===void 0&&Z.hostname===void 0&&($.hostname=P1(W.hostname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&($.port=P1(W.port,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&($.pathname=P1(W.pathname,J)),Z.protocol===void 0&&Z.hostname===void 0&&Z.port===void 0&&Z.pathname===void 0&&Z.search===void 0&&($.search=P1(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=P1(W.hash.substring(1,W.hash.length),J))}catch{throw TypeError(`invalid baseURL '${Z.baseURL}'.`)}if(typeof Z.protocol=="string"&&($.protocol=uQ(Z.protocol,J)),typeof Z.username=="string"&&($.username=pQ(Z.username,J)),typeof Z.password=="string"&&($.password=hQ(Z.password,J)),typeof Z.hostname=="string"&&($.hostname=mQ(Z.hostname,J)),typeof Z.port=="string"&&($.port=dQ(Z.port,$.protocol,J)),typeof Z.pathname=="string"){if($.pathname=Z.pathname,W&&!wQ($.pathname,J)){let Y=W.pathname.lastIndexOf("/");Y>=0&&($.pathname=P1(W.pathname.substring(0,Y+1),J)+$.pathname)}$.pathname=cQ($.pathname,$.protocol,J)}return typeof Z.search=="string"&&($.search=gQ(Z.search,J)),typeof Z.hash=="string"&&($.hash=vQ(Z.hash,J)),$}x(iZ,"applyInit");function sZ($){return $.replace(/([+*?:{}()\\])/g,"\\$1")}x(sZ,"escapePatternString");function tQ($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}x(tQ,"escapeRegexpString");function eQ($,Z){Z.delimiter??="/#?",Z.prefixes??="./",Z.sensitive??=!1,Z.strict??=!1,Z.end??=!0,Z.start??=!0,Z.endsWith="";let J=".*",W=`[^${tQ(Z.delimiter)}]+?`,Y=/[$_\u200C\u200D\p{ID_Continue}]/u,j="";for(let z=0;z<$.length;++z){let X=$[z];if(X.type===3){if(X.modifier===3){j+=sZ(X.value);continue}j+=`{${sZ(X.value)}}${e$(X.modifier)}`;continue}let Q=X.hasCustomName(),G=!!X.suffix.length||!!X.prefix.length&&(X.prefix.length!==1||!Z.prefixes.includes(X.prefix)),B=z>0?$[z-1]:null,V=z<$.length-1?$[z+1]:null;if(!G&&Q&&X.type===1&&X.modifier===3&&V&&!V.prefix.length&&!V.suffix.length)if(V.type===3){let K=V.value.length>0?V.value[0]:"";G=Y.test(K)}else G=!V.hasCustomName();if(!G&&!X.prefix.length&&B&&B.type===3){let K=B.value[B.value.length-1];G=Z.prefixes.includes(K)}G&&(j+="{"),j+=sZ(X.prefix),Q&&(j+=`:${X.name}`),X.type===2?j+=`(${X.value})`:X.type===1?Q||(j+=`(${W})`):X.type===0&&(!Q&&(!B||B.type===3||B.modifier!==3||G||X.prefix!=="")?j+="*":j+=`(${J})`),X.type===1&&Q&&X.suffix.length&&Y.test(X.suffix[0])&&(j+="\\"),j+=sZ(X.suffix),G&&(j+="}"),X.modifier!==3&&(j+=e$(X.modifier))}return j}x(eQ,"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 rQ($);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:N$,protocol:N$,username:N$,password:N$,hostname:N$,port:N$,search:N$,hash:N$};this.#j=iZ(j,$,!0),JJ(this.#j.protocol)===this.#j.port&&(this.#j.port="");let z;for(z of i9){if(!(z in this.#j))continue;let X={},Q=this.#j[z];switch(this.#Z[z]=[],z){case"protocol":Object.assign(X,_$),X.encodePart=i4;break;case"username":Object.assign(X,_$),X.encodePart=lQ;break;case"password":Object.assign(X,_$),X.encodePart=iQ;break;case"hostname":Object.assign(X,RD),$J(Q)?X.encodePart=YJ:X.encodePart=WJ;break;case"port":Object.assign(X,_$),X.encodePart=jJ;break;case"pathname":ZJ(this.#W.protocol)?(Object.assign(X,fD,Y),X.encodePart=sQ):(Object.assign(X,_$,Y),X.encodePart=nQ);break;case"search":Object.assign(X,_$,Y),X.encodePart=oQ;break;case"hash":Object.assign(X,_$,Y),X.encodePart=aQ;break}try{this.#Y[z]=r9(Q,X),this.#W[z]=t9(this.#Y[z],this.#Z[z],X),this.#$[z]=eQ(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=iZ(J,$,!1):J=iZ(J,o9($,Z),!1)}catch{return!1}let W;for(W of i9)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=iZ(J,$,!1):J=iZ(J,o9($,Z),!1)}catch{return null}let W={};Z?W.inputs=[$,Z]:W.inputs=[$];let Y;for(Y of i9){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 nZ(3,"","","","",3),j=new nZ(0,"","","","",3),z=x((X,Q)=>{let G=0;for(;G<Math.min(X.length,Q.length);++G){let B=W(X[G],Q[G]);if(B)return B}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 l3($,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 $Z={startIndex:0,carriedViews:[]};function $G($,Z){let J=D0($.path,Z);return J.includes("*")?null:J}function kD($,Z){if(!$)return $Z;if($.search!==Z.search)return $Z;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=$G(Y,$.params),X=$G(j,Z.params);if(z===null||X===null||z!==X)break;W++}if(W===0)return $Z;return{startIndex:W,carriedViews:Z.segments.slice(0,W).map(({viewPath:Y})=>Y)}}function wD($,Z){let[,J,...W]=$.split("/");if(!Z.includes(J))return $;let Y=`/${W.join("/")}`;return Y==="/"?"/":Y.replace(/\/$/,"")}function ZG($){let{flatViewRoutes:Z,supportedLocales:J,from:W,origin:Y,to:j}=$;if(!W)return $Z;let z;try{z=new URL(W,Y)}catch{return $Z}if(z.origin!==Y)return $Z;let X=l3(Z,wD(z.pathname,J));if(!X)return $Z;return kD({segments:X.route.segments,params:X.params,search:z.search},j)}var XJ="x-gemi-from";import{createElement as c1,Fragment as PG}from"react";function qD($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function s4($){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=s4(j.routes);for(let[X,Q]of Object.entries(z)){let G=J==="/"?X:`${J}${X}`,B=X==="/"&&J!=="/"?J:G;Z[B]=[Y,...Q]}if(Z[J].length===1)delete Z[J]}else Z[J]=[Y]}else{let Y=new W,j=s4(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])=>[qD(J),W]))}function n4($,Z){let[J,W]=Z,Y=$.find(([j])=>j===J);if(!Y){$.push([J,[...W]]);return}for(let j of W)n4(Y[1],j)}function o4($){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=o4(j.routes);n4(Z,[Y,z])}else n4(Z,[Y,[]])}else{let Y=new W,j=o4(Y.routes);for(let z of j)n4(Z,z)}return Z}function QJ($){let Z=[];for(let[J,W]of $)Z.push(J,...QJ(W).flat());return Array.from(new Set(Z))}function JG($,Z){let[,J,...W]=$.split("/");if(J===void 0||!Z.includes(J))return{locale:null,pathname:$||"/"};return{locale:J,pathname:`/${W.join("/")}`}}class I$ extends m{static getFacadeAccessor(){return c}static getSupportedLocales(){return this.getFacadeRoot().supportedLocales}static getDefaultLocale(){return this.getFacadeRoot().defaultLocale}static locale(){let $=this.getFacadeRoot(),Z=P.getStore();if(Z)return Z.locale??$.detectLocale(Z.req);return $.defaultLocale}static timeZone(){return this.getFacadeRoot().detectTimeZone(P.getStore()?.req)}static formatter($={}){return this.getFacadeRoot().formatter($.locale??I$.locale(),$.timeZone??I$.timeZone())}static setLocale($=I$.locale(),Z={}){let J=this.getFacadeRoot(),W=$;if(!J.supportedLocales.includes($))W=J.defaultLocale;let Y=P.getStore();if(Z.cookie!==!1)Y.setCookie("i18n-locale",W,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1});return Y.setLocale(W),W}}class GJ{id;static token="kernel.id";constructor($=crypto.randomUUID()){this.id=$}}function WG($){return Object.fromEntries(Object.entries($).filter(([,Z])=>{return Z!==null&&Z!==void 0}))}var yD=50;class oZ{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(WG(Z.search??{}));Y.delete("json"),Y.sort();let j=D0($,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 F=Math.round(performance.now()-this.renderStartedAt);if(F>yD)G=F}let B,V=new Promise((F)=>{B=F}),K={path:j,patternPath:$,variantKey:z,lateBy:G,status:"pending",promise:V,source:J,startedAt:this.elapsed()};return this.entries.set(X,K),this.fetcher($,W,Y).then((F)=>{K.status="resolved",K.data=F},(F)=>{K.status="rejected",K.error=F}).then(()=>{if(K.settledAt=this.elapsed(),this.maybeLogLateDiscovery(K),K.status==="rejected"&&this.failListener)this.failListener(K);if(this.settleListener)this.settleListener(K);else this.settledBacklog.push(K);B()}),K}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 p1 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 aZ(){let $=JSON.stringify({error:J$("permission","Forbidden",403)});return new Response($,{status:403,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}function KJ(){return{status:403,error:{message:"Forbidden"}}}function i3($){let Z=rZ.getStore(),J=P.getStore();return(W,Y,j)=>{let z=new URL($.url).origin,X=[D0(W,Y),j.toString()].filter((V)=>V.length>0).join("?"),Q=new Request(`${z}/${X}`,{headers:$.headers,signal:$.signal}),G=a4($);if(G)tZ(Q,G);let B=new C(Q,Y);return rZ.run(Z,()=>P.run(B,async()=>{let V=J?.locale;if(V&&M(c).isLocaleAware)P.getStore().setLocale(V);try{let K=M(z1).dispatchers(G).api,F=await K.runRouteMiddleware(W,B)??await K.getRouteData(W);if(r1(F)){if(!F.ok)throw new p1(D0(W,Y),j.toString(),F.status,F.body);return F.body}if(F instanceof Response){let U=await F.json().catch(()=>null);if(!F.ok)throw new p1(D0(W,Y),j.toString(),F.status,U);return U}return F}catch(K){if(K instanceof p1)throw K;let F=new p1(D0(W,Y),j.toString(),500,{message:K instanceof Error?K.message:String(K)});throw F.cause=K,F}}))}}var vD=new Set(["script","style","template","title"]),gD=/\shidden([\s=/]|$)/i,mD=/"[^"]*"|'[^']*'/g;function hD($){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 V=$.slice(Y,z).replace(/\s+/g,"").length;if(W>0)J+=V;else Z+=V}if(j===-1)break;if($.startsWith("<!--",j)){let V=$.indexOf("-->",j+4);Y=V===-1?$.length:V+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 B=Q.startsWith("/");if(!B&&vD.has(G)&&!Q.endsWith("/")){let V=$.indexOf(`</${G}`,Y);Y=V===-1?$.length:V;continue}if(G!=="div")continue;if(B){if(W>0)W-=1}else if(W>0)W+=1;else if(gD.test(Q.replace(mD,'""')))W=1}return{shellChars:Z,deferredChars:J}}var pD=1000,cD=64;function dD($){return $>=1000?`${($/1000).toFixed(1)} kB`:`${$} chars`}function uD($,Z){if(Z.deferredChars<pD)return null;if(Z.shellChars>=cD)return null;return`[gemi] GET ${$} streams ${dD(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 YG($=console.warn){let Z=new Set;return{shouldObserve(J){return!Z.has(J)},report(J,W){if(Z.has(J))return;let Y=uD(J,W);if(!Y)return;Z.add(J),$(Y)}}}function jG(){let $=new TextDecoder,Z="";return{onChunk(J){Z+=$.decode(J,{stream:!0})},measure(){return Z+=$.decode(),hD(Z)}}}function zG($,Z,J=1e4,W){let Y=new TextEncoder,j=()=>{};return new ReadableStream({start(z){let X=!1,Q=(B)=>{if(X)return;X=!0,clearTimeout(G);try{z.close()}catch{}W?.({aborted:B})};j=Q,z.enqueue(Y.encode(`${JSON.stringify($)}
20
+ `)),Z.onSettle((B)=>{if(X||B.status!=="resolved")return;z.enqueue(Y.encode(`${JSON.stringify([B.path,B.variantKey,B.data])}
21
+ `))});let G=setTimeout(()=>Q(!0),J);Z.allSettled().then(()=>Q(!1),()=>Q(!1))},cancel(){j(!1)}})}import{Fragment as b_,createContext as lD,createElement as R_,lazy as f_,use as k_,useContext as w_}from"react";function XG($){return{islands:[],render:$,instances:new WeakMap,count:0}}var s3="gemi-slot",QG="data-slot",GG="data-gemi-slot";var iD=Symbol.for("gemi.staticRender"),KG=globalThis[iD]??=lD(null);import{createHash as DG}from"crypto";var BJ='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 sD}from"crypto";import{existsSync as VG,readFileSync as nD}from"fs";import{join as DJ}from"path";var FG=".script",oD=[".ts",".js"],aD="document-scripts.json",UG="data-gemi-script",rD=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function tD($){if(typeof $!=="string"||!rD.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 eD($,Z){for(let J of oD){let W=DJ($,"views",`${Z}${FG}${J}`);if(VG(W))return W}return null}async function BG($){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 $O($){return`'sha256-${sD("sha256").update($).digest("base64")}'`}var VJ,FJ=new Map;function ZO(){if(VJ===void 0){let $=DJ(UJ(),"dist","server",aD);VJ=VG($)?JSON.parse(nD($,"utf8")):null}return VJ??null}async function OJ($){tD($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=ZO()?.[$];if(j!==void 0)return j;let z=FJ.get($);if(z)return z}let J=DJ(UJ(),"app"),W=eD(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${FG}.ts (or .js).`);if(!Z)return BG(W);let Y=BG(W);return FJ.set($,Y),Y.catch(()=>FJ.delete($)),Y}async function p_($){return $O(await OJ($))}var JO="gemi-islands",o_=`'sha256-${DG("sha256").update(HJ).digest("base64")}'`;function LJ($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var MJ=($)=>$.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;"),a_=`'sha256-${DG("sha256").update(BJ).digest("base64")}'`,WO='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',YO="gemi-static";function OG($,Z,J,W,Y,j){let z=new Set,X=[];if(J)X=Z.islands.map((U)=>{let D=U.module?J(U.module):void 0;if(!D)return console.error(`[gemi] island ${U.module??"(unknown module)"}: no client build entry. Declare it as island(() => import("./Component")) so gemi's Vite plugin builds it.`),null;if(U.load==="eager"){for(let O of D.preload)z.add(O);if(U.preloadDynamic)for(let O of D.dynamicPreload??[])z.add(O)}return{s:D.src,e:U.export,l:U.load}});let Q=X.some((U)=>U!==null),G=j?`<script type="module" ${UG}="${MJ(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return LJ($,"</head>",G,!1);let V=(Y?`<meta name="${YO}" content="${MJ(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((U)=>`<link rel="modulepreload" href="${MJ(U)}"/>`).join("")+G,K=Y?BJ:HJ,F=(Q?`<script type="application/json" id="${JO}">${V1({i:X})}</script>`:"")+`<script type="module">${W?WO+K:K}</script>`;return LJ(LJ($,"</head>",V,!1),"</body>",F,!0)}function jO($,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 LG($){let Z=`<template ${GG}="`;for(let J=$.lastIndexOf(Z);J!==-1;J=$.lastIndexOf(Z)){let W=jO($,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=`<${s3} ${QG}="${j}" style="display:contents"></${s3}>`;$=$.split(Q).join(`<${s3} style="display:contents">${X}</${s3}>`)}return $}function TJ($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function HG($,Z){if($.getSetCookie().length>0){if(Z.cacheControl&&Bun.env.NODE_ENV!=="production")console.warn(`[gemi] A static view with cacheControl "${Z.cacheControl}" set a cookie, so it was sent "private, no-store" instead. Static pages are cacheable only when nothing on them sets a cookie.`);$.set("Cache-Control","private, no-store");return}if(Z.cacheControl&&!$.has("Cache-Control"))$.set("Cache-Control",Z.cacheControl)}function zO($){let Z=$.headers.get("Cache-Control")?.toLowerCase()??"";return/(^|[\s,])(public|s-maxage)\b/.test(Z)}var MG=new Set;function TG($,Z){if(!zO($)||$.headers.getSetCookie().length===0)return $;if(Bun.env.NODE_ENV!=="production"&&!MG.has(Z))MG.add(Z),console.warn(`[gemi] The file route "${Z??""}" set a cookie on a response with Cache-Control "${$.headers.get("Cache-Control")}", so the cookie was not sent: a shared cache would hand it to every visitor. Make the response private, or set the cookie elsewhere.`);try{return $.headers.delete("Set-Cookie"),$}catch{let J=new Headers($.headers);return J.delete("Set-Cookie"),new Response($.body,{status:$.status,statusText:$.statusText,headers:J})}}var XO=async()=>(await import("./chunk-8tzmat5s.js")).default,PJ,n3=async(...$)=>{return PJ??=import("react-dom/server.browser").catch((Z)=>{throw PJ=void 0,Z}),(await PJ).renderToReadableStream(...$)},NG=1e4,_G="no-locale",QO="no-theme";async function GO($,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 xJ="/assets";function KO($){return $===xJ||$.startsWith(`${xJ}/`)}function BO($){let Z=$.filter(KO);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 "${xJ}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else, or set \`assetRoutes: true\` on these views' config (route.view or a route.domains group's view).`)}}function VO($){let Z=M(z1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function NJ($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function FO($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class o3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];requiredViews={};staticRoutes=[];root=null;shellReporter=YG();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;detectLocale;theme;defaultMeta;notFound;publicFiles;assetRoutes;translate;constructor($,Z={}){let J=AQ();if(this.partialRendering=$.partialRendering??J.partialRendering,this.localeRouting=$.localeRouting??J.localeRouting,this.detectLocale=$.detectLocale,this.detectLocale&&this.localeRouting!=="off")throw Error('`view.detectLocale` needs `view.localeRouting: "off"`: on locale-routed views the URL, the `i18n-locale` cookie and `Accept-Language` decide the locale. A `route.domains` group that inherits it and keeps locale routing can set `detectLocale: undefined`.');this.theme=$.theme??J.theme,this.defaultMeta=$.meta,this.notFound=$.notFound,this.publicFiles=$.publicFiles??J.publicFiles,this.assetRoutes=$.assetRoutes??J.assetRoutes,this.translate=$.translate,this.hooks={onNotFound:$.onNotFound??J.onNotFound,onRequestStart:$.onRequestStart??J.onRequestStart,onRequestEnd:$.onRequestEnd??J.onRequestEnd,onRequestFail:$.onRequestFail??J.onRequestFail,onStreamComplete:$.onStreamComplete??J.onStreamComplete};let W={"/":$.rootRouter,"/auth":HQ(Z)};if(this.requiredViews=Object.fromEntries(LQ(Z).map(({view:Y,requiredBy:j})=>[Y,j])),this.flatViewRoutes=l4(W),!this.assetRoutes)BO(Object.keys(this.flatViewRoutes));this.routeManifest=s4(W),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,Y])=>Y.at(-1)!=="FILE")),this.componentTree=o4(W),this.flatComponentTree=QJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,Y])=>Y.static).map(([Y])=>Y);for(let Y of this.staticRoutes){let j=this.flatViewRoutes[Y].static?.layout;if(j&&!this.flatComponentTree.includes(j))this.flatComponentTree.push(j)}if(this.notFound){for(let Y of[this.notFound.view,this.notFound.static?.layout])if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=M(Y$);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)r4();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{ZZ.error(W?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(W)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(J)}catch(W){J(W)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:J,views:W,routeKey:Y}=$,j=()=>{let Q=new Set(Z?.preload??[]);for(let G of W)for(let B of J?.[G]??[])Q.add(B);return[...Q].map((G)=>c1("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 B=IJ(),V=new AbortController,K=setTimeout(()=>V.abort(),NG),F=(D)=>{if(Bun.env.NODE_ENV!=="production")console.error(D)},U=XG(async(D,O)=>{let L=await n3(D,{signal:V.signal,identifierPrefix:O,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:F});return await L.allReady.catch(()=>{}),await new Response(L).text()});try{let D,O=typeof W.script==="function"?await J(()=>W.script(Z)):W.script;if(O)D={name:O,source:await OJ(O)};let L;if(W.navigation){let I=W.navigation===!0?{}:W.navigation,S=I.version?String(await J(()=>I.version(Z))):"";L={identity:[W.layout??"",$.buildId??"",D?.name??"",S].join("|"),prefetch:I.prefetch==="none"?"none":"intent"}}let T=await n3(c1(KG.Provider,{value:U,children:c1(PG,{children:[...G,c1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:B,rootLayout:Q,key:"root"})]})}),{signal:V.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:F});await T.allReady.catch(()=>{});let H=LG(await new Response(T).text());return new Response(OG(H,U,$.resolveIsland,Bun.env.NODE_ENV!=="production",L,D),{status:$.status,headers:X})}finally{clearTimeout(K),J(()=>this.completeStream(Z,z.summarize(V.signal.aborted)))}}async render($){let{req:Z,runInRequestScope:J,csrfTokenHMAC:W,currentPathName:Y,headers:j,i18n:z,params:X,pathname:Q,serverQueries:G,userAgent:B,noStream:V,noTheme:K,url:F,user:U,viewData:D,breadcrumbs:O,urlLocaleSegment:L,meta:T,isOgRequest:H,appId:I,features:S,staticView:A}=$,b=this.theme===!1||K||A?null:{cookie:this.theme.cookie??l9,default:this.theme.default??null,value:UO(Z,this.theme.cookie??l9)},k=L?JG(Q,[L]).pathname:Q,N={kind:"view",data:{meta:T,pageData:{[k]:D},__csrf:W.toString("base64"),prefetchedData:{},i18n:z,auth:{user:U},routeManifest:this.clientRouteManifest,breadcrumbs:O,router:{urlLocaleSegment:L,pathname:Y,params:X,currentPath:Q,searchParams:F.search,is404:!Y?!0:!1,domain:Z.domain?VO(Z):null},appId:I,features:S,theme:b,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},v=this.root,_=this.routeManifest[Y];return async(f)=>{let{bootstrapModules:H0=[],loaders:Z3,getStyles:u1,viewImportMap:x1,cssManifest:n,ogMap:y,viewModules:$0,clientEntry:l1,modulePreloadManifest:t3,assetBase:jZ,resolveIsland:i1,buildId:X1}=f,x$=l1?[]:H0,s1=(p)=>[p,`window.loaders=${Z3}`,...l1?[`import(${JSON.stringify(l1.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(H){let p=null,u0=null;for(let R of _??[])if(typeof y[R]==="function")u0=R,p=y[R];if(!p)return new Response("Not found",{status:404});let J3=Object.values(N.data.pageData)[0];try{await n3(c1(p,J3[u0]),{onError:()=>{}})}catch(R){let{fonts:r,...a1}=R.satoriOptions,e3=await Promise.all(r.map(($6)=>{return GO($6.name,$6.weight,$6.style).then((fK)=>({...$6,data:fK}))})),JW=new Headers(j);JW.set("Content-Type","image/png");let[SK,EK]=await Promise.all([XO(),d4("Rendering an OG image")]),bK=await SK(R.jsx,{...a1,fonts:e3}),RK=await EK(Buffer.from(bK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(RK),{headers:JW})}return new Response("data")}if(A&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:A,currentViews:_,data:N.data,serverQueries:G,headers:j,getStyles:u1,viewImportMap:x1,viewModules:$0,resolveIsland:i1,buildId:X1,status:200});if(A&&!Y&&this.notFound){let p=this.notFound.view;if(!x1[p])throw Error(`The not-found view "${p}" (route.view.notFound) was not found. It is a view path: a file at app/views/${p}.tsx.`);return await this.renderStatic({req:Z,runInRequestScope:J,staticView:A,currentViews:[p],data:N.data,serverQueries:G,headers:j,getStyles:u1,viewImportMap:{...x1,"404":x1[p]},viewModules:$0&&{...$0,"404":$0[p]},resolveIsland:i1,buildId:X1,status:$.refusedStatus??404})}if(N.data.cssManifest=n,N.data.modulePreloadManifest=t3??{},jZ&&jZ!=="/")N.data.assetBase=jZ;if(X1&&X1!=="dev")N.data.buildId=X1;let j0=this.modulePreloadLinks({clientEntry:l1,modulePreloadManifest:t3,views:_??["404"],routeKey:Y??"404"}),U8=await u1(_??["404"]);N.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let C$=new AbortController,n1=setTimeout(()=>C$.abort(),NG),o1=P6(B)||V,zZ=Bun.env.NODE_ENV!=="production"&&!o1&&Y&&this.shellReporter.shouldObserve(Y)?jG():null,A$=IJ();try{let p=await n3(c1(PG,{children:[...j0,...U8,...b?[c1("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:RQ(V1({cookie:b.cookie,default:b.default}))}})]:[],c1(v,{data:N.data,viewImportMap:x1,viewModules:$0,serverQueries:G,dictionarySink:A$,key:"root"})]}),{bootstrapScriptContent:s1(`window.__GEMI_DATA__ = ${V1(N.data)}`),bootstrapModules:x$,signal:C$.signal,...o1?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(u0){if(Bun.env.NODE_ENV!=="production")console.error(u0)}});if(p.allReady.catch(()=>{}).finally(()=>clearTimeout(n1)),o1)await p.allReady.catch(()=>{});return new Response(a8(p,G,{onShell:o1?void 0:()=>G.markShell(),onChunk:zZ?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,G.summarize(C$.signal.aborted)),zZ)this.shellReporter.report(Y,zZ.measure())})},A$),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(p){if(clearTimeout(n1),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,G.summarize(C$.signal.aborted))),p;let u0=await n3(c1("div"),{bootstrapScriptContent:s1(`window.error= ${V1(p.message)}; window.stack_trace=${V1(p.stack)};window.__GEMI_DATA__ = ${V1(N.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...x$]:x$});return new Response(a8(u0,G,{onClose:()=>J(()=>this.completeStream(Z,G.summarize(C$.signal.aborted)))}),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(E$(Z))return 404;if(Z?.kind===$$){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if(Z$(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof p1&&(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,B=null,V=M(c),K=l3(this.flatViewRoutes,j),F=V.isLocaleAware&&this.localeRouting==="prefix"&&!K?.route.middleware.includes(_G);if(F&&V.supportedLocales.includes(z))Q=`/${X.join("/")}`,G=z,B=z;if(($.method==="GET"||$.method==="HEAD")&&!W&&!Y&&K===null&&J.pathname.endsWith("/")&&!J.pathname.startsWith("//")){let _=J.pathname.replace(/\/+$/,""),f=F&&V.supportedLocales.includes(_.slice(1));if(_&&!f)return new Response("",{status:301,headers:{Location:`${_}${J.search}`}})}if(F&&!Y&&B===null&&!(B===null&&K!==null)){let _=_J(z,V.supportedLocales,V.defaultLocale);if(_){let f=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${f}${W?".json":""}${J.search}`}})}}if(F&&!Y){let _=M(c).detectLocale(new C($,{},"view",Q));if(B===null&&_!==V.defaultLocale){let f=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${f}${J.search}`}})}}Q=Q.replace("//","/");let D=[],O=[],L=null,T={},H=null,I=!1,S=!1,A=[],b,k=!1,N=!1;try{let _=l3(this.flatViewRoutes,Q);if(B&&_?.route.middleware.includes(_G))_=null;if(_){if(k=!0,L=_.routePath,T=_.params,D=_.route.exec,O=_.route.middleware,A=_.route.features,I=O.includes("no-stream"),S=O.includes(QO),b=_.route.static,N=_.route.segments.at(-1)?.viewPath==="FILE",W&&this.partialRendering){let f=$.headers.get(XJ),H0=ZG({flatViewRoutes:this.flatViewRoutes,supportedLocales:M(c).supportedLocales,from:f,origin:J.origin,to:{segments:_.route.segments,params:T,search:J.search}});if(H0.startIndex>0)D=D.slice(H0.startIndex),H={from:f,carriedViews:H0.carriedViews}}}}catch(_){throw _}if(b&&W)return new Response("Not found",{status:404});let v=new C($,T,"view",L);return this.hooks.onRequestStart(v),await P.run(v,async()=>{let _=null,f=P.getStore(),H0=rZ.getStore(),Z3=(y)=>rZ.run(H0,()=>P.runWith(f,y));f.serverQueries=new oZ(i3($));let u1=new Set;f.serverQueries.onQueryFail((y)=>{u1.add(y.error);try{Z3(()=>Promise.resolve(this.hooks.onRequestFail(n,y.error)).catch(()=>{}))}catch{}});let x1=TJ(N?{}:b??(L===null&&!W?this.notFound?.static:void 0));if(B){let y=B.replaceAll("/","");I$.setLocale(y,{cookie:x1.locale})}else if(V.isLocaleAware&&!F)f.setLocale(V.defaultLocale);else I$.setLocale(void 0,{cookie:x1.locale});let n=f.req;if(x1.session)r4();try{let y=null;if(this.detectLocale&&!F&&M(c).isLocaleAware){let{supportedLocales:R,defaultLocale:r}=M(c),a1=await this.detectLocale(n,{supportedLocales:R,defaultLocale:r}),e3=typeof a1==="string"?_J(a1,R,r):null;if(e3)f.setLocale(e3)}try{await M(e1).runMiddleware(O)}catch(R){if(y=this.viewRefusalStatus(n,R,u1),y===null)throw R}if(y!==null||A.length>0&&!await this.passesFeatureGates(A))L=null,D=[],n.routePath="";let $0=M(c),l1=$0.isEnabled,t3=$0.isLocaleAware,jZ=new C($,n.params),i1={defaultLocale:$0.defaultLocale,timeZone:$0.detectTimeZone(jZ)};if(t3){let R=null;if(B)R=B.replaceAll("/",""),f.setLocale(R);else if(!F)R=f.locale??$0.defaultLocale;else R=$0.detectLocale(jZ),f.setLocale(R);let r=l1?$0.getPageTranslations(R,n.routePath):{};i1={...i1,supportedLocales:$0.supportedLocales,currentLocale:R,dictionary:{[R]:r},defaultLocale:$0.defaultLocale,...F?{}:{localeRouting:"off"}}}await IG(i1.currentLocale??"");let X1;try{X1=await Promise.all(D.map((R)=>R(n)))}catch(R){if(y=this.viewRefusalStatus(n,R,u1),y===null)throw R;L=null,D=[],n.routePath="",X1=[]}let x$=void 0;if(L===null)x$=await this.hooks.onNotFound(n,{status:y??404});if(this.defaultMeta&&!f.metadata.hasAllDefaultFields)f.metadata.applyDefaults(typeof this.defaultMeta==="function"?await this.defaultMeta(n):this.defaultMeta);if(this.translate!==void 0)f.metadata.applyTranslateDefault(this.translate);let{cookies:s1,headers:j0}=f;if(y!==null)j0.set("Cache-Control","no-store");_={data:X1,cookies:s1,headers:j0,user:f.user,prefetchedData:f.serverQueries.snapshotResolved(),currentPathName:L,params:n.params,urlLocaleSegment:G,meta:f.renderMeta(),appId:M(GJ).id,features:await M(Y$).forClient()};let{params:U8,user:C$}=_,n1={},o1={};for(let R of X1??[]){let[r,a1]=Object.entries(R)?.[0]??[];if(!r||!a1)continue;o1[`${r}:${L}`]=a1.breadcrumb,n1[r]=a1}let zZ=L===null&&this.notFound&&!W?this.notFound.static:void 0;if(zZ&&x$)n1["404"]=x$;let A$=n1.FILE;if(A$){try{await this.onRequestEnd(n,{mintSession:!1})}catch(r){ZZ.error(r?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(r)})}let R;if(A$ instanceof Response)R=e4(A$,j0,s1);else{for(let r of s1)j0.append("Set-Cookie",r.toString());R=await A8(A$,j0)}return TG(R,L)}if(W){j0.set("Content-Type","application/x-ndjson; charset=utf-8"),j0.append("Vary",XJ),s1.forEach((r)=>j0.append("Set-Cookie",r.toString())),await this.hooks.onRequestEnd(n);let R={meta:H&&!f.metadata.touched?null:_.meta,data:{[Q]:n1},breadcrumbs:o1,prefetchedData:f.serverQueries.snapshotResolved(),i18n:i1,features:_.features,is404:!L,appId:_.appId,partial:H};return new Response(zG(R,f.serverQueries,void 0,({aborted:r})=>Z3(()=>this.completeStream(n,f.serverQueries.summarize(r)))),{headers:j0})}j0.set("Content-Type","text/html; charset=utf-8");let p=L?b:zZ,u0=Boolean(p),J3=TJ(p);if(!I&&!u0)j0.append("Vary","User-Agent");if(!u0||J3.session)r4();for(let R of s1)j0.append("Set-Cookie",R.toString());if(!u0||J3.csrf){let R=Bun.CSRF.generate(process.env.SECRET);j0.append("Set-Cookie",`csrf_token=${R}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(n,{mintSession:!u0||J3.session})}catch(R){ZZ.error(R?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(R)})}if(u0&&(L||!k))HG(j0,p);return await this.render({req:n,runInRequestScope:Z3,csrfTokenHMAC:Buffer.from(""),currentPathName:L,headers:j0,i18n:i1,params:U8,pathname:J.pathname,serverQueries:f.serverQueries,userAgent:$.headers.get("user-agent"),noStream:I,noTheme:S,url:J,user:C$,viewData:n1,breadcrumbs:o1,urlLocaleSegment:G,meta:_.meta,appId:_.appId,features:_.features,isOgRequest:Y,staticView:p,refusedStatus:y??void 0})}catch(y){if(y.kind===$$){let $0=W?FO(y.payload.viewData??y.payload.api):NJ(y.payload.view);for(let l1 of f.cookies)$0.headers.append("Set-Cookie",l1.toString());return $0}if(!u1.has(y))this.hooks.onRequestFail(n,y);if(Z$(y))return console.error(y),W?aZ():NJ(KJ());if(y instanceof p1&&y.status===403)return W?aZ():NJ(KJ());throw y}},Z)}}function UO($,Z){let J=$.cookies?.get(Z);return bQ(J)?J:null}function CJ(){let $=JSON.stringify({error:J$("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 SG extends C0{routes={"/api-routes":this.get(()=>{let $=M($8).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 $=M(o3).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 DO=new Set([t1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),OO=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,LO=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function MO($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(DO.has(z)||z.startsWith("x-forwarded-"))throw Error(`dispatchAs: credentials may not set the "${Y}" header. The access token stays the initiator's, and the request's framing is dispatchAs's own.`);if(W&&z==="authorization")throw Error(`dispatchAs: credentials may not set "Authorization" on a call dispatched as an identity. The caller's token is for the MCP endpoint and is never passed on.`);$.set(Y,j)}for(let[Y,j]of Object.entries(J.cookies??{})){if(j===void 0||j===null)continue;if(Y===t1)throw Error(`dispatchAs: credentials may not set the "${t1}" cookie. The access token stays the initiator's.`);if(!OO.test(Y)||!LO.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function HO($,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 xG($){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 e4($,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 TO(){return Bun.env.NODE_ENV==="development"}class $8{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=CQ();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=c9({"/":$.rootRouter,"/auth":y9,"/__gemi__/services/i18n":v9,"/__gemi__/services/image":h9,...TO()?{"/__gemi__/services/logs":p9,"/__gemi__/debug":SG}:{}})}getRouteHandlerAndParams($){let Z=new URL($.url),J=AG(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 M(e1).runMiddleware(W)}catch(Y){if(Y.kind===$$)return xG(Y.payload.api);else{if(E$(Y))return CJ();if(this.onRequestFail(Z,Y),console.error(Y),Z$(Y))return aZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=P.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===$$)return xG(j.payload.api);if(E$(j))return CJ();if(this.onRequestFail(J.req,j),console.error(j),Z$(j))return aZ();throw j}return Y}isFrameworkRoute($){return $.startsWith("/__gemi__")}async endRequest($,Z,J){let W=async()=>{try{if(!this.isFrameworkRoute(J))await this.onRequestEnd(Z)}catch(Y){ZZ.error(Y?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(Y)})}finally{$.destroy()}};if(!$.hasPendingWork()){await W();return}$.whenIdle().then(W).catch((Y)=>{console.error(Y)})}isOpenEndedBody($,Z){return $.method!=="HEAD"&&!Z.headers.has("Content-Length")&&Z.body!==null}async handleApiRequest($,Z){let{params:J,path:W}=this.getRouteHandlerAndParams($),Y=this.flatRoutes[W];if(!Y||!Y[$.method])return new Response(JSON.stringify({error:J$("not_found","Not found",404)}),{status:404});let j=new C($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await P.run(j,async()=>{let z=P.getStore(),X=!1,Q=async()=>{X=!0,await this.endRequest(z,j,W)};try{let G=M(c);if(G.isEnabled){let D=G.detectLocale(j);z.setLocale(D)}z.setRequest(j),M(e1).applyDefaultBodyLimit($);let B=await this.runRouteMiddleware(W,j);if(B instanceof Response){let D=e4(B,z.headers,z.cookies);return await Q(),D}let V=await this.getRouteData(W),K=z.headers,F=z.cookies;if(V instanceof Response){let D=e4(V,K,F);if(this.isOpenEndedBody($,D)){let O=HO(D,()=>this.endRequest(z,j,W));return X=!0,O}return await Q(),D}let U=(r1(V)?V:Q1.json(V)).toResponse(K,F);return await Q(),U}catch(G){if(!X)try{await Q()}catch(B){console.error(B)}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,B=[],V=Q?null:$.cookies.get(t1);if(V)B.push(`${t1}=${V}`);if(Y?.credentials)MO(G,B,Y.credentials,Q!==void 0);if(B.length>0)G.set("Cookie",B.join("; "));let K=Q?null:$.headers.get(t1);if(K)G.set(t1,K);let F=$.headers.get("User-Agent");if(F)G.set("User-Agent",F);let U;if(W instanceof FormData)U=W;else if(W!==void 0)G.set("Content-Type","application/json"),U=JSON.stringify(W);let D=new Request(z,{method:Z,headers:G,body:U,...Y?.signal?{signal:Y.signal}:{}});if(CG(D,VZ($),Q?.grant,Y?.progress),$.domain)tZ(D,$.domain);let O=Q?{user:Q.user}:void 0;return P.exit(()=>X6.exit(()=>this.handleApiRequest(D,O)))}}import{timingSafeEqual as PO}from"crypto";var W8="",EJ="*",NO=60000,_O=1e4,Z8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,J8=16,AJ=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,SJ="x-forwarded-host";function bG($){return $.startsWith(":")}function a3($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&PO(J,W)}function IO($){if(!$)return[];if($===!0)return[{header:SJ,clientIpHeader:null,secret:null}];let Z=Array.isArray($)?$:[$],J=Array.isArray($)?null:SJ;return Z.map((W)=>({header:W.hostHeader?.toLowerCase()??J,clientIpHeader:W.clientIpHeader?.toLowerCase()??null,secret:W.secret?{header:W.secret.header.toLowerCase(),value:W.secret.value}:null}))}function xO($){if(!$||$===!0)return;if(!Array.isArray($)){EG($,"route.domains.trustProxy",SJ);return}if($.length===0)throw Error("`route.domains.trustProxy` is an empty list. List at least one proxy, or leave `trustProxy` out.");let Z=new Map;$.forEach((J,W)=>{let Y=`route.domains.trustProxy[${W}]`;if(typeof J!=="object"||J===null||Array.isArray(J))throw Error(`\`${Y}\` must be an object: { hostHeader?, clientIpHeader?, secret }. \`true\` is only accepted on its own.`);if(!J.secret)throw Error(`\`${Y}.secret\` is required: in a list, each proxy proves itself with a secret of its own.`);if(J.hostHeader===void 0&&J.clientIpHeader===void 0)throw Error(`\`${Y}\` names neither \`hostHeader\` nor \`clientIpHeader\`, so it would trust nothing.`);EG(J,Y,null);let j=Z.get(J.secret.value);if(j!==void 0)throw Error(`\`${Y}.secret.value\` is the same as \`route.domains.trustProxy[${j}].secret.value\`. Give each proxy a secret of its own.`);Z.set(J.secret.value,W)})}function EG($,Z,J){let{hostHeader:W,clientIpHeader:Y,secret:j}=$;if(W!==void 0&&(typeof W!=="string"||!AJ.test(W)))throw Error(`\`${Z}.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(W)}.`);let z=(W??J)?.toLowerCase()??null;if(Y!==void 0){if(typeof Y!=="string"||!AJ.test(Y))throw Error(`\`${Z}.clientIpHeader\` must be a single header name, e.g. "x-client-ip". Got ${JSON.stringify(Y)}.`);if(!j)throw Error(`\`${Z}.clientIpHeader\` needs \`secret\`: without proof the proxy sent it, any client that reaches the app directly picks its own address.`);if(Y.toLowerCase()===z)throw Error(`\`${Z}.clientIpHeader\` names the same header as \`hostHeader\`.`);if(typeof j.header==="string"&&Y.toLowerCase()===j.header.toLowerCase())throw Error(`\`${Z}.clientIpHeader\` names the same header as \`secret.header\`.`)}if(!j)return;if(typeof j.header!=="string"||!AJ.test(j.header))throw Error(`\`${Z}.secret.header\` must be a header name. Got "${j.header}".`);if(j.header.toLowerCase()===z)throw Error(`\`${Z}.secret.header\` names the same header as \`hostHeader\`; the secret needs a header of its own.`);if(typeof j.value!=="string"||j.value.length<J8)throw Error(`\`${Z}.secret.value\` must be at least ${J8} characters. A guessable one lets any client name its own host.`)}function N1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function CO($){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 RG($){if($===void 0)return[];if($===!0)return!0;if(!Array.isArray($))throw Error(`\`route.domains.devHosts\` must be a list of hostnames (or \`true\`). Got ${JSON.stringify($)}.`);return $.map((Z,J)=>{let W=typeof Z==="string"?Z.trim().toLowerCase():"",Y=W.startsWith(".")?W.slice(1):W;if(!Y||!Y.split(".").every((j)=>Z8.test(j)))throw Error(`\`route.domains.devHosts[${J}]\` must be a bare hostname, e.g. "app.acme.test", or ".acme.test" for the domain and its subdomains \u2014 no scheme, port, path or "*". Got ${JSON.stringify(Z)}.`);return W})}function AO($){let Z=N1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>Z8.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<J8)throw Error(`\`route.domains.ask.secret\` must be at least ${J8} characters. A guessable one is worse than leaving \`ask\` out.`);xO($.trustProxy),RG($.devHosts);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),bG(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)=>Z8.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 bJ{root;devHosts;hostTrusts;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeaders;constructor($){AO($),this.root=N1($.root),this.devHosts=RG($.devHosts),this.hostTrusts=IO($.trustProxy);for(let Z of $.groups??[])if(bG(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??NO,this.askSecret=$.ask?.secret??null,this.proxySecretHeaders=Array.from(new Set(this.hostTrusts.flatMap((Z)=>Z.secret?[Z.secret.header]:[])))}trustOf($){let Z=null;for(let J of this.hostTrusts)if((!J.secret||a3($.headers.get(J.secret.header),J.secret.value))&&!Z)Z=J;return Z}forwardedHost($){let Z=this.trustOf($)?.header;if(!Z)return null;return $.headers.get(Z)?.split(",")[0]?.trim()||null}trustedClientIp($){let Z=this.trustOf($);if(!Z?.clientIpHeader||!Z.secret)return null;let J=$.headers.get(Z.clientIpHeader)?.split(",")[0];return J===void 0?null:R$(J)}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return N1(this.forwardedHost($))??N1(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&&N1(Y)?CO(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:EJ,params:{},custom:!0};return null}async allows($,Z){let J=N1($);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:W8,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&&Z8.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>=_O)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=N1($);if(Z)this.cache.delete(Z)}}}var SO={kind:"none"};function Tx($){let Z=($??"").trim().toLowerCase();if(Z===""||Z==="false"||Z==="off"||Z==="0")return SO;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 Px($,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:R$(z))??Z}if(W)$.set("x-forwarded-for",W);else $.delete("x-forwarded-for")}var fG=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,kG=16;function Nx($){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(!fG.test(Z))throw Error(`GEMI_CLIENT_IP_HEADER must be a single header name, e.g. "x-azure-clientip". Got ${JSON.stringify(Z)}.`);if(!fG.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<kG)throw Error(`GEMI_PROXY_SECRET must be at least ${kG} characters. A guessable one lets any client name its own address.`);return{header:Z.toLowerCase(),secretHeader:J.toLowerCase(),secret:W}}function wG($,Z){if(!a3($.get(Z.secretHeader),Z.secret))return null;let J=$.get(Z.header)?.split(",")[0];return J===void 0?null:R$(J)}var EO="/__gemi__/domains/ask";class z1{static token="router.domains";resolver;acceptsCustomDomains;clientIpTrust;groups=new Map;staticFilesVary=!1;constructor($,Z){this.groups.set(W8,$),this.clientIpTrust=Z.clientIpTrust??null;let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new bJ(J);let W=(Y)=>({api:Y.api?new $8({...Z.api,...Y.api}):$.api,view:Y.view?new o3({...Z.view,...Y.view},Z.auth):$.view});for(let Y of J.groups??[])this.groups.set(Y.subdomain,W(Y));if(J.custom?.fallback)this.groups.set(EJ,W(J.custom.fallback));this.staticFilesVary=this.viewDispatchers().some((Y)=>Y.publicFiles!==$.view.publicFiles||Y.assetRoutes!==$.view.assetRoutes)}async staticFiles($){let Z=(this.staticFilesVary?await this.route($):null)?.view??this.dispatchers(null).view;return{publicFiles:Z.publicFiles,assetRoutes:Z.assetRoutes}}applyClientIp($){let Z=this.clientIpTrust;if(Z)RJ($,Z.secretHeader);let J=this.resolver?.trustedClientIp($)??(Z?wG($.headers,Z):null);if(!J)return;$.headers.set("x-forwarded-for",J),$.headers.delete("x-real-ip")}async route($){if(!this.resolver)return this.dispatchers(null);for(let J of this.resolver.proxySecretHeaders)RJ($,J);let Z=a4($)??await this.resolver.resolve($);if(!Z)return null;return tZ($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==EO)return null;if(!a3(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??W8)}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 eZ($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var qG=600000;function yG($,Z){return[L6($,Z),L6($,Z-1)]}class E{static token="auth";config;provider;constructor($={},Z=new Z7){xY($.oauthProviders),this.config={...T1(CY($),$),emailCode:o8($.emailCode)},this.provider=Z}async oauthProvider($){return await MZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await hY(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=M().bound(z1)?M(z1).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"?M(z1).resolver?.root:N1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??N1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!d8($))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=eZ(J.expiresAt),j=eZ(J.absoluteExpiresAt);if(Y<=W||j<=W)return await this.userProvider.deleteSession({token:$}),null;let X=await this.slideSession(J,W);return X.user.extension=await this.config.extendSession(X.user),X}async convertLegacySession($,Z,J){let W=P.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/qG),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=L6($,j),B=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:B,userAgent:Z,...this.freshLifetime(Y)}),!0}))z=G}if(!z){for(let G of yG($,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(d8($)||!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()/qG),W=yG($,J);return this.userProvider.withLegacySessionLock($,async()=>{let Y=await this.userProvider.findSession({token:$,userAgent:Z});for(let j of W){if(Y?.user)break;Y=await this.userProvider.findSession({token:j,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let j of W)await this.userProvider.deleteSession({token:j});return Y})}requestCarryingCookie($){let Z=P.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let J=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=J/2)return $;let W=new Date(Math.min(Z+J,new Date($.absoluteExpiresAt).getTime())),Y=await this.userProvider.updateSession({token:$.token,expiresAt:W}),j=this.requestCarryingCookie($.token);if(j)j.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(j,W));if(!Y)return $;return{...$,expiresAt:Y.expiresAt??W}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let J=await this.createOrUpdateSession({email:$,id:Z.id}),W=new 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 b$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=FY(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){let{activeCodes:J,expiresInMinutes:W,linkExpiresInMinutes:Y}=this.config.emailCode,j=await this.config.generateMagicLinkToken($),z=await this.config.generateCode($),X=typeof z==="string"&&z!==""?z:TY(Z),Q=M6("link",$,j),G=M6("pin",$,X);if(J===1)await this.userProvider.deleteMagicLinkToken($);else{let B=Math.max(W,Y)*60000,K=(await this.userProvider.listMagicLinkTokensByEmail($,J-1)).filter((F)=>eZ(F.createdAt)+B>Date.now()&&F.pin!==G&&F.token!==Q);await this.userProvider.deleteMagicLinkTokensExcept($,K.map((F)=>F.id))}return await this.userProvider.createMagicLinkToken({email:$,token:Q,pin:G}),{email:$,pin:X,token:j}}async oneTimeCodeRows($){let{activeCodes:Z}=this.config.emailCode;if(Z===1){let J=await this.userProvider.findMagicLinkTokenByEmail($);return J?[J]:[]}return await this.userProvider.listMagicLinkTokensByEmail($,Z)}async claimOneTimeCode($,Z){if(!await this.userProvider.claimMagicLinkToken(Z))return!1;if(this.config.emailCode.activeCodes>1)await this.userProvider.deleteMagicLinkToken($);return!0}async verifyOneTimeCode($,Z,J={}){let{expiresInMinutes:W,maxAttempts:Y}=this.config.emailCode,j=await this.oneTimeCodeRows($);if(j.length===0)return OZ("pin",$,null,Z),{status:"invalid"};let z=j.filter((G)=>eZ(G.createdAt)+W*60000>Date.now());if(z.length===0)return OZ("pin",$,null,Z),{status:"expired"};let X=!0;for(let G of z)if(!await _Y(G.id,eZ(G.createdAt),Y,W))X=!1;if(!X){if(this.config.emailCode.activeCodes===1)await this.userProvider.claimMagicLinkToken(z[0].id);else await this.userProvider.deleteMagicLinkToken($);return{status:"too_many_attempts"}}let Q=null;for(let G of z)if(OZ("pin",$,G.pin,Z))Q??=G;if(!Q)return{status:"invalid"};if(J.claim!==!1&&!await this.claimOneTimeCode($,Q.id))return{status:"invalid"};return{status:"ok",row:Q}}async verifyMagicLinkToken($,Z){let J=await this.oneTimeCodeRows($);if(J.length===0)return OZ("link",$,void 0,Z),!1;let W=null;for(let j of J)if(OZ("link",$,j.token,Z))W??=j;if(!W)return!1;if(eZ(W.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.claimOneTimeCode($,W.id)}}class q0 extends m{static getFacadeAccessor(){return E}static async user(){let $=await q0.userOrNull();if($)return $;throw new b$({redirectTo:G6(P.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=P.getStore();if($?.user)return $.user;let Z=await Y6(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=P.getStore()?.req;return K1(Z?.search.get(G1),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await q0.user();if(!await $(Z))throw new FZ}static async guardSafe($){let Z=await q0.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 Y8{static ensure($,Z={}){let J=P.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new oZ(i3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=Y8.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){Y8.ensure($,Z[0])}static noPrefetch(){let $=P.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new oZ(i3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function bO($){return(Array.isArray($)?$:String($).split("/")).map((J)=>encodeURIComponent(String(J))).join("/")}function fJ($,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==="*"?bO(z):encodeURIComponent(String(z))}`});return`${j8}${J==="/"?"":J}`||j8}var vG=new Map;function gG($,Z){let J=vG.get($);if(!J)J=new URLPattern({pathname:`${j8}${$==="/"?"":$}`}),vG.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 mG($,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=RO(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 RO($){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 hG{static origin($){return kJ($)}static absolute($,...Z){return`${t$()}${D0(String($),Z[0]??{})}`}static relative($,...Z){return D0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=M(z1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=P.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):t$();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return mG({root:W.root,origin:j},$,D0(String(Z),J[0]??{}))}static api($,...Z){return fJ(String($),Z[0]??{})}static apiAbsolute($,...Z){return`${kJ()}${fJ(String($),Z[0]??{})}`}static matchApi($,Z){return gG(String($),Z)}}class pG{name="Meta";static description($){P.getStore().metadata.description($)}static title($){P.getStore().metadata.title($)}static openGraph($){P.getStore().metadata.openGraph($)}static htmlAttributes($){P.getStore().metadata.htmlAttributes($)}static canonical($){P.getStore().metadata.canonical($)}static alternates($){P.getStore().metadata.alternates($)}static robots($){P.getStore().metadata.robots($)}static translate($=!0){P.getStore().metadata.translate($)}static fonts($){P.getStore().metadata.fonts($)}}var fO={set($,Z,J){P.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(P.getStore().req.cookies.has($))return!1;return P.getStore().setCookie($,Z,J),!0},delete($,Z){P.getStore().deleteCookie($,Z)}};class d1 extends m{static getFacadeAccessor(){return JZ}static get client(){return this.getFacadeRoot().client}static get($){return d1.client.get($)}static set($,Z){return d1.client.set($,Z)}static del(...$){return d1.client.del(...$)}static exists($){return d1.client.exists($)}static incr($){return d1.client.incr($)}static expire($,Z){return d1.client.expire($,Z)}static ttl($){return d1.client.ttl($)}}function HC($){return $}function cG(){return{store:"memory",ttl:null}}class wJ{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 kO="500";class qJ{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=`${wO(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",kO]),[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 $=M(),Z=$.bound(JZ)?$.make(JZ).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 wO($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var qO="k:",dG="tag:",yO="t:";class yJ{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 vJ extends yJ{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=T1(cG(),$),this.config.ttl!==null&&this.config.ttl!==void 0)WZ(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 lG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return qO+iG($)}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=dG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=uG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(dG+Z,uG(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:WZ(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new wJ(this.config.memory);if($==="redis"){let Z=this.options.application;return new qJ({...this.config.redis,client:Z?{send:(J,W)=>Z.make(JZ).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 lG extends yJ{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){iG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${yO}${Z.join(",")}:${$}`}}function iG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function uG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class sG extends m{static getFacadeAccessor(){return vJ}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 nG extends m{static getFacadeAccessor(){return B1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class aG extends m{static getFacadeAccessor(){return oG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class tG extends m{static getFacadeAccessor(){return rG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class eG extends m{static getFacadeAccessor(){return u3}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 sC($){return $}function $K(){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 gJ($){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:vO}=globalThis.Bun;function gO(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var mO=async($)=>{let Z=new vO($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},hO=async($)=>{let Z;try{Z=(await import("./chunk-qfqn7rz8.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(()=>{})}},ZK=($)=>gO()?mO($):hO($);var pO=/^[A-Za-z_][A-Za-z0-9_]*$/;class mJ{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(!pO.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??ZK}async createTable(){for(let $ of cO(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 JK(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 $=l0();if($===void 0||E1()!==this.connection)return;return $}}function cO($,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 hJ{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 XK=new TextEncoder;function WK($,Z){return XK.encode(`id: ${$}
50
+ data: ${JSON.stringify(Z)}
51
+
52
+ `)}function QK($,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(K){if(!(K instanceof X8))throw K;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,B=(K)=>{if(X)clearInterval(X);if(X=null,z.close(),G)return;G=!0;try{K.close()}catch{}},V=new ReadableStream({start(K){X=setInterval(()=>{if(zK())return B(K);try{K.enqueue(XK.encode(YK))}catch{B(K)}},$.config.keepaliveInterval)},async pull(K){try{if(!Q){if(await z.ready(),Q=!0,!G)K.enqueue(WK(z.cursor,{type:"ready"}));return}let F=await z.next();if(F.done||G)return B(K);K.enqueue(WK(z.cursor,F.value))}catch(F){if(!G)console.error("[gemi] A change feed stream failed.",F);B(K)}},cancel(){if(G=!0,X)clearInterval(X);X=null,z.close()}});return new Response(V,{headers:jK()})}var GK=255,KK=500,dO=30000;class X8 extends Error{limit;constructor($){super(`The change feed holds its limit of ${$} subscriptions.`);this.limit=$;this.name="ChangeFeedFullError"}}class $3{options;static token="changeFeed";driver;config;followers=new Map;all=new Set;listenState="off";listening=null;retryTimer=null;backoffMs=KK;pollTimer=null;polling=null;constructor($={},Z={}){this.options=Z;this.config=T1($K(),$),this.driver=lO(this.config.driver,Z.application)}get subscriptions(){return this.all.size}get isListening(){return this.listenState==="listening"}async publish($,Z){cJ($);let J=Z===void 0?null:Z;if(l0()!==void 0&&!this.driver.joinsTransaction?.())return uZ(async()=>{this.wake($,await this.driver.publish($,J))}),null;let W=await this.driver.publish($,J);return uZ(()=>this.wake($,W)),W}async head($){return cJ($),(await this.driver.heads([$])).get($)??0}async cursor($){let Z=pJ($);return z8(await this.driver.heads(Z))}subscribe($,Z={}){let J=pJ($);if(this.all.size>=this.config.maxSubscriptions)throw new X8(this.config.maxSubscriptions);let W=new BK(this,J,uO(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 QK(this,$,pJ(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=KK,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,dO)}}}class BK{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 cJ($){if(typeof $!=="string"||$===""||$.length>GK)throw Error(`A change feed channel is a string of 1 to ${GK} characters; got ${JSON.stringify($)}.`)}function pJ($){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)cJ(J);return Z}function uO($){if($===void 0||$===null)return new Map;if(typeof $==="string")return gJ($);let Z=$ instanceof Map?[...$]:Object.entries($);return gJ(z8(new Map(Z)))}function lO($,Z){if($==="memory")return new hJ;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 mJ(Z.make(b1));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 VK extends m{static getFacadeAccessor(){return $3}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 r3 extends c0{application;previous;sent=[];revoked=[];static install($){let Z=$.bound(c0)?$.make(c0):void 0;if(Z instanceof r3)return Z;let J=new r3($,Z);return $.instance(c0,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(c0,this.previous);return}this.application.forget(c0)}assertSent($,Z,J){if(this.matching($,Z,J).length>0)return;throw Error(`Expected ${dJ($,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 ${dJ($,Z,J)} not to have been broadcast, but it was broadcast ${uJ(W.length)}: ${lJ(W)}.`)}assertSentTimes($,Z,J,W){let Y=this.matching($,J,W);if(Y.length===Z)return;throw Error(`Expected ${dJ($,J,W)} to have been broadcast ${uJ(Z)}, but it was broadcast ${uJ(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"}: ${lJ(this.sent)}.`)}matching($,Z,J){return GZ($),this.sent.filter((W)=>(W.pattern===$||NW($,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: ${lJ(this.sent)}.`}}function dJ($,Z,J){return`${Z?`"${Z}" on `:"an event on "}"${$}"`+(J?" matching the predicate":"")}function uJ($){return`${$} ${$===1?"time":"times"}`}function lJ($){return $.map((Z)=>`${Z.topic} ${Z.event}(${iO(Z.data)})`).join(", ")}function iO($){if($===void 0)return"";try{return JSON.stringify($)??String($)}catch{return String($)}}class FK extends m{static getFacadeAccessor(){return c0}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 r3.install(M())}}function CA($){return $}function UK(){return{store:"memory",sweepLimit:500}}var iJ=["completed","failed","cancelled","timed_out"],_1=["pending","running"];function I1($){return iJ.includes($)}class sJ{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,nJ($.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(I1(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(_1.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 nJ($){if($===void 0)return 50;return Math.max(0,Math.floor($))}class rJ{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 sO(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
+ ${G8($.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]?aJ(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 (${Q8(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 ${nJ($.limit)}
64
+ `).map(aJ)}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(I1(J.status))j.push(W`finished_at = ${Y}`)}if("progress"in J)j.push(W`progress = ${G8(J.progress)}`);if("result"in J)j.push(W`result = ${G8(J.result)}`);if("error"in J)j.push(W`error = ${G8(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 (${Q8(W,Z)})
67
+ `;if(OK(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 (${Q8(J,_1)})
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(aJ)}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 (${Q8(Z,iJ)})
76
+ AND finished_at <= ${this.clock(Z)} - ${this.ms(Z,$)}
77
+ `;return OK(J)}joinable(){if(this.connection===void 0)return;let $=l0();if($===void 0||E1()!==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 Q8($,Z){return Z.map((J)=>$`${J}`).reduce((J,W)=>$`${J}, ${W}`)}function G8($){return $===void 0||$===null?null:JSON.stringify($)}function K8($){if($===null||$===void 0)return null;return JSON.parse(String($))}function oJ($){return $===null||$===void 0?null:Number($)}function DK($){return $===null||$===void 0?null:String($)}function aJ($){return{id:String($.id),kind:String($.kind),subject:DK($.subject),owner:DK($.owner),status:String($.status),meta:K8($.meta),progress:K8($.progress),result:K8($.result),error:K8($.error),version:Number($.version),createdAt:Number($.created_at),startedAt:oJ($.started_at),updatedAt:Number($.updated_at),finishedAt:oJ($.finished_at),deadlineAt:oJ($.deadline_at)}}function OK($){let Z=$;return Math.max(Number(Z.count??0),Number(Z.affectedRows??0))}function sO($,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 LK=191,MK=30000;class B8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class V8 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 tJ{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=T1(UK(),$),this.store=aO(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make($3);return this.ownFeed??=new $3,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){PK("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;PK("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:WZ($.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 oO(Z),this.change($,_1,{status:"running",progress:Z})}complete($,Z){return this.change($,_1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,_1,{status:"failed",error:TK(Z)})}cancel($,Z){return this.change($,_1,{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 B8($);if(I1(W.status))return W;let Y=new AbortController,j=this.watch($,W,J,Y),z={id:$,record:W,signal:Y.signal,progress:async(Q)=>{if(Y.signal.aborted)return;await this.progress($,Q)}},X;try{let Q=await Z(z);X=await this.complete($,Q)}catch(Q){if(!(Q instanceof V8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,_1,{status:"failed",error:Q instanceof V8?TK(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()+WZ(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new B8($);let z=null;for(;;){if(I1(j.status))return j;J?.throwIfAborted();let X=await this.untilDeadline(j);if(X!==null&&X<=0){j=await this.expire($)??await this.store.get($)??j;continue}let Q=W-Date.now();if(Q<=0)return j;if(z??=Y.isClosed?new Promise(()=>{}):Y.next(),await HK(z,Math.min(Q,X??1/0,MK),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 B8($);if(yield W,I1(W.status))return;for await(let Y of J){let j=nO(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,I1(W.status))return}}finally{J.close()}}stream($,Z,J={}){return this.feed.stream($,this.channel(Z),J)}cursor($){return this.feed.cursor(this.channel($))}async sweep(){let $=await this.now(),Z=0;for(let J of await this.store.overdue($,this.config.sweepLimit))if(await this.expire(J.id))Z++;return Z}async prune($){let Z=WZ($);return await this.store.prune?.(Z)??0}async close(){await this.ownFeed?.close(),this.ownFeed=null}now(){return this.store.now?this.store.now():Promise.resolve(Date.now())}async untilDeadline($){if($.deadlineAt===null)return null;return $.deadlineAt-await this.now()}async expire($){let Z=await this.store.get($);if(!Z||I1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,_1,{status:"timed_out",error:{message:"The run passed its deadline.",code:"deadline"}})}async watch($,Z,J,W){let Y=new Promise((z)=>{if(W.signal.aborted)z("ended");W.signal.addEventListener("abort",()=>z("ended"),{once:!0})}),j=null;try{for(;;){if(W.signal.aborted)return;if(I1(Z.status)){W.abort();return}let z=await this.untilDeadline(Z);if(z!==null&&z<=0){Z=await this.expire($)??await this.store.get($)??Z;continue}j??=J.next();let X=await Promise.race([Y,HK(j,Math.min(z??1/0,MK))]);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 HK($,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 nO($,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 TK($){if(typeof $==="string")return{message:$};if($ instanceof V8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function PK($,Z){if(typeof Z!=="string"||Z===""||Z.length>LK)throw TypeError(`A run's ${$} is a string of 1 to ${LK} characters; got ${JSON.stringify(Z)}.`)}function oO($){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 aO($,Z){if($==="memory")return new sJ;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(b1).connection();return new rJ(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 NK extends m{static getFacadeAccessor(){return tJ}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 _K extends m{static getFacadeAccessor(){return Y$}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 ZW{value;constructor($){this.value=$}}var rO=/^[A-Za-z_][A-Za-z0-9_$]*$/;function tO($){let Z=["SET TRANSACTION READ ONLY"],J=[["statementTimeoutMs","statement_timeout"],["lockTimeoutMs","lock_timeout"],["idleInTransactionTimeoutMs","idle_in_transaction_session_timeout"]];for(let[W,Y]of J){let j=$[W];if(j===void 0)continue;if(typeof j!=="number"||!Number.isInteger(j)||j<=0)throw TypeError(`DB.readOnly: ${W} must be a positive whole number of milliseconds, got ${String(j)}.`);Z.push(`SET LOCAL ${Y} = ${j}`)}if($.role!==void 0){if(typeof $.role!=="string"||!rO.test($.role))throw TypeError(`DB.readOnly: the role "${String($.role)}" is not a plain identifier. Use letters, digits, _ and $.`);Z.push(`SET LOCAL ROLE "${$.role}"`)}return Z}class F8{bound;constructor($){this.bound=$}get name(){return this.bound??E1()}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 $W(J.sql,(W)=>eJ(Z,()=>$(W)),{slowTransactionThreshold:J.config.slowTransactionThreshold,connection:Z})}async readOnly($,Z){let J=typeof $==="function"?{}:$,W=typeof $==="function"?$:Z;if(typeof W!=="function")throw TypeError("DB.readOnly needs a callback: readOnly(options, async (tx) => ...).");let Y=tO(J??{}),j=this.name,z=this.connection(j);if(z.dialect!=="postgres")throw Error(`DB.readOnly is supported on Postgres only, and the "${j}" connection is ${z.dialect}.`);if(l0()!==void 0)throw Error("DB.readOnly cannot run inside a transaction: SET TRANSACTION READ ONLY has to be the first statement of its own transaction. Call it outside the transaction.");try{await $W(z.sql,async(X)=>{for(let G of Y)await X.unsafe(G);let Q=await eJ(j,()=>W(X));throw new ZW(Q)},{slowTransactionThreshold:z.config.slowTransactionThreshold,connection:j})}catch(X){if(X instanceof ZW)return X.value;throw X}throw Error("DB.readOnly: the transaction committed, which it never should.")}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-g3m7t5zc.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=CK($,xK(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=l0();if($===void 0)return;return E1()===this.name?$:void 0}connection($=this.name){return IK($),M(b1).connection($)}}var YZ=new F8;class AK extends m{static getFacadeAccessor(){return b1}static connection($){return new F8($)}static get sql(){return YZ.sql}static get dialect(){return YZ.dialect}static query($){return YZ.query($)}static execute($){return YZ.execute($)}static transaction($){return YZ.transaction($)}static readOnly($,Z){return YZ.readOnly($,Z)}static schema(){return YZ.schema()}static close(){return this.getFacadeRoot().close()}}export{Q1 as ie,wK as je,o0 as ke,W3 as le,M8 as me,QZ as ne,j3 as oe,C0 as pe,Y6 as qe,c8 as re,d8 as se,FY as te,W$ as ue,B1 as ve,R$ as we,Z0 as xe,lW as ye,VZ as ze,UY as Ae,DY as Be,l8 as Ce,i8 as De,M6 as Ee,OZ as Fe,sB as Ge,LT as He,CY as Ie,kY as Je,r8 as Ke,wY as Le,qY as Me,ZV as Ne,yY as Oe,t8 as Pe,YV as Qe,jV as Re,e8 as Se,vY as Te,gY as Ue,Y$ as Ve,mY as We,GV as Xe,Z7 as Ye,E8 as Ze,K6 as _e,C1 as $e,A8 as af,A1 as bf,I$ as cf,Y8 as df,hG as ef,pG as ff,fO as gf,d1 as hf,HC as if,cG as jf,wJ as kf,qJ as lf,vJ as mf,lG as nf,sG as of,nG as pf,aG as qf,tG as rf,eG as sf,sC as tf,$K as uf,z8 as vf,gJ as wf,mJ as xf,hJ as yf,X8 as zf,$3 as Af,BK as Bf,VK as Cf,u as Df,z3 as Ef,q4 as Ff,ZP as Gf,JP as Hf,WP as If,XP as Jf,lX as Kf,A9 as Lf,nX as Mf,VP as Nf,rX as Of,c0 as Pf,p3 as Qf,tX as Rf,FK as Sf,CA as Tf,iJ as Uf,_1 as Vf,I1 as Wf,sJ as Xf,rJ as Yf,sO as Zf,B8 as _f,V8 as $f,tJ as ag,NK as bg,_K as cg,F8 as dg,AK as eg,E9 as fg,zD as gg,g9 as hg,m9 as ig,NN as jg,TQ as kg,IQ as lg,j6 as mg,e1 as ng,vN as og,CQ as pg,AQ as qg,GJ as rg,aZ as sg,KJ as tg,p_ as ug,o_ as vg,a_ as wg,zO as xg,xJ as yg,KO as zg,NJ as Ag,FO as Bg,o3 as Cg,CJ as Dg,xG as Eg,e4 as Fg,$8 as Gg,Tx as Hg,Px as Ig,Nx as Jg,z1 as Kg,E as Lg,q0 as Mg,z6 as Ng,AW as Og,nK as Pg,IW as Qg,EW as Rg,I8 as Sg,Q6 as Tg,x8 as Ug,bW as Vg,ZB as Wg,JB as Xg,yW as Yg,gW as Zg,hW as _g,sW as $g,nW as ah,oW as bh,k8 as ch,QB as dh,X0 as eh,zY as fh,UZ as gh,BY as hh};
116
+
117
+ //# debugId=6C6E5CC510AF965B64756E2164756E21