gemi 0.168.0 → 0.170.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 (32) hide show
  1. package/dist/app/App.d.ts +3 -3
  2. package/dist/bin/gemi.js.map +1 -1
  3. package/dist/{chunk-esjt9q54.js → chunk-36515hn6.js} +1 -1
  4. package/dist/{chunk-wc2sg9ny.js → chunk-6xve1mg1.js} +1 -1
  5. package/dist/chunk-g548q257.js.map +1 -1
  6. package/dist/{chunk-a053eza0.js → chunk-mc7pkdav.js} +2 -2
  7. package/dist/{chunk-a053eza0.js.map → chunk-mc7pkdav.js.map} +1 -1
  8. package/dist/chunk-t4hphx4x.js +117 -0
  9. package/dist/{chunk-bb3fdgwt.js.map → chunk-t4hphx4x.js.map} +7 -7
  10. package/dist/{chunk-q01p8ta3.js → chunk-x1p2vmj7.js} +1 -1
  11. package/dist/chunk-ys8nk9ga.js.map +2 -2
  12. package/dist/facades/index.js +1 -1
  13. package/dist/http/index.js +1 -1
  14. package/dist/http/requestDomain.d.ts.map +1 -1
  15. package/dist/i18n/index.js +1 -1
  16. package/dist/kernel/index.js +1 -1
  17. package/dist/server/forwardedFor.d.ts +3 -3
  18. package/dist/server/index.js +1 -1
  19. package/dist/services/index.js +1 -1
  20. package/dist/services/router/DomainResolver.d.ts +20 -9
  21. package/dist/services/router/DomainResolver.d.ts.map +1 -1
  22. package/dist/services/router/DomainRouter.d.ts +2 -1
  23. package/dist/services/router/DomainRouter.d.ts.map +1 -1
  24. package/dist/services/router/ViewRouteDispatcher.d.ts +2 -0
  25. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  26. package/dist/services/router/config.d.ts +59 -4
  27. package/dist/services/router/config.d.ts.map +1 -1
  28. package/package.json +1 -1
  29. package/dist/chunk-bb3fdgwt.js +0 -117
  30. /package/dist/{chunk-esjt9q54.js.map → chunk-36515hn6.js.map} +0 -0
  31. /package/dist/{chunk-wc2sg9ny.js.map → chunk-6xve1mg1.js.map} +0 -0
  32. /package/dist/{chunk-q01p8ta3.js.map → chunk-x1p2vmj7.js.map} +0 -0
@@ -0,0 +1,117 @@
1
+ // @bun
2
+ import{lh as TK}from"./chunk-vnk4vaer.js";import{Fh as PK}from"./chunk-xkas0yp8.js";import{Ei as b1,Gh as X3,Ii as PQ,Ji as t$,Kh as NG,Ki as e$,Lh as gW,Li as eG,Mh as mW,Nh as O8,Ni as $K,Oh as K8,Rh as B8,Sh as F8,Th as rZ,Uh as eQ,Vh as CJ,Wh as QW,Xh as c,bi as A,ci as y8,di as FZ,ei as L8,fi as Q6,hi as A$,ii as g,ji as h4,ri as G6,xi as K6}from"./chunk-ys8nk9ga.js";import{Qi as a1,Ri as W0,Si as t1,Ti as pW}from"./chunk-5n21z4n8.js";import{$i as T,Ui as o$,Vi as SJ,Zi as xY,_i as s4}from"./chunk-1h6g1hkg.js";import{cj as GQ,fj as d3}from"./chunk-s71e6k9m.js";import{jj as vY,mj as iG}from"./chunk-fb77hwk0.js";import{Ej as C$,Jj as r1}from"./chunk-jxx9mctk.js";import{Xj as lX}from"./chunk-s4fb4njt.js";import{$j as uG,Yj as $Z}from"./chunk-6t1t7h05.js";import{ak as M1}from"./chunk-a9frf7ym.js";import{bk as Y6,ck as d0,dk as R1,ek as nJ,fk as MK,hk as dZ,ik as rG,rk as oJ}from"./chunk-gwphn604.js";import{Gk as f1}from"./chunk-m950vw4c.js";import{Lk as MG,Qk as HJ}from"./chunk-978pc27j.js";import{Xk as HG,al as l}from"./chunk-vfvjfw5k.js";import{bl as aZ,el as H}from"./chunk-8b9ks729.js";import{ml as UJ}from"./chunk-sp77zwpn.js";import{nl as ZK}from"./chunk-9akefv1y.js";import{xl as GJ}from"./chunk-rpdekb8t.js";import{Al as _G,yl as e4}from"./chunk-jd079awh.js";import{Fl as n4}from"./chunk-9wcv7e1a.js";function t3($){return typeof $==="function"&&$.prototype!==void 0}var eJ=Symbol.for("gemi.HttpResponse"),bK=new Set([301,302,303,307,308]);class X1{kind;body;status;headers;[eJ]=!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 tJ(J,"json"),new X1("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 X1.json({error:Z},{...J,status:$})}static redirect($,Z={}){let J=Z.status??303;if(!bK.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 X1("empty",void 0,J,Y)}static noContent($={}){return new X1("empty",null,204,new Headers($.headers))}static text($,Z={}){let J=Z.status??200;return tJ(J,"text"),new X1("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 tJ($,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 s1($){return typeof $==="object"&&$!==null&&$[eJ]===!0}function RK($,Z,J={}){return X1.error($,Z,J)}function n0($){return typeof $==="string"?[$]:$}function e3($,Z){let J=Z?"attachment":"inline",W=$.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${J}; filename="${W}"; filename*=UTF-8''${encodeURIComponent($)}`}function fK($){return"total"in $&&"partial"in $&&"body"in $}function $W(){return new Response("Not found",{status:404,headers:{"X-Content-Type-Options":"nosniff"}})}function J3($){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":F8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function kK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(fK($))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 V8($,Z){if($ instanceof Response)return $;if(!$)return $W();let J=await kK($),{body:W,start:Y,end:j,total:z,partial:X}=J;if(W instanceof Blob&&"exists"in W&&typeof W.exists==="function"){if(!await W.exists())return $W()}let{range:Q}=Z;if(Q){if(z<=0)return J3(Math.max(z,0));if(!X){if(W instanceof Blob){let K=K8(Q,z);if(!K)return J3(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,F=new Headers;if(F.set("Accept-Ranges","bytes"),F.set("Content-Type",J.type||"application/octet-stream"),F.set("X-Content-Type-Options","nosniff"),G)F.set("Content-Range",B8(Y,j,z)),F.set("Content-Length",String(j-Y+1));else if(z>=0)F.set("Content-Length",String(z));if(J.name)F.set("Content-Disposition",e3(J.name,J.download));if(J.etag)F.set("ETag",J.etag);if(J.lastModified)F.set("Last-Modified",J.lastModified.toUTCString());for(let[K,V]of Object.entries(J.extraHeaders))F.set(K,V);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:F})}return new Response(W,{status:B,headers:F})}class XZ extends W0{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 Y3($){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 W3=new WeakMap;function WW($){return W3.has($)}function YW($){return W3.get($)?.limit??null}function jW($){let Z=W3.get($);return Z?Z.read>Z.limit:!1}function wK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function D8($,Z){let J=wK($);if(J!==null&&J>Z)throw new XZ(Z)}function $6($,Z,J={}){let W=W3.get($);if(W)W.limit=Z;else{let Y={limit:Z,read:0,stream:void 0,used:!1};W3.set($,Y),yK($,Y)}if(J.checkDeclared!==!1)D8($,Z)}function qK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function U8($,Z){if(Z.stream!==void 0)return Z.stream;let J=qK($);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 XZ(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 zZ($,Z){if(D8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=U8($,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 JW($){return $.headers.get("Content-Type")??""}function yK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>U8($,Z)}),J("bodyUsed",{get:()=>Z.used||Boolean(Z.stream?.locked)||Reflect.get(Object.getPrototypeOf($),"bodyUsed",$)}),J("bytes",{value:()=>zZ($,Z)}),J("arrayBuffer",{value:async()=>{let W=await zZ($,Z);return W.buffer.slice(W.byteOffset,W.byteOffset+W.byteLength)}}),J("text",{value:async()=>new TextDecoder().decode(await zZ($,Z))}),J("json",{value:async()=>JSON.parse(new TextDecoder().decode(await zZ($,Z)))}),J("blob",{value:async()=>new Blob([await zZ($,Z)],{type:JW($)})}),J("formData",{value:async()=>new Response(await zZ($,Z),{headers:{"Content-Type":JW($)}}).formData()}),J("clone",{value:()=>{D8($,Z.limit);let W=U8($,Z),Y=null;if(W){let[j,z]=W.tee();Z.stream=j,Y=z}return new Request($.url,{method:$.method,headers:$.headers,body:Y,signal:$.signal,duplex:"half"})}})}function zW($){return t3($)}class n{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];constructor($,Z,J){this.method=$;this.handler=Z;this.methodName=J;this.handler=Z,this.methodName=J,this.method=$}get source(){if(!zW(this.handler)||typeof this.methodName!=="string")return;return{controller:this.handler,methodName:this.methodName}}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run($){if(zW(this.handler)){let Z=new this.handler;return Z[this.methodName].bind(Z)()}return this.handler()}middleware($){return this.middlewares=n0($),this}}class GW{url;headers;__internal_brand="ProxyHandler";middlewares=[];constructor($,Z){this.url=$;this.headers=Z}middleware($){return this.middlewares=n0($),this}async run(){let $=new A,Z=$.headers.toJSON();for(let J of QW($.rawRequest))delete Z[J];try{return await fetch(this.url,{method:$.rawRequest.method,headers:{...Z,...this.headers},body:$.rawRequest.body})}catch(J){if(jW($.rawRequest))throw new XZ(YW($.rawRequest));throw J}}}class KW{constructor(...$){return new n(...$)}}class BW extends n{__internal_brand="StreamHandler";async run($){let Z=T.getStore(),J=Z?.req?.rawRequest,W=O8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);if(s1(Y))return Y;return await V8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof L8)return J3(Y.total);throw Y}finally{if(Z)Z.rangeRequest=null}}}class FW{constructor(...$){return new BW(...$)}}class VW{__internal_brand="ResourceRoutes";first;second;constructor($){this.first={get:new n("GET",$,"list"),post:new n("POST",$,"store")},this.second={get:new n("GET",$,"show"),put:new n("PUT",$,"update"),delete:new n("DELETE",$,"delete")}}middleware($){if($.list)this.first.get.middleware($.list);if($.store)this.first.post.middleware($.store);if($.show)this.second.get.middleware($.show);if($.update)this.second.put.middleware($.update);if($.delete)this.second.delete.middleware($.delete);return this}}class I0{static __brand="ApiRouter";routes={};middlewares=[];middleware($){}get($,Z){return new n("GET",$,Z)}post($,Z){return new n("POST",$,Z)}put($,Z){return new n("PUT",$,Z)}patch($,Z){return new n("PATCH",$,Z)}delete($,Z){return new n("DELETE",$,Z)}resource($){return new VW($)}agent($){if($.kind!=="agent-controller")throw TypeError(`this.agent() takes an AgentController class, and got ${XW($)}.`);return vK($)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${XW($)}.`);return gK($)}file($,Z){return new KW("GET",$,Z)}stream($,Z){return new FW("GET",$,Z)}proxy($,Z={}){return new GW($,Z)}}function XW($){if(typeof $==="function"&&$.name)return $.name;return typeof $}function vK($){let Z={stream:new n("POST",$,"stream"),attach:new n("POST",$,"attach"),stop:new n("POST",$,"stop"),upload:new n("POST",$,"upload")};return class extends I0{static __internal_brand="AgentRoute";static controller=$;static handlers=Z;routes={"/":Z.stream,"/attach":Z.attach,"/stop":Z.stop,"/files":Z.upload};static middleware(W){if(W.stream)Z.stream.middleware(W.stream);if(W.attach)Z.attach.middleware(W.attach);if(W.stop)Z.stop.middleware(W.stop);if(W.upload)Z.upload.middleware(W.upload);return this}}}function gK($){let Z={start:new n("POST",$,"voiceStart"),update:new n("PATCH",$,"voiceUpdate"),end:new n("DELETE",$,"voiceEnd")};return class extends I0{static __internal_brand="VoiceRoute";static controller=$;static handlers=Z;routes={"/":Z.start,"/:sessionId":{patch:Z.update,delete:Z.end}};static middleware(W){if(W.start)Z.start.middleware(W.start);if(W.update)Z.update.middleware(W.update);if(W.end)Z.end.middleware(W.end);return this}}}var n1="access_token";function x$($){return $?.cookies?.get("access_token")||$?.headers?.get("access_token")||null}async function Z6($,Z){let J=x$(Z);if(!J)return null;return(await $.getSession(J,Z.headers.get("User-Agent")))?.user??null}var mK=/^[A-Za-z0-9_-]+$/,hK=/^:[A-Za-z_][A-Za-z0-9_]*$/,UW=/^[A-Za-z0-9_-]{1,128}$/,pK=/^[A-Za-z0-9_.:-]+$/;class d extends Error{constructor($){super($);this.name="InvalidChannelError"}}function DW($){return typeof $==="object"&&$!==null&&typeof $.topic==="string"}function QZ($){if(typeof $!=="string"||$.length===0)throw new d("A channel pattern must be a non-empty string.");if($.length>255)throw new d(`The channel pattern "${$.slice(0,40)}\u2026" is longer than ${"255"} characters.`);let Z=$.split("."),J=new Set;for(let W of Z){if(hK.test(W)){let Y=W.slice(1);if(J.has(Y))throw new d(`The channel pattern "${$}" names the param "${Y}" twice.`);J.add(Y);continue}if(W.startsWith("__"))throw new d(`The channel "${$}" has the segment "${W}". Segments starting with "__" are reserved for gemi (driver control messages).`);if(!mK.test(W))throw new d(`The channel pattern "${$}" has an invalid segment "${W}". Segments are separated by dots and are either letters, digits, "_" and "-", or a param such as ":siteId".`)}return Z}function j3($,Z={}){let J=QZ($),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 d(`The channel "${$}" needs the param "${z}".`);let Q=typeof X==="number"&&Number.isFinite(X)?String(X):X;if(typeof Q!=="string"||!UW.test(Q))throw new d(`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 d(`The channel "${$}" has no param "${j}".`);if(Y.length>255)throw new d(`The topic built from "${$}" is longer than 255 characters.`);return Y}function H8($){if(QZ($).some((J)=>J.startsWith(":")))throw new d(`"${$}" is a pattern, not a topic: pass its params, as in Broadcast.to("${$}", { ... }).`);return $}function OW($){if(typeof $!=="string"||$.length===0||$.length>64||!pK.test($))throw new d(`The event name "${String($).slice(0,40)}" must be 1 to 64 letters, digits, "_", "-", "." or ":".`);return $}function LW($,Z){if($===Z)return!0;if($===F0)return Z.startsWith(`${F0}.`)&&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(":")&&UW.test(W[j]))}var F0="user";function GZ($){let Z=typeof $==="object"&&$!==null?$.id:$;return j3(`${F0}.:id`,{id:Z})}class t{req;static runsOnRefusal=!1;config={};constructor($){this.req=$}run(...$){return{}}static configure($){let Z=this;return class extends Z{config=$}}}class J6 extends t{run($){let Z=$??this.config.limit;if(Z===void 0||Z==="")throw Error('`body-limit` needs a size, as in "body-limit:64kb".');return $6(this.req.rawRequest,Y3(Z)),{}}}function cK($){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 dK={"body-limit":J6};class o1{config;static token="middleware";defaultBodyLimit;constructor($){this.config=$;this.defaultBodyLimit=$.bodyLimit===null||$.bodyLimit===void 0?null:Y3($.bodyLimit)}get aliases(){return{...dK,...this.config.aliases}}applyDefaultBodyLimit($){if(this.defaultBodyLimit!==null&&!WW($))$6($,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 A,J=this.aliases,W=[];for(let[Y,j]of cK($).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:HW(z)})}}else if(t3(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:HW(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 uK(W.slice(j+1)),z}return Y})()}}function HW($){return $?.runsOnRefusal===!0}async function uK($){for(let Z of $){if(!Z.runsOnRefusal)continue;try{await Z.run()}catch(J){console.error(J)}}}class W6{visibility;authorizer;middlewares=[];constructor($,Z){this.visibility=$;this.authorizer=Z}middleware($){return this.middlewares=[...this.middlewares,...n0($)],this}events(...$){return this}}class NW{static __brand="ChannelRouter";channels={};public(){return new W6("public")}private($){return new W6("private",$)}async authorize($,Z,J={},W={}){try{nK(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(!_W(Y))return{ok:!1,code:"unknown_channel"};let j=null;try{if(Z===F0){if(Object.keys(J??{}).length>0)return{ok:!1,code:"invalid_params"}}else j=j3(Z,J??{})}catch(Q){if(Q instanceof d)return{ok:!1,code:"invalid_params"};throw Q}let z=Object.fromEntries(Object.entries(J??{}).map(([Q,G])=>[Q,String(G)])),X=new A($,z,"api",Z);return T.exit(()=>Y6.exit(()=>T.run(X,async()=>{let Q=T.getStore();try{if(Y.middlewares.length>0)await H(o1).runMiddleware(Y.middlewares);if(Z===F0){let G=await MW(X);if(!G)return{ok:!1,code:"denied"};if(j=GZ(G),Y.visibility==="private"&&Y.authorizer){if(await PW(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 PW(Y.authorizer,X,z):await MW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(sK(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 lK($,Z,J={},W={}){let Y=typeof $==="function"?new $:$;IW(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 _W($){let Z=$?.visibility;return typeof $==="object"&&$!==null&&Array.isArray($.middlewares)&&(Z==="public"||Z==="private")}async function MW($){if(!T.getStore().user&&x$($)===null)return null;try{return await w0.user()}catch(Z){if(Z?.name==="AuthenticationError")return null;throw Z}}function PW($,Z,J){if(iK($))return new $().authorize(Z,J);return $(Z,J)}function iK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function sK($){return $?.kind===a1||r1($)||C$($)}var TW=new WeakSet;function nK($){if(TW.has($))return;IW($),TW.add($)}function IW($){let Z=Object.entries($.channels),J=[];for(let[W,Y]of Z){if(!_W(Y))throw new d(`The channel "${W}" is not declared with this.public() or this.private().`);let j=QZ(W);if(j[0].startsWith(":"))throw new d(`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!==F0&&j.length===2&&j[0]===F0)throw new d(`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!==F0&&Y.visibility==="private"&&!Y.authorizer&&j.some((z)=>z.startsWith(":")))throw new d(`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===F0?[F0,":id"]:j})}for(let W=0;W<J.length;W++)for(let Y=W+1;Y<J.length;Y++)if(oK(J[W].segments,J[Y].segments))throw new d(`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 oK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class M8{as;input;bind;__internal_brand="McpModelParam";constructor($,Z,J){this.as=$;this.input=Z;this.bind=J}}class j6{method;url;meta;__internal_brand="McpRoute";constructor($,Z,J){this.method=$;this.url=Z;this.meta=J}}class P8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}function aK($){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 rK($,Z){let J=aK($);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 xW{static __brand="McpRouter";routes={};scopes;param($){return new M8($.as,$.input,$.bind)}fromTool($,Z={}){return new P8($,Z)}fromApiRoute($,Z,J){return new j6($,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 F={},K=new Map;for(let V of B){let{name:U,casing:D,description:O,params:L,files:P,...M}=Y[V],I=U??(D?rK(W,D):W);if(K.has(I))throw Error(`${G}: the audiences "${K.get(I)}" and "${V}" are both named "${I}". Give one its own name or casing.`);K.set(I,V);let E=typeof O==="function"?j===void 0?void 0:O(j):O??j;if(typeof E!=="string")throw Error(`${G}: the audience "${V}" has no description, and there is no shared one.`);let S={...Q,...M,description:E};if(z||L)S.params={...z,...L};if(X||P)S.files={...X,...P};F[I]=new j6($,Z,S)}return F}}function V0($,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 T8 extends W0{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 S1{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 T8([V0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new T8($,Z)}}class CW{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 S1.to(J,{permanent:W,status:Y}),{}}middleware($){return this.middlewares=n0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}async function N8($,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",e3(Y,z));return new Response(W instanceof Blob?W.stream():W,{status:X,headers:Z})}class AW{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=n0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}function SW($,Z){if(s1($))throw Error(`The handler of view "${Z}" returned an HttpResponse. HttpResponse is for api routes; a view handler returns its props.`);return $}class EW{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=SW(await this.handler($),this.viewPath);return{[this.viewPath]:{...J,breadcrumb:{label:J?.breadcrumb??"",href:Z}}}}middleware($){return this.middlewares=n0($),this}static($={}){return this.staticOptions={...$},this}feature($){return this.featureGates=[...this.featureGates,$],this}}class bW{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor($,Z,J){this.viewPath=$;if(typeof Z==="function")this.handler=Z,this.children=class extends E1{routes=J??{}};else if(Array.isArray(Z)){let[W,Y]=Z;this.handler=(j)=>{return new W()[Y](j)},this.children=class extends E1{routes=J??{}}}else this.children=class extends E1{routes=Z},this.handler=()=>({})}async run($,Z){let J=SW(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=n0($),this}feature($){return this.featureGates=[...this.featureGates,$],this}}class E1{middlewares=[];featureGates=[];routes={};view($,Z){return new EW($,Z)}file($){return new AW($)}redirect($){return new CW($)}layout($,Z,J){return new bW($,Z,J)}}function tK($){return $}function eK(){return{aliases:{},global:[],bodyLimit:null}}var Q1="redirect";function G1($,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 KZ($){let Z=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();return Z?Z==="https":new URL($.url).protocol==="https:"}function $B($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(H(l).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function ZB($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function z6($,Z){let J=Z||H(b).config.signInPath,W=/^[a-z][a-z\d+.-]*:/i.test(J);if(W?!/^https?:\/\//i.test(J):!J.startsWith("/"))throw Error(`\`auth.signInPath\` must be a path like "/auth/sign-in", or an http(s) URL for sign-in hosted elsewhere. Got "${J}". A route's own \`"auth:<path>"\` cannot carry a URL, because the alias parser splits it on the colon.`);let Y=new URL(J,"http://gemi.invalid");if($?.kind==="view"){let j=$B($,!W);if(W||!ZB(new URL(j,Y).pathname,Y.pathname))Y.searchParams.set(Q1,j)}return W?Y.href:`${Y.pathname}${Y.search}`}class RW extends t{async run($){let Z=T.getStore(),J=Z.req;if(Z.user)return{};let W=await Z6(H(b),J);if(!W)throw new A$({redirectTo:z6(J,$)});return Z.setUser(W),{}}}var I8="gemi_same_site",_8="private, no-cache, no-store, max-age=0, must-revalidate";class X6 extends t{run(){let $=T.getStore(),Z=$?.req;if(!Z||$.user)return{};let J=Z.rawRequest;if(Z.kind!=="view"||J.method!=="GET"&&J.method!=="HEAD")return{};let W=new URL(J.url);if(/\.(json|og)$/.test(W.pathname))return{};if(W.searchParams.has(I8))return{};if(x$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(I8,"1"),new fW(`${W.pathname}${W.search}`)}}class fW extends W0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=JB($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":_8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":_8}},viewData:{status:200,data:{},headers:{"Cache-Control":_8},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 kW extends t{async run(...$){let[Z="public",J="864000",...W]=$,Y=`${Z}, max-age=${J}${W.length>0?", ":""}${W.join(", ")}`;if($.length===0)Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="public")Y="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if($.length===1&&$[0]==="private")Y="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",Y);return{}}}var wW={"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 qW extends t{static runsOnRefusal=!0;config={origins:{"":{"Access-Control-Allow-Methods":"GET, HEAD, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"}}};run(){let $=this.req,Z=$.rawRequest.headers.get("Origin");if(Z&&this.config.origins[Z]){$.ctx().setHeaders("Access-Control-Allow-Origin",Z);let J={...wW,...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={...wW,...this.config.origins["*"]};delete J["Access-Control-Allow-Credentials"];for(let[W,Y]of Object.entries(J))$.ctx().setHeaders(W,Y)}return{}}}var WB="Rate limit exceeded";class e1 extends W0{result;retryAfter;constructor($,Z=WB){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?x8($):{}};this.payload={api:{status:429,data:{error:{...t1("rate_limit",Z,429),...$?{retryAfter:$.retryAfter}:{}}},headers:J},view:{error:{message:Z},status:429,headers:J}}}}function x8($){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 K1{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(yW("window",W),yW("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 e1(W,typeof J==="function"?J(W):J);return W}}function yW($,Z){if(!Number.isFinite(Z)||Z<=0)throw Error(`Rate limiter ${$} must be greater than zero, got ${Z}`)}import{isIP as C8}from"net";function S$($){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 C8(j)===6?j:null}if(C8(Z))return Z;let J=/^(\d{1,3}(?:\.\d{1,3}){3}):\d{1,5}$/.exec(Z);return J&&C8(J[1])===4?J[1]:null}class hW extends t{async run($,Z){let J=YB();if(!J)return{};let W=await J.consume(this.key(),{limit:vW($)??this.config.limit,window:vW(Z)??this.config.window});if(this.config.headers!==!1){let Y=this.req.ctx?.();if(Y)for(let[j,z]of Object.entries(x8(W)))Y.setHeaders(j,z)}if(!W.allowed)throw new e1(W);return{}}key(){if(this.config.key)return this.config.key(this.req);let $=gW(this.req.rawRequest);if($)return`mcp:${$.via}:${$.id}:${this.req.routePath??"*"}`;return`${BZ(this.req)}:${this.req.routePath??"*"}`}}function YB(){try{let $=H();return $.bound(K1)?$.make(K1):null}catch{return null}}function BZ($){let Z=mW($.rawRequest);if(Z!==void 0)return Z;let J=$.headers.get("x-forwarded-for");if(J){let[W]=J.split(",");if(W?.trim())return S$(W)??W.trim()}return $.headers.get("x-real-ip")?.trim()||"unknown"}function vW($){if($===void 0||$===null||$==="")return;let Z=Number($);if(!Number.isFinite(Z)||Z<=0)return;return Z}class cW extends t{async run(){let $=this.req.cookies.get("csrf_token");if(!$)throw new A8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new A8;return{}}}class A8 extends W0{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:pW("csrf","Invalid CSRF token",403)}},view:{}}}class dW{policiesList={};constructor(){let $=this.register();for(let Z of $){let J=new Z;this.policiesList[Z.name]=J}}register(){return[]}}class uW{all($,Z){return!0}}class S8{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 Q6}authorize($,Z){if(typeof Z==="number"&&Number.isFinite(Z))Z=String(Z);if(typeof Z!=="string"||Z==="")return Promise.reject(this.refusal());let J=this.answers.get($.rawRequest);if(!J)J=new Map,this.answers.set($.rawRequest,J);let W=J.get(Z);if(!W)W=this.decide($,Z),J.set(Z,W);return W}async allows($,Z){try{return await this.authorize($,Z),!0}catch(J){if(this.isRefusal(J))return!1;throw J}}fromRoute($=new A,Z=this.param){if(Z===void 0)throw Error('This resource policy has no `param`. Give `defineResourcePolicy` one, or name it: `fromRoute(req, "pageId")`, or `alias:pageId` on the middleware.');return this.authorize($,$.params?.[Z])}get middleware(){if(!this.middlewareClass){let $=(Z,J)=>this.fromRoute(Z,J||void 0);this.middlewareClass=class extends t{async run(J){await $(this.req,J)}}}return this.middlewareClass}middlewareClass;forAgent($){return{authorize:async(Z,{threadId:J,body:W})=>{let Y;if(J!==void 0){if(Y=$.thread?await $.thread(J,Z):null,Y===null||Y===void 0)throw this.refusal()}if(W!==void 0){let j=await $.body(W,Z);if(await this.authorize(Z,j),J!==void 0&&String(Y)!==String(j))throw this.refusal();return}if(J!==void 0)await this.authorize(Z,Y)}}}async decide($,Z){let J=await this.options.load(Z,$);if(J===null||J===void 0||!await this.options.allow(J,$))throw this.refusal();return J}isRefusal($){return this.refuse==="forbidden"?$ instanceof FZ:$ instanceof Q6}}function jB($){return new S8($)}async function B6($,Z,J=!1){if(!$.body)return new Uint8Array;let[W,Y]=await HB($.body),z=W.length>=2&&W[0]===31&&W[1]===139?Y.pipeThrough(new DecompressionStream("gzip")):Y;return LB(z,Z,J,$.url)}async function LB($,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 K6(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 HB($){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 F6($){return new TextDecoder("utf-8").decode($)}var MB={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"};function E$($){return $.replace(/[&<>"']/g,(Z)=>MB[Z])}var PB={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function E8($){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 PB[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 b8($){let Z=$.indexOf(":");return(Z===-1?$:$.slice(Z+1)).toLowerCase()}function lW($,Z){let J=$.length,W=0;while(W<J){if(Z.stopped?.())return;let Y=$.indexOf("<",W);if(Y===-1){Z.text(E8($.slice(W)));return}if(Y>W)Z.text(E8($.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(b8($.slice(Y+2,j).trim())),W=j+1}else{let j=TB($,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=b8(z.slice(0,Q));if(G){if(Z.open(G,NB(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function TB($,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 NB($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[b8(W[1])]=E8(W[2]??W[3]??"");return Z}class Y0 extends Error{url;status;constructor($,Z=null,J=null){super($);this.url=Z;this.status=J;this.name="SitemapError"}}var aW="http://www.sitemaps.org/schemas/sitemap/0.9",_B="http://www.w3.org/1999/xhtml",k8=`<?xml version="1.0" encoding="UTF-8"?>
3
+ `,iW=`<urlset xmlns="${aW}" xmlns:xhtml="${_B}">
4
+ `,sW=`</urlset>
5
+ `,b$=50000,z3=52428800,nW=2048,IB=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),xB=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,CB="application/xml; charset=utf-8",oW=new TextEncoder;function w8($,Z){let J;try{J=new URL($)}catch{throw new Y0(`Sitemap: ${Z} "${$}" is not an absolute URL.`)}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new Y0(`Sitemap: ${Z} "${$}" is not an http(s) URL.`);let W=J.href;if(W.length>nW)throw new Y0(`Sitemap: ${Z} is over ${nW} characters: "${W.slice(0,80)}\u2026".`);return W}function rW($,Z){if($ instanceof Date){if(Number.isNaN($.getTime()))throw new Y0(`Sitemap: lastmod of ${Z} is an invalid Date.`);return $.toISOString()}if(!xB.test($))throw new Y0(`Sitemap: lastmod "${$}" of ${Z} is not a W3C datetime (e.g. "2026-10-07" or "2026-10-07T12:00:00Z").`);return $}function AB($){let Z=w8($.loc,"loc"),J=`<url><loc>${E$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${E$(rW($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!IB.has($.changefreq))throw new Y0(`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 Y0(`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 Y0(`Sitemap: an alternate of ${Z} has no hrefLang.`);let j=w8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${E$(Y)}" href="${E$(j)}"/>`}return`${J}</url>
6
+ `}function SB($){let Z=$.maxUrls??b$,J=$.maxBytes??z3;if(!Number.isInteger(Z)||Z<1||Z>b$)throw RangeError(`Sitemap: maxUrls must be an integer from 1 to ${b$}.`);if(!Number.isInteger(J)||J<1||J>z3)throw RangeError(`Sitemap: maxBytes must be an integer from 1 to ${z3}.`);return{maxUrls:Z,maxBytes:J}}function tW($,Z={}){let{maxUrls:J,maxBytes:W}=SB(Z),Y=oW.encode(k8+iW+sW).byteLength,j=[],z=[],X=Y,Q=()=>{j.push(k8+iW+z.join("")+sW),z=[],X=Y};for(let G of $){let B=AB(G),F=oW.encode(B).byteLength;if(Y+F>W)throw new Y0(`Sitemap: the entry for ${G.loc} alone is over maxBytes (${W}).`);if(z.length===J||X+F>W)Q();z.push(B),X+=F}if(z.length>0||j.length===0)Q();return j}function eW($){let Z="",J=0;for(let W of $){if(++J>b$)throw new Y0(`Sitemap: an index can list at most ${b$} sitemaps.`);let Y=w8(W.loc,"sitemap loc");if(Z+=`<sitemap><loc>${E$(Y)}</loc>`,W.lastmod!=null)Z+=`<lastmod>${E$(rW(W.lastmod,Y))}</lastmod>`;Z+=`</sitemap>
7
+ `}return`${k8}<sitemapindex xmlns="${aW}">
8
+ ${Z}</sitemapindex>
9
+ `}function R8($,Z,J){let W=new Headers(J);if(!W.has("content-type"))W.set("content-type",CB);return new Response($,{status:Z,headers:W})}function EB($){if($===null||$===void 0||$==="")return null;let Z=String($);return/^[1-9]\d{0,8}$/.test(Z)?Number(Z):NaN}function bB($,Z={}){let J=tW($,Z),W=EB(Z.page);if(W!==null){let j=J[W-1];return j?R8(j,200,Z.headers):new Response("Not found",{status:404,headers:{"cache-control":"no-store"}})}if(J.length===1)return R8(J[0],200,Z.headers);let Y=Z.pageUrl;if(!Y)throw new Y0(`Sitemap: the entries need ${J.length} files, so Sitemap.response needs \`pageUrl\` to list them in an index.`);return R8(eW(J.map((j,z)=>({loc:Y(z+1)}))),200,Z.headers)}function f8($){try{let Z=new URL($.trim());return Z.protocol==="http:"||Z.protocol==="https:"?Z.href:null}catch{return null}}function $Y($,Z={}){let J=Z.maxUrls??1/0,W=$.replace(/^\uFEFF/,"").trimStart();if(!W.startsWith("<")){let K=[];for(let V of W.split(/\r?\n/)){if(K.length>=J)break;let U=V.trim()?f8(V):null;if(U)K.push({loc:U})}if(K.length===0&&W.length>0)throw new Y0("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="",F=()=>Y==="index"?z.length:j.length;if(lW(W,{stopped:()=>F()>=J,open(K,V){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=V.href?f8(V.href):null;if(V.rel?.toLowerCase()==="alternate"&&V.hreflang&&D)(Q.alternates??=[]).push({hrefLang:V.hreflang,href:D})}},close(K){let V=X.lastIndexOf(K);if(V===-1)return;if(X.length=V,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?f8(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 Y0("Sitemap: the document has no <urlset> or <sitemapindex>.");return Y==="index"?{kind:Y,sitemaps:z}:{kind:Y,urls:j}}async function*RB($,Z={}){let{maxUrls:J=b$,maxSitemaps:W=50,maxDepth:Y=3,maxSize:j=z3,onError:z,...X}=Z,Q=[{url:String($),depth:0}],G=new Set,B=0,F=0;while(Q.length>0&&F<J&&B<W){let K=Q.shift(),V=K.url.replace(/#.*$/,"");if(G.has(V))continue;G.add(V),B++;let U;try{let D=await b1(K.url,{...X,maxSize:j});if(!D.ok)throw D.body?.cancel().catch(()=>{}),new Y0(`Sitemap: ${K.url} answered ${D.status}.`,K.url,D.status);let O=F6(await B6(D,j));U=$Y(O,{maxUrls:Math.max(J-F,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},++F>=J)return}}var ZY={response:bB,chunk:tW,index:eW,parse:$Y,read:RB,MAX_URLS:b$,MAX_BYTES:z3};var fB=512000,kB=new TextEncoder;function JY($){let Z=$.trim();if(Z==="*")return"*";return(/^[a-zA-Z_-]+/.exec(Z)?.[0]??"").toLowerCase()}function WY($){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 kB.encode(String.fromCodePoint(Y)))Z+=`%${j.toString(16).toUpperCase().padStart(2,"0")}`}else Z+=W}return Z}function wB($,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 VZ{groups;sitemaps;status;constructor($,Z,J="parsed"){this.groups=$;this.sitemaps=Z;this.status=J}groupsFor($){let Z=JY($)||"*";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=WY(J);let W=null;for(let Y of this.groupsFor(Z))for(let j of Y.rules){if(!wB(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 qB={"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 YY($,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=qB[Q.slice(0,G).trim().toLowerCase()],F=Q.slice(G+1).trim();if(!B)continue;if(B==="sitemap"){if(!F||/\s/.test(F))continue;try{let K=Z.url?new URL(F,Z.url):new URL(F);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=JY(F);if(K)Y.userAgents.push(K);continue}if(!Y)continue;if(j=!1,B==="crawl-delay"){let K=Number(F);if(Number.isFinite(K)&&K>=0)Y.crawlDelay=K;continue}if(!F)continue;Y.rules.push({type:B,path:WY(F)})}return new VZ(J,W)}async function yB($,Z={}){let{maxSize:J=fB,...W}=Z,Y=new URL("/robots.txt",$),j=await b1(Y,{...W,maxSize:Number.MAX_SAFE_INTEGER}),z=j.status;if(z===429||z>=500)return j.body?.cancel().catch(()=>{}),new VZ([],[],"unreachable");if(z>=400)return j.body?.cancel().catch(()=>{}),new VZ([],[],"unavailable");let X=await B6(j,J,!0),Q=F6(X);if(X.byteLength>=J)Q=Q.slice(0,Math.max(0,Q.lastIndexOf(`
10
+ `)));return YY(Q,{url:j.url})}function q8($){return $===void 0?[]:typeof $==="string"?[$]:$}function V6($,Z){if(/[\r\n]/.test(Z))throw TypeError(`Robots: the ${$} value ${JSON.stringify(Z)} has a line break in it.`);return`${$}: ${Z}
11
+ `}function jY($){let Z=[];for(let W of $.rules??[]){let Y=q8(W.userAgent);if(Y.length===0)throw TypeError("Robots: a rule needs at least one userAgent.");let j=Y.map((X)=>V6("User-agent",X)).join(""),z=[...q8(W.allow).map((X)=>["Allow",X]),...q8(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+=V6(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+=V6("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 V6("Sitemap",Y.href)});if(J.length>0)Z.push(J.join(""));return Z.join(`
13
+ `)}function vB($,Z={}){let J=new Headers(Z.headers);if(!J.has("content-type"))J.set("content-type","text/plain; charset=utf-8");return new Response(jY($),{status:200,headers:J})}var zY={response:vB,text:jY,parse:YY,fetch:yB};import{createHmac as XY,randomBytes as gB}from"crypto";var v8="v2.";function g8($){return $.startsWith(v8)}function UZ(){let $=process.env.SECRET;if(!$)throw Error("Signing in needs a secret to mint session tokens with. Set SECRET in the environment.");return $}function QY($){let Z=gB(16).toString("hex"),J=XY("sha256",UZ()).update(`${$}:${Z}`).digest("hex");return`${v8}${J}`}function U6($,Z){let J=XY("sha256",UZ()).update(`legacy-session:${Z}:${$}`).digest("hex");return`${v8}${J}`}import{createHash as pB,createHmac as cB,randomInt as dB,timingSafeEqual as BY}from"crypto";function GY($,Z){return Math.floor($/Z)*Z}function mB($,Z){if(Z<=0)return 0;return Math.min(1,Math.max(0,(Z-$)/Z))}function m8($,Z,J,W){return Z*mB(J,W)+$}function hB($){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 KY($){let{allowed:Z,current:J,previous:W,now:Y,elapsed:j,window:z,limit:X,cost:Q}=$;if(Z){let B=m8(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=hB({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 h8{}class p8 extends h8{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=GY(j,W),X=j-z,Q=this.roll(Z,W,z);Q.limit=J;let B=m8(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 KY({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 UY="h1.";function D6($,Z,J){let W=cB("sha256",UZ()).update(`gemi:one-time:${$}:${Z}:${J}`).digest("hex");return`${UY}${W}`}function DZ($,Z,J,W){let Y=typeof W==="string"?W:"",j=typeof J==="string"?J:"",z=j.startsWith(UY),X=D6($,Z,Y),Q=Buffer.from(z?X:Y),G=Buffer.from(j);if(Q.length!==G.length||Y===""||j==="")return BY(Q,Q),!1;return BY(Q,G)}function DY($){let Z="";for(let J=0;J<$;J++)Z+=String(dB(0,10));return Z}var OY=320;function Q3($){if(typeof $!=="string")return null;let Z=$.trim();if(Z===""||Z.length>OY)return null;return Z.toLowerCase()}function O6($){if(typeof $!=="string")return null;let Z=$.trim();if(Z.length>OY)return null;let J=Z.toLowerCase();if(J.length<3||J.length>254||!/^[^\s@]+@[^\s@]+$/.test(J))return null;return J}var FY=null;function LY(){try{let $=H();if(typeof $?.bound==="function"&&$.bound(K1))return $.make(K1)}catch{}return FY??=new K1({driver:new p8,limit:1000,window:60}),FY}function VY($){return $.length<=64?$:`sha256:${pB("sha256").update($).digest("hex")}`}async function OZ($,Z,J,W){let Y=LY(),j=[[`auth:code-${$}:ip:${VY(BZ(J))}`,W.perIp]];if(Z!==null)j.push([`auth:code-${$}:email:${VY(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 e1(B)}}async function HY($,Z,J,W=10){let Y=Math.max(86400,Math.ceil(W*60*(J+1)));return(await LY().consume(`auth:code-attempt:${$}:${Z}`,{limit:J,window:Y})).allowed}import{randomBytes as d8}from"crypto";class c8 extends A{schema={name:{string:"Invalid name",required:"Name is required","min:2":"Name must be at least 3 characters"},email:{string:"Invalid email",required:"Email is required",email:"Invalid email"},password:{"min:8":"Password must be at least 9 characters"}}}function G3($,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 uB($={}){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 u8($={}){let Z=$.length??6,J=$.expiresInMinutes??10,W=$.linkExpiresInMinutes??10080,Y=$.maxAttempts??5,j=$.activeCodes??1;return G3("length",Z,4,12),G3("expiresInMinutes",J,1),G3("linkExpiresInMinutes",W,1),G3("maxAttempts",Y,1),G3("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 lB($,Z){if(typeof Z!=="string"||Z==="")return!1;try{return await Bun.password.verify($,Z)}catch{return!1}}function MY($){if(!$)return null;if(typeof $.getRedirectUrl==="function")return{provider:$};let{provider:Z,feature:J}=$;return{provider:Z,...J!==void 0?{feature:J}:{}}}function PY($){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 VP($){return $}function TY($={}){return uB($),{basePath:"/auth",verifyEmail:!0,password:!0,magicLink:!0,redirectPath:"/dashboard",signInPath:"/auth/sign-in",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,cookieDomain:null,migrateLegacySession:null,signUpRequest:c8,oauthProviders:{},oauthFailurePath:null,oauthCompleteProfilePath:null,connections:{},connectionStore:null,onConnected:()=>{},verifyPassword:lB,hashPassword:async(Z)=>await Bun.password.hash(Z),generateForgotPasswordToken:async()=>d8(32).toString("hex"),generateEmailVerificationToken:()=>{if(!($.verifyEmail??!0))return"";return d8(32).toString("hex")},generateMagicLinkToken:()=>d8(32).toString("hex"),extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{},emailCode:u8($.emailCode),generateCode:()=>{return},onAuthenticated:()=>{}}}var iB=new Set(["script","style","textarea","title","xmp","iframe","noembed","noframes","noscript"]),sB=new Set(["svg","math"]);function NY($){return $===32||$===9||$===10||$===12||$===13}function _Y($){return $>=65&&$<=90||$>=97&&$<=122}function L6($){return $>=65&&$<=90?$+32:$}function IY(){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&&iB.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(sB.has(Z)){if(J)Q=Math.max(0,Q-1);else if(!z)Q+=1}Z=""},F=(K)=>{switch($){case"data":if(K===60)$="tagOpen";return;case"tagOpen":if(K===33)$="bang",j=0;else if(K===47)$="endTagOpen";else if(_Y(K))$="tagName",J=!1,z=!1,Z=String.fromCharCode(L6(K));else if(K===63)$="bogus";else if(K===60)$="tagOpen";else $="data";return;case"endTagOpen":if(_Y(K))$="tagName",J=!0,z=!1,Z=String.fromCharCode(L6(K));else if(K===62)$="data";else $="bogus";return;case"tagName":if(NY(K)||K===47)$="inTag",z=K===47;else if(K===62)B();else Z+=String.fromCharCode(L6(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(L6(K)===W.charCodeAt(Y))Y+=1;else Y=K===60?1:0;return}if(K===62)$="data",Z="";else if(NY(K)||K===47)$="inTag",Z="";else Y=K===60?1:0;return}}};return{scanToInsertionPoint(K){for(let V=0;V<K.length;V++){if(G())return V;F(K[V])}return K.length},write(K){for(let V=0;V<K.length;V++)F(K[V])},isSafe:G}}function B1($){let Z=JSON.stringify($);if(Z===void 0)return"undefined";return Z.replace(/</g,"\\u003c").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function nB($){return`<script>(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${B1([$.path,$.variantKey,$.data])})</script>`}function oB($){return`<script>(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${B1([$.id,$.locale,$.strings])})</script>`}function l8($,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(nB(U))}),W?.onUse((U)=>{j.push(oB(U))});let G=$.getReader(),B=IY(),F=(U,D)=>{U.enqueue(D),J.onChunk?.(D)},K=(U)=>{while(j.length>0){let D=Y.encode(j.shift());B.write(D),F(U,D)}},V=(U,D)=>{if(j.length===0){B.write(D),F(U,D);return}let O=B.scanToInsertionPoint(D);if(O>0)F(U,D.subarray(0,O));if(B.isSafe())K(U);let L=D.subarray(O);if(L.length>0)B.write(L),F(U,L)};return new ReadableStream({async pull(U){let D;try{D=await G.read()}catch(P){throw Q(),P}let{done:O,value:L}=D;if(O){K(U),U.close(),Q();return}if(!z){if(z=!0,B.write(L),F(U,L),J.onShell?.(),B.isSafe())K(U);return}V(U,L)},cancel(U){return Q(),G.cancel(U)}})}var aB=/bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;function H6($){if(!$)return!1;return aB.test($)}async function CY($,Z=()=>{}){let J=T.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 rB($,Z),request:{path:Y,routePath:W?.routePath??null,locale:J?.locale??null},anonymousId:xY(),isBot:H6(W?.rawRequest?.headers?.get("user-agent")??null),now:new Date}}function AY($){return{user:$.user??null,attributes:$.attributes??{},request:{path:null,routePath:null,locale:null},anonymousId:$.subjectId??null,isBot:!1,now:new Date}}async function rB($,Z){if(!$.context)return{};try{let J=T.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 SY($,Z){return`${$}:${Z}`}function i8($){let Z=new Bun.CryptoHasher("sha1").update($).digest("hex"),J=Number.parseInt(Z.slice(0,8),16);return Math.floor(J/4294967296*1e4)}function EY($,Z){if(Z>=100)return!0;if(Z<=0)return!1;return $<Math.round(Z*100)}function bY($,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=eB($,Z,J,W.buckets);return EY(Y,Z.rollout)?{value:!0,reason:"rollout"}:{value:!1,reason:"excluded"}}function tB($){let Z=$.user?.publicId??$.user?.id;if(Z!==void 0&&Z!==null)return String(Z);return $.anonymousId??""}function eB($,Z,J,W){let Y=SY(Z.salt??$,tB(J));if(!W)return i8(Y);let j=W.get(Y);if(j!==void 0)return j;let z=i8(Y);return W.set(Y,z),z}class RY 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 s8{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 RY(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=$F(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 $F($){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 ZF{}class JF 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 n8 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 fY 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 kY{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 $${config;log;static token="features";store;declared;warnedAboutSize=!1;warnedAboutActor=!1;constructor($,Z=()=>{}){this.config=$;this.log=Z;this.declared=$.features??{},this.store=new s8($.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{T.getStore()?.featureEvaluations?.clear()}}async set($,Z,J={}){if(typeof $!=="string"||!Object.hasOwn(this.declared,$))throw new fY(String($));if(typeof Z!=="boolean")throw TypeError(`Features.set("${$}", \u2026) takes a boolean, not ${Z===null?"null":typeof Z}.`);let W=WF(J.actor),Y=this.config.source;if(typeof Y.write!=="function")throw new n8(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 kY(this,AY($))}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=bY($,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 $=T.getStore();if($?.featureContext)return $.featureContext;let Z=await CY(this.config,this.log);if($)$.featureContext=Z;return Z}memoFor($){let Z=T.getStore();if(!Z||Z.featureContext!==$)return null;return Z.featureEvaluations??=new Map,Z.featureEvaluations}requestBuckets(){let $=T.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 WF($){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 wY($){if($===void 0)return!0;return await H($$).enabled($)}async function LZ($,Z){if(typeof Z!=="string"||!Object.hasOwn($,Z))return null;let J=MY($[Z]);if(!J||!await wY(J.feature))return null;return J.provider}async function qY($){let Z=[];for(let J of Object.keys($))if(await LZ($,J))Z.push(J);return Z}function o8($){if($&&typeof $==="object")delete $.password;return $}function YF(){return new Proxy({},{get:($,Z)=>vY(Z)})}var yY=new WeakMap;function gY($){if($&&typeof $==="object"){for(let Z of Object.values($))gY(Z);Object.freeze($)}return $}var jF={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}},zF=gY({token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:jF});class a8{models;constructor($=YF()){this.models=$}run($){return this.models.User.asSystem($)}sessionSelect(){return zF}transaction($){return this.models.User.transaction($)}withLegacySessionLock($,Z){let J=this.models.User.$connection??R1(),W=H(f1).connection(J),Y=()=>this.transaction(async()=>{if(W.dialect==="postgres"){let X=`gemi:legacy-session:${$}`;await d0()`SELECT pg_advisory_xact_lock(hashtextextended(${X}, 0))`}return Z()});if(W.dialect!=="sqlite"||d0())return Y();let z=(yY.get(W)??Promise.resolve()).then(Y,Y);return yY.set(W,z.catch(()=>{})),z}async createUser($){let Z=await this.run(()=>this.models.User.create({data:$}));return o8(Z)}async updateUserPassword($){let Z=await this.run(()=>this.models.User.update({where:{id:$.id},data:{password:$.password}}));return o8(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?o8(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 KD}from"crypto";function q0($,Z,J,W,Y){return o0(Z,$5($,Z),J,W,Y)}function o0($,Z,J,W,Y,j){let z=Z7(Z,J,W);if(Y&&Z!==z)throw RangeError(vz($,Z,J,W,j));return z}function $5($,Z){let J=$[Z];if(J===void 0)throw TypeError(b2(Z));return J}function D0($){return $!==null&&/object|function/.test(typeof $)}function g0($,Z=Map){let J=new Z;return(W,...Y)=>{if(J.has(W))return J.get(W);let j=$(W,...Y);return J.set(W,j),j}}function G7($){return w$({name:$},1)}function w$($,Z){return e0((J)=>({value:J,configurable:1,writable:!Z}),$)}function Z5($){return e0((Z)=>({get:Z,configurable:1}),$)}function w6($){return{[Symbol.toStringTag]:{value:$,configurable:1}}}function IZ($,Z){let J={},W=$.length;for(let Y of Z)J[$[--W]]=Y;return J}function e0($,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 XF($,Z,J){let W={};for(let Y=0;Y<$.length;Y++)W[Z[Y]]=J[$[Y]];return W}function h0($,Z){let J={};for(let W of $)J[W]=Z[W];return J}function K7($,Z){let J={};for(let W in Z)$.has(W)||(J[W]=Z[W]);return J}function B7($){$={...$};let Z=Object.keys($);for(let J of Z)$[J]===void 0&&delete $[J];return $}function J5($,Z){for(let J of Z)if(!(J in $))return 0;return 1}function W5($,Z,J){for(let W of $)if(Z[W]!==J[W])return 0;return 1}function Y5($,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 mY($){return $[0].toUpperCase()+$.substring(1)}function M3($){return $.slice().sort()}function x6($,Z){return String(Z).padStart($,"0")}function Z$($,Z){return Math.sign($-Z)}function Z7($,Z,J){return Math.min(Math.max($,Z),J)}function w1($,Z){return[Math.floor($/Z),B3($,Z)]}function B3($,Z){return($%Z+Z)%Z}function Y$($,Z){return[q6($,Z),F7($,Z)]}function q6($,Z){return Math.trunc($/Z)||0}function F7($,Z){return $%Z||0}function M6($){return Math.abs($%1)===0.5}function j5($,Z,J){let W=0,Y=0;for(let X=0;X<=Z;X++){let Q=$[J[X]],G=V1[X],B=u/G,[F,K]=Y$(Q,B);W+=K*G,Y+=F}let[j,z]=Y$(W,u);return[Y+j,z]}function y6($,Z,J){let W={};for(let Y=Z;Y>=0;Y--){let j=V1[Y];W[J[Y]]=q6($,j),$=F7($,j)}return W}function z5($){return $===q?O4:[]}function X5($){return $===q?E3:[]}function Q5($){return $===q?["year","day"]:[]}function G5($){if($!==void 0)return e($)}function K5($){if($!==void 0)return $1($)}function V7($){if($!==void 0)return P3($)}function $1($){return V5(P3($))}function P3($){return F5(tF($))}function U7($){if($==null)throw TypeError("Cannot be null or undefined");return $}function B5($,Z){if(Z==null)throw RangeError(b2($));return Z}function y1($){if(!D0($))throw TypeError(yz);return $}function v6($,Z,J=$){if(typeof Z!==$)throw TypeError(C3(J,Z));return Z}function F5($,Z="number"){if(!Number.isInteger($))throw RangeError(_F(Z,$));return $||0}function V5($,Z="number"){if($<=0)throw RangeError(IF(Z,$));return $}function D7($){if(typeof $=="symbol")throw TypeError(SF);return String($)}function C6($,Z){return D0($)?String($):e($,Z)}function g6($){if(typeof $=="string")return BigInt($);if(typeof $!="bigint")throw TypeError(AF($));return $}function U5($,Z="number"){if(typeof $=="bigint")throw TypeError(CF(Z));if($=Number($),!Number.isFinite($))throw RangeError(xF(Z,$));return $}function x0($,Z){return Math.trunc(U5($,Z))||0}function D5($,Z){return F5(U5($,Z),Z)}function hY($,Z){return V5(x0($,Z),Z)}function O7($,Z){let[J,W]=Y$(Z,u),Y=$+J,j=Math.sign(Y);return j&&j===-Math.sign(W)&&(Y-=j,W+=j*u),[Y,W]}function MZ($,Z,J=1){return O7($[0]+Z[0]*J,$[1]+Z[1]*J)}function PZ($,Z){return O7($[0],$[1]+Z)}function u0($,Z){return MZ(Z,$,-1)}function A0($,Z){return Z$($[0],Z[0])||Z$($[1],Z[1])}function O5($,Z,J){return A0($,Z)===-1||A0($,J)===1}function m6($,Z=1){let J=BigInt(u/Z);return[Number($/J),Number($%J)*Z]}function TZ($,Z=1){let J=u/Z,[W,Y]=Y$($,J);return[W,Y*Z]}function L5($,Z=1){let[J,W]=$,Y=Math.floor(W/Z),j=u/Z;return BigInt(J)*BigInt(j)+BigInt(Y)}function l0($,Z=1,J){let[W,Y]=$,[j,z]=Y$(Y,Z);return W*(u/Z)+(j+(J?z/Z:0))}function L7($,Z,J=w1){let[W,Y]=$,[j,z]=J(Y,Z);return[W*(u/Z)+j,z]}function H7($,Z){let J=$.formatToParts(Z),W={};for(let Y of J)W[Y.type]=Y.value;return W}function M7($){return q0($,"isoYear",L3,O3,1),$.isoYear===L3?q0($,"isoMonth",4,12,1):$.isoYear===O3&&q0($,"isoMonth",1,9,1),$}function J$($){return v1({...$,...t0,isoHour:12}),$}function v1($){let Z=q0($,"isoYear",L3,O3,1),J=Z===L3?1:Z===O3?-1:0;return J&&i0(C0({...$,isoDay:$.isoDay+J,isoNanosecond:$.isoNanosecond-J})),$}function i0($){if(!$||O5($,jV,YV))throw RangeError(F4);return $}function j$($){return j5($,5,Y1)[1]}function h6($){let[Z,J]=w1($,u);return[y6(J,5,Y1),Z]}function H5($){return M5($)[0]}function M5($){return L7($,r0)}function S0($){return xZ($.isoYear,$.isoMonth,$.isoDay,$.isoHour,$.isoMinute,$.isoSecond,$.isoMillisecond)}function C0($){let Z=S0($);if(Z!==void 0){let[J,W]=Y$(Z,v0);return[J,W*U1+($.isoMicrosecond||0)*d$+($.isoNanosecond||0)]}}function P7($,Z){let[J,W]=h6(j$($)-Z);return i0(C0({...$,isoDay:$.isoDay+W,...J}))}function A6(...$){return xZ(...$)/nz}function xZ(...$){let[Z,J]=P5(...$),W=Z.valueOf();if(!isNaN(W))return W-J*v0}function P5($,Z=1,J=1,W=0,Y=0,j=0,z=0){let X=$===L3?1:$===O3?-1:0,Q=new Date;return Q.setUTCHours(W,Y,j,z),Q.setUTCFullYear($,Z-1,J+X),[Q,X]}function X$($,Z){let[J,W]=PZ($,Z);W<0&&(W+=u,J-=1);let[Y,j]=w1(W,U1),[z,X]=w1(j,d$);return p6(J*v0+Y,z,X)}function p6($,Z=0,J=0){let W=Math.ceil(Math.max(0,Math.abs($)-WV)/v0)*Math.sign($),Y=new Date($-W*v0);return IZ(H4,[Y.getUTCFullYear(),Y.getUTCMonth()+1,Y.getUTCDate()+W,Y.getUTCHours(),Y.getUTCMinutes(),Y.getUTCSeconds(),Y.getUTCMilliseconds(),Z,J])}function T5($){return[$.isoYear,$.isoMonth,$.isoDay]}function N5(){return k1}function T7($,Z){switch(Z){case 2:return N7($)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function _5($){return N7($)?366:365}function N7($){return $%4==0&&($%100!=0||$%400==0)}function I5($){let[Z,J]=P5($.isoYear,$.isoMonth,$.isoDay);return B3(Z.getUTCDay()-J,7)||7}function x5({isoYear:$}){return $<1?["bce",1-$]:["ce",$]}function QF($){let Z=S0($);if(Z<XV)return x5($);let J=H7(n2(NZ),Z),{era:W,eraYear:Y}=yj(J,NZ);return[W,Y]}function c6($){return q$($),d6($,1),$}function q$($){return C5($,1),$}function pY($){return W5(h2,$,C5($))}function C5($,Z){let{isoYear:J}=$,W=q0($,"isoMonth",1,N5(),Z);return{isoYear:J,isoMonth:W,isoDay:q0($,"isoDay",1,T7(J,W),Z)}}function d6($,Z){return IZ(Y1,[q0($,"isoHour",0,23,Z),q0($,"isoMinute",0,59,Z),q0($,"isoSecond",0,59,Z),q0($,"isoMillisecond",0,999,Z),q0($,"isoMicrosecond",0,999,Z),q0($,"isoNanosecond",0,999,Z)])}function v($){return $===void 0?0:BX(y1($))}function T3($,Z=0){$=Z1($);let J=FX($),W=LV($,Z);return[BX($),W,J]}function _7($){return FX(Z1($))}function A5($){return $=Z1($),d2($,9,6,1)}function CZ($,Z,J,W=9,Y=0,j=4){Z=Z1(Z);let z=d2(Z,W,Y),X=C7(Z),Q=R3(Z,j),G=b3(Z,W,Y,1);return z==null?z=Math.max(J,G):R5(z,G),X=A7(X,G,1),$&&(Q=((B)=>B<4?(B+2)%4:B)(Q)),[z,G,X,Q]}function u6($,Z=6,J){let W=C7($=S7($,k6)),Y=R3($,7),j=b3($,Z);return j=B5(k6,j),W=A7(W,j,void 0,J),[j,W,Y]}function I7($){return u2(Z1($))}function S5($,Z){return x7(Z1($),Z)}function x7($,Z=4){let J=b5($);return[R3($,4),...E5(b3($,Z),J)]}function E5($,Z){return $!=null?[V1[$],$<4?9-3*$:-1]:[Z===void 0?1:10**(9-Z),Z]}function C7($){let Z=$[F3];return Z===void 0?1:x0(Z,F3)}function A7($,Z,J,W){let Y=W?u:V1[Z+1];if(Y){let j=V1[Z];if(Y%(($=o0(F3,$,1,Y/j-(W?0:1),1))*j))throw RangeError(C3(F3,$))}else $=o0(F3,$,1,J?1e9:1,1);return $}function b5($){let Z=$[$7];if(Z!==void 0){if(typeof Z!="number"){if(D7(Z)==="auto")return;throw RangeError(C3($7,Z))}Z=o0($7,Math.floor(Z),0,9,1)}return Z}function Z1($){return $===void 0?{}:y1($)}function S7($,Z){return typeof $=="string"?{[Z]:$}:y1($)}function j0($){if($!==void 0){if(D0($))return Object.assign(Object.create(null),$);throw TypeError(yz)}}function l6($,Z){return $&&Object.assign(Object.create(null),$,{overflow:GV[Z]})}function E7($,Z,J=9,W=0,Y){let j=Z[$];if(j===void 0)return Y?W:void 0;if(j=D7(j),j==="auto")return Y?W:null;let z=j7[j];if(z===void 0&&(z=ZV[j]),z===void 0)throw RangeError(hz($,j,j7));return o0($,z,W,J,1,S3),z}function y$($,Z,J,W=0){let Y=J[$];if(Y===void 0)return W;let j=D7(Y),z=Z[j];if(z===void 0)throw RangeError(hz($,j,Z));return z}function R5($,Z){if(Z>$)throw RangeError(sF)}function O0($){return{branding:P4,epochNanoseconds:$}}function P0($,Z,J){return{branding:p1,calendar:J,timeZone:Z,epochNanoseconds:$}}function z0($,Z=$.calendar){return{branding:l$,calendar:Z,...h0(XX,$)}}function X0($,Z=$.calendar){return{branding:u$,calendar:Z,...h0(p2,$)}}function f$($,Z=$.calendar){return{branding:wZ,calendar:Z,...h0(p2,$)}}function S6($,Z=$.calendar){return{branding:qZ,calendar:Z,...h0(p2,$)}}function J1($){return{branding:M4,...h0(zX,$)}}function a($){return{branding:T4,sign:Q$($),...h0(v2,$)}}function f5($){return H5($.epochNanoseconds)}function i6($){return L7($.epochNanoseconds,U1)[0]}function k5($){return L5($.epochNanoseconds,d$)}function w5($){return L5($.epochNanoseconds)}function q5($){return $.epochNanoseconds}function H0($){return typeof $=="string"?$:e($.id)}function AZ($,Z){return $===Z||H0($)===H0(Z)}function y5($,Z,J,W,Y){let j=k$(W),[z,X]=((O,L)=>{let P=L((O=S7(O,Q7))[GX]),M=OV(O);return M=B5(Q7,M),[M,P]})(Y,$);if(U3(Math.max(z,j),X))return cY(W,z);if(!X)throw RangeError(V4);let[Q,G,B]=t6(Z,J,X),F=e7(B),K=e6(B),V=$2(B),U=K(G,Q,W),D=V(G,Q,U,z);return U3(z,X)?cY(D,z):((O,L,P,M,I,E,S)=>{let R=Q$(O),[f,N]=b7(M,m2(P,O),P,R,I,E,S),_=R7(L,f,N);return O[h[P]]+_*R})(D,F(U),z,G,Q,F,K)}function cY($,Z){return l0(U0($),V1[Z],1)}function b7($,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 R7($,Z,J){let W=l0(u0(Z,J));if(!W)throw RangeError(A3);return l0(u0(Z,$))/W}function v5($,Z){let[J,W,Y]=u6(Z,5,1);return O0(n6($.epochNanoseconds,J,W,Y,1))}function g5($,Z,J){let{epochNanoseconds:W,timeZone:Y,calendar:j}=Z,[z,X,Q]=u6(J);if(z===0&&X===1)return Z;let G=$(Y);if(z===6)W=((B,F,K,V)=>{let U=E0(K,F),[D,O]=B(U),L=K.epochNanoseconds,P=m0(F,D),M=m0(F,O);if(O5(L,P,M))throw RangeError(A3);return s5(R7(L,P,M),V)?M:P})(l5,G,Z,Q);else{let B=G.getOffsetNanosecondsFor(W);W=g$(G,d5(X$(W,B),z,X,Q),B,2,0,1)}return P0(W,Y,j)}function m5($,Z){return z0(d5($,...u6(Z)),$.calendar)}function h5($,Z){let[J,W,Y]=u6(Z,5);var j;return J1((j=Y,f7($,N3(J,W),j)[0]))}function p5($,Z){let J=$(Z.timeZone),W=E0(Z,J),[Y,j]=l5(W),z=l0(u0(m0(J,Y),m0(J,j)),D4,1);if(z<=0)throw RangeError(A3);return z}function c5($,Z){let{timeZone:J,calendar:W}=Z,Y=((j,z,X)=>m0(z,j(E0(X,z))))(i5,$(J),Z);return P0(Y,J,W)}function d5($,Z,J,W){return u5($,N3(Z,J),W)}function u5($,Z,J){let[W,Y]=f7($,Z,J);return v1({...m$($,Y),...W})}function f7($,Z,J){return h6(z$(j$($),Z,J))}function E6($){return z$($,U4,7)}function N3($,Z){return V1[$]*Z}function l5($){let Z=i5($);return[Z,m$(Z,1)]}function i5($){return JV(6,$)}function GF($,Z,J){let W=Math.min(k$($),6);return EZ(o6(U0($,W),Z,J),W)}function s6($,Z,J,W,Y,j,z,X,Q,G){if(W===0&&Y===1)return $;let B=U3(W,X)?$4(X)&&W<6&&J>=6?BF:KF:FF,[F,K,V]=B($,Z,J,W,Y,j,z,X,Q,G);return V&&W!==7&&(F=((U,D,O,L,P,M,I,E)=>{let S=Q$(U);for(let R=L+1;R<=O;R++){if(R===7&&O!==7)continue;let f=m2(R,U);f[h[R]]+=S;let N=l0(u0(I(E(P,M,f)),D));if(N&&Math.sign(N)!==S)break;U=f}return U})(F,K,J,Math.max(6,W),z,X,Q,G)),F}function n6($,Z,J,W,Y){if(Z===6){let j=((z)=>z[0]+z[1]/u)($);return[z$(j,J,W),0]}return o6($,N3(Z,J),W,Y)}function o6($,Z,J,W){let[Y,j]=$;W&&j<0&&(j+=u,Y-=1);let[z,X]=w1(z$(j,Z,J),u);return O7(Y+z,X)}function z$($,Z,J){return s5($/Z,J)*Z}function s5($,Z){return PV[Z]($)}function KF($,Z,J,W,Y,j){let z=Q$($),X=U0($),Q=n6(X,W,Y,j),G=u0(X,Q),B=Math.sign(Q[0]-X[0])===z,F=EZ(Q,Math.min(J,6));return[{...$,...F},MZ(Z,G),B]}function BF($,Z,J,W,Y,j,z,X,Q,G){let B=Q$($),F=l0(U0($,5)),K=N3(W,Y),V=z$(F,K,j),[U,D]=b7(z,{...$,...g2},6,B,X,Q,G),O=V-l0(u0(U,D)),L=0;O&&Math.sign(O)!==B?Z=PZ(U,V):(L+=B,V=z$(O,K,j),Z=PZ(D,V));let P=J4(V);return[{...$,...P,days:$.days+L},Z,Boolean(L)]}function FF($,Z,J,W,Y,j,z,X,Q,G){let B=Q$($),F=h[W],K=m2(W,$);W===7&&($={...$,weeks:$.weeks+Math.trunc($.days/7)});let V=q6($[F],Y)*Y;K[F]=V;let[U,D]=b7(z,K,W,Y*B,X,Q,G),O=V+R7(Z,U,D)*B*Y,L=z$(O,Y,j),P=Math.sign(L-O)===B;return K[F]=L,[K,P?D:U,P]}function k7($,Z,J,W){let[Y,j,z,X]=((G)=>{let B=x7(G=Z1(G));return[G.timeZone,...B]})(W),Q=Y!==void 0;return((G,B,F,K,V,U)=>{F=o6(F,V,K,1);let D=B.getOffsetNanosecondsFor(F);return h7(X$(F,D),U)+(G?v$(E6(D)):"Z")})(Q,Z(Q?$(Y):i$),J.epochNanoseconds,j,z,X)}function w7($,Z,J){let[W,Y,j,z,X,Q]=((G)=>{G=Z1(G);let B=u2(G),F=b5(G),K=MV(G),V=R3(G,4),U=b3(G,4);return[B,HV(G),K,V,...E5(U,F)]})(J);return((G,B,F,K,V,U,D,O,L,P)=>{K=o6(K,L,O,1);let M=G(F).getOffsetNanosecondsFor(K);return h7(X$(K,M),P)+v$(E6(M),D)+((I,E)=>E!==1?"["+(E===2?"!":"")+H0(I)+"]":"")(F,U)+p7(B,V)})($,Z.calendar,Z.timeZone,Z.epochNanoseconds,W,Y,j,z,X,Q)}function q7($,Z){let[J,W,Y,j]=((G)=>(G=Z1(G),[u2(G),...x7(G)]))(Z);return z=$.calendar,X=J,Q=j,h7(u5($,Y,W),Q)+p7(z,X);var z,X,Q}function y7($,Z){return J=$.calendar,W=$,Y=I7(Z),b6(W)+p7(J,Y);var J,W,Y}function v7($,Z){return n5($.calendar,o5,$,I7(Z))}function g7($,Z){return n5($.calendar,VF,$,I7(Z))}function m7($,Z){let[J,W,Y]=S5(Z);return j=Y,a5(f7($,W,J)[0],j);var j}function a6($,Z){let[J,W,Y]=S5(Z,3);return W>1&&($={...$,...GF($,W,J)}),((j,z)=>{let{sign:X}=j,Q=X===-1?b0(j):j,{hours:G,minutes:B}=Q,[F,K]=L7(U0(Q,3),r0,Y$);Yj(F);let V=c7(K,z),U=z>=0||!X||V;return(X<0?"-":"")+"P"+dY({Y:R$(Q.years),M:R$(Q.months),W:R$(Q.weeks),D:R$(Q.days)})+(G||B||F||U?"T"+dY({H:R$(G),M:R$(B),S:R$(F,U)+V}):"")})($,Y)}function n5($,Z,J,W){let Y=H0($),j=W>1||W===0&&Y!==q;return W===1?Y===q?Z(J):b6(J):j?b6(J)+r5(Y,W===2):Z(J)}function dY($){let Z=[];for(let J in $){let W=$[J];W&&Z.push(W,J)}return Z.join("")}function h7($,Z){return b6($)+"T"+a5($,Z)}function b6($){return o5($)+"-"+a0($.isoDay)}function o5($){let{isoYear:Z}=$;return(Z<0||Z>9999?t5(Z)+x6(6,Math.abs(Z)):x6(4,Z))+"-"+a0($.isoMonth)}function VF($){return a0($.isoMonth)+"-"+a0($.isoDay)}function a5($,Z){let J=[a0($.isoHour),a0($.isoMinute)];return Z!==-1&&J.push(a0($.isoSecond)+((W,Y,j,z)=>c7(W*U1+Y*d$+j,z))($.isoMillisecond,$.isoMicrosecond,$.isoNanosecond,Z)),J.join(":")}function v$($,Z=0){if(Z===1)return"";let[J,W]=w1(Math.abs($),D4),[Y,j]=w1(W,U4),[z,X]=w1(j,r0);return t5($)+a0(J)+":"+a0(Y)+(z||X?":"+a0(z)+c7(X):"")}function p7($,Z){if(Z!==1){let J=H0($);if(Z>1||Z===0&&J!==q)return r5(J,Z===2)}return""}function r5($,Z){return"["+(Z?"!":"")+"u-ca="+$+"]"}function c7($,Z){let J=x6(9,$);return J=Z===void 0?J.replace(_V,""):J.slice(0,Z),J?"."+J:""}function t5($){return $<0?"-":"+"}function R$($,Z){return $||Z?$.toLocaleString("fullwide",{useGrouping:0}):""}function UF($,Z){let{epochNanoseconds:J}=$,W=(Z.getOffsetNanosecondsFor?Z:Z($.timeZone)).getOffsetNanosecondsFor(J),Y=X$(J,W);return{calendar:$.calendar,...Y,offsetNanoseconds:W}}function e5($,Z){let J=E0(Z,$);return{calendar:Z.calendar,...h0(XX,J),offset:v$(J.offsetNanoseconds),timeZone:Z.timeZone}}function g$($,Z,J,W=0,Y=0,j,z){if(J!==void 0&&W===1&&(W===1||z))return P7(Z,J);let X=$.getPossibleInstantsFor(Z);if(J!==void 0&&W!==3){let Q=((G,B,F,K)=>{let V=C0(B);K&&(F=E6(F));for(let U of G){let D=l0(u0(U,V));if(K&&(D=E6(D)),D===F)return U}})(X,Z,J,j);if(Q!==void 0)return Q;if(W===0)throw RangeError(pF)}return z?C0(Z):m0($,Z,Y,X)}function m0($,Z,J=0,W=$.getPossibleInstantsFor(Z)){if(W.length===1)return W[0];if(J===1)throw RangeError(cF);if(W.length)return W[J===3?1:0];let Y=C0(Z),j=((X,Q)=>{let G=X.getOffsetNanosecondsFor(PZ(Q,-u));return u7(X.getOffsetNanosecondsFor(PZ(Q,u))-G)})($,Y),z=j*(J===2?-1:1);return(W=$.getPossibleInstantsFor(X$(Y,z)))[J===2?0:W.length-1]}function d7($){if(Math.abs($)>=u)throw RangeError(mF);return $}function u7($){if($>u)throw RangeError(hF);return $}function l7($,Z,J){return O0(i0(MZ(Z.epochNanoseconds,((W)=>{if(jj(W))throw RangeError(lF);return U0(W,5)})($?b0(J):J))))}function i7($,Z,J,W,Y,j=Object.create(null)){let z=Z(W.timeZone),X=$(W.calendar);return{...W,...r7(z,X,W,J?b0(Y):Y,j)}}function s7($,Z,J,W,Y=Object.create(null)){let{calendar:j}=J;return z0(t7($(j),J,Z?b0(W):W,Y),j)}function n7($,Z,J,W,Y){let{calendar:j}=J;return X0(r6($(j),J,Z?b0(W):W,Y),j)}function o7($,Z,J,W,Y=Object.create(null)){let j=J.calendar,z=$(j),X=V3(z,J);Z&&(W=Z4(W)),W.sign<0&&(X=z.dateAdd(X,{...M0,months:1}),X=m$(X,-1));let Q=z.dateAdd(X,W,Y);return f$(V3(z,Q),j)}function a7($,Z,J){return J1($j(Z,$?b0(J):J)[0])}function r7($,Z,J,W,Y){let j=U0(W,5),z=J.epochNanoseconds;if(jj(W)){let X=E0(J,$);z=MZ(m0($,{...r6(Z,X,{...W,...g2},Y),...h0(Y1,X)}),j)}else z=MZ(z,j),v(Y);return{epochNanoseconds:i0(z)}}function t7($,Z,J,W){let[Y,j]=$j(Z,J);return v1({...r6($,Z,{...J,...g2,days:J.days+j},W),...Y})}function r6($,Z,J,W){if(J.years||J.months||J.weeks)return $.dateAdd(Z,J,W);v(W);let Y=J.days+U0(J,5)[0];return Y?J$(m$(Z,Y)):Z}function V3($,Z,J=1){return m$(Z,J-$.day(Z))}function $j($,Z){let[J,W]=U0(Z,5),[Y,j]=h6(j$($)+W);return[Y,J+j]}function m$($,Z){return Z?{...$,...p6(S0($)+Z*v0)}:$}function t6($,Z,J){let W=$(J.calendar);return $4(J)?[J,W,Z(J.timeZone)]:[{...J,...t0},W]}function e7($){return $?q5:C0}function e6($){return $?w(r7,$):t7}function $2($){return $?w(OF,$):LF}function $4($){return $&&$.epochNanoseconds}function U3($,Z){return $<=6-($4(Z)?1:0)}function Z2($,Z,J,W,Y,j,z){let X=$(Z1(z).relativeTo),Q=Math.max(k$(Y),k$(j));if(U3(Q,X))return a(SZ(((D,O,L,P)=>{let M=MZ(U0(D),U0(O),P?-1:1);if(!Number.isFinite(M[0]))throw RangeError(F4);return{...M0,...EZ(M,L)}})(Y,j,Q,W)));if(!X)throw RangeError(V4);W&&(j=b0(j));let[G,B,F]=t6(Z,J,X),K=e6(F),V=$2(F),U=K(B,G,Y);return a(V(B,G,K(B,U,j),Q))}function Zj($,Z,J,W,Y){let j=k$(W),[z,X,Q,G,B]=((S,R,f)=>{S=S7(S,k6);let N=d2(S),_=f(S[GX]),x=C7(S),I1=R3(S,7),k0=b3(S);if(N===void 0&&k0===void 0)throw RangeError(iF);return k0==null&&(k0=0),N==null&&(N=Math.max(k0,R)),R5(N,k0),x=A7(x,k0,1),[N,k0,x,I1,_]})(Y,j,$),F=Math.max(j,z);if(!$4(B)&&F<=6)return a(SZ(((S,R,f,N,_)=>{let x=n6(U0(S),f,N,_);return{...M0,...EZ(x,R)}})(W,z,X,Q,G)));if(!B)throw RangeError(V4);let[K,V,U]=t6(Z,J,B),D=e7(U),O=e6(U),L=$2(U),P=O(V,K,W),M=L(V,K,P,z),I=W.sign,E=Q$(M);if(I&&E&&I!==E)throw RangeError(A3);return E&&(M=s6(M,D(P),z,X,Q,G,V,K,D,O)),a(M)}function Jj($){return $.sign===-1?Z4($):$}function Z4($){return a(b0($))}function b0($){let Z={};for(let J of h)Z[J]=-1*$[J]||0;return Z}function Wj($){return!$.sign}function Q$($,Z=h){let J=0;for(let W of Z){let Y=Math.sign($[W]);if(Y){if(J&&J!==Y)throw RangeError(uF);J=Y}}return J}function SZ($){for(let Z of $V)o0(Z,$[Z],-aY,aY,1);return Yj(l0(U0($),r0)),$}function Yj($){if(!Number.isSafeInteger($))throw RangeError(dF)}function U0($,Z=6){return j5($,Z,h)}function EZ($,Z=6){let[J,W]=$,Y=y6(W,Z,h);if(Y[h[Z]]+=J*(u/V1[Z]),!Number.isFinite(Y[h[Z]]))throw RangeError(F4);return Y}function J4($,Z=5){return y6($,Z,h)}function jj($){return Boolean(Q$($,jX))}function k$($){let Z=9;for(;Z>0&&!$[h[Z]];Z--);return Z}function DF($,Z){return[$,Z]}function uY($){let Z=Math.floor($/_6)*_6;return[Z,Z+_6]}function zj($){let Z=G$($=C6($));if(!Z)throw RangeError(y0($));let J;if(Z.m)J=0;else{if(!Z.offset)throw RangeError(y0($));J=bZ(Z.offset)}return Z.timeZone&&j2(Z.timeZone,1),O0(P7(c6(Z),J))}function Xj($){let Z=G$(e($));if(!Z)throw RangeError(y0($));if(Z.timeZone)return Oj(Z,Z.offset?bZ(Z.offset):void 0);if(Z.m)throw RangeError(y0($));return Hj(Z)}function Qj($,Z){let J=G$(e($));if(!J||!J.timeZone)throw RangeError(y0($));let{offset:W}=J,Y=W?bZ(W):void 0,[,j,z]=T3(Z);return Oj(J,Y,j,z)}function bZ($){let Z=j2($);if(Z===void 0)throw RangeError(y0($));return Z}function Gj($){let Z=G$(e($));if(!Z||Z.m)throw RangeError(y0($));return z0(Lj(Z))}function W4($){let Z=G$(e($));if(!Z||Z.m)throw RangeError(y0($));return X0(Z.p?Lj(Z):Hj(Z))}function Kj($,Z){let J=W2(e(Z));if(J)return J2(J),f$(M7(q$(J)));let W=W4(Z);return f$(V3($(W.calendar),W))}function J2($){if($.calendar!==q)throw RangeError(q1($.calendar))}function Bj($,Z){let J=Y2(e(Z));if(J)return J2(J),S6(q$(J));let W=W4(Z),{calendar:Y}=W,j=$(Y),[z,X,Q]=j.h(W),[G,B]=j.I(z,X),[F,K]=j.N(G,B,Q);return S6(J$(j.P(F,K,Q)),Y)}function Fj($){let Z,J=((W)=>{let Y=SV.exec(W);return Y?(Y4(Y[10]),Tj(Y)):void 0})(e($));if(!J){if(J=G$($),!J)throw RangeError(y0($));if(!J.p)throw RangeError(y0($));if(J.m)throw RangeError(q1("Z"));J2(J)}if((Z=W2($))&&pY(Z))throw RangeError(y0($));if((Z=Y2($))&&pY(Z))throw RangeError(y0($));return J1(d6(J,1))}function Vj($){let Z=((J)=>{let W=RV.exec(J);return W?((Y)=>{function j(B,F,K){let V=0,U=0;if(K&&([V,Q]=w1(Q,V1[K])),B!==void 0){if(X)throw RangeError(q1(B));U=((D)=>{let O=parseInt(D);if(!Number.isFinite(O))throw RangeError(q1(D));return O})(B),z=1,F&&(Q=z2(F)*(V1[K]/r0),X=1)}return V+U}let z=0,X=0,Q=0,G={...IZ(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)]),...y6(Q,2,h)};if(!z)throw RangeError(gz(h));return X2(Y[1])<0&&(G=b0(G)),G})(W):void 0})(e($));if(!Z)throw RangeError(y0($));return a(SZ(Z))}function Uj($){let Z=G$($)||W2($)||Y2($);return Z?Z.calendar:$}function Dj($){let Z=G$($);return Z&&(Z.timeZone||Z.m&&i$||Z.offset)||$}function Oj($,Z,J=0,W=0){let Y=j4($.timeZone),j=N4(Y);return P0(g$(j,c6($),Z,J,W,!j.v,$.m),Y,_3($.calendar))}function Lj($){return Mj(v1(c6($)))}function Hj($){return Mj(J$(q$($)))}function Mj($){return{...$,calendar:_3($.calendar)}}function G$($){let Z=AV.exec($);return Z?((J)=>{let W=J[10],Y=(W||"").toUpperCase()==="Z";return{isoYear:Pj(J),isoMonth:parseInt(J[4]),isoDay:parseInt(J[5]),...Tj(J.slice(5)),...Y4(J[16]),p:Boolean(J[6]),m:Y,offset:Y?void 0:W}})(Z):void 0}function W2($){let Z=xV.exec($);return Z?((J)=>({isoYear:Pj(J),isoMonth:parseInt(J[4]),isoDay:1,...Y4(J[5])}))(Z):void 0}function Y2($){let Z=CV.exec($);return Z?((J)=>({isoYear:_Z,isoMonth:parseInt(J[1]),isoDay:parseInt(J[2]),...Y4(J[3])}))(Z):void 0}function j2($,Z){let J=EV.exec($);return J?((W,Y)=>{let j=W[4]||W[5];if(Y&&j)throw RangeError(q1(j));return d7((HZ(W[2])*D4+HZ(W[3])*U4+HZ(W[4])*r0+z2(W[5]||""))*X2(W[1]))})(J,Z):void 0}function Pj($){let Z=X2($[1]),J=parseInt($[2]||$[3]);if(Z<0&&!J)throw RangeError(q1(-0));return Z*J}function Tj($){let Z=HZ($[3]);return{...h6(z2($[4]||""))[0],isoHour:HZ($[1]),isoMinute:HZ($[2]),isoSecond:Z===60?59:Z}}function Y4($){let Z,J,W=[];if($.replace(bV,(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(q1(Y))}else{if(J)throw RangeError(q1(Y));J=Q}return""}),W.length>1&&Z)throw RangeError(q1($));return{timeZone:J,calendar:W[0]||q}}function z2($){return parseInt($.padEnd(9,"0"))}function RZ($){return new RegExp(`^${$}$`,"i")}function X2($){return $&&$!=="+"?-1:1}function HZ($){return $===void 0?0:parseInt($)}function Nj($){return j4(e($))}function j4($){let Z=Q2($);return typeof Z=="number"?v$(Z):Z?((J)=>{if(kV.test(J))throw RangeError(gF);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?mY(j).replace(/island|noronha|murdo|rivadavia|urville/,mY):j)).join("/")})($):i$}function lY($){let Z=Q2($);return typeof Z=="number"?Z:Z?Z.resolvedOptions().timeZone:i$}function Q2($){let Z=j2($=$.toUpperCase(),1);return Z!==void 0?Z:$!==i$?fV($):void 0}function G2($,Z){return A0($.epochNanoseconds,Z.epochNanoseconds)}function K2($,Z){return A0($.epochNanoseconds,Z.epochNanoseconds)}function _j($,Z,J,W,Y,j){let z=$(Z1(j).relativeTo),X=Math.max(k$(W),k$(Y));if(W5(h,W,Y))return 0;if(U3(X,z))return A0(U0(W),U0(Y));if(!z)throw RangeError(V4);let[Q,G,B]=t6(Z,J,z),F=e7(B),K=e6(B);return A0(F(K(G,Q,W)),F(K(G,Q,Y)))}function B2($,Z){return h$($,Z)||z4($,Z)}function h$($,Z){return Z$(S0($),S0(Z))}function z4($,Z){return Z$(j$($),j$(Z))}function Ij($,Z){return!G2($,Z)}function xj($,Z){return!K2($,Z)&&!!X4($.timeZone,Z.timeZone)&&AZ($.calendar,Z.calendar)}function Cj($,Z){return!B2($,Z)&&AZ($.calendar,Z.calendar)}function Aj($,Z){return!h$($,Z)&&AZ($.calendar,Z.calendar)}function Sj($,Z){return!h$($,Z)&&AZ($.calendar,Z.calendar)}function Ej($,Z){return!h$($,Z)&&AZ($.calendar,Z.calendar)}function bj($,Z){return!z4($,Z)}function X4($,Z){if($===Z)return 1;let J=H0($),W=H0(Z);if(J===W)return 1;try{return lY(J)===lY(W)}catch(Y){}}function F2($,Z,J,W){let Y=CZ($,j0(W),3,5),j=Q4(Z.epochNanoseconds,J.epochNanoseconds,...Y);return a($?b0(j):j)}function V2($,Z,J,W,Y,j){let z=K4(W.calendar,Y.calendar),X=j0(j),[Q,G,B,F]=CZ(J,X,5),K=W.epochNanoseconds,V=Y.epochNanoseconds,U=A0(V,K),D;if(U)if(Q<6)D=Q4(K,V,Q,G,B,F);else{let O=Z(((P,M)=>{if(!X4(P,M))throw RangeError(uz);return P})(W.timeZone,Y.timeZone)),L=$(z);D=fj(L,O,W,Y,U,Q,X),D=s6(D,V,Q,G,B,F,L,W,q5,w(r7,O))}else D=M0;return a(J?b0(D):D)}function U2($,Z,J,W,Y){let j=K4(J.calendar,W.calendar),z=j0(Y),[X,Q,G,B]=CZ(Z,z,6),F=C0(J),K=C0(W),V=A0(K,F),U;if(V)if(X<=6)U=Q4(F,K,X,Q,G,B);else{let D=$(j);U=kj(D,J,W,V,X,z),U=s6(U,K,X,Q,G,B,D,J,C0,t7)}else U=M0;return a(Z?b0(U):U)}function D2($,Z,J,W,Y){let j=K4(J.calendar,W.calendar),z=j0(Y);return Rj(Z,()=>$(j),J,W,...CZ(Z,z,6,9,6),z)}function O2($,Z,J,W,Y){let j=K4(J.calendar,W.calendar),z=j0(Y),X=CZ(Z,z,9,9,8),Q=$(j);return Rj(Z,()=>Q,V3(Q,J),V3(Q,W),...X,z)}function Rj($,Z,J,W,Y,j,z,X,Q){let G=C0(J),B=C0(W),F;if(A0(B,G))if(Y===6)F=Q4(G,B,Y,j,z,X);else{let K=Z();F=K.dateUntil(J,W,Y,Q),j===6&&z===1||(F=s6(F,B,Y,j,z,X,K,J,C0,r6))}else F=M0;return a($?b0(F):F)}function L2($,Z,J,W){let Y=j0(W),[j,z,X,Q]=CZ($,Y,5,5),G=z$(H2(Z,J),N3(z,X),Q),B={...M0,...J4(G,j)};return a($?b0(B):B)}function OF($,Z,J,W,Y,j){let z=A0(W.epochNanoseconds,J.epochNanoseconds);return z?Y<6?wj(J.epochNanoseconds,W.epochNanoseconds,Y):fj(Z,$,J,W,z,Y,j):M0}function LF($,Z,J,W,Y){let j=C0(Z),z=C0(J),X=A0(z,j);return X?W<=6?wj(j,z,W):kj($,Z,J,X,W,Y):M0}function fj($,Z,J,W,Y,j,z){let[X,Q,G]=((K,V,U,D)=>{function O(){return R={...m$(M,E++*-D),...P},f=m0(K,R),A0(I,f)===-D}let L=E0(V,K),P=h0(Y1,L),M=E0(U,K),I=U.epochNanoseconds,E=0,S=H2(L,M),R,f;if(Math.sign(S)===-D&&E++,O()&&(D===-1||O()))throw RangeError(A3);let N=l0(u0(f,I));return[L,R,N]})(Z,J,W,Y);var B,F;return{...j===6?(B=X,F=Q,{...M0,days:qj(B,F)}):$.dateUntil(X,Q,j,z),...J4(G)}}function kj($,Z,J,W,Y,j){let[z,X,Q]=((G,B,F)=>{let K=B,V=H2(G,B);return Math.sign(V)===-F&&(K=m$(B,-F),V+=u*F),[G,K,V]})(Z,J,W);return{...$.dateUntil(z,X,Y,j),...J4(Q)}}function Q4($,Z,J,W,Y,j){return{...M0,...EZ(n6(u0($,Z),W,Y,j),J)}}function wj($,Z,J){return{...M0,...EZ(u0($,Z),J)}}function qj($,Z){return G4(S0($),S0(Z))}function G4($,Z){return Math.trunc((Z-$)/v0)}function H2($,Z){return j$(Z)-j$($)}function K4($,Z){if(!AZ($,Z))throw RangeError(k2);return $}function HF($){function Z(Y){return((j,z)=>({...yj(j,z),F:j.month,day:parseInt(j.day)}))(H7(J,Y),W)}let J=n2($),W=R6($);return{id:$,O:MF(Z),B:PF(Z)}}function MF($){return g0((Z)=>{let J=S0(Z);return $(J)},WeakMap)}function PF($){let Z=$(0).year-zV;return g0((J)=>{let W,Y=xZ(J-Z),j=[],z=[];do Y+=400*v0;while((W=$(Y)).year<=J);do Y+=(1-W.day)*v0,W.year===J&&(j.push(Y),z.push(W.F)),Y-=v0;while((W=$(Y)).year>=J);return{k:j.reverse(),C:sz(z.reverse())}})}function yj($,Z){let J,W,Y=vj($);if($.era){let j=JX[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=cj(W,j[J]||0))}return{era:J,eraYear:W,year:Y}}function vj($){return parseInt($.relatedYear||$.year)}function J7($){let{year:Z,F:J,day:W}=this.O($),{C:Y}=this.B(Z);return[Z,Y[J]+1,W]}function D3($,Z=1,J=1){return this.B($).k[Z-1]+(J-1)*v0}function P6($){let Z=sY(this,$),J=sY(this,$-1),W=Z.length;if(W>J.length){let Y=dj(this);if(Y<0)return-Y;for(let j=0;j<W;j++)if(Z[j]!==J[j])return j+1}}function T6($){return G4(D3.call(this,$),D3.call(this,$+1))}function iY($,Z){let{k:J}=this.B($),W=Z+1,Y=J;return W>J.length&&(W=1,Y=this.B($+1).k),G4(J[Z-1],Y[W-1])}function N6($){return this.B($).k.length}function sY($,Z){return Object.keys($.B(Z).C)}function gj($){return _3(e($))}function _3($){if(($=$.toLowerCase())!==q&&$!==L4&&R6($)!==R6(n2($).resolvedOptions().calendar))throw RangeError(vF($));return $}function R6($){return $==="islamicc"&&($="islamic"),$.split("-")[0]}function mj($){return this.R($)[0]}function hj($){return this.R($)[1]}function M2($){let[Z]=this.h($);return G4(this.q(Z),S0($))+1}function pj($){let Z=qV.exec($);if(!Z)throw RangeError(qF($));return[parseInt(Z[1]),Boolean(Z[2])]}function f6($,Z,J){return $+(Z||J&&$>=J?1:0)}function W7($,Z){return $-(Z&&$>=Z?1:0)}function cj($,Z){return(Z+$)*(Math.sign(Z)||1)||0}function Y7($){return JX[uj($)]}function dj($){return rF[uj($)]}function uj($){return R6($.id||q)}function lj($,Z,J,W){let Y=K$(J,W,W1,[],tz);if(Y.timeZone!==void 0){let j=J.dateFromFields(Y),z=p$(Y),X=$(Y.timeZone);return{epochNanoseconds:g$(Z(X),{...j,...z},Y.offset!==void 0?bZ(Y.offset):void 0),timeZone:X}}return{...J.dateFromFields(Y),...t0}}function ij($,Z,J,W,Y,j){let z=K$(J,Y,W1,az,tz),X=$(z.timeZone),[Q,G,B]=T3(j),F=J.dateFromFields(z,l6(j,Q)),K=p$(z,Q);return P0(g$(Z(X),{...F,...K},z.offset!==void 0?bZ(z.offset):void 0,G,B),X,W)}function sj($,Z,J){let W=K$($,Z,W1,[],h1),Y=v(J);return z0(v1({...$.dateFromFields(W,l6(J,Y)),...p$(W,Y)}))}function P2($,Z,J,W=[]){let Y=K$($,Z,W1,W);return $.dateFromFields(Y,J)}function T2($,Z,J,W){let Y=K$($,Z,y2,W);return $.yearMonthFromFields(Y,J)}function N2($,Z,J,W,Y=[]){let j=K$($,J,W1,Y);return Z&&j.month!==void 0&&j.monthCode===void 0&&j.year===void 0&&(j.year=_Z),$.monthDayFromFields(j,W)}function nj($,Z){let J=v(Z);return J1(p$(F1($,z7,[],1),J))}function oj($){let Z=F1($,v2);return a(SZ({...M0,...Z}))}function K$($,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(EF(X));if(X==="constructor"||X==="__proto__")throw RangeError(R2(X));let Q=$[X];if(Q!==void 0)z=1,rY[X]&&(Q=rY[X](Q,X)),Y[X]=Q;else if(J){if(J.includes(X))throw TypeError(b2(X));Y[X]=ZX[X]}j=X}if(W&&!z)throw TypeError(gz(Z));return Y}function p$($,Z){return d6(mV({...ZX,...$}),Z)}function aj($,Z,J,W,Y,j){let z=j0(j),{calendar:X,timeZone:Q}=J;return P0(((G,B,F,K,V)=>{let U=I3(G,F,K,W1,rz,oz),[D,O,L]=T3(V,2);return g$(B,{...G.dateFromFields(U,l6(V,D)),...p$(U,D)},bZ(U.offset),O,L)})($(X),Z(Q),W,Y,z),Q,X)}function rj($,Z,J,W,Y){let j=j0(Y);return z0(((z,X,Q,G)=>{let B=I3(z,X,Q,W1,h1),F=v(G);return v1({...z.dateFromFields(B,l6(G,F)),...p$(B,F)})})($(Z.calendar),J,W,j))}function tj($,Z,J,W,Y){let j=j0(Y);return((z,X,Q,G)=>{let B=I3(z,X,Q,W1);return z.dateFromFields(B,G)})($(Z.calendar),J,W,j)}function ej($,Z,J,W,Y){let j=j0(Y);return f$(((z,X,Q,G)=>{let B=I3(z,X,Q,y2);return z.yearMonthFromFields(B,G)})($(Z.calendar),J,W,j))}function $z($,Z,J,W,Y){let j=j0(Y);return((z,X,Q,G)=>{let B=I3(z,X,Q,W1);return z.monthDayFromFields(B,G)})($(Z.calendar),J,W,j)}function Zz($,Z,J){return J1(((W,Y,j)=>{let z=v(j);return p$({...h0(z7,W),...F1(Y,z7)},z)})($,Z,J))}function Jz($,Z){return a((J=$,W=Z,SZ({...J,...F1(W,v2)})));var J,W}function I3($,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 _2($,Z){let J=K$($,Z,$X);return $.monthDayFromFields(J)}function I2($,Z,J){let W=K$($,Z,ez);return $.yearMonthFromFields(W,J)}function Wz($,Z,J,W,Y){Z=h0(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 r8($,Z){let{era:J,eraYear:W,year:Y}=Z,j=Y7($);if(J!==void 0||W!==void 0){if(J===void 0||W===void 0)throw TypeError(RF);if(!j)throw RangeError(bF);let z=j[J];if(z===void 0)throw RangeError(kF(J));let X=cj(W,z);if(Y!==void 0&&Y!==X)throw RangeError(fF);Y=X}else if(Y===void 0)throw TypeError(wF(j));return Y}function t8($,Z,J,W){let{month:Y,monthCode:j}=Z;if(j!==void 0){let z=((X,Q,G,B)=>{let F=X.U(G),[K,V]=pj(Q),U=f6(K,V,F);if(V){let D=dj(X);if(D===void 0)throw RangeError(K3);if(D>0){if(U>D)throw RangeError(K3);if(F===void 0){if(B===1)throw RangeError(K3);U--}}else{if(U!==-D)throw RangeError(K3);if(F===void 0&&B===1)throw RangeError(K3)}}return U})($,j,J,W);if(Y!==void 0&&Y!==z)throw RangeError(cz);Y=z,W=1}else if(Y===void 0)throw TypeError(yF);return o0("month",Y,1,$.L(J),W)}function nY($,Z,J,W,Y){return q0(Z,"day",1,$.j(W,J),Y)}function e8($,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 Yz($){return O0(i0(m6(g6($))))}function jz($,Z,J,W,Y=q){return P0(i0(m6(g6(J))),Z(W),$(Y))}function zz($,Z,J,W,Y=0,j=0,z=0,X=0,Q=0,G=0,B=q){return z0(v1(c6(e0(x0,IZ(H4,[Z,J,W,Y,j,z,X,Q,G])))),$(B))}function Xz($,Z,J,W,Y=q){return X0(J$(q$(e0(x0,{isoYear:Z,isoMonth:J,isoDay:W}))),$(Y))}function Qz($,Z,J,W=q,Y=1){let j=x0(Z),z=x0(J),X=$(W);return f$(M7(q$({isoYear:j,isoMonth:z,isoDay:x0(Y)})),X)}function Gz($,Z,J,W=q,Y=_Z){let j=x0(Z),z=x0(J),X=$(W);return S6(J$(q$({isoYear:x0(Y),isoMonth:j,isoDay:z})),X)}function Kz($=0,Z=0,J=0,W=0,Y=0,j=0){return J1(d6(e0(x0,IZ(Y1,[$,Z,J,W,Y,j])),1))}function Bz($=0,Z=0,J=0,W=0,Y=0,j=0,z=0,X=0,Q=0,G=0){return a(SZ(e0(D5,IZ(h,[$,Z,J,W,Y,j,z,X,Q,G]))))}function x2($,Z,J=q){return P0($.epochNanoseconds,Z,J)}function Fz($){return O0($.epochNanoseconds)}function C2($,Z){return z0(E0(Z,$))}function A2($,Z){return X0(E0(Z,$))}function Vz($,Z,J){return I2($(Z.calendar),J)}function Uz($,Z,J){return _2($(Z.calendar),J)}function S2($,Z){return J1(E0(Z,$))}function Dz($,Z,J,W){let Y=((j,z,X,Q)=>{let G=_7(Q);return m0(j(z),X,G)})($,J,Z,W);return P0(i0(Y),J,Z.calendar)}function Oz($,Z,J){let W=$(Z.calendar);return f$({...Z,...I2(W,J)})}function Lz($,Z,J){return _2($(Z.calendar),J)}function Hz($,Z,J,W,Y){let j=$(Y.timeZone),z=Y.plainTime,X=z!==void 0?Z(z):t0;return P0(m0(J(j),{...W,...X}),j,W.calendar)}function Mz($,Z=t0){return z0(v1({...$,...Z}))}function Pz($,Z,J){return I2($(Z.calendar),J)}function Tz($,Z,J){return _2($(Z.calendar),J)}function Nz($,Z,J,W){return((Y,j,z)=>Wz(Y,j,ez,y1(z),E3))($(Z.calendar),J,W)}function _z($,Z,J,W){return((Y,j,z)=>Wz(Y,j,$X,y1(z),O4))($(Z.calendar),J,W)}function Iz($,Z,J,W,Y){let j=y1(Y),z=Z(j.plainDate),X=$(j.timeZone);return P0(m0(J(X),{...z,...W}),X,z.calendar)}function xz($,Z){return z0(v1({...$,...Z}))}function Cz($){return O0(i0(TZ($,r0)))}function Az($){return O0(i0(TZ($,U1)))}function Sz($){return O0(i0(m6(g6($),d$)))}function Ez($){return O0(i0(m6(g6($))))}function bz($,Z,J=t0){let W=Z.timeZone,Y=$(W),j={...E0(Z,Y),...J};return P0(g$(Y,j,j.offsetNanoseconds,2),W,Z.calendar)}function Rz($,Z,J){let W=Z.timeZone,Y=$(W),j={...E0(Z,Y),...J},z=qz(Z.calendar,J.calendar);return P0(g$(Y,j,j.offsetNanoseconds,2),W,z)}function fz($,Z=t0){return z0({...$,...Z})}function kz($,Z){return z0({...$,...Z},qz($.calendar,Z.calendar))}function B4($,Z){return{...$,calendar:Z}}function wz($,Z){return{...$,timeZone:Z}}function qz($,Z){if($===Z)return $;let J=H0($),W=H0(Z);if(J===W||J===q)return Z;if(W===q)return $;throw RangeError(k2)}function TF($,Z){return(J)=>J===q?$:J===L4||J===NZ?Object.assign(Object.create($),{id:J}):Object.assign(Object.create(Z),wV(J))}function c$($,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=K7(W,Y),$)||Object.assign(Y,Z),J&&(Y.timeZone=i$,["full","long"].includes(Y.timeStyle)&&(Y.timeStyle="medium")),Y)}function g1($,Z=E2){let[J,,,W]=$;return(Y,j=ZU,...z)=>{let X=Z(W&&W(...z),Y,j,J),Q=X.resolvedOptions();return[X,...NF($,Q,z)]}}function E2($,Z,J,W){if(J=W(J),$){if(J.timeZone!==void 0)throw TypeError(nF);J.timeZone=$}return new B$(Z,J)}function NF($,Z,J){let[,W,Y]=$;return J.map((j)=>(j.calendar&&((z,X,Q)=>{if((Q||z!==q)&&z!==X)throw RangeError(k2)})(H0(j.calendar),Z.calendar,Y),W(j,Z)))}function fZ($){let Z=x3();return X$(Z,$.getOffsetNanosecondsFor(Z))}function x3(){return TZ(Date.now(),U1)}function m1(){return eY||(eY=new B$().resolvedOptions().timeZone)}var _F=($,Z)=>`Non-integer ${$}: ${Z}`,IF=($,Z)=>`Non-positive ${$}: ${Z}`,xF=($,Z)=>`Non-finite ${$}: ${Z}`,CF=($)=>`Cannot convert bigint to ${$}`,AF=($)=>`Invalid bigint: ${$}`,SF="Cannot convert Symbol to string",yz="Invalid object",vz=($,Z,J,W,Y)=>Y?vz($,Y[Z],Y[J],Y[W]):C3($,Z)+`; must be between ${J}-${W}`,C3=($,Z)=>`Invalid ${$}: ${Z}`,b2=($)=>`Missing ${$}`,R2=($)=>`Invalid field ${$}`,EF=($)=>`Duplicate field ${$}`,gz=($)=>"No valid fields: "+$.join(),mz="Invalid bag",hz=($,Z,J)=>C3($,Z)+"; must be "+Object.keys(J).join(),pz="Cannot use valueOf",f2="Invalid calling context",bF="Forbidden era/eraYear",RF="Mismatching era/eraYear",fF="Mismatching year/eraYear",kF=($)=>`Invalid era: ${$}`,wF=($)=>"Missing year"+($?"/era/eraYear":""),qF=($)=>`Invalid monthCode: ${$}`,cz="Mismatching month/monthCode",yF="Missing month/monthCode",oY="Cannot guess year",K3="Invalid leap month",dz="Invalid protocol",A3="Invalid protocol results",k2="Mismatching Calendars",vF=($)=>`Invalid Calendar: ${$}`,uz="Mismatching TimeZones",gF="Forbidden ICU TimeZone",mF="Out-of-bounds offset",hF="Out-of-bounds TimeZone gap",pF="Invalid TimeZone offset",cF="Ambiguous offset",F4="Out-of-bounds date",dF="Out-of-bounds duration",uF="Cannot mix duration signs",V4="Missing relativeTo",lF="Cannot use large units",iF="Required smallestUnit or largestUnit",sF="smallestUnit > largestUnit",y0=($)=>`Cannot parse: ${$}`,q1=($)=>`Invalid substring: ${$}`,lz=($)=>`Cannot format ${$}`,iz="Mismatching types for formatting",nF="Cannot specify TimeZone",sz=w(H3,($,Z)=>Z),kZ=w(H3,($,Z,J)=>J),a0=w(x6,2),j7={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},S3=Object.keys(j7),v0=86400000,nz=1000,d$=1000,U1=1e6,r0=1e9,U4=60000000000,D4=3600000000000,u=86400000000000,V1=[1,d$,U1,r0,U4,D4,u],h1=S3.slice(0,6),z7=M3(h1),oz=["offset"],az=["timeZone"],rz=h1.concat(oz),tz=rz.concat(az),X7=["era","eraYear"],oF=X7.concat(["year"]),O4=["year"],w2=["monthCode"],q2=["month"].concat(w2),E3=["day"],y2=q2.concat(O4),ez=w2.concat(O4),W1=E3.concat(y2),aF=E3.concat(q2),$X=E3.concat(w2),ZX=kZ(h1,0),q="iso8601",L4="gregory",NZ="japanese",JX={[L4]:{bce:-1,ce:0},[NZ]:{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}},rF={chinese:13,dangi:13,hebrew:-6},e=w(v6,"string"),WX=w(v6,"boolean"),tF=w(v6,"number"),YX=w(v6,"function"),h=S3.map(($)=>$+"s"),v2=M3(h),eF=h.slice(0,6),jX=h.slice(6),$V=jX.slice(1),ZV=sz(h),M0=kZ(h,0),g2=kZ(eF,0),m2=w(Y5,h),Y1=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],h2=["isoDay","isoMonth","isoYear"],H4=Y1.concat(h2),p2=M3(h2),zX=M3(Y1),XX=M3(H4),t0=kZ(zX,0),JV=w(Y5,H4),B$=Intl.DateTimeFormat,QX="en-GB",c2=1e8,WV=c2*v0,YV=[c2,0],jV=[-c2,0],O3=275760,L3=-271821,zV=1970,_Z=1972,k1=12,XV=xZ(1868,9,8),QV=g0(QF,WeakMap),k6="smallestUnit",Q7="unit",F3="roundingIncrement",$7="fractionalSecondDigits",GX="relativeTo",KX={constrain:0,reject:1},GV=Object.keys(KX),KV={compatible:0,reject:1,earlier:2,later:3},BV={reject:0,use:1,prefer:2,ignore:3},FV={auto:0,never:1,critical:2,always:3},VV={auto:0,never:1,critical:2},UV={auto:0,never:1},DV={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},b3=w(E7,k6),d2=w(E7,"largestUnit"),OV=w(E7,Q7),BX=w(y$,"overflow",KX),FX=w(y$,"disambiguation",KV),LV=w(y$,"offset",BV),u2=w(y$,"calendarName",FV),HV=w(y$,"timeZoneName",VV),MV=w(y$,"offset",UV),R3=w(y$,"roundingMode",DV),wZ="PlainYearMonth",qZ="PlainMonthDay",u$="PlainDate",l$="PlainDateTime",M4="PlainTime",p1="ZonedDateTime",P4="Instant",T4="Duration",PV=[Math.floor,($)=>M6($)?Math.floor($):Math.round($),Math.ceil,($)=>M6($)?Math.ceil($):Math.round($),Math.trunc,($)=>M6($)?Math.trunc($)||0:Math.round($),($)=>$<0?Math.floor($):Math.ceil($),($)=>Math.sign($)*Math.round(Math.abs($))||0,($)=>M6($)?($=Math.trunc($)||0)+$%2:Math.round($)],i$="UTC",_6=5184000,TV=A6(1847),NV=A6(new Date().getUTCFullYear()+10),_V=/0+$/,E0=g0(UF,WeakMap),aY=4294967295,N4=g0(($)=>{let Z=Q2($);return typeof Z=="object"?new UX(Z):new VX(Z||0)});class VX{constructor($){this.v=$}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor($){return[P7($,this.v)]}l(){}}class UX{constructor($){this.$=((Z)=>{function J(Q){let G=Z7(Q,z,X),[B,F]=uY(G),K=Y(B),V=Y(F);return K===V?K:W(j(B,F),K,V,Q)}function W(Q,G,B,F){let K,V;for(;(F===void 0||(K=F<Q[0]?G:F>=Q[1]?B:void 0)===void 0)&&(V=Q[1]-Q[0]);){let U=Q[0]+Math.floor(V/2);Z(U)===B?Q[1]=U:Q[0]=U+1}return K}let Y=g0(Z),j=g0(DF),z=TV,X=NV;return{G(Q){let G=J(Q-86400),B=J(Q+86400),F=Q-G,K=Q-B;if(G===B)return[F];let V=J(F);return V===J(K)?[Q-V]:G>B?[F,K]:[]},V:J,l(Q,G){let B=Z7(Q,z,X),[F,K]=uY(B),V=_6*G,U=G<0?()=>K>z||(z=B,0):()=>F<X||(X=B,0);for(;U();){let D=Y(F),O=Y(K);if(D!==O){let L=j(F,K);W(L,D,O);let P=L[0];if((Z$(P,Q)||1)===G)return P}F+=V,K+=V}}}})(((Z)=>(J)=>{let W=H7(Z,J*nz);return A6(vj(W),parseInt(W.month),parseInt(W.day),parseInt(W.hour),parseInt(W.minute),parseInt(W.second))-J})($))}getOffsetNanosecondsFor($){return this.$.V(H5($))*r0}getPossibleInstantsFor($){let[Z,J]=[A6((W=$).isoYear,W.isoMonth,W.isoDay,W.isoHour,W.isoMinute,W.isoSecond),W.isoMillisecond*U1+W.isoMicrosecond*d$+W.isoNanosecond];var W;return this.$.G(Z).map((Y)=>i0(PZ(TZ(Y,r0),J)))}l($,Z){let[J,W]=M5($),Y=this.$.l(J+(Z>0||W?1:0),Z);if(Y!==void 0)return TZ(Y,r0)}}var l2="([+\u2212-])",I6="(?:[.,](\\d{1,9}))?",DX=`(?:(?:${l2}(\\d{6}))|(\\d{4}))-?(\\d{2})`,i2="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+I6+")?)?",s2=l2+i2,IV=DX+"-?(\\d{2})(?:[T ]"+i2+"(Z|"+s2+")?)?",OX="\\[(!?)([^\\]]*)\\]",_4=`((?:${OX}){0,9})`,xV=RZ(DX+_4),CV=RZ("(?:--)?(\\d{2})-?(\\d{2})"+_4),AV=RZ(IV+_4),SV=RZ("T?"+i2+"(?:"+s2+")?"+_4),EV=RZ(s2),bV=new RegExp(OX,"g"),RV=RZ(`${l2}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${I6}H)?(?:(\\d+)${I6}M)?(?:(\\d+)${I6}S)?)?`),fV=g0(($)=>new B$(QX,{timeZone:$,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),kV=/^(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$/,wV=g0(HF),n2=g0(($)=>new B$(QX,{calendar:$,timeZone:i$,era:"short",year:"numeric",month:"short",day:"numeric"})),qV=/^M(\d{2})(L?)$/,yV={era:C6,eraYear:x0,year:x0,month:hY,monthCode:C6,day:hY},vV=kZ(h1,x0),gV=kZ(h,D5),rY=Object.assign({},yV,vV,gV,{offset:C6}),mV=w(XF,h1,Y1),tY={dateAdd($,Z,J){let W=v(J),Y,{years:j,months:z,weeks:X,days:Q}=Z;if(Q+=U0(Z,5)[0],j||z)Y=((G,B,F,K,V)=>{let[U,D,O]=G.h(B);if(F){let[L,P]=G.I(U,D);U+=F,D=f6(L,P,G.U(U)),D=o0("month",D,1,G.L(U),V)}return K&&([U,D]=G._(U,D,K)),O=o0("day",O,1,G.j(U,D),V),G.q(U,D,O)})(this,$,j,z,W);else{if(!X&&!Q)return $;Y=S0($)}return Y+=(7*X+Q)*v0,J$(p6(Y))},dateUntil($,Z,J){if(J<=7){let Q=0,G=qj({...$,...t0},{...Z,...t0});return J===7&&([Q,G]=Y$(G,7)),{...M0,weeks:Q,days:G}}let W=this.h($),Y=this.h(Z),[j,z,X]=((Q,G,B,F,K,V,U)=>{let D=K-G,O=V-B,L=U-F;if(D||O){let P=Math.sign(D||O),M=Q.j(K,V),I=0;if(Math.sign(L)===-P){let E=M;[K,V]=Q._(K,V,-P),D=K-G,O=V-B,M=Q.j(K,V),I=P<0?-E:M}if(L=U-Math.min(F,M)+I,D){let[E,S]=Q.I(G,B),[R,f]=Q.I(K,V);if(O=R-E||Number(f)-Number(S),Math.sign(O)===-P){let N=P<0&&-Q.L(K);D=(K-=P)-G,O=V-f6(E,S,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),{...M0,years:j,months:z,days:X}},dateFromFields($,Z){let J=v(Z),W=r8(this,$),Y=t8(this,$,W,J),j=nY(this,$,Y,W,J);return X0(J$(this.P(W,Y,j)),this.id||q)},yearMonthFromFields($,Z){let J=v(Z),W=r8(this,$),Y=t8(this,$,W,J);return f$(M7(this.P(W,Y,1)),this.id||q)},monthDayFromFields($,Z){let J=v(Z),W=!this.id,{monthCode:Y,year:j,month:z}=$,X,Q,G,B,F;if(Y!==void 0){[X,Q]=pj(Y),F=$5($,"day");let K=this.N(X,Q,F);if(!K)throw RangeError(oY);if([G,B]=K,z!==void 0&&z!==B)throw RangeError(cz);W&&(B=o0("month",B,1,k1,1),F=o0("day",F,1,T7(j!==void 0?j:G,B),J))}else{G=j===void 0&&W?_Z:r8(this,$),B=t8(this,$,G,J),F=nY(this,$,B,G,J);let K=this.U(G);Q=B===K,X=W7(B,K);let V=this.N(X,Q,F);if(!V)throw RangeError(oY);[G,B]=V}return S6(J$(this.P(G,B,F)),this.id||q)},fields($){return Y7(this)&&$.includes("year")?[...$,...X7]:$},mergeFields($,Z){let J=Object.assign(Object.create(null),$);return e8(J,Z,q2),Y7(this)&&(e8(J,Z,oF),this.id===NZ&&e8(J,Z,aF,X7)),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:M2,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"+a0(j)+(z?"L":""))(W,Y)},dayOfWeek:I5,daysInWeek(){return 7}},hV={dayOfYear:M2,h:T5,q:xZ},pV=Object.assign({},hV,{weekOfYear:mj,yearOfWeek:hj,R($){function Z(V){return(7-V<W?7:0)-V}function J(V){let U=_5(K+V),D=V||1,O=Z(B3(Q+U*D,7));return B=(U+(O-G)*D)/7}let W=this.id?1:4,Y=I5($),j=this.dayOfYear($),z=B3(Y-1,7),X=j-1,Q=B3(z-X,7),G=Z(Q),B,F=Math.floor((X-G)/7)+1,K=$.isoYear;return F?F>J(0)&&(F=1,K++):(F=J(-1),K--),[F,K,B]}}),cV={dayOfYear:M2,h:J7,q:D3,weekOfYear:mj,yearOfWeek:hj,R(){return[]}},yZ=TF(Object.assign({},tY,pV,{h:T5,ee($){return this.id===L4?x5($):this.id===NZ?QV($):[]},I:($,Z)=>[Z,0],N($,Z){if(!Z)return[_Z,$]},K:N7,U(){},L:N5,J:($)=>$*k1,j:T7,X:_5,P:($,Z,J)=>({isoYear:$,isoMonth:Z,isoDay:J}),q:xZ,_:($,Z,J)=>($+=q6(J,k1),(Z+=F7(J,k1))<1?($--,Z+=k1):Z>k1&&($++,Z-=k1),[$,Z]),year($){return $.isoYear},month($){return $.isoMonth},day:($)=>$.isoDay}),Object.assign({},tY,cV,{h:J7,ee($){let Z=this.O($);return[Z.era,Z.eraYear]},I($,Z){let J=P6.call(this,$);return[W7(Z,J),J===Z]},N($,Z,J){let[W,Y,j]=J7.call(this,{isoYear:_Z,isoMonth:k1,isoDay:31}),z=P6.call(this,W),X=Y===z;(Z$($,W7(Y,z))||Z$(Number(Z),Number(X))||Z$(J,j))===1&&W--;for(let Q=0;Q<100;Q++){let G=W-Q,B=P6.call(this,G),F=f6($,Z,B);if(Z===(F===B)&&J<=iY.call(this,G,F))return[G,F]}},K($){let Z=T6.call(this,$);return Z>T6.call(this,$-1)&&Z>T6.call(this,$+1)},U:P6,L:N6,J($,Z){let J=Z+$,W=Math.sign($),Y=W<0?-1:0,j=0;for(let z=Z;z!==J;z+=W)j+=N6.call(this,z+Y);return j},j:iY,X:T6,P($,Z,J){return p6(D3.call(this,$,Z,J))},q:D3,_($,Z,J){if(J){if(Z+=J,!Number.isSafeInteger(Z))throw RangeError(F4);if(J<0)for(;Z<1;)Z+=N6.call(this,--$);else{let W;for(;Z>(W=N6.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}})),W$="numeric",vZ=["timeZoneName"],LX={month:W$,day:W$},o2={year:W$,month:W$},a2=Object.assign({},o2,{day:W$}),r2={hour:W$,minute:W$,second:W$},t2=Object.assign({},a2,r2),dV=Object.assign({},t2,{timeZoneName:"short"}),uV=Object.keys(o2),lV=Object.keys(LX),iV=Object.keys(a2),sV=Object.keys(r2),e2=["dateStyle"],nV=uV.concat(e2),oV=lV.concat(e2),$9=iV.concat(e2,["weekday"]),f3=sV.concat(["dayPeriod","timeStyle"]),Z9=$9.concat(f3),aV=Z9.concat(vZ),rV=vZ.concat(f3),tV=vZ.concat($9),eV=vZ.concat(["day","weekday"],f3),$U=vZ.concat(["year","weekday"],f3),ZU={},J9=[c$(Z9,t2),i6],HX=[c$(aV,dV),i6,0,($,Z)=>{let J=H0($.timeZone);if(Z&&H0(Z.timeZone)!==J)throw RangeError(uz);return J}],W9=[c$(Z9,t2,vZ),S0],Y9=[c$($9,a2,rV),S0],j9=[c$(f3,r2,tV),($)=>j$($)/U1],z9=[c$(nV,o2,eV),S0,1],X9=[c$(oV,LX,$U),S0,1],eY;function L1($,Z,J,W,Y){function j(...Q){if(!(this instanceof j))throw TypeError(f2);NX(this,Z(...Q))}function z(Q,G){return Object.defineProperties(function(...B){return Q.call(this,X(this),...B)},G7(G))}function X(Q){let G=_0(Q);if(!G||G.branding!==$)throw TypeError(f2);return G}return Object.defineProperties(j.prototype,{...Z5(e0(z,J)),...w$(e0(z,W)),...w6("Temporal."+$)}),Object.defineProperties(j,{...w$(Y),...G7($)}),[j,(Q)=>{let G=Object.create(j.prototype);return NX(G,Q),G},X]}function xX($){return $=$.concat("id").sort(),(Z)=>{if(!J5(Z,$))throw TypeError(dz);return Z}}function pZ($){if(_0($)||$.calendar!==void 0||$.timeZone!==void 0)throw TypeError(mz);return $}function I4($,Z){let J={};for(let W in $)J[W]=({o:Y},j)=>{let z=_0(j)||{},{branding:X}=z,Q=X===u$||Z.includes(X)?z:f0(j);return Y[W](Q)};return J}function K9($){let Z={};for(let J in $)Z[J]=(W)=>{let{calendar:Y}=W;return(j=Y,typeof j=="string"?yZ(j):(z=j,Object.assign(Object.create(LU),{i:z})))[J](W);var j,z};return Z}function O$(){throw TypeError(pz)}function w3({calendar:$}){return typeof $=="string"?new M9($):$}function MX($,Z){if(Z=j0(Z),D0($)){let W=_0($);if(W&&W.branding===qZ)return v(Z),W;let Y=SX($);return N2(R4(Y||q),!Y,$,Z)}let J=Bj(yZ,$);return v(Z),J}function CX($,Z,J){return W=Z.call($,R0(O0(J))),d7(P3(W));var W}function x4($,Z=fX){let J=Object.keys(Z).sort(),W={};for(let Y of J)W[Y]=w(Z[Y],$,YX($[Y]));return W}function i($,Z){return typeof $=="string"?N4($):x4($,Z)}function G0($){return i($,G9)}function D1($){if(D0($)){let Z=_0($);if(Z)switch(Z.branding){case P4:return Z;case p1:return O0(Z.epochNanoseconds)}}return zj($)}function PX($,Z,J){let W=Z.l(D1(J).epochNanoseconds,$);return W?R0(O0(W)):null}function o($){return D0($)?(_0($)||{}).timeZone||_U($):((Z)=>j4(Dj(e(Z))))($)}function F$($,Z){if(D0($)){let J=_0($)||{};switch(J.branding){case M4:return v(Z),J;case l$:return v(Z),J1(J);case p1:return v(Z),S2(G0,J)}return nj($,Z)}return v(Z),Fj($)}function B9($){return $===void 0?void 0:F$($)}function gZ($,Z){if(Z=j0(Z),D0($)){let W=_0($);return W&&W.branding===wZ?(v(Z),W):T2(E4(q3($)),$,Z)}let J=Kj(yZ,$);return v(Z),J}function V$($,Z){if(Z=j0(Z),D0($)){let W=_0($)||{};switch(W.branding){case l$:return v(Z),W;case u$:return v(Z),z0({...W,...t0});case p1:return v(Z),C2(G0,W)}return sj(b4(q3($)),$,Z)}let J=Gj($);return v(Z),J}function f0($,Z){if(Z=j0(Z),D0($)){let W=_0($)||{};switch(W.branding){case u$:return v(Z),W;case l$:return v(Z),X0(W);case p1:return v(Z),A2(G0,W)}return P2(b4(q3($)),$,Z)}let J=W4($);return v(Z),J}function AX($,Z,J){return $1(Z.call($,Z0(X0(J,$))))}function H1($){return(Z)=>typeof Z=="string"?yZ(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 $0($){if(D0($)){let Z=_0($);return Z&&Z.branding===T4?Z:oj($)}return Vj($)}function k3($){if($!==void 0){if(D0($)){let Z=_0($)||{};switch(Z.branding){case p1:case u$:return Z;case l$:return X0(Z)}let J=q3($);return{...lj(o,i,b4(J),$),calendar:J}}return Xj($)}}function q3($){return SX($)||q}function SX($){let{calendar:Z}=$;if(Z!==void 0)return N0(Z)}function N0($){return D0($)?(_0($)||{}).calendar||gU($):((Z)=>_3(Uj(e(Z))))($)}function mZ($,Z){if(Z=j0(Z),D0($)){let J=_0($);if(J&&J.branding===p1)return T3(Z),J;let W=q3($);return ij(o,i,b4(W),W,$,Z)}return Qj($,Z)}function TX($){return e0((Z)=>(J)=>Z(Q9(J)),$)}function Q9($){return E0($,G0)}function JU(){let $=B$.prototype,Z=Object.getOwnPropertyDescriptors($),J=Object.getOwnPropertyDescriptors(B$),W=function(Y,j={}){if(!(this instanceof W))return new W(Y,j);P9.set(this,((z,X={})=>{let Q=new B$(z,X),G=Q.resolvedOptions(),B=G.locale,F=h0(Object.keys(X),G),K=g0(jU),V=(...U)=>{let D,O=U.map((L,P)=>{let M=_0(L),I=(M||{}).branding;if(P&&D&&D!==I)throw TypeError(iz);return D=I,M});return D?K(D)(B,F,...O):[Q,...U]};return V.u=Q,V})(Y,j))};for(let Y in Z){let j=Z[Y],z=Y.startsWith("format")&&WU(Y);typeof j.value=="function"?j.value=Y==="constructor"?W:z||YU(Y):z&&(j.get=function(){return z.bind(this)})}return J.prototype.value=Object.create($,Z),Object.defineProperties(W,J),W}function WU($){return function(...Z){let J=P9.get(this),[W,...Y]=J(...Z);return W[$](...Y)}}function YU($){return function(...Z){return P9.get(this).u[$](...Z)}}function jU($){let Z=zU[$];if(!Z)throw TypeError(lz($));return g1(Z,g0(E2))}var zU={Instant:J9,PlainDateTime:W9,PlainDate:Y9,PlainTime:j9,PlainYearMonth:z9,PlainMonthDay:X9},XU=g1(J9),QU=g1(HX),GU=g1(W9),KU=g1(Y9),BU=g1(j9),FU=g1(z9),VU=g1(X9),F9={era:G5,eraYear:V7,year:P3,month:$1,daysInMonth:$1,daysInYear:$1,inLeapYear:WX,monthsInYear:$1},A4={monthCode:e},V9={day:$1},EX={dayOfWeek:$1,dayOfYear:$1,weekOfYear:K5,yearOfWeek:V7,daysInWeek:$1},bX=Object.assign({},F9,A4,V9,EX),C4=new WeakMap,_0=C4.get.bind(C4),NX=C4.set.bind(C4),UU={...I4(F9,[wZ]),...I4(EX,[]),...I4(A4,[wZ,qZ]),...I4(V9,[qZ])},U9=K9(bX),DU=K9({...F9,...A4}),OU=K9({...A4,...V9}),y3={calendarId:($)=>H0($.calendar)},LU=e0(($,Z)=>function(J){let{i:W}=this;return $(W[Z](Z0(X0(J,W))))},bX),HU=H3(($)=>(Z)=>Z[$],h.concat("sign")),D9=H3(($,Z)=>(J)=>J[Y1[Z]],h1),RX={epochSeconds:f5,epochMilliseconds:i6,epochMicroseconds:k5,epochNanoseconds:w5},v3=w(K7,new Set(["branding"])),[MU,hZ,PU]=L1(qZ,w(Gz,N0),{...y3,...OU},{getISOFields:v3,getCalendar:w3,with($,Z,J){return hZ($z(qU,$,this,pZ(Z),J))},equals:($,Z)=>Ej($,MX(Z)),toPlainDate($,Z){return Z0(_z(g3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=VU(Z,J,$);return W.format(Y)},toString:g7,toJSON:($)=>g7($),valueOf:O$},{from:($,Z)=>hZ(MX($,Z))}),fX={getOffsetNanosecondsFor:CX,getPossibleInstantsFor($,Z,J){let W=[...Z.call($,T0(z0(J,q)))].map((j)=>NU(j).epochNanoseconds),Y=W.length;return Y>1&&(W.sort(A0),u7(l0(u0(W[0],W[Y-1])))),W}},G9={getOffsetNanosecondsFor:CX},[TU,R0,NU]=L1(P4,Yz,RX,{add:($,Z)=>R0(l7(0,$,$0(Z))),subtract:($,Z)=>R0(l7(1,$,$0(Z))),until:($,Z,J)=>s(F2(0,$,D1(Z),J)),since:($,Z,J)=>s(F2(1,$,D1(Z),J)),round:($,Z)=>R0(v5($,Z)),equals:($,Z)=>Ij($,D1(Z)),toZonedDateTime($,Z){let J=y1(Z);return Q0(x2($,o(J.timeZone),N0(J.calendar)))},toZonedDateTimeISO:($,Z)=>Q0(x2($,o(Z))),toLocaleString($,Z,J){let[W,Y]=XU(Z,J,$);return W.format(Y)},toString:($,Z)=>k7(o,G0,$,Z),toJSON:($)=>k7(o,G0,$),valueOf:O$},{from:($)=>R0(D1($)),fromEpochSeconds:($)=>R0(Cz($)),fromEpochMilliseconds:($)=>R0(Az($)),fromEpochMicroseconds:($)=>R0(Sz($)),fromEpochNanoseconds:($)=>R0(Ez($)),compare:($,Z)=>G2(D1($),D1(Z))}),[S4,lP]=L1("TimeZone",($)=>{let Z=Nj($);return{branding:"TimeZone",id:Z,o:N4(Z)}},{id:($)=>$.id},{getPossibleInstantsFor:({o:$},Z)=>$.getPossibleInstantsFor(V$(Z)).map((J)=>R0(O0(J))),getOffsetNanosecondsFor:({o:$},Z)=>$.getOffsetNanosecondsFor(D1(Z).epochNanoseconds),getOffsetStringFor($,Z){let J=D1(Z).epochNanoseconds,W=x4(this,G9).getOffsetNanosecondsFor(J);return v$(W)},getPlainDateTimeFor($,Z,J=q){let W=D1(Z).epochNanoseconds,Y=x4(this,G9).getOffsetNanosecondsFor(W);return T0(z0(X$(W,Y),N0(J)))},getInstantFor($,Z,J){let W=V$(Z),Y=_7(J),j=x4(this);return R0(O0(m0(j,W,Y)))},getNextTransition:({o:$},Z)=>PX(1,$,Z),getPreviousTransition:({o:$},Z)=>PX(-1,$,Z),equals($,Z){return!!X4(this,o(Z))},toString:($)=>$.id,toJSON:($)=>$.id},{from($){let Z=o($);return typeof Z=="string"?new S4(Z):Z}}),_U=xX(Object.keys(fX)),[IU,U$]=L1(M4,Kz,D9,{getISOFields:v3,with($,Z,J){return U$(Zz(this,pZ(Z),J))},add:($,Z)=>U$(a7(0,$,$0(Z))),subtract:($,Z)=>U$(a7(1,$,$0(Z))),until:($,Z,J)=>s(L2(0,$,F$(Z),J)),since:($,Z,J)=>s(L2(1,$,F$(Z),J)),round:($,Z)=>U$(h5($,Z)),equals:($,Z)=>bj($,F$(Z)),toZonedDateTime:($,Z)=>Q0(Iz(o,f0,i,$,Z)),toPlainDateTime:($,Z)=>T0(xz($,f0(Z))),toLocaleString($,Z,J){let[W,Y]=BU(Z,J,$);return W.format(Y)},toString:m7,toJSON:($)=>m7($),valueOf:O$},{from:($,Z)=>U$(F$($,Z)),compare:($,Z)=>z4(F$($),F$(Z))}),[xU,D$,CU]=L1(wZ,w(Qz,N0),{...y3,...DU},{getISOFields:v3,getCalendar:w3,with($,Z,J){return D$(ej(wU,$,this,pZ(Z),J))},add:($,Z,J)=>D$(o7(_X,0,$,$0(Z),J)),subtract:($,Z,J)=>D$(o7(_X,1,$,$0(Z),J)),until:($,Z,J)=>s(O2(IX,0,$,gZ(Z),J)),since:($,Z,J)=>s(O2(IX,1,$,gZ(Z),J)),equals:($,Z)=>Sj($,gZ(Z)),toPlainDate($,Z){return Z0(Nz(g3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=FU(Z,J,$);return W.format(Y)},toString:v7,toJSON:($)=>v7($),valueOf:O$},{from:($,Z)=>D$(gZ($,Z)),compare:($,Z)=>h$(gZ($),gZ(Z))}),[AU,T0]=L1(l$,w(zz,N0),{...y3,...U9,...D9},{getISOFields:v3,getCalendar:w3,with($,Z,J){return T0(rj(g3,$,this,pZ(Z),J))},withCalendar:($,Z)=>T0(B4($,N0(Z))),withPlainDate:($,Z)=>T0(kz($,f0(Z))),withPlainTime:($,Z)=>T0(fz($,B9(Z))),add:($,Z,J)=>T0(s7(s$,0,$,$0(Z),J)),subtract:($,Z,J)=>T0(s7(s$,1,$,$0(Z),J)),until:($,Z,J)=>s(U2(O1,0,$,V$(Z),J)),since:($,Z,J)=>s(U2(O1,1,$,V$(Z),J)),round:($,Z)=>T0(m5($,Z)),equals:($,Z)=>Cj($,V$(Z)),toZonedDateTime:($,Z,J)=>Q0(Dz(i,$,o(Z),J)),toPlainDate:($)=>Z0(X0($)),toPlainTime:($)=>U$(J1($)),toPlainYearMonth($){return D$(Oz(E4,$,this))},toPlainMonthDay($){return hZ(Lz(R4,$,this))},toLocaleString($,Z,J){let[W,Y]=GU(Z,J,$);return W.format(Y)},toString:q7,toJSON:($)=>q7($),valueOf:O$},{from:($,Z)=>T0(V$($,Z)),compare:($,Z)=>B2(V$($),V$(Z))}),[SU,Z0,kX]=L1(u$,w(Xz,N0),{...y3,...U9},{getISOFields:v3,getCalendar:w3,with($,Z,J){return Z0(tj(g3,$,this,pZ(Z),J))},withCalendar:($,Z)=>Z0(B4($,N0(Z))),add:($,Z,J)=>Z0(n7(s$,0,$,$0(Z),J)),subtract:($,Z,J)=>Z0(n7(s$,1,$,$0(Z),J)),until:($,Z,J)=>s(D2(O1,0,$,f0(Z),J)),since:($,Z,J)=>s(D2(O1,1,$,f0(Z),J)),equals:($,Z)=>Aj($,f0(Z)),toZonedDateTime($,Z){let J=!D0(Z)||Z instanceof S4?{timeZone:Z}:Z;return Q0(Hz(o,F$,i,$,J))},toPlainDateTime:($,Z)=>T0(Mz($,B9(Z))),toPlainYearMonth($){return D$(Pz(E4,$,this))},toPlainMonthDay($){return hZ(Tz(R4,$,this))},toLocaleString($,Z,J){let[W,Y]=KU(Z,J,$);return W.format(Y)},toString:y7,toJSON:($)=>y7($),valueOf:O$},{from:($,Z)=>Z0(f0($,Z)),compare:($,Z)=>h$(f0($),f0(Z))}),O9={fields($,Z,J){return[...Z.call($,J)]}},wX=Object.assign({dateFromFields($,Z,J,W){return kX(Z.call($,Object.assign(Object.create(null),J),W))}},O9),qX=Object.assign({yearMonthFromFields($,Z,J,W){return CU(Z.call($,Object.assign(Object.create(null),J),W))}},O9),yX=Object.assign({monthDayFromFields($,Z,J,W){return PU(Z.call($,Object.assign(Object.create(null),J),W))}},O9),L9={mergeFields($,Z,J,W){return y1(Z.call($,Object.assign(Object.create(null),J),Object.assign(Object.create(null),W)))}},EU=Object.assign({},wX,L9),bU=Object.assign({},qX,L9),RU=Object.assign({},yX,L9),H9={dateAdd($,Z,J,W,Y){return kX(Z.call($,Z0(X0(J,$)),s(a(W)),Y))}},vX=Object.assign({},H9,{dateUntil($,Z,J,W,Y,j){return vU(Z.call($,Z0(X0(J,$)),Z0(X0(W,$)),Object.assign(Object.create(null),j,{largestUnit:S3[Y]})))}}),fU=Object.assign({},H9,{day:AX}),kU=Object.assign({},vX,{day:AX}),E4=H1(qX),b4=H1(wX),R4=H1(yX),wU=H1(bU),g3=H1(EU),qU=H1(RU),s$=H1(H9),O1=H1(vX),_X=H1(fU),IX=H1(kU),[yU,s,vU]=L1(T4,Bz,{...HU,blank:Wj},{with:($,Z)=>s(Jz($,Z)),negated:($)=>s(Z4($)),abs:($)=>s(Jj($)),add:($,Z,J)=>s(Z2(k3,O1,i,0,$,$0(Z),J)),subtract:($,Z,J)=>s(Z2(k3,O1,i,1,$,$0(Z),J)),round:($,Z)=>s(Zj(k3,O1,i,$,Z)),total:($,Z)=>y5(k3,O1,i,$,Z),toLocaleString($,Z,J){return Intl.DurationFormat?new Intl.DurationFormat(Z,J).format(this):a6($)},toString:a6,toJSON:($)=>a6($),valueOf:O$},{from:($)=>s($0($)),compare:($,Z,J)=>_j(k3,s$,i,$0($),$0(Z),J)}),gX={toString:($)=>$.id,toJSON:($)=>$.id,...UU,dateAdd:({id:$,o:Z},J,W,Y)=>Z0(X0(Z.dateAdd(f0(J),$0(W),Y),$)),dateUntil:({o:$},Z,J,W)=>s(a($.dateUntil(f0(Z),f0(J),A5(W)))),dateFromFields:({id:$,o:Z},J,W)=>Z0(P2(Z,J,W,Q5($))),yearMonthFromFields:({id:$,o:Z},J,W)=>D$(T2(Z,J,W,z5($))),monthDayFromFields:({id:$,o:Z},J,W)=>hZ(N2(Z,0,J,W,X5($))),fields({o:$},Z){let J=new Set(W1),W=[];for(let Y of Z){if(e(Y),!J.has(Y))throw RangeError(R2(Y));J.delete(Y),W.push(Y)}return $.fields(W)},mergeFields:({o:$},Z,J)=>$.mergeFields(B7(U7(Z)),B7(U7(J)))},[M9]=L1("Calendar",($)=>{let Z=gj($);return{branding:"Calendar",id:Z,o:yZ(Z)}},{id:($)=>$.id},gX,{from($){let Z=N0($);return typeof Z=="string"?new M9(Z):Z}}),gU=xX(Object.keys(gX).slice(4)),[mU,Q0]=L1(p1,w(jz,N0,o),{...RX,...y3,...TX(U9),...TX(D9),offset:($)=>v$(Q9($).offsetNanoseconds),offsetNanoseconds:($)=>Q9($).offsetNanoseconds,timeZoneId:($)=>H0($.timeZone),hoursInDay:($)=>p5(i,$)},{getISOFields:($)=>e5(G0,$),getCalendar:w3,getTimeZone:({timeZone:$})=>typeof $=="string"?new S4($):$,with($,Z,J){return Q0(aj(g3,i,$,this,pZ(Z),J))},withCalendar:($,Z)=>Q0(B4($,N0(Z))),withTimeZone:($,Z)=>Q0(wz($,o(Z))),withPlainDate:($,Z)=>Q0(Rz(i,$,f0(Z))),withPlainTime:($,Z)=>Q0(bz(i,$,B9(Z))),add:($,Z,J)=>Q0(i7(s$,i,0,$,$0(Z),J)),subtract:($,Z,J)=>Q0(i7(s$,i,1,$,$0(Z),J)),until:($,Z,J)=>s(a(V2(O1,i,0,$,mZ(Z),J))),since:($,Z,J)=>s(a(V2(O1,i,1,$,mZ(Z),J))),round:($,Z)=>Q0(g5(i,$,Z)),startOfDay:($)=>Q0(c5(i,$)),equals:($,Z)=>xj($,mZ(Z)),toInstant:($)=>R0(Fz($)),toPlainDateTime:($)=>T0(C2(G0,$)),toPlainDate:($)=>Z0(A2(G0,$)),toPlainTime:($)=>U$(S2(G0,$)),toPlainYearMonth($){return D$(Vz(E4,$,this))},toPlainMonthDay($){return hZ(Uz(R4,$,this))},toLocaleString($,Z,J={}){let[W,Y]=QU(Z,J,$);return W.format(Y)},toString:($,Z)=>w7(G0,$,Z),toJSON:($)=>w7(G0,$),valueOf:O$},{from:($,Z)=>Q0(mZ($,Z)),compare:($,Z)=>K2(mZ($),mZ(Z))}),hU=Object.defineProperties({},{...w6("Temporal.Now"),...w$({timeZoneId:()=>m1(),instant:()=>R0(O0(x3())),zonedDateTime:($,Z=m1())=>Q0(P0(x3(),o(Z),N0($))),zonedDateTimeISO:($=m1())=>Q0(P0(x3(),o($),q)),plainDateTime:($,Z=m1())=>T0(z0(fZ(G0(o(Z))),N0($))),plainDateTimeISO:($=m1())=>T0(z0(fZ(G0(o($))),q)),plainDate:($,Z=m1())=>Z0(X0(fZ(G0(o(Z))),N0($))),plainDateISO:($=m1())=>Z0(X0(fZ(G0(o($))),q)),plainTimeISO:($=m1())=>U$(J1(fZ(G0(o($)))))})}),cZ=Object.defineProperties({},{...w6("Temporal"),...w$({PlainYearMonth:xU,PlainMonthDay:MU,PlainDate:SU,PlainTime:IU,PlainDateTime:AU,ZonedDateTime:mU,Instant:TU,Calendar:M9,TimeZone:S4,Duration:yU,Now:hU})}),pU=JU(),P9=new WeakMap,cU=Object.defineProperties(Object.create(Intl),w$({DateTimeFormat:pU}));var f4="x-gemi-socket";var rP="gemi.v1",mX="/__gemi/socket",tP=/^[A-Za-z0-9_-]{1,32}$/,eP={Normal:1000,UnsupportedData:1003,PolicyViolation:1008,Restart:1012,TryAgainLater:1013,Revoked:4001};function WT($){return $}function hX(){return{driver:"memory",redis:{},maxEventBytes:16384,warnEventBytes:4096,path:mX,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 dU,randomBytes as uU}from"crypto";function lU($=process.env.SECRET){if(!$)return"gemi:bc:";return`gemi:bc:${Buffer.from(dU("sha256",$,"gemi","gemi.broadcast.prefix",4)).toString("hex")}:`}var iU="__control",T9=250,sU=1e4,nU=15000;class N9{config;prefix;controlChannel;instanceId=uU(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??lU(),this.controlChannel=this.prefix+iU,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=m3((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 $})(),nU,"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 (${pX(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(sU,T9*2**this.reconnectAttempt);this.reconnectAttempt=Math.min(this.reconnectAttempt+1,16);let Z=Math.max(T9,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;m3($.ping(),this.subscribeTimeoutMs,"ping").catch((Z)=>{if(this.subscriber!==$)return;console.warn(`[gemi] Broadcast: the Redis subscriber did not answer a ping (${pX(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??oU(Math.min(Z,T9));await m3(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 m3(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 m3(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 m3($,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 oU($){return new Promise((Z)=>setTimeout(Z,$))}function pX($){return $ instanceof Error?$.message:String($)}import{createHmac as aU,hkdfSync as rU,randomBytes as cX}from"crypto";function dX($){return aU("sha256",tU()).update($).digest("base64url").slice(0,22)}var k4=null;function tU(){let $=process.env.SECRET||void 0;if(k4&&k4.secret===$)return k4.key;let Z=$?Buffer.from(rU("sha256",$,"gemi","gemi.broadcast.socket-tag",32)):cX(32);return k4={secret:$,key:Z},Z}function QT(){return cX(16).toString("base64url")}var eU=/^[A-Za-z0-9_-]{8,64}$/;function _9($){return typeof $==="string"&&eU.test($)}function uX($,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 iX extends Error{bytes;limit;constructor($,Z,J){super(`The broadcast "${J}" is ${$} bytes, over the limit of ${Z}. Send ids and a change hint, and let the client fetch the data over HTTP; or raise maxEventBytes in app/config/broadcast.ts.`);this.bytes=$;this.limit=Z;this.name="BroadcastPayloadTooLargeError"}}class p0{options;static token="broadcast";config;driver;warnedAboutSize=new Set;started=!1;hooks;channelRouter;constructor($={},Z={}){this.options=Z;this.config=M1(hX(),$),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 h3(this,w4($,Z[0]),null)}toUser($){return new h3(this,{topic:GZ($),pattern:F0},null)}toOthers($){return new sX(this,ZD($))}broadcastEvent($){let Z=$.broadcastOn(),J=Array.isArray(Z)?Z:[Z],W=$.broadcastAs(),Y=$.broadcastWith(),j=J.map((z)=>this.prepare(w4(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){OW(Z);let Y;try{Y=uX($.topic,Z,J,W?dX(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){dZ(()=>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=$D($);dZ(()=>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 iX(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 h3{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 sX{manager;except;constructor($,Z){this.manager=$;this.except=Z}to($,...Z){return new h3(this.manager,w4($,Z[0]),this.except)}toUser($){return new h3(this.manager,{topic:GZ($),pattern:F0},this.except)}}function w4($,Z){if(DW($))return{topic:H8($.topic),...$.pattern?{pattern:$.pattern}:{}};if(Z!==void 0||$.includes(":"))return{topic:j3($,Z??{}),pattern:$};if($===F0)throw new d('"user" is not a topic: the "user" channel resolves to user.<id> per subscriber. Emit with Broadcast.toUser(user).');return{topic:H8($)}}function $D($){if($&&typeof $==="object"&&"user"in $)return{user:GZ($.user).slice(F0.length+1)};if($&&typeof $==="object"&&"channel"in $)return{topic:w4($.channel,$.params).topic};throw new d("Broadcast.revoke takes { user } or { channel }.")}function ZD($){if($===null||$===void 0)return null;if(typeof $==="string")return _9($)?$:null;let J=($ instanceof Request?$.headers:("rawRequest"in $)?$.rawRequest.headers:$.headers)?.get(f4);return _9(J)?J:null}function JD($,Z){let J=$.driver;if(J===void 0||J==="memory")return new lX;if(J==="redis"){let W=Z?.config.get("redis",{})??{},Y=$.redis??{};return new N9({url:Y.url??W.url??process.env.REDIS_URL,options:Y.options??W.options,prefix:Y.prefix,subscribeTimeoutMs:Y.subscribeTimeoutMs,healthCheckMs:Y.healthCheckMs})}if(typeof J==="function"){if(!Z)throw Error("A broadcast driver factory needs the application to be called with.");return J(Z)}if(typeof J==="object"&&J!==null&&typeof J.publish==="function")return J;throw Error(`Unknown broadcast driver "${String(J)}" in app/config/broadcast.ts. Use "memory" or "redis", or pass a BroadcastDriver.`)}class I9 extends Error{code;constructor($,Z=`OAuth callback failed: ${$}`){super(Z);this.name="OAuthCallbackError",this.code=$}}class WD{linkByEmail=!0;createUsers=!0;createUsersWithoutEmail=!1}import{createHash as x9,createHmac as YD,randomBytes as nX,timingSafeEqual as rX}from"crypto";var c3=600,q4="gemi_oauth",jD=`__Host-${q4}`;function uZ($,Z=q4){if(Z===q4)return $?jD:q4;return $?`__Host-${Z}`:Z}function p3($){return $.toString("base64url")}function tX($){return YD("sha256",UZ()).update(`gemi-oauth-state:${$}`).digest()}function oX($,Z){let J=x9("sha256").update($).digest(),W=x9("sha256").update(Z).digest();return rX(J,W)&&$.length===Z.length}function y4($,Z=Date.now(),J={}){let W=p3(nX(32)),Y=p3(nX(32)),j=zD(Y),z={provider:$,state:W,codeVerifier:Y,expiresAt:Z+c3*1000,...J.subject!==void 0?{subject:J.subject}:{},...J.returnTo!==void 0?{returnTo:J.returnTo}:{}};return{state:W,codeVerifier:Y,codeChallenge:j,cookieValue:XD(z)}}function zD($){return p3(x9("sha256").update($).digest())}function XD($){let Z=p3(Buffer.from(JSON.stringify($)));return`${Z}.${p3(tX(Z))}`}function QD($){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=tX(J);if(W.length!==Y.length||!rX(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 L$=new Map,aX=1e4;function GD($,Z,J){if(L$.size>=aX){for(let[W,Y]of L$)if(Y<=J)L$.delete(W);while(L$.size>=aX){let W=L$.keys().next().value;if(W===void 0)break;L$.delete(W)}}L$.set($,Z)}function v4($){let Z=$.now??Date.now();if(!$.cookieValue||!$.returnedState)return{ok:!1,reason:"missing_state"};let J=QD($.cookieValue);if(!J)return{ok:!1,reason:"invalid_state"};let W=oX(J.state,$.returnedState),Y=oX(J.provider,$.provider);if(!W||!Y)return{ok:!1,reason:"invalid_state"};if(J.expiresAt<=Z)return{ok:!1,reason:"expired_state"};if(L$.has(J.state))return{ok:!1,reason:"invalid_state"};return GD(J.state,J.expiresAt,Z),{ok:!0,payload:J}}var C9=new WeakMap;function BD($){let Z=C9.get($);if(!Z)Z=$(KD(32).toString("hex")),C9.set($,Z),Z.catch(()=>C9.delete($));return Z}async function A9($,Z,J){if(typeof J==="string"&&J!=="")return await $.verifyPassword(Z,J);try{await $.verifyPassword(Z,await BD($.hashPassword))}catch{}return!1}async function n$($,Z){let J=Z.user??Z.session?.user;if(!J||!$.onAuthenticated)return;let{password:W,...Y}=J;await $.onAuthenticated({...Z,user:Y})}class E9 extends Error{}function S9($){return typeof $==="string"&&$!==""?$:null}function eX($){return Q3($)}var FD=256;function $Q($){return typeof $==="string"&&$!==""&&$.length<=FD?$:null}function ZQ($){let{password:Z,code:J,...W}=$;return W}var g4="intended_url";function WQ($){if($.cookies.get(g4))$.ctx().setCookie(g4,"",{maxAge:-1})}function JQ($){let Z=$.cookies.get(g4);if(!Z)return null;WQ($);try{return G1(decodeURIComponent(Z),"")||null}catch{return null}}class b9 extends A{schema={email:{required:"Email is required",string:"Invalid email",email:"Invalid email"},password:{required:"Password is required"}}}class YQ extends A{schema={email:{required:"Email is required",email:"Invalid email"}}}class jQ extends A{schema={password:{required:"Password is required",password:"Invalid password"}}}function c1($){if(H(b).config[$]===!1)throw new W0("Not found",{status:404})}class r extends X3{async me(){let $=await w0.user();if(!$)throw new y8;return $}async verifyEmail($=new A){c1("password");let Z=await $.input(),{userProvider:J}=H(b),W=S9(Z.get("token"));if(!W)return{email:null};let Y=await J.findUserByVerificationToken(W);if(!Y)return{email:null};return await J.verifyUser(Y.email),{email:Y.email}}async signInWithMagicLink($=new A){let Z=H(b),{userProvider:J}=Z,W=S9($.search.get("token")),Y=null;try{Y=Q3(decodeURIComponent($.search.get("email")??""))}catch{}if(await OZ("link",null,$,{perIp:Z.config.emailCode.verifyLimit.perIp}),!Y||!W||!await Z.verifyMagicLinkToken(Y,W))return{error:"Invalid token"};await J.verifyUser(Y);let j=await Z.createOrUpdateSession({email:Y});return $.ctx().setCookie("access_token",j.token,H(b).accessTokenCookieOptions($,j.expiresAt)),await Z.config.onSignIn(j,$.search.toJSON()),await n$(Z.config,{session:j,isNewUser:!1,method:"magic-link",req:$}),{session:j}}async verifyPinRequest($){c1("magicLink");let Z=H(b),J=await $.input(),{email:W,pin:Y}=J.toJSON(),j=Q3(W),z=$Q(Y);if(await OZ("verify",j,$,Z.config.emailCode.verifyLimit),!j||!z)throw new c({pin:["Invalid pin"]});let X=await Z.verifyOneTimeCode(j,z);if(X.status==="too_many_attempts")throw new c({pin:["Too many attempts"]});if(X.status!=="ok")throw new c({pin:["Invalid pin"]});return await Z.userProvider.verifyUser(j),j}async signInWithPinV2($=new A){let Z=H(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSessionV2({email:J});return $.ctx().setCookie("access_token",W.token,H(b).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON()),await n$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),W}async signInWithPin($=new A){let Z=H(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSession({email:J});return $.ctx().setCookie("access_token",W.token,H(b).accessTokenCookieOptions($,W.expiresAt)),await Z.config.onSignIn(W,$.search.toJSON()),await n$(Z.config,{session:W,isNewUser:!1,method:"magic-link",req:$}),{session:W}}async signInV2($=new b9){c1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await A9(j.config,W,z?.password);if(!z||!X)throw new c({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSessionV2({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,H(b).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await n$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...B}=z;return B}async signIn($=new b9){c1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=H(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await A9(j.config,W,z?.password);if(!z||!X)throw new c({invalid_credentials:["Invalid credentials"]});let Q=await j.createOrUpdateSession({email:z.email,id:z.id});$.ctx().setCookie("access_token",Q.token,H(b).accessTokenCookieOptions($,Q.expiresAt)),await j.config.onSignIn(z,$.search.toJSON()),await n$(j.config,{session:Q,user:z,isNewUser:!1,method:"password",req:$});let{password:G,...B}=z;return B}async signUp(){c1("password");let $=H(b),{userProvider:Z,config:J}=$,W=new J.signUpRequest,Y=await W.input(),{email:j,password:z,name:X,invitationId:Q}=Y.toJSON(),G={method:"password",input:ZQ(Y.toJSON())},B=eX(j);if(!B)throw new c({email:["Invalid email"]});if(z!=null&&typeof z!=="string")throw new c({password:["Invalid password"]});if(Q!=null&&typeof Q!=="string")throw new c({invitationId:["Invalid invitation"]});if(await Z.findUserByEmailAddress(B,!1))throw new c({email:["Email address already exists"]});let K=await J.hashPassword(z),V=H(l).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:V});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:V});return await J.onUserCreated(L,G),L});return await J.onSignUp(D,O,W.search.toJSON()),D}async signOut($=new A){let Z=x$($),J=H(b),{config:W}=J,Y=await J.revokeSession(Z,$.headers.get("User-Agent"));if($.ctx().setCookie("access_token","",H(b).accessTokenCookieOptions($,new Date(0))),H(b).cookieDomain($))$.ctx().setCookie("access_token","",{...H(b).accessTokenCookieOptions($,new Date(0)),domain:void 0});if(Y?.user)VD(Y.user),Y.user.extension=await W.extendSession(Y.user),await W.onSignOut(Y.user);return{}}async forgotPassword($=new YQ){c1("password");let Z=await $.input(),J=eX(Z.get("email"));if(!J)return{};let{userProvider:W,config:Y}=H(b),j=await W.findUserByEmailAddress(J,Y.verifyEmail);if(!j)return{};let z=await Y.generateForgotPasswordToken(j);return await W.createPasswordResetToken({user:j,token:z}),await Y.onForgotPassword(j,z),{}}async resetPassword($=new jQ){c1("password");let{userProvider:Z,config:J}=H(b),W=await $.input(),{password:Y,token:j}=W.toJSON(),z=S9(j),X=z?await Z.findPasswordResetToken({token:z}):null;if(!X)throw new c({token:["Invalid token"]});if(cZ.Instant.from(X.createdAt.toISOString()).add({hours:24}).until(cZ.Now.instant()).sign>=0)throw new c({token:["Token expired"]});await Z.deletePasswordResetToken({token:z});let G=await Z.findUserByEmailAddress(X.user.email,J.verifyEmail);if(!G)throw new c({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 A){c1("password");let{userProvider:Z,config:J}=H(b),W=await w0.user(),Y=await $.input(),{oldPassword:j,newPassword:z}=Y.toJSON();if(typeof z!=="string")throw new c({newPassword:["Invalid password"]});let X=await Z.findUserByEmailAddress(W.email,J.verifyEmail);if(!(typeof j==="string"&&await A9(J,j,X?.password)))throw new c({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 A){let{provider:Z}=$.params,J=H(b).config.oauthProviders,W=Object.hasOwn(J,Z),Y=await LZ(J,Z);if(!Y){if(W)throw new W0("Not found",{status:404});throw Error(`Invalid provider: ${Z}`)}let j=KZ($.rawRequest),z=G1($.search.get(Q1),"");if(z)$.ctx().setCookie(g4,encodeURIComponent(z),{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:600});else WQ($);let{state:X,codeChallenge:Q,cookieValue:G}=y4(Z);return $.ctx().setCookie(uZ(j),G,{httpOnly:!0,sameSite:"Lax",secure:j,maxAge:c3}),{destination:await Y.getRedirectUrl($,{state:X,codeChallenge:Q,codeChallengeMethod:"S256"})}}async oauthCallback($=new A){let{provider:Z}=$.params,J=H(b),{userProvider:W,config:Y}=J,j=Object.hasOwn(Y.oauthProviders,Z),z=await LZ(Y.oauthProviders,Z);if(j&&!z)throw new W0("Not found",{status:404});let X=KZ($.rawRequest),Q=uZ(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 F=v4({provider:Z,cookieValue:G,returnedState:$.search.get("state")});if("reason"in F)return console.error(`Authentication error: OAuth callback refused (${F.reason})`),this.oauthFailure($,F.reason);if(!$.search.get("code"))return this.oauthFailure($,"missing_code");let K;try{K=await z.onCallback($,{state:F.payload.state,codeVerifier:F.payload.codeVerifier})}catch(N){if(N instanceof I9)return this.oauthFailure($,N.code);return console.error("Authentication error: OAuth provider callback failed",N),this.oauthFailure($,"provider_error")}let{name:V,username:U,providerId:D,emailVerified:O}=K??{},L=typeof K?.email==="string"?K.email:void 0,P=L?O6(L):null,M=D?await W.findUserBySocialAccount(Z,D):null,I="signin",E=!M&&!P&&!L&&!!D&&z.createUsersWithoutEmail===!0;if(!M&&E){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{M=await this.createOAuthUserWithoutEmail({provider:Z,providerId:D,name:V,username:U,locale:H(l).detectLocale($)}),I="signup"}catch(N){let _=await W.findUserBySocialAccount(Z,D);if(!_)throw N;M=_}}if(!M){if(!P)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=H(l).detectLocale($);try{let _=await this.linkOAuthAccount({provider:Z,providerId:D,email:P,rawEmail:L,name:V,username:U,locale:N,linkExisting:z.linkByEmail!==!1,createUser:z.createUsers!==!1});if(_==="account_exists")return console.error(`Authentication error: a ${Z} sign-in matched an existing user by email, and ${Z} does not link by email`),this.oauthFailure($,"account_exists");if(_==="signup_disabled")return console.error(`Authentication error: a ${Z} sign-in is not linked to a user, and ${Z} does not create users`),this.oauthFailure($,"signup_disabled");if(_)M=_.user,I=_.action}catch(_){let x=D?await W.findUserBySocialAccount(Z,D):null;if(!x)throw _;M=x}if(!M)return this.oauthFailure($,"account_conflict")}let S=await J.createOrUpdateSessionV2({email:M.email,id:M.id});if($.ctx().setCookie("access_token",S.token,H(b).accessTokenCookieOptions($,S.expiresAt)),I==="signup")await Y.onSignUp(M,"",$.search.toJSON());else await Y.onSignIn(M,$.search.toJSON());await n$(J.config,{session:S,user:M,isNewUser:I==="signup",method:"oauth",req:$});let R=JQ($)??Y.redirectPath,f=Y.oauthCompleteProfilePath?G1(Y.oauthCompleteProfilePath,""):"";if(f&&!M.email){let N=new URL(f,"http://gemi.invalid");N.searchParams.set(Q1,R),R=`${N.pathname}${N.search}${N.hash}`}return{session:S,redirectTo:R}}async createOAuthUserWithoutEmail($){let{userProvider:Z,config:J}=H(b);return await Z.transaction(async()=>{let W=await Z.createUser({email:null,name:$.name??$.username??"",locale:$.locale});return await Z.createSocialAccount({provider:$.provider,providerId:$.providerId,userId:W.id,username:$.username,expiresAt:new Date,accessToken:"",refreshToken:""}),await J.onUserCreated(W,{method:"oauth",input:{}}),W})}oauthFailure($,Z){let J=JQ($),W=H(b).config.oauthFailurePath;if(W){let Y=G1(W,"");if(Y){let j=new URL(Y,"http://gemi.invalid");if(j.searchParams.set("error",Z),J)j.searchParams.set(Q1,J);S1.external(`${j.pathname}${j.search}${j.hash}`)}else console.error(`auth.oauthFailurePath must be a same-origin path, got ${JSON.stringify(W)}`)}return{session:null,error:Z,redirectTo:J}}async linkOAuthAccount($){let{provider:Z,providerId:J,email:W,rawEmail:Y,name:j,username:z,locale:X}=$,{userProvider:Q,config:G}=H(b),B=(U)=>({provider:Z,userId:U,email:W,username:z,providerId:J,expiresAt:new Date,accessToken:"",refreshToken:""}),F=await Q.findUserByEmailAddress(W,!1),K=Y?.trim();if(!F&&K&&K!==W)F=await Q.findUserByEmailAddress(K,!1);if(F){if($.linkExisting===!1)return"account_exists";if(!J)return{user:F,action:"signin"};let U=await Q.findSocialAccounts(F.id,Z);if(U.some((O)=>O.providerId===J))return{user:F,action:"signin"};if(U.some((O)=>O.providerId))return console.error(`Authentication error: user ${F.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(F.id));return{user:F,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 A){c1("magicLink");let Z=await $.input(),J=Q3(Z.get("email")),W=H(b),{uniformMagicLinkResponse:Y,requestLimit:j}=W.config.emailCode;if(await OZ("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 A){let Z=H(b),J=Z.config.emailCode;if(!J.enabled)throw new W0("Not found",{status:404});let W=await $.input(),Y=O6(W.get("email"));if(await OZ("request",Y,$,J.requestLimit),!Y)throw new c({email:["Invalid email"]});let j=await Z.userProvider.findUserByEmailAddress(Y,!1);if(j||J.createUser){let{pin:z,token:X}=await Z.issueOneTimeCode(Y,J.length);await J.send({email:Y,code:z,token:X,isNewUser:!j,req:$})}return{ok:!0}}async verifyEmailCode($=new A){let Z=H(b),{userProvider:J,config:W}=Z;if(!W.emailCode.enabled)throw new W0("Not found",{status:404});let Y=await $.input(),{email:j,code:z,name:X}=Y.toJSON(),Q=O6(j),G=$Q(z);if(await OZ("verify",Q,$,W.emailCode.verifyLimit),!Q||!G)throw new c({code:["invalid_code"]});let B=await Z.verifyOneTimeCode(Q,G,{claim:!1});if(B.status==="too_many_attempts")throw new c({code:["too_many_attempts"]});if(B.status!=="ok")throw new c({code:["invalid_code"]});let F=B.row,K=await J.findUserByEmailAddress(Q,!1),V=!1;if(K){if(!await Z.claimOneTimeCode(Q,F.id))throw new c({code:["invalid_code"]});await J.verifyUser(Q)}else if(W.emailCode.createUser){let D=H(l).detectLocale($);try{K=await J.transaction(async()=>{if(!await Z.claimOneTimeCode(Q,F.id))throw new E9;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}),V=!0}catch(O){if(O instanceof E9)throw new c({code:["invalid_code"]});throw O}}else throw await Z.claimOneTimeCode(Q,F.id),new c({code:["invalid_code"]});let U=await Z.createOrUpdateSessionV2({email:Q,id:K.id});return $.ctx().setCookie("access_token",U.token,H(b).accessTokenCookieOptions($,U.expiresAt)),await W.onSignIn(U,$.search.toJSON()),await n$(Z.config,{session:U,isNewUser:V,method:"email-code",req:$}),{session:U,isNewUser:V}}}function VD($){try{let Z=$?.id;if(Z===void 0||Z===null)return;let J=H();if(typeof J?.bound!=="function"||!J.bound(p0))return;J.make(p0).revoke({user:{id:Z}})}catch(Z){console.error("[gemi] Revoking the signed-out user's sockets failed:",Z)}}var zQ="gemi_oauth_connection";class m4 extends X3{async connect($=new A){let Z=String($.params.provider??""),W=H(d3).providers[Z],Y=await w0.user(),j=G1($.search.get(Q1),"");if(!W)return this.finish(j,Z,"unknown_provider");let z=KZ($.rawRequest),{state:X,codeChallenge:Q,cookieValue:G}=y4(XQ(Z),Date.now(),{subject:String(Y.id),...j?{returnTo:j}:{}});return $.ctx().setCookie(uZ(z,zQ),G,{httpOnly:!0,sameSite:"Lax",secure:z,maxAge:c3}),S1.external(W.authorizationUrl({state:X,codeChallenge:Q,redirectUri:QQ($,Z,W.config.redirectUri)})),{destination:"/"}}async callback($=new A){let Z=String($.params.provider??""),J=H(d3),W=await w0.user(),Y=KZ($.rawRequest),j=uZ(Y,zQ),z=$.cookies.get(j);if(z!==void 0&&z!==null)$.ctx().setCookie(j,"",{httpOnly:!0,sameSite:"Lax",secure:Y,maxAge:-1});let X=v4({provider:XQ(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 F=$.search.get("code");if(!F)return this.finish(Q,Z,"missing_code");try{let K=await G.exchangeCode({code:F,codeVerifier:X.payload.codeVerifier,redirectUri:QQ($,Z,G.config.redirectUri)}),V=await J.save(W,Z,K);await H(b).config.onConnected({user:W,provider:Z,connection:V,profile:K.profile??null,req:$})}catch(K){if(K instanceof GQ)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=$||G1(H(b).config.redirectPath,"/"),Y=new URL(W,"http://gemi.invalid");if(Y.searchParams.set("connection",Z),J)Y.searchParams.set("connection_error",J);throw S1.external(`${Y.pathname}${Y.search}${Y.hash}`),Error("unreachable: Redirect.external throws")}}function XQ($){return`connection:${$}`}function QQ($,Z,J){if(J)return J;return`${o$()??new URL($.rawRequest.url).origin}/auth/connections/${encodeURIComponent(Z)}/callback`}function KQ($){return $.magicLink!==!1||$.emailCode?.enabled===!0}function BQ($){return Object.keys($.oauthProviders??{}).length>0}function FQ($={}){let Z=[];if(KQ($))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(BQ($)){let W=`auth.oauthProviders (${Object.keys($.oauthProviders??{}).join(", ")})`;Z.push({view:"_Redirect",requiredBy:W},{view:"auth/OauthCallback",requiredBy:W})}return Z}class VQ extends E1{middlewares=["cache:private"];routes={"/:provider":this.redirect([m4,"connect"]).middleware(["auth"]),"/:provider/callback":this.redirect([m4,"callback"]).middleware([X6,"auth"])}}function UQ($={}){let Z=KQ($),J=BQ($);class W extends E1{middlewares=["cache:private"];routes={"/:provider":this.view("_Redirect",[r,"oauthRedirect"]),"/:provider/callback":this.view("auth/OauthCallback",[r,"oauthCallback"])}}return class extends E1{middlewares=["cache:private"];routes={...Z?{"/sign-in/magic-link":this.view("auth/MagicLinkSignIn",[r,"signInWithMagicLink"])}:{},...J?{"/oauth":W}:{},"/connections":VQ}}}class R9 extends I0{middlewares=["cache:private"];routes={"/sign-in":this.post(r,"signIn"),"/sign-in-v2":this.post(r,"signInV2"),"/sign-up":this.post(r,"signUp"),"/sign-out":this.post(r,"signOut"),"/forgot-password":this.post(r,"forgotPassword"),"/reset-password":this.post(r,"resetPassword"),"/change-password":this.post(r,"changePassword"),"/verify-email":this.post(r,"verifyEmail"),"/me":this.get(r,"me").middleware(["auth"]),"/magic-link":this.post(r,"createMagicLinkToken"),"/sign-in-with-pin":this.post(r,"signInWithPin"),"/sign-in-with-pin-v2":this.post(r,"signInWithPinV2"),"/email-code":this.post(r,"requestEmailCode"),"/email-code/verify":this.post(r,"verifyEmailCode")}}class f9 extends I0{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(async()=>{let Z=new A().params.locale;return await H(l).onLocaleChange(Z),{locale:Z}}),"/translations/:locale/:scope*":this.get(async()=>{let $=new A,Z=`/${$.params.scope??""}`,J=$.params.locale,W=H(l),Y=J??W.detectLocale($),j=W.getPageTranslations(Y,Z);return $.ctx().setCookie("i18n-locale",Y,{expires:new Date(Date.now()+31536000000)}),{[Y]:j}})}}class k9{}class w9 extends k9{async resize($,Z){let{height:J,width:W,quality:Y,fit:j}=Z;return await(await h4("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 HN($){return $}function DQ(){return{driver:new w9,allowedHosts:[],maxSize:10485760,timeout:1e4}}class K0 extends Error{status;constructor($,Z,J){super(Z,J);this.status=$;this.name="ImageSourceError"}}var UD=new Set([301,302,303,307,308]),DD="/api/__gemi__/services/image/";async function LQ($,Z){let J=Z.maxRedirects??5,W=AbortSignal.timeout(Z.timeout),Y=Z.ownOrigins[0]??Z.localOrigin,j=OQ($,Y);try{for(let z=0;;z++){let X=await OD(j,Z,W),Q=X.headers.get("location");if(UD.has(X.status)&&Q){if(await X.body?.cancel().catch(()=>{}),z>=J)throw new K0(502,"The image redirects too many times");j=OQ(Q,j.href);continue}if(!X.ok)throw await X.body?.cancel().catch(()=>{}),new K0(404,"Image not found");if(!X.headers.get("content-type")?.split(";")[0].trim().toLowerCase()?.startsWith("image/"))throw await X.body?.cancel().catch(()=>{}),new K0(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 HD(z,W)}}function OQ($,Z){let J;try{J=new URL($,Z)}catch{throw new K0(400,"The url parameter is not a URL")}if(J.protocol!=="http:"&&J.protocol!=="https:")throw new K0(400,"Only http(s) images can be resized");return J}async function OD($,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(DD))throw new K0(403,"This image source is not allowed");if(LD($.pathname))throw new K0(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 b1(z,{...W,allowPrivate:!0,ports:"any"});Y=z}if(Z.allowedHosts.length===0)throw new K0(403,"This image source is not allowed");return b1(Y,{...Z.external,...W,allow:Z.allowedHosts})}function LD($){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 HD($,Z){if($ instanceof K0)return $;if(Z.aborted)return new K0(504,"The image took too long to load",{cause:$});if($ instanceof G6)switch($.code){case"blocked-host":case"blocked-address":case"invalid-url":return new K0(403,"This image source is not allowed",{cause:$});case"too-large":return new K0(413,"The image is too large",{cause:$});case"timeout":return new K0(504,"The image took too long to load",{cause:$})}return new K0(502,"The image could not be loaded",{cause:$})}class q9 extends I0{routes={"/resize":this.file(async()=>{let $=new A,Z=new URL($.rawRequest.url),J=Z.searchParams.get("url"),W=Number(Z.searchParams.get("w")),Y=Number(Z.searchParams.get("h")),j=Z.searchParams.get("fit")??"cover",z=Number(Z.searchParams.get("q"));if(!J)return HQ(400,"url query parameter is required");let X=H(MQ),Q=[Z.origin,`${Z.protocol==="https:"?"http":"https"}://${Z.host}`],G=o$();if(G&&URL.canParse(G))Q.push(new URL(G).origin);let B;try{B=await LQ(J,{ownOrigins:Q,localOrigin:`http://localhost:${process.env.PORT||5173}`,allowedHosts:X.allowedHosts,maxSize:X.maxSize,timeout:X.timeout})}catch(V){if(V instanceof K0)return HQ(V.status,V.message);throw V}let F=await X.resize(B.bytes,{height:Y,width:W,fit:j,quality:z}),K=new Headers({"Content-Type":"image/webp","Content-Length":`${F.byteLength}`});if(B.cacheControl)K.set("Cache-Control",B.cacheControl);return new Response(new Uint8Array(F),{headers:K})})}}function HQ($,Z){return Response.json({error:Z},{status:$})}class MQ{static token="image";driver;allowedHosts;maxSize;timeout;constructor($={}){let Z=DQ();this.driver=$.driver??Z.driver,this.allowedHosts=$.allowedHosts??Z.allowedHosts,this.maxSize=$.maxSize??Z.maxSize,this.timeout=$.timeout??Z.timeout}resize($,Z){return this.driver.resize($,Z)}}class y9 extends I0{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let $=Bun.file(H(PQ).currentLogFilePath);return new Response(await $.text(),{headers:{"Content-Type":"text/plain"}})})}}function kN($){return $}function TQ(){return{onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{}}}function NQ(){return{partialRendering:!0,localeRouting:"prefix",theme:{},onNotFound:()=>{},onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{},onStreamComplete:()=>{}}}function MD($){return"run"in $}function PD($){return Object.hasOwn($,"get")||Object.hasOwn($,"post")||Object.hasOwn($,"put")||Object.hasOwn($,"patch")||Object.hasOwn($,"delete")}function TD($){return Object.hasOwn($,"first")&&Object.hasOwn($,"second")}function ND($){if("__brand"in $)return $.__brand==="ApiRouter";return!1}function _D($){if("__internal_brand"in $)return $.__internal_brand==="ProxyHandler";return!1}function _Q($){if("__internal_brand"in $)return $.__internal_brand==="StreamHandler";return!1}function ID($){let Z=$.replace(/(?<!:\w*)\([\w-]+\)/g,"");if(Z===$)return $;let J=`/${Z}`.replace(/\/{2,}/g,"/");return J.length>1?J.replace(/\/$/,""):J}function v9($,Z="",J=[]){let W={};function Y(j,z,X,Q,G){let B=j==="/"?"":j,F=Z==="/"?"":Z,K=ID((`${F}${B}`===""?"/":`${F}${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 A().ctx().headers;return new Response(null,{headers:U,status:204})},middleware:[]}}for(let[j,z]of Object.entries($)){if(_D(z)){let X=z;for(let Q of["GET","POST","PUT","DELETE"])Y(j,Q,X.run.bind(X),X.middlewares);continue}if(MD(z)){let X=z,Q=X.method,G=X.middlewares,B=X.run.bind(X);if(Y(j,Q,B,G,X.source),_Q(z))Y(j,"HEAD",B,G,X.source)}if(PD(z))for(let[X,Q]of Object.entries(z)){let G=Q,B=G.middlewares,F=G.run.bind(G);if(Y(j,X,F,B,G.source),X==="get"&&_Q(G))Y(j,"HEAD",F,B,G.source)}if(ND(z)){let X=new z,Q=v9(X.routes,`${Z}${j}`,[...J,...X.middlewares]);for(let[G,B]of Object.entries(Q)){let F=G.replaceAll("//","/");W[F]={...W[F],...B}}}if(TD(z)){let{first:X,second:Q}=z;for(let[G,B]of Object.entries(X)){let F=B.middlewares,K=B.run.bind(B),[V,...U]=j.split("/").reverse();if(!V.startsWith(":"))throw Error("Resource route must end with a dynamic segment");Y(U.reverse().join("/"),G,K,F,B.source)}for(let[G,B]of Object.entries(Q)){let F=B.middlewares,K=B.run.bind(B);Y(j,G,K,F,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 p4($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function g9($,Z){if($==="/")return Z;if(Z==="/")return $;return`${$}${Z}`}function m9($){let Z=p4($);return Z.length>1?Z.replace(/\/$/,""):Z}function IQ($,Z){return Z.map((J)=>({...J,path:m9(g9($,J.path))}))}function c4($){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=c4(j.routes);for(let[X,{exec:Q,middleware:G,segments:B,features:F,static:K}]of Object.entries(z)){let V=g9(J,X),U=(D)=>Y.run.call(Y,D,J);Z[p4(V)]={exec:[U,...Q],middleware:[...Y.middlewares,...G],features:[...Y.featureGates,...F],viewPath:Y.viewPath,segments:[{path:m9(J),viewPath:Y.viewPath,...Y.alwaysRuns?{alwaysRun:!0}:{}},...IQ(J,B)],...K?{static:K}:{}}}}else{let j=(z)=>Y.run.call(Y,z,J);Z[p4(J)]={exec:[j],middleware:Y.middlewares,features:Y.featureGates,viewPath:Y.viewPath,segments:[{path:m9(J),viewPath:Y.viewPath}],..."staticOptions"in Y&&Y.staticOptions?{static:Y.staticOptions}:{}}}}else{let Y=new W,j=c4(Y.routes);for(let[z,{exec:X,middleware:Q,viewPath:G,segments:B,features:F,static:K}]of Object.entries(j)){let V=g9(J,z);Z[p4(V)]={exec:X,middleware:[...Y.middlewares,...Q],features:[...Y.featureGates,...F],viewPath:G,segments:IQ(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 h9="theme";function xQ($){return $==="light"||$==="dark"||$==="system"}function CQ($){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 xD=Object.defineProperty,C=($,Z)=>xD($,"name",{value:Z,configurable:!0}),sZ=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"}};C(sZ,"Part");var CD=/[$_\p{ID_Start}]/u,AD=/[$_\u200C\u200D\p{ID_Continue}]/u,c9=".*";function AQ($,Z){return(Z?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test($)}C(AQ,"isASCII");function l9($,Z=!1){let J=[],W=0;for(;W<$.length;){let Y=$[W],j=C(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&&CD.test(Q)||X!==W+1&&AD.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(!AQ($[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}C(l9,"lexer");function i9($,Z={}){let J=l9($);Z.delimiter??="/#?",Z.prefixes??="./";let W=`[^${c0(Z.delimiter)}]+?`,Y=[],j=0,z=0,X="",Q=new Set,G=C((M)=>{if(z<J.length&&J[z].type===M)return J[z++].value},"tryConsume"),B=C(()=>G("OTHER_MODIFIER")??G("ASTERISK"),"tryConsumeModifier"),F=C((M)=>{let I=G(M);if(I!==void 0)return I;let{type:E,index:S}=J[z];throw TypeError(`Unexpected ${E} at ${S}, expected ${M}`)},"mustConsume"),K=C(()=>{let M="",I;for(;I=G("CHAR")??G("ESCAPED_CHAR");)M+=I;return M},"consumeText"),V=C((M)=>M,"DefaultEncodePart"),U=Z.encodePart||V,D="",O=C((M)=>{D+=M},"appendToPendingFixedValue"),L=C(()=>{D.length&&(Y.push(new sZ(3,"","",U(D),"",3)),D="")},"maybeAddPartFromPendingFixedValue"),P=C((M,I,E,S,R)=>{let f=3;switch(R){case"?":f=1;break;case"*":f=0;break;case"+":f=2;break}if(!I&&!E&&f===3){O(M);return}if(L(),!I&&!E){if(!M)return;Y.push(new sZ(3,"","",U(M),"",f));return}let N;E?E==="*"?N=c9:N=E:N=W;let _=2;N===W?(_=1,N=""):N===c9&&(_=0,N="");let x;if(I?x=I:E&&(x=j++),Q.has(x))throw TypeError(`Duplicate name '${x}'.`);Q.add(x),Y.push(new sZ(_,x,U(M),N,U(S),f))},"addPart");for(;z<J.length;){let M=G("CHAR"),I=G("NAME"),E=G("REGEX");if(!I&&!E&&(E=G("ASTERISK")),I||E){let R=M??"";Z.prefixes.indexOf(R)===-1&&(O(R),R=""),L();let f=B();P(R,I,E,"",f);continue}let S=M??G("ESCAPED_CHAR");if(S){O(S);continue}if(G("OPEN")){let R=K(),f=G("NAME"),N=G("REGEX");!f&&!N&&(N=G("ASTERISK"));let _=K();F("CLOSE");let x=B();P(R,f,N,_,x);continue}L(),F("END")}return Y}C(i9,"parse");function c0($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}C(c0,"escapeString");function d9($){return $&&$.ignoreCase?"ui":"u"}C(d9,"flags");function SQ($,Z,J){return s9(i9($,J),Z,J)}C(SQ,"stringToRegexp");function a$($){switch($){case 0:return"*";case 1:return"?";case 2:return"+";case 3:return""}}C(a$,"modifierToString");function s9($,Z,J={}){J.delimiter??="/#?",J.prefixes??="./",J.sensitive??=!1,J.strict??=!1,J.end??=!0,J.start??=!0,J.endsWith="";let W=J.start?"^":"";for(let X of $){if(X.type===3){X.modifier===3?W+=c0(X.value):W+=`(?:${c0(X.value)})${a$(X.modifier)}`;continue}Z&&Z.push(X.name);let Q=`[^${c0(J.delimiter)}]+?`,G=X.value;if(X.type===1?G=Q:X.type===0&&(G=c9),!X.prefix.length&&!X.suffix.length){X.modifier===3||X.modifier===1?W+=`(${G})${a$(X.modifier)}`:W+=`((?:${G})${a$(X.modifier)})`;continue}if(X.modifier===3||X.modifier===1){W+=`(?:${c0(X.prefix)}(${G})${c0(X.suffix)})`,W+=a$(X.modifier);continue}W+=`(?:${c0(X.prefix)}`,W+=`((?:${G})(?:`,W+=c0(X.suffix),W+=c0(X.prefix),W+=`(?:${G}))*)${c0(X.suffix)})`,X.modifier===0&&(W+="?")}let Y=`[${c0(J.endsWith)}]|$`,j=`[${c0(J.delimiter)}]`;if(J.end)return J.strict||(W+=`${j}?`),J.endsWith.length?W+=`(?=${Y})`:W+="$",new RegExp(W,d9(J));J.strict||(W+=`(?:${j}(?=${Y}))?`);let z=!1;if($.length){let X=$[$.length-1];X.type===3&&X.modifier===3&&(z=J.delimiter.indexOf(X)>-1)}return z||(W+=`(?=${j}|${Y})`),new RegExp(W,d9(J))}C(s9,"partsToRegexp");var M$={delimiter:"",prefixes:"",sensitive:!0,strict:!0},SD={delimiter:".",prefixes:"",sensitive:!0,strict:!0},ED={delimiter:"/",prefixes:"/",sensitive:!0,strict:!0};function EQ($,Z){return $.length?$[0]==="/"?!0:!Z||$.length<2?!1:($[0]=="\\"||$[0]=="{")&&$[1]=="/":!1}C(EQ,"isAbsolutePathname");function n9($,Z){return $.startsWith(Z)?$.substring(Z.length,$.length):$}C(n9,"maybeStripPrefix");function bQ($,Z){return $.endsWith(Z)?$.substr(0,$.length-Z.length):$}C(bQ,"maybeStripSuffix");function o9($){return!$||$.length<2?!1:$[0]==="["||($[0]==="\\"||$[0]==="{")&&$[1]==="["}C(o9,"treatAsIPv6Hostname");var RQ=["ftp","file","http","https","ws","wss"];function a9($){if(!$)return!0;for(let Z of RQ)if($.test(Z))return!0;return!1}C(a9,"isSpecialScheme");function fQ($,Z){if($=n9($,"#"),Z||$==="")return $;let J=new URL("https://example.com");return J.hash=$,J.hash?J.hash.substring(1,J.hash.length):""}C(fQ,"canonicalizeHash");function kQ($,Z){if($=n9($,"?"),Z||$==="")return $;let J=new URL("https://example.com");return J.search=$,J.search?J.search.substring(1,J.search.length):""}C(kQ,"canonicalizeSearch");function wQ($,Z){return Z||$===""?$:o9($)?e9($):t9($)}C(wQ,"canonicalizeHostname");function qQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.password=$,J.password}C(qQ,"canonicalizePassword");function yQ($,Z){if(Z||$==="")return $;let J=new URL("https://example.com");return J.username=$,J.username}C(yQ,"canonicalizeUsername");function vQ($,Z,J){if(J||$==="")return $;if(Z&&!RQ.includes(Z))return new URL(`${Z}:${$}`).pathname;let W=$[0]=="/";return $=new URL(W?$:"/-"+$,"https://example.com").pathname,W||($=$.substring(2,$.length)),$}C(vQ,"canonicalizePathname");function gQ($,Z,J){return r9(Z)===$&&($=""),J||$===""?$:$J($)}C(gQ,"canonicalizePort");function mQ($,Z){return $=bQ($,":"),Z||$===""?$:d4($)}C(mQ,"canonicalizeProtocol");function r9($){switch($){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}C(r9,"defaultPortForProtocol");function d4($){if($==="")return $;if(/^[-+.A-Za-z0-9]*$/.test($))return $.toLowerCase();throw TypeError(`Invalid protocol '${$}'.`)}C(d4,"protocolEncodeCallback");function hQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.username=$,Z.username}C(hQ,"usernameEncodeCallback");function pQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.password=$,Z.password}C(pQ,"passwordEncodeCallback");function t9($){if($==="")return $;if(/[\t\n\r #%/:<>?@[\]^\\|]/g.test($))throw TypeError(`Invalid hostname '${$}'`);let Z=new URL("https://example.com");return Z.hostname=$,Z.hostname}C(t9,"hostnameEncodeCallback");function e9($){if($==="")return $;if(/[^0-9a-fA-F[\]:]/g.test($))throw TypeError(`Invalid IPv6 hostname '${$}'`);return $.toLowerCase()}C(e9,"ipv6HostnameEncodeCallback");function $J($){if($===""||/^[0-9]*$/.test($)&&parseInt($)<=65535)return $;throw TypeError(`Invalid port '${$}'.`)}C($J,"portEncodeCallback");function cQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.pathname=$[0]!=="/"?"/-"+$:$,$[0]!=="/"?Z.pathname.substring(2,Z.pathname.length):Z.pathname}C(cQ,"standardURLPathnameEncodeCallback");function dQ($){return $===""?$:new URL(`data:${$}`).pathname}C(dQ,"pathURLPathnameEncodeCallback");function uQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.search=$,Z.search.substring(1,Z.search.length)}C(uQ,"searchEncodeCallback");function lQ($){if($==="")return $;let Z=new URL("https://example.com");return Z.hash=$,Z.hash.substring(1,Z.hash.length)}C(lQ,"hashEncodeCallback");var iQ=class{#j;#W=[];#Z={};#$=0;#Y=1;#G=0;#X=0;#V=0;#U=0;#D=!1;constructor($){this.#j=$}get result(){return this.#Z}parse(){for(this.#W=l9(this.#j,!0);this.#$<this.#W.length;this.#$+=this.#Y){if(this.#Y=1,this.#W[this.#$].type==="END"){if(this.#X===0){this.#M(),this.#K()?this.#J(9,1):this.#B()?this.#J(8,1):this.#J(7,0);continue}else if(this.#X===2){this.#F(5);continue}this.#J(10,0);break}if(this.#V>0)if(this.#C())this.#V-=1;else continue;if(this.#x()){this.#V+=1;continue}switch(this.#X){case 0:this.#P()&&this.#F(1);break;case 1:if(this.#P()){this.#E();let $=7,Z=1;this.#N()?($=2,Z=3):this.#D&&($=2),this.#J($,Z)}break;case 2:this.#L()?this.#F(3):(this.#H()||this.#B()||this.#K())&&this.#F(5);break;case 3:this.#_()?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.#H()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 6:this.#H()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 7:this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 8:this.#K()&&this.#J(9,1);break;case 9:break;case 10:break}}this.#Z.hostname!==void 0&&this.#Z.port===void 0&&(this.#Z.port="")}#J($,Z){switch(this.#X){case 0:break;case 1:this.#Z.protocol=this.#Q();break;case 2:break;case 3:this.#Z.username=this.#Q();break;case 4:this.#Z.password=this.#Q();break;case 5:this.#Z.hostname=this.#Q();break;case 6:this.#Z.port=this.#Q();break;case 7:this.#Z.pathname=this.#Q();break;case 8:this.#Z.search=this.#Q();break;case 9:this.#Z.hash=this.#Q();break;case 10:break}this.#X!==0&&$!==10&&([1,2,3,4].includes(this.#X)&&[6,7,8,9].includes($)&&(this.#Z.hostname??=""),[1,2,3,4,5,6].includes(this.#X)&&[8,9].includes($)&&(this.#Z.pathname??=this.#D?"/":""),[1,2,3,4,5,6,7].includes(this.#X)&&$===9&&(this.#Z.search??="")),this.#T($,Z)}#T($,Z){this.#X=$,this.#G=this.#$+Z,this.#$+=Z,this.#Y=0}#M(){this.#$=this.#G,this.#Y=0}#F($){this.#M(),this.#X=$}#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")}#P(){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.#$,":")}#H(){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($,M$),$.encodePart=d4;let Z=SQ(this.#Q(),void 0,$);this.#D=a9(Z)}};C(iQ,"Parser");var p9=["protocol","username","password","hostname","port","pathname","search","hash"],H$="*";function u9($,Z){if(typeof $!="string")throw TypeError("parameter 1 is not of type 'string'.");let J=new URL($,Z);return{protocol:J.protocol.substring(0,J.protocol.length-1),username:J.username,password:J.password,hostname:J.hostname,port:J.port,pathname:J.pathname,search:J.search!==""?J.search.substring(1,J.search.length):void 0,hash:J.hash!==""?J.hash.substring(1,J.hash.length):void 0}}C(u9,"extractValues");function P1($,Z){return Z?iZ($):$}C(P1,"processBaseURLString");function lZ($,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=mQ(Z.protocol,J)),typeof Z.username=="string"&&($.username=yQ(Z.username,J)),typeof Z.password=="string"&&($.password=qQ(Z.password,J)),typeof Z.hostname=="string"&&($.hostname=wQ(Z.hostname,J)),typeof Z.port=="string"&&($.port=gQ(Z.port,$.protocol,J)),typeof Z.pathname=="string"){if($.pathname=Z.pathname,W&&!EQ($.pathname,J)){let Y=W.pathname.lastIndexOf("/");Y>=0&&($.pathname=P1(W.pathname.substring(0,Y+1),J)+$.pathname)}$.pathname=vQ($.pathname,$.protocol,J)}return typeof Z.search=="string"&&($.search=kQ(Z.search,J)),typeof Z.hash=="string"&&($.hash=fQ(Z.hash,J)),$}C(lZ,"applyInit");function iZ($){return $.replace(/([+*?:{}()\\])/g,"\\$1")}C(iZ,"escapePatternString");function sQ($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}C(sQ,"escapeRegexpString");function nQ($,Z){Z.delimiter??="/#?",Z.prefixes??="./",Z.sensitive??=!1,Z.strict??=!1,Z.end??=!0,Z.start??=!0,Z.endsWith="";let J=".*",W=`[^${sQ(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+=iZ(X.value);continue}j+=`{${iZ(X.value)}}${a$(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,F=z<$.length-1?$[z+1]:null;if(!G&&Q&&X.type===1&&X.modifier===3&&F&&!F.prefix.length&&!F.suffix.length)if(F.type===3){let K=F.value.length>0?F.value[0]:"";G=Y.test(K)}else G=!F.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+=iZ(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+=iZ(X.suffix),G&&(j+="}"),X.modifier!==3&&(j+=a$(X.modifier))}return j}C(nQ,"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 iQ($);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:H$,protocol:H$,username:H$,password:H$,hostname:H$,port:H$,search:H$,hash:H$};this.#j=lZ(j,$,!0),r9(this.#j.protocol)===this.#j.port&&(this.#j.port="");let z;for(z of p9){if(!(z in this.#j))continue;let X={},Q=this.#j[z];switch(this.#Z[z]=[],z){case"protocol":Object.assign(X,M$),X.encodePart=d4;break;case"username":Object.assign(X,M$),X.encodePart=hQ;break;case"password":Object.assign(X,M$),X.encodePart=pQ;break;case"hostname":Object.assign(X,SD),o9(Q)?X.encodePart=e9:X.encodePart=t9;break;case"port":Object.assign(X,M$),X.encodePart=$J;break;case"pathname":a9(this.#W.protocol)?(Object.assign(X,ED,Y),X.encodePart=cQ):(Object.assign(X,M$,Y),X.encodePart=dQ);break;case"search":Object.assign(X,M$,Y),X.encodePart=uQ;break;case"hash":Object.assign(X,M$,Y),X.encodePart=lQ;break}try{this.#Y[z]=i9(Q,X),this.#W[z]=s9(this.#Y[z],this.#Z[z],X),this.#$[z]=nQ(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=lZ(J,$,!1):J=lZ(J,u9($,Z),!1)}catch{return!1}let W;for(W of p9)if(!this.#W[W].exec(J[W]))return!1;return!0}exec($={},Z){let J={pathname:"",protocol:"",username:"",password:"",hostname:"",port:"",search:"",hash:""};if(typeof $!="string"&&Z)throw TypeError("parameter 1 is not of type 'string'.");if(typeof $>"u")return;try{typeof $=="object"?J=lZ(J,$,!1):J=lZ(J,u9($,Z),!1)}catch{return null}let W={};Z?W.inputs=[$,Z]:W.inputs=[$];let Y;for(Y of p9){let j=this.#W[Y].exec(J[Y]);if(!j)return null;let z={};for(let[X,Q]of this.#Z[Y].entries())if(typeof Q=="string"||typeof Q=="number"){let G=j[X+1];z[Q]=G}W[Y]={input:J[Y]??"",groups:z}}return W}static compareComponent($,Z,J){let W=C((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 sZ(3,"","","","",3),j=new sZ(0,"","","","",3),z=C((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}};C(ZJ,"URLPattern");function u3($,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 r$={startIndex:0,carriedViews:[]};function oQ($,Z){let J=V0($.path,Z);return J.includes("*")?null:J}function bD($,Z){if(!$)return r$;if($.search!==Z.search)return r$;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=oQ(Y,$.params),X=oQ(j,Z.params);if(z===null||X===null||z!==X)break;W++}if(W===0)return r$;return{startIndex:W,carriedViews:Z.segments.slice(0,W).map(({viewPath:Y})=>Y)}}function RD($,Z){let[,J,...W]=$.split("/");if(!Z.includes(J))return $;let Y=`/${W.join("/")}`;return Y==="/"?"/":Y.replace(/\/$/,"")}function aQ($){let{flatViewRoutes:Z,supportedLocales:J,from:W,origin:Y,to:j}=$;if(!W)return r$;let z;try{z=new URL(W,Y)}catch{return r$}if(z.origin!==Y)return r$;let X=u3(Z,RD(z.pathname,J));if(!X)return r$;return bD({segments:X.route.segments,params:X.params,search:z.search},j)}var JJ="x-gemi-from";import{createElement as u1,Fragment as DG}from"react";function fD($){return $.replace(/\([^)]*\)/g,"").replace(/\/\//g,"/")}function u4($){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=u4(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=u4(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])=>[fD(J),W]))}function l4($,Z){let[J,W]=Z,Y=$.find(([j])=>j===J);if(!Y){$.push([J,[...W]]);return}for(let j of W)l4(Y[1],j)}function i4($){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=i4(j.routes);l4(Z,[Y,z])}else l4(Z,[Y,[]])}else{let Y=new W,j=i4(Y.routes);for(let z of j)l4(Z,z)}return Z}function WJ($){let Z=[];for(let[J,W]of $)Z.push(J,...WJ(W).flat());return Array.from(new Set(Z))}function rQ($,Z){let[,J,...W]=$.split("/");if(J===void 0||!Z.includes(J))return{locale:null,pathname:$||"/"};return{locale:J,pathname:`/${W.join("/")}`}}class P$ extends g{static getFacadeAccessor(){return l}static getSupportedLocales(){return this.getFacadeRoot().supportedLocales}static getDefaultLocale(){return this.getFacadeRoot().defaultLocale}static locale(){let $=this.getFacadeRoot(),Z=T.getStore();if(Z)return Z.locale??$.detectLocale(Z.req);return $.defaultLocale}static timeZone(){return this.getFacadeRoot().detectTimeZone(T.getStore()?.req)}static formatter($={}){return this.getFacadeRoot().formatter($.locale??P$.locale(),$.timeZone??P$.timeZone())}static setLocale($=P$.locale(),Z={}){let J=this.getFacadeRoot(),W=$;if(!J.supportedLocales.includes($))W=J.defaultLocale;let Y=T.getStore();if(Z.cookie!==!1)Y.setCookie("i18n-locale",W,{expires:new Date(Date.now()+31536000000),secure:!1,httpOnly:!1});return Y.setLocale(W),W}}class YJ{id;static token="kernel.id";constructor($=crypto.randomUUID()){this.id=$}}function tQ($){return Object.fromEntries(Object.entries($).filter(([,Z])=>{return Z!==null&&Z!==void 0}))}var kD=50;class nZ{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(tQ(Z.search??{}));Y.delete("json"),Y.sort();let j=V0($,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 V=Math.round(performance.now()-this.renderStartedAt);if(V>kD)G=V}let B,F=new Promise((V)=>{B=V}),K={path:j,patternPath:$,variantKey:z,lateBy:G,status:"pending",promise:F,source:J,startedAt:this.elapsed()};return this.entries.set(X,K),this.fetcher($,W,Y).then((V)=>{K.status="resolved",K.data=V},(V)=>{K.status="rejected",K.error=V}).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 d1 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 oZ(){let $=JSON.stringify({error:t1("permission","Forbidden",403)});return new Response($,{status:403,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}function jJ(){return{status:403,error:{message:"Forbidden"}}}function l3($){let Z=aZ.getStore(),J=T.getStore();return(W,Y,j)=>{let z=new URL($.url).origin,X=[V0(W,Y),j.toString()].filter((F)=>F.length>0).join("?"),Q=new Request(`${z}/${X}`,{headers:$.headers,signal:$.signal}),G=eQ($);if(G)rZ(Q,G);let B=new A(Q,Y);return aZ.run(Z,()=>T.run(B,async()=>{let F=J?.locale;if(F&&H(l).isLocaleAware)T.getStore().setLocale(F);try{let K=H(j1).dispatchers(G).api,V=await K.runRouteMiddleware(W,B)??await K.getRouteData(W);if(s1(V)){if(!V.ok)throw new d1(V0(W,Y),j.toString(),V.status,V.body);return V.body}if(V instanceof Response){let U=await V.json().catch(()=>null);if(!V.ok)throw new d1(V0(W,Y),j.toString(),V.status,U);return U}return V}catch(K){if(K instanceof d1)throw K;let V=new d1(V0(W,Y),j.toString(),500,{message:K instanceof Error?K.message:String(K)});throw V.cause=K,V}}))}}var wD=new Set(["script","style","template","title"]),qD=/\shidden([\s=/]|$)/i,yD=/"[^"]*"|'[^']*'/g;function vD($){let Z=0,J=0,W=0,Y=0;while(Y<$.length){let j=$.indexOf("<",Y),z=j===-1?$.length:j;if(z>Y){let F=$.slice(Y,z).replace(/\s+/g,"").length;if(W>0)J+=F;else Z+=F}if(j===-1)break;if($.startsWith("<!--",j)){let F=$.indexOf("-->",j+4);Y=F===-1?$.length:F+3;continue}let X=$.indexOf(">",j);if(X===-1)break;let Q=$.slice(j+1,X);Y=X+1;let G=/^\/?([a-zA-Z][a-zA-Z0-9-]*)/.exec(Q)?.[1]?.toLowerCase();if(!G)continue;let B=Q.startsWith("/");if(!B&&wD.has(G)&&!Q.endsWith("/")){let F=$.indexOf(`</${G}`,Y);Y=F===-1?$.length:F;continue}if(G!=="div")continue;if(B){if(W>0)W-=1}else if(W>0)W+=1;else if(qD.test(Q.replace(yD,'""')))W=1}return{shellChars:Z,deferredChars:J}}var gD=1000,mD=64;function hD($){return $>=1000?`${($/1000).toFixed(1)} kB`:`${$} chars`}function pD($,Z){if(Z.deferredChars<gD)return null;if(Z.shellChars>=mD)return null;return`[gemi] GET ${$} streams ${hD(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 $G($=console.warn){let Z=new Set;return{shouldObserve(J){return!Z.has(J)},report(J,W){if(Z.has(J))return;let Y=pD(J,W);if(!Y)return;Z.add(J),$(Y)}}}function ZG(){let $=new TextDecoder,Z="";return{onChunk(J){Z+=$.decode(J,{stream:!0})},measure(){return Z+=$.decode(),vD(Z)}}}function JG($,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 C_,createContext as cD,createElement as A_,lazy as S_,use as E_,useContext as b_}from"react";function WG($){return{islands:[],render:$,instances:new WeakMap,count:0}}var i3="gemi-slot",YG="data-slot",jG="data-gemi-slot";var dD=Symbol.for("gemi.staticRender"),zG=globalThis[dD]??=cD(null);import{createHash as BG}from"crypto";var zJ='var r=document,i=window,a=history;i.__gemi_nav?.d();var L=new AbortController,h=(t,e,n,s)=>t.addEventListener(e,n,{signal:L.signal,...s}),q=i.__gemi_nav={d:()=>L.abort()},v=(t,e)=>{if(!t.g)t.g=1,import(e.s).then((n)=>{if(t.isConnected)t.r=n.h(t,n.m[e.e])}).catch((n)=>console.error(n))},D=(t)=>{let e=t.getElementById("gemi-islands");return e?JSON.parse(e.textContent):{i:[]}},R=(t,e)=>{for(let n of t.querySelectorAll("gemi-island")){let s=e.i[n.dataset.island];if(!s||n.o)continue;if(s.l=="eager")v(n,s);else if(s.l=="idle"||!i.IntersectionObserver||!n.children.length)(i.requestIdleCallback||setTimeout)(()=>v(n,s));else{let l=new IntersectionObserver((m)=>{if(m.some((d)=>d.isIntersecting))l.disconnect(),v(n,s)});for(let m of n.children)l.observe(m)}}},O=\'meta[name="gemi-static"]\',A="style:not([data-gemi-fonts])",T=A+",link[rel=stylesheet]",K=`head>${A},body>${A},link[rel=stylesheet]`,I=\'meta[name]:not([name=viewport]),meta[property],link[rel~=canonical],link[rel~=alternate],link[rel~=icon],link[rel=preload][as=font],style[data-gemi-fonts],script[type="application/ld+json"]\',w=(t)=>t.querySelector(O)?.content,C=(t)=>[...t.querySelectorAll(K)].map((e)=>e.outerHTML).join(),c=(t)=>t.href.split("#")[0],p=r.createElement("div");p.setAttribute("aria-live","polite");p.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap";r.body.append(p);var _=(t)=>{q.p={url:location.href,title:r.title,initial:t},r.dispatchEvent(new CustomEvent("gemi:page-load",{detail:q.p}))},f=new Map,k=(t)=>{let e=f.get(t);if(!e||Date.now()-e[0]>30000){let n=fetch(t,{headers:{accept:"text/html","x-gemi-navigate":"1"},signal:AbortSignal.timeout(1e4)}).then((s)=>{if(!s.ok||!/^text\\/html/.test(s.headers.get("content-type"))||new URL(s.url||t).origin!=location.origin)throw s;return s.text().then((l)=>[s.url||t,l])});e=[Date.now(),n],n.catch(()=>f.get(t)==e&&f.delete(t))}if(f.delete(t),f.set(t,e),f.size>10)f.delete(f.keys().next().value);return e[1]},M=(t)=>{let e=t.target.closest?.("a[href]"),n=e?.getAttribute("target");if(!e||n&&n!="_self"||e.hasAttribute("download")||/(^|\\s)external(\\s|$)/i.test(e.getAttribute("rel"))||e.closest("[data-gemi-reload]"))return;let s=new URL(e.getAttribute("href"),r.baseURI);if(s.origin==location.origin&&!(s.href.includes("#")&&c(s)==c(location)))return s},y={},U=()=>Math.random().toString(36).slice(2),E=()=>a.state?.g||a.replaceState({...a.state,g:U()},""),P=c(location),b=0,N=(t)=>{if(!t.hasAttribute("tabindex"))t.setAttribute("tabindex","-1"),t.addEventListener("blur",()=>t.removeAttribute("tabindex"),{once:!0});t.focus({preventScroll:!0})},Y=(t)=>{let e=r.body,n=t.body,s=D(t),l=r.documentElement;r.title=t.title;for(let o of["lang","dir"]){let u=t.documentElement.getAttribute(o);if(u==null)l.removeAttribute(o);else l.setAttribute(o,u)}for(let o of r.head.querySelectorAll(I))o.remove();let m=new Set([...r.querySelectorAll("link[rel=modulepreload]")].map((o)=>o.getAttribute("href")));r.head.append(...t.head.querySelectorAll(I),...[...t.head.querySelectorAll("link[rel=modulepreload]")].filter((o)=>!m.has(o.getAttribute("href"))));let d=new Map([...e.querySelectorAll("[data-gemi-persist]")].map((o)=>[o.dataset.gemiPersist,o])),g=[...n.querySelectorAll("[data-gemi-persist]")].map((o)=>[o,d.get(o.dataset.gemiPersist)]).filter((o)=>o[1]);for(let o of[...e.querySelectorAll("gemi-island")].reverse())if(o.o=1,!g.some((u)=>u[1].contains(o)))try{o.r?.unmount()}catch(u){console.error(u)}for(let[o,u]of g)o.replaceWith(u);for(let o of[...e.childNodes])if(!o.matches?.(T))o.remove();for(let o of[...n.children])if(o.matches(T))o.remove();for(let o of[...e.attributes])e.removeAttribute(o.name);for(let o of n.attributes)e.setAttribute(o.name,o.value);e.append(...n.childNodes,p),R(e,s)},H=async(t,e)=>{let n=++b,s=!e&&y[a.state?.g];a.scrollRestoration="manual";try{let[l,m]=await k(c(t));if(n!=b)return;let d=new DOMParser().parseFromString(m,"text/html");if(w(d)==null||w(d)!=w(r)||C(d)!=C(r))throw 0;if(e){let o=new URL(l);o.hash=t.hash,a.pushState({g:U()},"",o.href)}P=c(location),Y(d);let g=e&&t.hash&&r.getElementById(decodeURIComponent(t.hash.slice(1)));if(g)g.scrollIntoView({behavior:"instant"});else i.scrollTo({left:s?.[0]||0,top:s?.[1]||0,behavior:"instant"});if(e)N(g||r.querySelector("h1")||r.querySelector("main")||r.body);p.textContent=r.title,_(!1)}catch{if(n!=b)return;if(e)location.assign(t.href);else location.reload()}};h(r,"click",(t)=>{if(t.defaultPrevented||t.button||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let e=M(t);if(e&&r.dispatchEvent(new CustomEvent("gemi:before-navigate",{cancelable:!0,detail:{url:e.href}})))t.preventDefault(),E(),y[a.state.g]=[i.scrollX,i.scrollY],H(e,1)});h(i,"popstate",()=>{if(b++,c(location)==P){let t=y[a.state?.g];if(t)i.scrollTo({left:t[0],top:t[1],behavior:"instant"})}else if(a.state?.g)H(new URL(location.href),0);else location.reload()});h(i,"hashchange",E);h(i,"scroll",()=>a.state?.g&&(y[a.state.g]=[i.scrollX,i.scrollY]),{passive:!0});var S,x=(t)=>{if(r.querySelector(O)?.dataset.prefetch=="none"||navigator.connection?.saveData)return;let e=M(t);if(e&&c(e)!=c(location))k(c(e))};h(r,"pointerover",(t)=>{clearTimeout(S),S=setTimeout(()=>x(t),65)});h(r,"pointerout",()=>clearTimeout(S));h(r,"focusin",x);h(r,"touchstart",x,{passive:!0});E();R(r,D(r));_(!0);';import{createHash as uD}from"crypto";import{existsSync as QG,readFileSync as lD}from"fs";import{join as KJ}from"path";var GG=".script",iD=[".ts",".js"],sD="document-scripts.json",KG="data-gemi-script",nD=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function oD($){if(typeof $!=="string"||!nD.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 aD($,Z){for(let J of iD){let W=KJ($,"views",`${Z}${GG}${J}`);if(QG(W))return W}return null}async function XG($){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 rD($){return`'sha256-${uD("sha256").update($).digest("base64")}'`}var XJ,QJ=new Map;function tD(){if(XJ===void 0){let $=KJ(GJ(),"dist","server",sD);XJ=QG($)?JSON.parse(lD($,"utf8")):null}return XJ??null}async function BJ($){oD($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=tD()?.[$];if(j!==void 0)return j;let z=QJ.get($);if(z)return z}let J=KJ(GJ(),"app"),W=aD(J,$);if(!W)throw Error(`The document script "${$}" was not found. It is a file at app/views/${$}${GG}.ts (or .js).`);if(!Z)return XG(W);let Y=XG(W);return QJ.set($,Y),Y.catch(()=>QJ.delete($)),Y}async function v_($){return rD(await BJ($))}var eD="gemi-islands",l_=`'sha256-${BG("sha256").update(UJ).digest("base64")}'`;function FJ($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var VJ=($)=>$.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;"),i_=`'sha256-${BG("sha256").update(zJ).digest("base64")}'`,$O='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',ZO="gemi-static";function FG($,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" ${KG}="${VJ(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return FJ($,"</head>",G,!1);let F=(Y?`<meta name="${ZO}" content="${VJ(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((U)=>`<link rel="modulepreload" href="${VJ(U)}"/>`).join("")+G,K=Y?zJ:UJ,V=(Q?`<script type="application/json" id="${eD}">${B1({i:X})}</script>`:"")+`<script type="module">${W?$O+K:K}</script>`;return FJ(FJ($,"</head>",F,!1),"</body>",V,!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 VG($){let Z=`<template ${jG}="`;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=`<${i3} ${YG}="${j}" style="display:contents"></${i3}>`;$=$.split(Q).join(`<${i3} style="display:contents">${X}</${i3}>`)}return $}function DJ($){if(!$)return{locale:!0,session:!0,csrf:!0};return{locale:!1,session:$.session===!0,csrf:$.csrf===!0}}function UG($,Z){if($.getSetCookie().length>0){if(Z.cacheControl&&Bun.env.NODE_ENV!=="production")console.warn(`[gemi] A static view with cacheControl "${Z.cacheControl}" set a cookie, so it was sent "private, no-store" instead. Static pages are cacheable only when nothing on them sets a cookie.`);$.set("Cache-Control","private, no-store");return}if(Z.cacheControl&&!$.has("Cache-Control"))$.set("Cache-Control",Z.cacheControl)}var WO=async()=>(await import("./chunk-44y62yav.js")).default,OJ,s3=async(...$)=>{return OJ??=import("react-dom/server.browser").catch((Z)=>{throw OJ=void 0,Z}),(await OJ).renderToReadableStream(...$)},OG=1e4,LG="no-locale",YO="no-theme";async function jO($,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 MJ="/assets";function zO($){return $===MJ||$.startsWith(`${MJ}/`)}function XO($){let Z=$.filter(zO);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 "${MJ}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function QO($){let Z=H(j1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function LJ($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function GO($){let{status:Z=400,data:J,directive:W,headers:Y}=$;return new Response(JSON.stringify({data:J,directive:W}),{headers:Y,status:Z})}class n3{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];requiredViews={};staticRoutes=[];root=null;shellReporter=$G();preloadCache=new WeakMap;hooks;partialRendering;localeRouting;theme;defaultMeta;notFound;constructor($,Z={}){let J=NQ();this.partialRendering=$.partialRendering??J.partialRendering,this.localeRouting=$.localeRouting??J.localeRouting,this.theme=$.theme??J.theme,this.defaultMeta=$.meta,this.notFound=$.notFound,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":UQ(Z)};this.requiredViews=Object.fromEntries(FQ(Z).map(({view:Y,requiredBy:j})=>[Y,j])),this.flatViewRoutes=c4(W),XO(Object.keys(this.flatViewRoutes)),this.routeManifest=u4(W),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,Y])=>Y.at(-1)!=="FILE")),this.componentTree=i4(W),this.flatComponentTree=WJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,Y])=>Y.static).map(([Y])=>Y);for(let Y of this.staticRoutes){let j=this.flatViewRoutes[Y].static?.layout;if(j&&!this.flatComponentTree.includes(j))this.flatComponentTree.push(j)}if(this.notFound){for(let Y of[this.notFound.view,this.notFound.static?.layout])if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=H($$);for(let J of $)if(!await Z.enabled(J))return!1;return!0}async onRequestEnd($,Z={}){if(Z.mintSession!==!1)s4();return await this.hooks.onRequestEnd($)}completeStream($,Z){let J=(W)=>{t$.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)=>u1("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=HJ(),F=new AbortController,K=setTimeout(()=>F.abort(),OG),V=(D)=>{if(Bun.env.NODE_ENV!=="production")console.error(D)},U=WG(async(D,O)=>{let L=await s3(D,{signal:F.signal,identifierPrefix:O,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:V});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 BJ(O)};let L;if(W.navigation){let I=W.navigation===!0?{}:W.navigation,E=I.version?String(await J(()=>I.version(Z))):"";L={identity:[W.layout??"",$.buildId??"",D?.name??"",E].join("|"),prefetch:I.prefetch==="none"?"none":"intent"}}let P=await s3(u1(zG.Provider,{value:U,children:u1(DG,{children:[...G,u1(this.root,{data:j,viewImportMap:$.viewImportMap,viewModules:$.viewModules,serverQueries:z,dictionarySink:B,rootLayout:Q,key:"root"})]})}),{signal:F.signal,progressiveChunkSize:Number.MAX_SAFE_INTEGER,onError:V});await P.allReady.catch(()=>{});let M=VG(await new Response(P).text());return new Response(FG(M,U,$.resolveIsland,Bun.env.NODE_ENV!=="production",L,D),{status:$.status,headers:X})}finally{clearTimeout(K),J(()=>this.completeStream(Z,z.summarize(F.signal.aborted)))}}async render($){let{req:Z,runInRequestScope:J,csrfTokenHMAC:W,currentPathName:Y,headers:j,i18n:z,params:X,pathname:Q,serverQueries:G,userAgent:B,noStream:F,noTheme:K,url:V,user:U,viewData:D,breadcrumbs:O,urlLocaleSegment:L,meta:P,isOgRequest:M,appId:I,features:E,staticView:S}=$,R=this.theme===!1||K||S?null:{cookie:this.theme.cookie??h9,default:this.theme.default??null,value:KO(Z,this.theme.cookie??h9)},f=L?rQ(Q,[L]).pathname:Q,N={kind:"view",data:{meta:P,pageData:{[f]: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:V.search,is404:!Y?!0:!1,domain:Z.domain?QO(Z):null},appId:I,features:E,theme:R,componentTree:[["404",[]],...this.componentTree],...this.staticRoutes.length>0?{staticRoutes:this.staticRoutes}:{}},head:{}},_=this.root,x=this.routeManifest[Y];return async(I1)=>{let{bootstrapModules:k0=[],loaders:JZ,getStyles:T$,viewImportMap:p,cssManifest:y,ogMap:L0,viewModules:x1,clientEntry:WZ,modulePreloadManifest:$3,assetBase:C1,resolveIsland:N$,buildId:A1}=I1,i1=WZ?[]:k0,J0=(m)=>[m,`window.loaders=${JZ}`,...WZ?[`import(${JSON.stringify(WZ.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(M){let m=null,z1=null;for(let B0 of x??[])if(typeof L0[B0]==="function")z1=B0,m=L0[B0];if(!m)return new Response("Not found",{status:404});let k=Object.values(N.data.pageData)[0];try{await s3(u1(m,k[z1]),{onError:()=>{}})}catch(B0){let{fonts:Z3,..._K}=B0.satoriOptions,IK=await Promise.all(Z3.map((r3)=>{return jO(r3.name,r3.weight,r3.style).then((EK)=>({...r3,data:EK}))})),rJ=new Headers(j);rJ.set("Content-Type","image/png");let[xK,CK]=await Promise.all([WO(),h4("Rendering an OG image")]),AK=await xK(B0.jsx,{..._K,fonts:IK}),SK=await CK(Buffer.from(AK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(SK),{headers:rJ})}return new Response("data")}if(S&&Y)return await this.renderStatic({req:Z,runInRequestScope:J,staticView:S,currentViews:x,data:N.data,serverQueries:G,headers:j,getStyles:T$,viewImportMap:p,viewModules:x1,resolveIsland:N$,buildId:A1,status:200});if(S&&!Y&&this.notFound){let m=this.notFound.view;if(!p[m])throw Error(`The not-found view "${m}" (route.view.notFound) was not found. It is a view path: a file at app/views/${m}.tsx.`);return await this.renderStatic({req:Z,runInRequestScope:J,staticView:S,currentViews:[m],data:N.data,serverQueries:G,headers:j,getStyles:T$,viewImportMap:{...p,"404":p[m]},viewModules:x1&&{...x1,"404":x1[m]},resolveIsland:N$,buildId:A1,status:$.refusedStatus??404})}if(N.data.cssManifest=y,N.data.modulePreloadManifest=$3??{},C1&&C1!=="/")N.data.assetBase=C1;if(A1&&A1!=="dev")N.data.buildId=A1;let Q8=this.modulePreloadLinks({clientEntry:WZ,modulePreloadManifest:$3,views:x??["404"],routeKey:Y??"404"}),G8=await T$(x??["404"]);N.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let s0=new AbortController,YZ=setTimeout(()=>s0.abort(),OG),_$=H6(B)||F,jZ=Bun.env.NODE_ENV!=="production"&&!_$&&Y&&this.shellReporter.shouldObserve(Y)?ZG():null,I$=HJ();try{let m=await s3(u1(DG,{children:[...Q8,...G8,...R?[u1("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:CQ(B1({cookie:R.cookie,default:R.default}))}})]:[],u1(_,{data:N.data,viewImportMap:p,viewModules:x1,serverQueries:G,dictionarySink:I$,key:"root"})]}),{bootstrapScriptContent:J0(`window.__GEMI_DATA__ = ${B1(N.data)}`),bootstrapModules:i1,signal:s0.signal,..._$?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(z1){if(Bun.env.NODE_ENV!=="production")console.error(z1)}});if(m.allReady.catch(()=>{}).finally(()=>clearTimeout(YZ)),_$)await m.allReady.catch(()=>{});return new Response(l8(m,G,{onShell:_$?void 0:()=>G.markShell(),onChunk:jZ?.onChunk,onClose:()=>J(()=>{if(this.completeStream(Z,G.summarize(s0.signal.aborted)),jZ)this.shellReporter.report(Y,jZ.measure())})},I$),{status:!Y?$.refusedStatus??404:200,headers:j})}catch(m){if(clearTimeout(YZ),Bun.env.NODE_ENV==="production")throw J(()=>this.completeStream(Z,G.summarize(s0.signal.aborted))),m;let z1=await s3(u1("div"),{bootstrapScriptContent:J0(`window.error= ${B1(m.message)}; window.stack_trace=${B1(m.stack)};window.__GEMI_DATA__ = ${B1(N.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...i1]:i1});return new Response(l8(z1,G,{onClose:()=>J(()=>this.completeStream(Z,G.summarize(s0.signal.aborted)))}),{status:!Y?$.refusedStatus??404:200,headers:j})}}}viewRefusalStatus($,Z,J){if(C$(Z))return 404;if(Z?.kind===a1){let W=Z.payload?.view?.status;return W===403||W===404?W:null}if(r1(Z)){if(!J.has(Z))this.hooks.onRequestFail($,Z);return console.error(Z),403}if(Z instanceof d1&&(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,F=H(l),K=u3(this.flatViewRoutes,j),V=F.isLocaleAware&&this.localeRouting==="prefix"&&!K?.route.middleware.includes(LG);if(V&&F.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(/\/+$/,""),x=V&&F.supportedLocales.includes(_.slice(1));if(_&&!x)return new Response("",{status:301,headers:{Location:`${_}${J.search}`}})}if(V&&!Y&&B===null&&!(B===null&&K!==null)){let _=HG(z,F.supportedLocales,F.defaultLocale);if(_){let x=X.length?`/${X.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${x}${W?".json":""}${J.search}`}})}}if(V&&!Y){let _=H(l).detectLocale(new A($,{},"view",Q));if(B===null&&_!==F.defaultLocale){let x=J.pathname==="/"?"":J.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${_}${x}${J.search}`}})}}Q=Q.replace("//","/");let D=[],O=[],L=null,P={},M=null,I=!1,E=!1,S=[],R,f=!1;try{let _=u3(this.flatViewRoutes,Q);if(B&&_?.route.middleware.includes(LG))_=null;if(_){if(f=!0,L=_.routePath,P=_.params,D=_.route.exec,O=_.route.middleware,S=_.route.features,I=O.includes("no-stream"),E=O.includes(YO),R=_.route.static,W&&this.partialRendering){let x=$.headers.get(JJ),I1=aQ({flatViewRoutes:this.flatViewRoutes,supportedLocales:H(l).supportedLocales,from:x,origin:J.origin,to:{segments:_.route.segments,params:P,search:J.search}});if(I1.startIndex>0)D=D.slice(I1.startIndex),M={from:x,carriedViews:I1.carriedViews}}}}catch(_){throw _}if(R&&W)return new Response("Not found",{status:404});let N=new A($,P,"view",L);return this.hooks.onRequestStart(N),await T.run(N,async()=>{let _=null,x=T.getStore(),I1=aZ.getStore(),k0=(y)=>aZ.run(I1,()=>T.runWith(x,y));x.serverQueries=new nZ(l3($));let JZ=new Set;x.serverQueries.onQueryFail((y)=>{JZ.add(y.error);try{k0(()=>Promise.resolve(this.hooks.onRequestFail(p,y.error)).catch(()=>{}))}catch{}});let T$=DJ(R??(L===null&&!W?this.notFound?.static:void 0));if(B){let y=B.replaceAll("/","");P$.setLocale(y,{cookie:T$.locale})}else if(F.isLocaleAware&&!V)x.setLocale(F.defaultLocale);else P$.setLocale(void 0,{cookie:T$.locale});let p=x.req;if(T$.session)s4();try{let y=null;try{await H(o1).runMiddleware(O)}catch(k){if(y=this.viewRefusalStatus(p,k,JZ),y===null)throw k}if(y!==null||S.length>0&&!await this.passesFeatureGates(S))L=null,D=[],p.routePath="";let L0=H(l),x1=L0.isEnabled,WZ=L0.isLocaleAware,$3=new A($,p.params),C1={defaultLocale:L0.defaultLocale,timeZone:L0.detectTimeZone($3)};if(WZ){let k=null;if(B)k=B.replaceAll("/",""),x.setLocale(k);else if(!V)k=x.locale??L0.defaultLocale;else k=L0.detectLocale($3),x.setLocale(k);let B0=x1?L0.getPageTranslations(k,p.routePath):{};C1={...C1,supportedLocales:L0.supportedLocales,currentLocale:k,dictionary:{[k]:B0},defaultLocale:L0.defaultLocale,...V?{}:{localeRouting:"off"}}}await MG(C1.currentLocale??"");let N$;try{N$=await Promise.all(D.map((k)=>k(p)))}catch(k){if(y=this.viewRefusalStatus(p,k,JZ),y===null)throw k;L=null,D=[],p.routePath="",N$=[]}let A1=void 0;if(L===null)A1=await this.hooks.onNotFound(p,{status:y??404});if(this.defaultMeta&&!x.metadata.hasAllDefaultFields)x.metadata.applyDefaults(typeof this.defaultMeta==="function"?await this.defaultMeta(p):this.defaultMeta);let{cookies:i1,headers:J0}=x;if(y!==null)J0.set("Cache-Control","no-store");_={data:N$,cookies:i1,headers:J0,user:x.user,prefetchedData:x.serverQueries.snapshotResolved(),currentPathName:L,params:p.params,urlLocaleSegment:G,meta:x.renderMeta(),appId:H(YJ).id,features:await H($$).forClient()};let{params:Q8,user:G8}=_,s0={},YZ={};for(let k of N$??[]){let[B0,Z3]=Object.entries(k)?.[0]??[];if(!B0||!Z3)continue;YZ[`${B0}:${L}`]=Z3.breadcrumb,s0[B0]=Z3}let _$=L===null&&this.notFound&&!W?this.notFound.static:void 0;if(_$&&A1)s0["404"]=A1;let jZ=s0.FILE;if(jZ){for(let k of i1)J0.append("Set-Cookie",k.toString());try{await this.onRequestEnd(p)}catch(k){t$.error(k?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(k)})}return await N8(jZ,J0)}if(W){J0.set("Content-Type","application/x-ndjson; charset=utf-8"),J0.append("Vary",JJ),i1.forEach((B0)=>J0.append("Set-Cookie",B0.toString())),await this.hooks.onRequestEnd(p);let k={meta:M&&!x.metadata.touched?null:_.meta,data:{[Q]:s0},breadcrumbs:YZ,prefetchedData:x.serverQueries.snapshotResolved(),i18n:C1,features:_.features,is404:!L,appId:_.appId,partial:M};return new Response(JG(k,x.serverQueries,void 0,({aborted:B0})=>k0(()=>this.completeStream(p,x.serverQueries.summarize(B0)))),{headers:J0})}J0.set("Content-Type","text/html; charset=utf-8");let I$=L?R:_$,m=Boolean(I$),z1=DJ(I$);if(!I&&!m)J0.append("Vary","User-Agent");if(!m||z1.session)s4();for(let k of i1)J0.append("Set-Cookie",k.toString());if(!m||z1.csrf){let k=Bun.CSRF.generate(process.env.SECRET);J0.append("Set-Cookie",`csrf_token=${k}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`)}try{await this.onRequestEnd(p,{mintSession:!m||z1.session})}catch(k){t$.error(k?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(k)})}if(m&&(L||!f))UG(J0,I$);return await this.render({req:p,runInRequestScope:k0,csrfTokenHMAC:Buffer.from(""),currentPathName:L,headers:J0,i18n:C1,params:Q8,pathname:J.pathname,serverQueries:x.serverQueries,userAgent:$.headers.get("user-agent"),noStream:I,noTheme:E,url:J,user:G8,viewData:s0,breadcrumbs:YZ,urlLocaleSegment:G,meta:_.meta,appId:_.appId,features:_.features,isOgRequest:Y,staticView:I$,refusedStatus:y??void 0})}catch(y){if(y.kind===a1){let L0=W?GO(y.payload.viewData??y.payload.api):LJ(y.payload.view);for(let x1 of x.cookies)L0.headers.append("Set-Cookie",x1.toString());return L0}if(!JZ.has(y))this.hooks.onRequestFail(p,y);if(r1(y))return console.error(y),W?oZ():LJ(jJ());if(y instanceof d1&&y.status===403)return W?oZ():LJ(jJ());throw y}},Z)}}function KO($,Z){let J=$.cookies?.get(Z);return xQ(J)?J:null}function PJ(){let $=JSON.stringify({error:t1("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 IG extends I0{routes={"/api-routes":this.get(()=>{let $=H(o4).flatRoutes,Z=[];for(let[J,W]of Object.entries($))for(let[Y,j]of Object.entries(W)){let{exec:z,middleware:X}=j;Z.push({path:J,method:Y,middleware:X})}return Z}),"/view-routes":this.get(()=>{let $=H(n3).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 BO=new Set([n1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),FO=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,VO=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function UO($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(BO.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===n1)throw Error(`dispatchAs: credentials may not set the "${n1}" cookie. The access token stays the initiator's.`);if(!FO.test(Y)||!VO.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function DO($,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 PG($){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 TG($,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 OO(){return Bun.env.NODE_ENV==="development"}class o4{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=TQ();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=v9({"/":$.rootRouter,"/auth":R9,"/__gemi__/services/i18n":f9,"/__gemi__/services/image":q9,...OO()?{"/__gemi__/services/logs":y9,"/__gemi__/debug":IG}:{}})}getRouteHandlerAndParams($){let Z=new URL($.url),J=_G(Z.pathname),W={},Y;for(let[j]of Object.entries(this.flatRoutes))try{let z=new URLPattern({pathname:j});if(z.test({pathname:J})){Y=j,W=z.exec({pathname:J})?.pathname.groups;break}}catch(z){console.error(z)}return{params:W,path:Y}}async runRouteMiddleware($,Z){let W=this.flatRoutes[$][Z.rawRequest.method].middleware;try{await H(o1).runMiddleware(W)}catch(Y){if(Y.kind===a1)return PG(Y.payload.api);else{if(C$(Y))return PJ();if(this.onRequestFail(Z,Y),console.error(Y),r1(Y))return oZ();throw Y}}}async getRouteData($){let Z=this.flatRoutes[$],J=T.getStore(),W=Z[J.req.rawRequest.method].exec??(()=>Promise.resolve({})),Y={};try{Y=await W()}catch(j){if(j.kind===a1)return PG(j.payload.api);if(C$(j))return PJ();if(this.onRequestFail(J.req,j),console.error(j),r1(j))return oZ();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){t$.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:t1("not_found","Not found",404)}),{status:404});let j=new A($,J,"api",W);if(!this.isFrameworkRoute(W))this.onRequestStart(j);return await T.run(j,async()=>{let z=T.getStore(),X=!1,Q=async()=>{X=!0,await this.endRequest(z,j,W)};try{let G=H(l);if(G.isEnabled){let D=G.detectLocale(j);z.setLocale(D)}z.setRequest(j),H(o1).applyDefaultBodyLimit($);let B=await this.runRouteMiddleware(W,j);if(B instanceof Response){let D=TG(B,z.headers,z.cookies);return await Q(),D}let F=await this.getRouteData(W),K=z.headers,V=z.cookies;if(F instanceof Response){let D=TG(F,K,V);if(this.isOpenEndedBody($,D)){let O=DO(D,()=>this.endRequest(z,j,W));return X=!0,O}return await Q(),D}let U=(s1(F)?F:X1.json(F)).toResponse(K,V);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=[],F=Q?null:$.cookies.get(n1);if(F)B.push(`${n1}=${F}`);if(Y?.credentials)UO(G,B,Y.credentials,Q!==void 0);if(B.length>0)G.set("Cookie",B.join("; "));let K=Q?null:$.headers.get(n1);if(K)G.set(n1,K);let V=$.headers.get("User-Agent");if(V)G.set("User-Agent",V);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(NG(D,BZ($),Q?.grant,Y?.progress),$.domain)rZ(D,$.domain);let O=Q?{user:Q.user}:void 0;return T.exit(()=>Y6.exit(()=>this.handleApiRequest(D,O)))}}import{timingSafeEqual as LO}from"crypto";var r4="",IJ="*",HO=60000,MO=1e4,NJ=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,a4=16,TJ=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,_J="x-forwarded-host";function CG($){return $.startsWith(":")}function o3($,Z){if($===null)return!1;let J=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return J.length===W.length&&LO(J,W)}function PO($){if(!$)return[];if($===!0)return[{header:_J,clientIpHeader:null,secret:null}];let Z=Array.isArray($)?$:[$],J=Array.isArray($)?null:_J;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 TO($){if(!$||$===!0)return;if(!Array.isArray($)){xG($,"route.domains.trustProxy",_J);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.`);xG(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 xG($,Z,J){let{hostHeader:W,clientIpHeader:Y,secret:j}=$;if(W!==void 0&&(typeof W!=="string"||!TJ.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"||!TJ.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"||!TJ.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<a4)throw Error(`\`${Z}.secret.value\` must be at least ${a4} characters. A guessable one lets any client name its own host.`)}function T1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function NO($){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 _O($){let Z=T1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>NJ.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<a4)throw Error(`\`route.domains.ask.secret\` must be at least ${a4} characters. A guessable one is worse than leaving \`ask\` out.`);TO($.trustProxy);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),CG(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)=>NJ.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 xJ{root;hostTrusts;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeaders;constructor($){_O($),this.root=T1($.root),this.hostTrusts=PO($.trustProxy);for(let Z of $.groups??[])if(CG(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??HO,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||o3($.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:S$(J)}applyClientIp($){let Z=this.trustedClientIp($);if(!Z)return;$.headers.set("x-forwarded-for",Z),$.headers.delete("x-real-ip")}hostOf($){return T1(this.forwardedHost($))??T1(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&&T1(Y)?NO(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:IJ,params:{},custom:!0};return null}async allows($,Z){let J=T1($);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:r4,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&&NJ.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>=MO)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=T1($);if(Z)this.cache.delete(Z)}}}var IO={kind:"none"};function Dx($){let Z=($??"").trim().toLowerCase();if(Z===""||Z==="false"||Z==="off"||Z==="0")return IO;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 Ox($,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:S$(z))??Z}if(W)$.set("x-forwarded-for",W);else $.delete("x-forwarded-for")}var AG=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,SG=16;function Lx($){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(!AG.test(Z))throw Error(`GEMI_CLIENT_IP_HEADER must be a single header name, e.g. "x-azure-clientip". Got ${JSON.stringify(Z)}.`);if(!AG.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<SG)throw Error(`GEMI_PROXY_SECRET must be at least ${SG} characters. A guessable one lets any client name its own address.`);return{header:Z.toLowerCase(),secretHeader:J.toLowerCase(),secret:W}}function EG($,Z){if(!o3($.get(Z.secretHeader),Z.secret))return null;let J=$.get(Z.header)?.split(",")[0];return J===void 0?null:S$(J)}var xO="/__gemi__/domains/ask";class j1{static token="router.domains";resolver;acceptsCustomDomains;clientIpTrust;groups=new Map;constructor($,Z){this.groups.set(r4,$),this.clientIpTrust=Z.clientIpTrust??null;let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new xJ(J);let W=(Y)=>({api:Y.api?new o4({...Z.api,...Y.api}):$.api,view:Y.view?new n3({...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(IJ,W(J.custom.fallback))}applyClientIp($){let Z=this.clientIpTrust;if(Z)CJ($,Z.secretHeader);let J=this.resolver?.trustedClientIp($)??(Z?EG($.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)CJ($,J);let Z=await this.resolver.resolve($);if(!Z)return null;return rZ($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==xO)return null;if(!o3(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??r4)}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 tZ($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var bG=600000;function RG($,Z){return[U6($,Z),U6($,Z-1)]}class b{static token="auth";config;provider;constructor($={},Z=new a8){PY($.oauthProviders),this.config={...M1(TY($),$),emailCode:u8($.emailCode)},this.provider=Z}async oauthProvider($){return await LZ(this.config.oauthProviders,$)}async oauthProviderNames(){return await qY(this.config.oauthProviders)}get userProvider(){return this.provider}accessTokenCookieOptions($,Z){return{expires:Z,secure:this.publicOrigin($).startsWith("https://"),httpOnly:!0,domain:this.cookieDomain($)}}publicOrigin($){let Z=H().bound(j1)?H(j1).resolver:null;return Z?Z.publicOrigin($.rawRequest):new URL($.rawRequest.url).origin}cookieDomain($){let Z=this.config.cookieDomain;if(!Z)return;let J=Z==="root"?H(j1).resolver?.root:T1(Z);if(!J)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let W=$.domain?.host??T1(new URL($.rawRequest.url).host);return W===J||W?.endsWith(`.${J}`)?J:void 0}async getSession($,Z){if(!$)return null;if(!g8($))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=tZ(J.expiresAt),j=tZ(J.absoluteExpiresAt);if(Y<=W||j<=W)return await this.userProvider.deleteSession({token:$}),null;let X=await this.slideSession(J,W);return X.user.extension=await this.config.extendSession(X.user),X}async convertLegacySession($,Z,J){let W=T.getStore()?.req;if(!W)return null;let Y=Date.now(),j=Math.floor(Y/bG),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=U6($,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 RG($,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(g8($)||!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()/bG),W=RG($,J);return this.userProvider.withLegacySessionLock($,async()=>{let Y=await this.userProvider.findSession({token:$,userAgent:Z});for(let j of W){if(Y?.user)break;Y=await this.userProvider.findSession({token:j,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let j of W)await this.userProvider.deleteSession({token:j});return Y})}requestCarryingCookie($){let Z=T.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let J=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=J/2)return $;let W=new Date(Math.min(Z+J,new Date($.absoluteExpiresAt).getTime())),Y=await this.userProvider.updateSession({token:$.token,expiresAt:W}),j=this.requestCarryingCookie($.token);if(j)j.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(j,W));if(!Y)return $;return{...$,expiresAt:Y.expiresAt??W}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let J=await this.createOrUpdateSession({email:$,id:Z.id}),W=new A;if(W.ctx().setCookie("access_token",J.token,this.accessTokenCookieOptions(W,J.expiresAt)),J?.user)J.user.extension=await this.config.extendSession(J.user);return J}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),J=null;if(Z?.user)J=await this.config.extendSession(Z.user),Z.user.extension=J;return Z}async createOrUpdateSession($){let Z=new A,J=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!J)throw new A$;let W=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),Y=QY(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:DY(Z),Q=D6("link",$,j),G=D6("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((V)=>tZ(V.createdAt)+B>Date.now()&&V.pin!==G&&V.token!==Q);await this.userProvider.deleteMagicLinkTokensExcept($,K.map((V)=>V.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 DZ("pin",$,null,Z),{status:"invalid"};let z=j.filter((G)=>tZ(G.createdAt)+W*60000>Date.now());if(z.length===0)return DZ("pin",$,null,Z),{status:"expired"};let X=!0;for(let G of z)if(!await HY(G.id,tZ(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(DZ("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 DZ("link",$,void 0,Z),!1;let W=null;for(let j of J)if(DZ("link",$,j.token,Z))W??=j;if(!W)return!1;if(tZ(W.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.claimOneTimeCode($,W.id)}}class w0 extends g{static getFacadeAccessor(){return b}static async user(){let $=await w0.userOrNull();if($)return $;throw new A$({redirectTo:z6(T.getStore()?.req,this.getFacadeRoot().config.signInPath)})}static async userOrNull(){let $=T.getStore();if($?.user)return $.user;let Z=await Z6(this.getFacadeRoot(),$?.req);if(Z)$?.setUser(Z);return Z}static intendedUrl($){let Z=T.getStore()?.req;return G1(Z?.search.get(Q1),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await w0.user();if(!await $(Z))throw new FZ}static async guardSafe($){let Z=await w0.user();try{return await $(Z)}catch(J){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async oauthProviders(){return await this.getFacadeRoot().oauthProviderNames()}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class t4{static ensure($,Z={}){let J=T.getStore();if(J.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return J.serverQueries??=new nZ(l3(J.req.rawRequest)),J.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let J=t4.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){t4.ensure($,Z[0])}static noPrefetch(){let $=T.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new nZ(l3($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function CO($){return(Array.isArray($)?$:String($).split("/")).map((J)=>encodeURIComponent(String(J))).join("/")}function AJ($,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==="*"?CO(z):encodeURIComponent(String(z))}`});return`${e4}${J==="/"?"":J}`||e4}var fG=new Map;function kG($,Z){let J=fG.get($);if(!J)J=new URLPattern({pathname:`${e4}${$==="/"?"":$}`}),fG.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 wG($,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=AO(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 AO($){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 qG{static origin($){return SJ($)}static absolute($,...Z){return`${o$()}${V0(String($),Z[0]??{})}`}static relative($,...Z){return V0(String($),Z[0]??{})}static forDomain($,Z,...J){let W=H(j1).resolver;if(!W)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let Y=T.getStore()?.req?.rawRequest,j=Y?W.publicOrigin(Y):o$();if(!j)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` (or `APP_URL`) for the protocol.");return wG({root:W.root,origin:j},$,V0(String(Z),J[0]??{}))}static api($,...Z){return AJ(String($),Z[0]??{})}static apiAbsolute($,...Z){return`${SJ()}${AJ(String($),Z[0]??{})}`}static matchApi($,Z){return kG(String($),Z)}}class yG{name="Meta";static description($){T.getStore().metadata.description($)}static title($){T.getStore().metadata.title($)}static openGraph($){T.getStore().metadata.openGraph($)}static htmlAttributes($){T.getStore().metadata.htmlAttributes($)}static canonical($){T.getStore().metadata.canonical($)}static alternates($){T.getStore().metadata.alternates($)}static robots($){T.getStore().metadata.robots($)}static fonts($){T.getStore().metadata.fonts($)}}var SO={set($,Z,J){T.getStore().setCookie($,Z,J)},setIfAbsent($,Z,J){if(T.getStore().req.cookies.has($))return!1;return T.getStore().setCookie($,Z,J),!0},delete($,Z){T.getStore().deleteCookie($,Z)}};class l1 extends g{static getFacadeAccessor(){return e$}static get client(){return this.getFacadeRoot().client}static get($){return l1.client.get($)}static set($,Z){return l1.client.set($,Z)}static del(...$){return l1.client.del(...$)}static exists($){return l1.client.exists($)}static incr($){return l1.client.incr($)}static expire($,Z){return l1.client.expire($,Z)}static ttl($){return l1.client.ttl($)}}function UC($){return $}function vG(){return{store:"memory",ttl:null}}class EJ{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 EO="500";class bJ{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=`${bO(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",EO]),[Y,j]=Array.isArray(W)?W:["0",[]];if(J=String(Y),Array.isArray(j)&&j.length>0)await $.send("UNLINK",j.map(String))}while(J!=="0")}get client(){if(this.injectedClient)return this.injectedClient;let $=H(),Z=$.bound(e$)?$.make(e$).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 bO($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var RO="k:",gG="tag:",fO="t:";class RJ{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 fJ extends RJ{options;static token="cache";config;builtStore;inflight=new Map;constructor($={},Z={}){super();this.options=Z;if(this.config=M1(vG(),$),this.config.ttl!==null&&this.config.ttl!==void 0)$Z(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 hG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return RO+pG($)}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=gG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=mG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(gG+Z,mG(),null)))}ttlMs($){let Z=$===void 0?this.config.ttl:$;return Z===null||Z===void 0?null:$Z(Z)}buildStore(){let{store:$}=this.config;if($===void 0||$==="memory")return new EJ(this.config.memory);if($==="redis"){let Z=this.options.application;return new bJ({...this.config.redis,client:Z?{send:(J,W)=>Z.make(e$).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 hG extends RJ{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){pG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${fO}${Z.join(",")}:${$}`}}function pG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function mG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class cG extends g{static getFacadeAccessor(){return fJ}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 dG extends g{static getFacadeAccessor(){return K1}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}static enforce($,Z={},J){return this.getFacadeRoot().enforce($,Z,J)}}class lG extends g{static getFacadeAccessor(){return uG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class sG extends g{static getFacadeAccessor(){return iG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class nG extends g{static getFacadeAccessor(){return d3}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 cC($){return $}function oG(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function $8($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function kJ($){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:kO}=globalThis.Bun;function wO(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var qO=async($)=>{let Z=new kO($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},yO=async($)=>{let Z;try{Z=(await import("./chunk-777v6242.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(()=>{})}},aG=($)=>wO()?qO($):yO($);var vO=/^[A-Za-z_][A-Za-z0-9_]*$/;class wJ{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(!vO.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??aG}async createTable(){for(let $ of gO(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 rG(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 $=d0();if($===void 0||R1()!==this.connection)return;return $}}function gO($,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 qJ{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 JK=new TextEncoder;function tG($,Z){return JK.encode(`id: ${$}
50
+ data: ${JSON.stringify(Z)}
51
+
52
+ `)}function WK($,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 Z8))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{}},F=new ReadableStream({start(K){X=setInterval(()=>{if(ZK())return B(K);try{K.enqueue(JK.encode(eG))}catch{B(K)}},$.config.keepaliveInterval)},async pull(K){try{if(!Q){if(await z.ready(),Q=!0,!G)K.enqueue(tG(z.cursor,{type:"ready"}));return}let V=await z.next();if(V.done||G)return B(K);K.enqueue(tG(z.cursor,V.value))}catch(V){if(!G)console.error("[gemi] A change feed stream failed.",V);B(K)}},cancel(){if(G=!0,X)clearInterval(X);X=null,z.close()}});return new Response(F,{headers:$K()})}var YK=255,jK=500,mO=30000;class Z8 extends Error{limit;constructor($){super(`The change feed holds its limit of ${$} subscriptions.`);this.limit=$;this.name="ChangeFeedFullError"}}class eZ{options;static token="changeFeed";driver;config;followers=new Map;all=new Set;listenState="off";listening=null;retryTimer=null;backoffMs=jK;pollTimer=null;polling=null;constructor($={},Z={}){this.options=Z;this.config=M1(oG(),$),this.driver=pO(this.config.driver,Z.application)}get subscriptions(){return this.all.size}get isListening(){return this.listenState==="listening"}async publish($,Z){vJ($);let J=Z===void 0?null:Z;if(d0()!==void 0&&!this.driver.joinsTransaction?.())return dZ(async()=>{this.wake($,await this.driver.publish($,J))}),null;let W=await this.driver.publish($,J);return dZ(()=>this.wake($,W)),W}async head($){return vJ($),(await this.driver.heads([$])).get($)??0}async cursor($){let Z=yJ($);return $8(await this.driver.heads(Z))}subscribe($,Z={}){let J=yJ($);if(this.all.size>=this.config.maxSubscriptions)throw new Z8(this.config.maxSubscriptions);let W=new zK(this,J,hO(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 WK(this,$,yJ(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=jK,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,mO)}}}class zK{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 $8(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 vJ($){if(typeof $!=="string"||$===""||$.length>YK)throw Error(`A change feed channel is a string of 1 to ${YK} characters; got ${JSON.stringify($)}.`)}function yJ($){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)vJ(J);return Z}function hO($){if($===void 0||$===null)return new Map;if(typeof $==="string")return kJ($);let Z=$ instanceof Map?[...$]:Object.entries($);return kJ($8(new Map(Z)))}function pO($,Z){if($==="memory")return new qJ;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 wJ(Z.make(f1));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 XK extends g{static getFacadeAccessor(){return eZ}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 a3 extends p0{application;previous;sent=[];revoked=[];static install($){let Z=$.bound(p0)?$.make(p0):void 0;if(Z instanceof a3)return Z;let J=new a3($,Z);return $.instance(p0,J),J}constructor($,Z){super({driver:"memory",maxEventBytes:Z?.config.maxEventBytes,warnEventBytes:Z?.config.warnEventBytes},{application:$});this.application=$;this.previous=Z;this.channelsFrom=Z}channelsFrom;get channels(){return this.channelsFrom?.channels??null}publish($){this.sent.push($)}sendRevocation($){this.revoked.push($)}restore(){if(this.previous){this.application.instance(p0,this.previous);return}this.application.forget(p0)}assertSent($,Z,J){if(this.matching($,Z,J).length>0)return;throw Error(`Expected ${gJ($,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 ${gJ($,Z,J)} not to have been broadcast, but it was broadcast ${mJ(W.length)}: ${hJ(W)}.`)}assertSentTimes($,Z,J,W){let Y=this.matching($,J,W);if(Y.length===Z)return;throw Error(`Expected ${gJ($,J,W)} to have been broadcast ${mJ(Z)}, but it was broadcast ${mJ(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"}: ${hJ(this.sent)}.`)}matching($,Z,J){return QZ($),this.sent.filter((W)=>(W.pattern===$||LW($,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: ${hJ(this.sent)}.`}}function gJ($,Z,J){return`${Z?`"${Z}" on `:"an event on "}"${$}"`+(J?" matching the predicate":"")}function mJ($){return`${$} ${$===1?"time":"times"}`}function hJ($){return $.map((Z)=>`${Z.topic} ${Z.event}(${cO(Z.data)})`).join(", ")}function cO($){if($===void 0)return"";try{return JSON.stringify($)??String($)}catch{return String($)}}class QK extends g{static getFacadeAccessor(){return p0}static to($,...Z){return this.getFacadeRoot().to($,...Z)}static toUser($){return this.getFacadeRoot().toUser($)}static toOthers($){return this.getFacadeRoot().toOthers($)}static revoke($){this.getFacadeRoot().revoke($)}static fake(){return a3.install(H())}}function TA($){return $}function GK(){return{store:"memory",sweepLimit:500}}var pJ=["completed","failed","cancelled","timed_out"],N1=["pending","running"];function _1($){return pJ.includes($)}class cJ{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,dJ($.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(_1(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(N1.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 dJ($){if($===void 0)return 50;return Math.max(0,Math.floor($))}class iJ{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 dO(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
+ ${W8($.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]?lJ(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 (${J8(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 ${dJ($.limit)}
64
+ `).map(lJ)}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(_1(J.status))j.push(W`finished_at = ${Y}`)}if("progress"in J)j.push(W`progress = ${W8(J.progress)}`);if("result"in J)j.push(W`result = ${W8(J.result)}`);if("error"in J)j.push(W`error = ${W8(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 (${J8(W,Z)})
67
+ `;if(BK(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 (${J8(J,N1)})
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(lJ)}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 (${J8(Z,pJ)})
76
+ AND finished_at <= ${this.clock(Z)} - ${this.ms(Z,$)}
77
+ `;return BK(J)}joinable(){if(this.connection===void 0)return;let $=d0();if($===void 0||R1()!==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 J8($,Z){return Z.map((J)=>$`${J}`).reduce((J,W)=>$`${J}, ${W}`)}function W8($){return $===void 0||$===null?null:JSON.stringify($)}function Y8($){if($===null||$===void 0)return null;return JSON.parse(String($))}function uJ($){return $===null||$===void 0?null:Number($)}function KK($){return $===null||$===void 0?null:String($)}function lJ($){return{id:String($.id),kind:String($.kind),subject:KK($.subject),owner:KK($.owner),status:String($.status),meta:Y8($.meta),progress:Y8($.progress),result:Y8($.result),error:Y8($.error),version:Number($.version),createdAt:Number($.created_at),startedAt:uJ($.started_at),updatedAt:Number($.updated_at),finishedAt:uJ($.finished_at),deadlineAt:uJ($.deadline_at)}}function BK($){let Z=$;return Math.max(Number(Z.count??0),Number(Z.affectedRows??0))}function dO($,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 FK=191,VK=30000;class j8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class z8 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 sJ{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=M1(GK(),$),this.store=iO(this.config.store,Z.application)}get feed(){if(this.options.feed)return this.options.feed;if(this.options.application)return this.options.application.make(eZ);return this.ownFeed??=new eZ,this.ownFeed}channel($){return`gemi:run:${$}`}async create($){OK("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;OK("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:$Z($.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 lO(Z),this.change($,N1,{status:"running",progress:Z})}complete($,Z){return this.change($,N1,{status:"completed",result:Z===void 0?null:Z})}fail($,Z){return this.change($,N1,{status:"failed",error:DK(Z)})}cancel($,Z){return this.change($,N1,{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 j8($);if(_1(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 z8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,N1,{status:"failed",error:Q instanceof z8?DK(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()+$Z(Z.timeout),Y=this.feed.subscribe(this.channel($),{signal:J});try{await Y.ready();let j=await this.store.get($);if(!j)throw new j8($);let z=null;for(;;){if(_1(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 UK(z,Math.min(Q,X??1/0,VK),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 j8($);if(yield W,_1(W.status))return;for await(let Y of J){let j=uO(Y,$)??await this.store.get($);if(!j||j.version<=W.version)continue;if(W=j,yield W,_1(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=$Z($);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||_1(Z.status))return null;let J=await this.untilDeadline(Z);if(J===null||J>0)return null;return this.change($,N1,{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(_1(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,UK(j,Math.min(z??1/0,VK))]);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 UK($,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 uO($,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 DK($){if(typeof $==="string")return{message:$};if($ instanceof z8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function OK($,Z){if(typeof Z!=="string"||Z===""||Z.length>FK)throw TypeError(`A run's ${$} is a string of 1 to ${FK} characters; got ${JSON.stringify(Z)}.`)}function lO($){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 iO($,Z){if($==="memory")return new cJ;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(f1).connection();return new iJ(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 LK extends g{static getFacadeAccessor(){return sJ}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 HK extends g{static getFacadeAccessor(){return $$}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 aJ{value;constructor($){this.value=$}}var sO=/^[A-Za-z_][A-Za-z0-9_$]*$/;function nO($){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"||!sO.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 X8{bound;constructor($){this.bound=$}get name(){return this.bound??R1()}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 oJ(J.sql,(W)=>nJ(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=nO(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(d0()!==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 oJ(z.sql,async(X)=>{for(let G of Y)await X.unsafe(G);let Q=await nJ(j,()=>W(X));throw new aJ(Q)},{slowTransactionThreshold:z.config.slowTransactionThreshold,connection:j})}catch(X){if(X instanceof aJ)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-hgpvfhtp.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let J=this.connection(),{text:W,values:Y}=TK($,PK(J.dialect),Z);return(this.handle()??J.sql).unsafe(W,Y)}handle(){let $=d0();if($===void 0)return;return R1()===this.name?$:void 0}connection($=this.name){return MK($),H(f1).connection($)}}var ZZ=new X8;class NK extends g{static getFacadeAccessor(){return f1}static connection($){return new X8($)}static get sql(){return ZZ.sql}static get dialect(){return ZZ.dialect}static query($){return ZZ.query($)}static execute($){return ZZ.execute($)}static transaction($){return ZZ.transaction($)}static readOnly($,Z){return ZZ.readOnly($,Z)}static schema(){return ZZ.schema()}static close(){return this.getFacadeRoot().close()}}export{X1 as ie,RK as je,n0 as ke,J3 as le,V8 as me,XZ as ne,Y3 as oe,I0 as pe,Z6 as qe,v8 as re,g8 as se,QY as te,e1 as ue,K1 as ve,S$ as we,t as xe,hW as ye,BZ as ze,GY as Ae,KY as Be,h8 as Ce,p8 as De,D6 as Ee,DZ as Fe,uB as Ge,VP as He,TY as Ie,SY as Je,i8 as Ke,EY as Le,bY as Me,tB as Ne,RY as Oe,s8 as Pe,ZF as Qe,JF as Re,n8 as Se,fY as Te,kY as Ue,$$ as Ve,wY as We,zF as Xe,a8 as Ye,I8 as Ze,X6 as _e,S1 as $e,N8 as af,E1 as bf,P$ as cf,t4 as df,qG as ef,yG as ff,SO as gf,l1 as hf,UC as if,vG as jf,EJ as kf,bJ as lf,fJ as mf,hG as nf,cG as of,dG as pf,lG as qf,sG as rf,nG as sf,cC as tf,oG as uf,$8 as vf,kJ as wf,wJ as xf,qJ as yf,Z8 as zf,eZ as Af,zK as Bf,XK as Cf,d as Df,j3 as Ef,f4 as Ff,rP as Gf,tP as Hf,eP as If,WT as Jf,hX as Kf,N9 as Lf,dX as Mf,QT as Nf,iX as Of,p0 as Pf,h3 as Qf,sX as Rf,QK as Sf,TA as Tf,pJ as Uf,N1 as Vf,_1 as Wf,cJ as Xf,iJ as Yf,dO as Zf,j8 as _f,z8 as $f,sJ as ag,LK as bg,HK as cg,X8 as dg,NK as eg,I9 as fg,WD as gg,k9 as hg,w9 as ig,HN as jg,DQ as kg,MQ as lg,J6 as mg,o1 as ng,kN as og,TQ as pg,NQ as qg,YJ as rg,oZ as sg,jJ as tg,v_ as ug,l_ as vg,i_ as wg,MJ as xg,zO as yg,LJ as zg,GO as Ag,n3 as Bg,PJ as Cg,PG as Dg,TG as Eg,o4 as Fg,Dx as Gg,Ox as Hg,Lx as Ig,j1 as Jg,b as Kg,w0 as Lg,W6 as Mg,NW as Ng,lK as Og,MW as Pg,IW as Qg,M8 as Rg,j6 as Sg,P8 as Tg,xW as Ug,tK as Vg,eK as Wg,RW as Xg,kW as Yg,qW as Zg,cW as _g,dW as $g,uW as ah,S8 as bh,jB as ch,Y0 as dh,ZY as eh,VZ as fh,zY as gh};
116
+
117
+ //# debugId=06B83C692D3B960264756E2164756E21