gemi 0.169.0 → 0.171.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/App.d.ts +6 -3
- package/dist/app/App.d.ts.map +1 -1
- package/dist/app/index.js +1 -1
- package/dist/bin/gemi.js +7 -4
- package/dist/bin/gemi.js.map +3 -3
- package/dist/{chunk-acmf790v.js → chunk-212m5z3p.js} +1 -1
- package/dist/{chunk-skv12k0x.js → chunk-376s9rbe.js} +1 -1
- package/dist/chunk-3qtn3zjt.js +117 -0
- package/dist/{chunk-d849rktz.js.map → chunk-3qtn3zjt.js.map} +5 -5
- package/dist/chunk-743ympvp.js +4 -0
- package/dist/chunk-743ympvp.js.map +10 -0
- package/dist/{chunk-5aexecst.js → chunk-eq3xexqp.js} +6 -6
- package/dist/{chunk-5aexecst.js.map → chunk-eq3xexqp.js.map} +3 -3
- package/dist/{chunk-gv5r1rd7.js → chunk-ztfkmpk5.js} +2 -2
- package/dist/{chunk-gv5r1rd7.js.map → chunk-ztfkmpk5.js.map} +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/http/index.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/server/httpDev.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/router/DomainResolver.d.ts +8 -0
- package/dist/services/router/DomainResolver.d.ts.map +1 -1
- package/dist/services/router/ViewRouteDispatcher.d.ts +2 -0
- package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
- package/dist/services/router/config.d.ts +44 -3
- package/dist/services/router/config.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-d849rktz.js +0 -117
- package/dist/chunk-g548q257.js +0 -4
- package/dist/chunk-g548q257.js.map +0 -10
- /package/dist/{chunk-acmf790v.js.map → chunk-212m5z3p.js.map} +0 -0
- /package/dist/{chunk-skv12k0x.js.map → chunk-376s9rbe.js.map} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{lh as NK}from"./chunk-vnk4vaer.js";import{Fh as TK}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 $K,Mh as mW,Nh as L8,Ni as ZK,Oh as B8,Rh as F8,Sh as V8,Th as rZ,Uh as eQ,Vh as CJ,Wh as QW,Xh as c,bi as A,ci as v8,di as FZ,ei as M8,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 sG}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 lG,Yj as $Z}from"./chunk-6t1t7h05.js";import{ak as H1}from"./chunk-a9frf7ym.js";import{bk as Y6,ck as d0,dk as R1,ek as nJ,fk as PK,hk as dZ,ik as tG,rk as oJ}from"./chunk-gwphn604.js";import{Gk as f1}from"./chunk-m950vw4c.js";import{Lk as HG,Qk as HJ}from"./chunk-978pc27j.js";import{Xk as MG,al as l}from"./chunk-vfvjfw5k.js";import{bl as aZ,el as M}from"./chunk-8b9ks729.js";import{ml as DJ}from"./chunk-sp77zwpn.js";import{nl as JK}from"./chunk-9akefv1y.js";import{xl as KJ}from"./chunk-rpdekb8t.js";import{Al as _G,yl as $8}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"),RK=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(!RK.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 fK($,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 kK($){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":V8($),"Content-Length":"0","Cache-Control":"no-store","X-Content-Type-Options":"nosniff"}})}async function wK($){if($ instanceof Blob)return{body:$,start:0,end:$.size-1,total:$.size,partial:!1,type:$.type,name:$.name,download:!1,status:200,extraHeaders:{}};if(kK($))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 U8($,Z){if($ instanceof Response)return $;if(!$)return $W();let J=await wK($),{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=B8(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",F8(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 qK($){let Z=$.headers.get("Content-Length");if(Z===null||!/^\s*\d+\s*$/.test(Z))return null;return Number(Z)}function O8($,Z){let J=qK($);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),vK($,Y)}if(J.checkDeclared!==!1)O8($,Z)}function yK($){return Reflect.get(Object.getPrototypeOf($),"body",$)??null}function D8($,Z){if(Z.stream!==void 0)return Z.stream;let J=yK($);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(O8($,Z.limit),Z.used||Z.stream?.locked)throw TypeError("Body already used");Z.used=!0;let J=D8($,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 vK($,Z){let J=(W,Y)=>Object.defineProperty($,W,{configurable:!0,...Y});J("body",{get:()=>D8($,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:()=>{O8($,Z.limit);let W=D8($,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=L8(J?.headers.get("Range"));if(Z)Z.rangeRequest=W;try{let Y=await super.run($);if(s1(Y))return Y;return await U8(Y,{range:W,method:J?.method})}catch(Y){if(Y instanceof M8)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 gK($)}voice($){if($.kind!=="agent-controller")throw TypeError(`this.voice() takes an AgentController class, and got ${XW($)}.`);return mK($)}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 gK($){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 mK($){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 hK=/^[A-Za-z0-9_-]+$/,pK=/^:[A-Za-z_][A-Za-z0-9_]*$/,UW=/^[A-Za-z0-9_-]{1,128}$/,cK=/^[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(pK.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(!hK.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||!cK.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 dK($){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 uK={"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{...uK,...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 dK($).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:MW(z)})}}else if(t3(Y)){let z=new Y(Z);W.push({run:z.run.bind(z),runsOnRefusal:MW(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 lK(W.slice(j+1)),z}return Y})()}}function MW($){return $?.runsOnRefusal===!0}async function lK($){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{oK(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 M(o1).runMiddleware(Y.middlewares);if(Z===F0){let G=await HW(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 HW(X)!==null)!==!0)return{ok:!1,code:"denied"}}return{ok:!0,topic:j,pattern:Z}}catch(G){if(nK(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 iK($,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 HW($){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(sK($))return new $().authorize(Z,J);return $(Z,J)}function sK($){return typeof $==="function"&&typeof $.prototype?.authorize==="function"}function nK($){return $?.kind===a1||r1($)||C$($)}var TW=new WeakSet;function oK($){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(aK(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 aK($,Z){if($.length!==Z.length)return!1;return $.every((J,W)=>J===Z[W]||J.startsWith(":")||Z[W].startsWith(":"))}class P8{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 T8{tool;meta;__internal_brand="McpTool";constructor($,Z){this.tool=$;this.meta=Z}}function rK($){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 tK($,Z){let J=rK($);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 P8($.as,$.input,$.bind)}fromTool($,Z={}){return new T8($,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,...H}=Y[V],I=U??(D?tK(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,...H,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 N8 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 N8([V0($,Y)||"/",X.toString()].filter(Boolean).join("?"),z??(j?301:307))}static external($,Z=307){throw new N8($,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 _8($,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 eK($){return $}function $B(){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 ZB($,Z=!0){let J=new URL($.rawRequest.url),W=J.pathname.replace(/\.(json|og)$/,""),[,Y,...j]=W.split("/");if(M(l).supportedLocales.includes(Y))W=`/${j.join("/")}`;return Z?`${W}${J.search}`:W}function JB($,Z){let J=(W)=>W.replace(/\/+$/,"")||"/";return J($)===J(Z)}function z6($,Z){let J=Z||M(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=ZB($,!W);if(W||!JB(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(M(b),J);if(!W)throw new A$({redirectTo:z6(J,$)});return Z.setUser(W),{}}}var x8="gemi_same_site",I8="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(x8))return{};if(x$(Z))return{};let Y=J.headers.get("Sec-Fetch-Site");if(Y&&Y!=="cross-site")return{};throw W.searchParams.set(x8,"1"),new fW(`${W.pathname}${W.search}`)}}class fW extends W0{location;constructor($){super("Same-site bounce");this.location=$;this.name="SameSiteBounce";let Z=WB($),J={"Content-Type":"text/html; charset=utf-8","Cache-Control":I8,"Referrer-Policy":"no-referrer","X-Robots-Tag":"noindex"};this.payload={api:{status:401,data:{},headers:{"Cache-Control":I8}},viewData:{status:200,data:{},headers:{"Cache-Control":I8},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 WB($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}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 YB="Rate limit exceeded";class e1 extends W0{result;retryAfter;constructor($,Z=YB){super(Z);this.result=$;this.retryAfter=$?.retryAfter;let J={"Content-Type":"application/json",...$?C8($):{}};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 C8($){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 A8}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 A8(j)===6?j:null}if(A8(Z))return Z;let J=/^(\d{1,3}(?:\.\d{1,3}){3}):\d{1,5}$/.exec(Z);return J&&A8(J[1])===4?J[1]:null}class hW extends t{async run($,Z){let J=jB();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(C8(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 jB(){try{let $=M();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 S8;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify($,{secret:process.env.SECRET}))throw new S8;return{}}}class S8 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 E8{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 zB($){return new E8($)}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 MB(z,Z,J,$.url)}async function MB($,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 PB={"&":"&","<":"<",">":">",'"':""","'":"'"};function E$($){return $.replace(/[&<>"']/g,(Z)=>PB[Z])}var TB={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};function b8($){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 TB[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 R8($){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(b8($.slice(W)));return}if(Y>W)Z.text(b8($.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(R8($.slice(Y+2,j).trim())),W=j+1}else{let j=NB($,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=R8(z.slice(0,Q));if(G){if(Z.open(G,_B(z.slice(Q)),X),X)Z.close(G)}W=j+1}}}function NB($,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 _B($){let Z={},J=/([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;for(let W of $.matchAll(J))Z[R8(W[1])]=b8(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",IB="http://www.w3.org/1999/xhtml",w8=`<?xml version="1.0" encoding="UTF-8"?>
|
|
3
|
+
`,iW=`<urlset xmlns="${aW}" xmlns:xhtml="${IB}">
|
|
4
|
+
`,sW=`</urlset>
|
|
5
|
+
`,b$=50000,z3=52428800,nW=2048,xB=new Set(["always","hourly","daily","weekly","monthly","yearly","never"]),CB=/^\d{4}(-\d{2}(-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?)?)?$/,AB="application/xml; charset=utf-8",oW=new TextEncoder;function q8($,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(!CB.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 SB($){let Z=q8($.loc,"loc"),J=`<url><loc>${E$(Z)}</loc>`;if($.lastmod!=null)J+=`<lastmod>${E$(rW($.lastmod,Z))}</lastmod>`;if($.changefreq!=null){if(!xB.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=q8(W.href,`alternate href of ${Z}`);J+=`<xhtml:link rel="alternate" hreflang="${E$(Y)}" href="${E$(j)}"/>`}return`${J}</url>
|
|
6
|
+
`}function EB($){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}=EB(Z),Y=oW.encode(w8+iW+sW).byteLength,j=[],z=[],X=Y,Q=()=>{j.push(w8+iW+z.join("")+sW),z=[],X=Y};for(let G of $){let B=SB(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=q8(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`${w8}<sitemapindex xmlns="${aW}">
|
|
8
|
+
${Z}</sitemapindex>
|
|
9
|
+
`}function f8($,Z,J){let W=new Headers(J);if(!W.has("content-type"))W.set("content-type",AB);return new Response($,{status:Z,headers:W})}function bB($){if($===null||$===void 0||$==="")return null;let Z=String($);return/^[1-9]\d{0,8}$/.test(Z)?Number(Z):NaN}function RB($,Z={}){let J=tW($,Z),W=bB(Z.page);if(W!==null){let j=J[W-1];return j?f8(j,200,Z.headers):new Response("Not found",{status:404,headers:{"cache-control":"no-store"}})}if(J.length===1)return f8(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 f8(eW(J.map((j,z)=>({loc:Y(z+1)}))),200,Z.headers)}function k8($){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()?k8(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?k8(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?k8(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*fB($,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:RB,chunk:tW,index:eW,parse:$Y,read:fB,MAX_URLS:b$,MAX_BYTES:z3};var kB=512000,wB=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 wB.encode(String.fromCodePoint(Y)))Z+=`%${j.toString(16).toUpperCase().padStart(2,"0")}`}else Z+=W}return Z}function qB($,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(!qB(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 yB={"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=yB[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 vB($,Z={}){let{maxSize:J=kB,...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 y8($){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=y8(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=[...y8(W.allow).map((X)=>["Allow",X]),...y8(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 gB($,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:gB,text:jY,parse:YY,fetch:vB};import{createHmac as XY,randomBytes as mB}from"crypto";var g8="v2.";function m8($){return $.startsWith(g8)}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=mB(16).toString("hex"),J=XY("sha256",UZ()).update(`${$}:${Z}`).digest("hex");return`${g8}${J}`}function U6($,Z){let J=XY("sha256",UZ()).update(`legacy-session:${Z}:${$}`).digest("hex");return`${g8}${J}`}import{createHash as cB,createHmac as dB,randomInt as uB,timingSafeEqual as BY}from"crypto";function GY($,Z){return Math.floor($/Z)*Z}function hB($,Z){if(Z<=0)return 0;return Math.min(1,Math.max(0,(Z-$)/Z))}function h8($,Z,J,W){return Z*hB(J,W)+$}function pB($){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=h8(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=pB({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 p8{}class c8 extends p8{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=h8(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=dB("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(uB(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 $=M();if(typeof $?.bound==="function"&&$.bound(K1))return $.make(K1)}catch{}return FY??=new K1({driver:new c8,limit:1000,window:60}),FY}function VY($){return $.length<=64?$:`sha256:${cB("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 MY($,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 u8}from"crypto";class d8 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 lB($={}){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 l8($={}){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 iB($,Z){if(typeof Z!=="string"||Z==="")return!1;try{return await Bun.password.verify($,Z)}catch{return!1}}function HY($){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 UP($){return $}function TY($={}){return lB($),{basePath:"/auth",verifyEmail:!0,password:!0,magicLink:!0,redirectPath:"/dashboard",signInPath:"/auth/sign-in",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,cookieDomain:null,migrateLegacySession:null,signUpRequest:d8,oauthProviders:{},oauthFailurePath:null,oauthCompleteProfilePath:null,connections:{},connectionStore:null,onConnected:()=>{},verifyPassword:iB,hashPassword:async(Z)=>await Bun.password.hash(Z),generateForgotPasswordToken:async()=>u8(32).toString("hex"),generateEmailVerificationToken:()=>{if(!($.verifyEmail??!0))return"";return u8(32).toString("hex")},generateMagicLinkToken:()=>u8(32).toString("hex"),extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{},emailCode:l8($.emailCode),generateCode:()=>{return},onAuthenticated:()=>{}}}var sB=new Set(["script","style","textarea","title","xmp","iframe","noembed","noframes","noscript"]),nB=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&&sB.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(nB.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 oB($){return`<script>(self.__GEMI_STREAM__=self.__GEMI_STREAM__||[]).push(${B1([$.path,$.variantKey,$.data])})</script>`}function aB($){return`<script>(self.__GEMI_DICT__=self.__GEMI_DICT__||[]).push(${B1([$.id,$.locale,$.strings])})</script>`}function i8($,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(oB(U))}),W?.onUse((U)=>{j.push(aB(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 rB=/bot|crawler|spider|crawling|slurp|bingpreview|mediapartners|headless|lighthouse|prerender|facebookexternalhit|whatsapp|telegram|discord|twitterbot|linkedinbot/i;function M6($){if(!$)return!1;return rB.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 tB($,Z),request:{path:Y,routePath:W?.routePath??null,locale:J?.locale??null},anonymousId:xY(),isBot:M6(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 tB($,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 s8($){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=$F($,Z,J,W.buckets);return EY(Y,Z.rollout)?{value:!0,reason:"rollout"}:{value:!1,reason:"excluded"}}function eB($){let Z=$.user?.publicId??$.user?.id;if(Z!==void 0&&Z!==null)return String(Z);return $.anonymousId??""}function $F($,Z,J,W){let Y=SY(Z.salt??$,eB(J));if(!W)return s8(Y);let j=W.get(Y);if(j!==void 0)return j;let z=s8(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 n8{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=ZF(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 ZF($){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 JF{}class WF 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 o8 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 n8($.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=YF(J.actor),Y=this.config.source;if(typeof Y.write!=="function")throw new o8(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 YF($){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 M($$).enabled($)}async function LZ($,Z){if(typeof Z!=="string"||!Object.hasOwn($,Z))return null;let J=HY($[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 a8($){if($&&typeof $==="object")delete $.password;return $}function jF(){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 zF={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}},XF=gY({token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:zF});class r8{models;constructor($=jF()){this.models=$}run($){return this.models.User.asSystem($)}sessionSelect(){return XF}transaction($){return this.models.User.transaction($)}withLegacySessionLock($,Z){let J=this.models.User.$connection??R1(),W=M(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 a8(Z)}async updateUserPassword($){let Z=await this.run(()=>this.models.User.update({where:{id:$.id},data:{password:$.password}}));return a8(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?a8(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 BD}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=J7(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(R2(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 K7($){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 M3($,Z,J){let W={};for(let Y=0;Y<Z.length;Y++){let j=Z[Y];W[j]=$(j,Y,J)}return W}function QF($,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 B7($,Z){let J={};for(let W in Z)$.has(W)||(J[W]=Z[W]);return J}function F7($){$={...$};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 H3($){return $.slice().sort()}function x6($,Z){return String(Z).padStart($,"0")}function Z$($,Z){return Math.sign($-Z)}function J7($,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),V7($,Z)]}function q6($,Z){return Math.trunc($/Z)||0}function V7($,Z){return $%Z||0}function H6($){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),$=V7($,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 U7($){if($!==void 0)return P3($)}function $1($){return V5(P3($))}function P3($){return F5(eF($))}function D7($){if($==null)throw TypeError("Cannot be null or undefined");return $}function B5($,Z){if(Z==null)throw RangeError(R2($));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(IF(Z,$));return $||0}function V5($,Z="number"){if($<=0)throw RangeError(xF(Z,$));return $}function O7($){if(typeof $=="symbol")throw TypeError(EF);return String($)}function C6($,Z){return D0($)?String($):e($,Z)}function g6($){if(typeof $=="string")return BigInt($);if(typeof $!="bigint")throw TypeError(SF($));return $}function U5($,Z="number"){if(typeof $=="bigint")throw TypeError(AF(Z));if($=Number($),!Number.isFinite($))throw RangeError(CF(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 L7($,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 HZ($,Z,J=1){return L7($[0]+Z[0]*J,$[1]+Z[1]*J)}function PZ($,Z){return L7($[0],$[1]+Z)}function u0($,Z){return HZ(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 M7($,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 P7($){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($,zV,jV))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 M5($){return H5($)[0]}function H5($){return M7($,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 T7($,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($)-YV)/v0)*Math.sign($),Y=new Date($-W*v0);return IZ(M4,[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 N7($,Z){switch(Z){case 2:return _7($)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function _5($){return _7($)?366:365}function _7($){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 GF($){let Z=S0($);if(Z<QV)return x5($);let J=H7(o2(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(p2,$,C5($))}function C5($,Z){let{isoYear:J}=$,W=q0($,"isoMonth",1,N5(),Z);return{isoYear:J,isoMonth:W,isoDay:q0($,"isoDay",1,N7(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=MV($,Z);return[BX($),W,J]}function I7($){return FX(Z1($))}function A5($){return $=Z1($),u2($,9,6,1)}function CZ($,Z,J,W=9,Y=0,j=4){Z=Z1(Z);let z=u2(Z,W,Y),X=A7(Z),Q=R3(Z,j),G=b3(Z,W,Y,1);return z==null?z=Math.max(J,G):R5(z,G),X=S7(X,G,1),$&&(Q=((B)=>B<4?(B+2)%4:B)(Q)),[z,G,X,Q]}function u6($,Z=6,J){let W=A7($=E7($,k6)),Y=R3($,7),j=b3($,Z);return j=B5(k6,j),W=S7(W,j,void 0,J),[j,W,Y]}function x7($){return l2(Z1($))}function S5($,Z){return C7(Z1($),Z)}function C7($,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 A7($){let Z=$[F3];return Z===void 0?1:x0(Z,F3)}function S7($,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=$[Z7];if(Z!==void 0){if(typeof Z!="number"){if(O7(Z)==="auto")return;throw RangeError(C3(Z7,Z))}Z=o0(Z7,Math.floor(Z),0,9,1)}return Z}function Z1($){return $===void 0?{}:y1($)}function E7($,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:KV[Z]})}function b7($,Z,J=9,W=0,Y){let j=Z[$];if(j===void 0)return Y?W:void 0;if(j=O7(j),j==="auto")return Y?W:null;let z=z7[j];if(z===void 0&&(z=JV[j]),z===void 0)throw RangeError(hz($,j,z7));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=O7(Y),z=Z[j];if(z===void 0)throw RangeError(hz($,j,Z));return z}function R5($,Z){if(Z>$)throw RangeError(nF)}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(c2,$)}}function f$($,Z=$.calendar){return{branding:wZ,calendar:Z,...h0(c2,$)}}function S6($,Z=$.calendar){return{branding:qZ,calendar:Z,...h0(c2,$)}}function J1($){return{branding:H4,...h0(zX,$)}}function a($){return{branding:T4,sign:Q$($),...h0(g2,$)}}function f5($){return M5($.epochNanoseconds)}function i6($){return M7($.epochNanoseconds,U1)[0]}function k5($){return L5($.epochNanoseconds,d$)}function w5($){return L5($.epochNanoseconds)}function q5($){return $.epochNanoseconds}function M0($){return typeof $=="string"?$:e($.id)}function AZ($,Z){return $===Z||M0($)===M0(Z)}function y5($,Z,J,W,Y){let j=k$(W),[z,X]=((O,L)=>{let P=L((O=E7(O,G7))[GX]),H=LV(O);return H=B5(G7,H),[H,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=$2(B),K=e6(B),V=Z2(B),U=K(G,Q,W),D=V(G,Q,U,z);return U3(z,X)?cY(D,z):((O,L,P,H,I,E,S)=>{let R=Q$(O),[f,N]=R7(H,h2(P,O),P,R,I,E,S),_=f7(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 R7($,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 f7($,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),H=m0(F,O);if(O5(L,P,H))throw RangeError(A3);return s5(f7(L,P,H),V)?H: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,k7($,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]=k7($,Z,J);return v1({...m$($,Y),...W})}function k7($,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 WV(6,$)}function KF($,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?FF:BF:VF,[F,K,V]=B($,Z,J,W,Y,j,z,X,Q,G);return V&&W!==7&&(F=((U,D,O,L,P,H,I,E)=>{let S=Q$(U);for(let R=L+1;R<=O;R++){if(R===7&&O!==7)continue;let f=h2(R,U);f[h[R]]+=S;let N=l0(u0(I(E(P,H,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 L7(Y+z,X)}function z$($,Z,J){return s5($/Z,J)*Z}function s5($,Z){return TV[Z]($)}function BF($,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},HZ(Z,G),B]}function FF($,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]=R7(z,{...$,...m2},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 VF($,Z,J,W,Y,j,z,X,Q,G){let B=Q$($),F=h[W],K=h2(W,$);W===7&&($={...$,weeks:$.weeks+Math.trunc($.days/7)});let V=q6($[F],Y)*Y;K[F]=V;let[U,D]=R7(z,K,W,Y*B,X,Q,G),O=V+f7(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 w7($,Z,J,W){let[Y,j,z,X]=((G)=>{let B=C7(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 p7(X$(F,D),U)+(G?v$(E6(D)):"Z")})(Q,Z(Q?$(Y):i$),J.epochNanoseconds,j,z,X)}function q7($,Z,J){let[W,Y,j,z,X,Q]=((G)=>{G=Z1(G);let B=l2(G),F=b5(G),K=PV(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 H=G(F).getOffsetNanosecondsFor(K);return p7(X$(K,H),P)+v$(E6(H),D)+((I,E)=>E!==1?"["+(E===2?"!":"")+M0(I)+"]":"")(F,U)+c7(B,V)})($,Z.calendar,Z.timeZone,Z.epochNanoseconds,W,Y,j,z,X,Q)}function y7($,Z){let[J,W,Y,j]=((G)=>(G=Z1(G),[l2(G),...C7(G)]))(Z);return z=$.calendar,X=J,Q=j,p7(u5($,Y,W),Q)+c7(z,X);var z,X,Q}function v7($,Z){return J=$.calendar,W=$,Y=x7(Z),b6(W)+c7(J,Y);var J,W,Y}function g7($,Z){return n5($.calendar,o5,$,x7(Z))}function m7($,Z){return n5($.calendar,UF,$,x7(Z))}function h7($,Z){let[J,W,Y]=S5(Z);return j=Y,a5(k7($,W,J)[0],j);var j}function a6($,Z){let[J,W,Y]=S5(Z,3);return W>1&&($={...$,...KF($,W,J)}),((j,z)=>{let{sign:X}=j,Q=X===-1?b0(j):j,{hours:G,minutes:B}=Q,[F,K]=M7(U0(Q,3),r0,Y$);Yj(F);let V=d7(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=M0($),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 p7($,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 UF($){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)=>d7(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)+d7(X):"")}function c7($,Z){if(Z!==1){let J=M0($);if(Z>1||Z===0&&J!==q)return r5(J,Z===2)}return""}function r5($,Z){return"["+(Z?"!":"")+"u-ca="+$+"]"}function d7($,Z){let J=x6(9,$);return J=Z===void 0?J.replace(IV,""):J.slice(0,Z),J?"."+J:""}function t5($){return $<0?"-":"+"}function R$($,Z){return $||Z?$.toLocaleString("fullwide",{useGrouping:0}):""}function DF($,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 T7(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(cF)}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(dF);if(W.length)return W[J===3?1:0];let Y=C0(Z),j=((X,Q)=>{let G=X.getOffsetNanosecondsFor(PZ(Q,-u));return l7(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 u7($){if(Math.abs($)>=u)throw RangeError(hF);return $}function l7($){if($>u)throw RangeError(pF);return $}function i7($,Z,J){return O0(i0(HZ(Z.epochNanoseconds,((W)=>{if(jj(W))throw RangeError(iF);return U0(W,5)})($?b0(J):J))))}function s7($,Z,J,W,Y,j=Object.create(null)){let z=Z(W.timeZone),X=$(W.calendar);return{...W,...t7(z,X,W,J?b0(Y):Y,j)}}function n7($,Z,J,W,Y=Object.create(null)){let{calendar:j}=J;return z0(e7($(j),J,Z?b0(W):W,Y),j)}function o7($,Z,J,W,Y){let{calendar:j}=J;return X0(r6($(j),J,Z?b0(W):W,Y),j)}function a7($,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,{...H0,months:1}),X=m$(X,-1));let Q=z.dateAdd(X,W,Y);return f$(V3(z,Q),j)}function r7($,Z,J){return J1($j(Z,$?b0(J):J)[0])}function t7($,Z,J,W,Y){let j=U0(W,5),z=J.epochNanoseconds;if(jj(W)){let X=E0(J,$);z=HZ(m0($,{...r6(Z,X,{...W,...m2},Y),...h0(Y1,X)}),j)}else z=HZ(z,j),v(Y);return{epochNanoseconds:i0(z)}}function e7($,Z,J,W){let[Y,j]=$j(Z,J);return v1({...r6($,Z,{...J,...m2,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 $2($){return $?q5:C0}function e6($){return $?w(t7,$):e7}function Z2($){return $?w(LF,$):MF}function $4($){return $&&$.epochNanoseconds}function U3($,Z){return $<=6-($4(Z)?1:0)}function J2($,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 H=HZ(U0(D),U0(O),P?-1:1);if(!Number.isFinite(H[0]))throw RangeError(F4);return{...H0,...EZ(H,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=Z2(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=E7(S,k6);let N=u2(S),_=f(S[GX]),x=A7(S),I1=R3(S,7),k0=b3(S);if(N===void 0&&k0===void 0)throw RangeError(sF);return k0==null&&(k0=0),N==null&&(N=Math.max(k0,R)),R5(N,k0),x=S7(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{...H0,...EZ(x,R)}})(W,z,X,Q,G)));if(!B)throw RangeError(V4);let[K,V,U]=t6(Z,J,B),D=$2(U),O=e6(U),L=Z2(U),P=O(V,K,W),H=L(V,K,P,z),I=W.sign,E=Q$(H);if(I&&E&&I!==E)throw RangeError(A3);return E&&(H=s6(H,D(P),z,X,Q,G,V,K,D,O)),a(H)}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(lF);J=Y}}return J}function SZ($){for(let Z of ZV)o0(Z,$[Z],-aY,aY,1);return Yj(l0(U0($),r0)),$}function Yj($){if(!Number.isSafeInteger($))throw RangeError(uF)}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 OF($,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&&z2(Z.timeZone,1),O0(T7(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 Mj(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=z2($);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):Mj(Z))}function Kj($,Z){let J=Y2(e(Z));if(J)return W2(J),f$(P7(q$(J)));let W=W4(Z);return f$(V3($(W.calendar),W))}function W2($){if($.calendar!==q)throw RangeError(q1($.calendar))}function Bj($,Z){let J=j2(e(Z));if(J)return W2(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=EV.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"));W2(J)}if((Z=Y2($))&&pY(Z))throw RangeError(y0($));if((Z=j2($))&&pY(Z))throw RangeError(y0($));return J1(d6(J,1))}function Vj($){let Z=((J)=>{let W=fV.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=X2(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 Q2(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$($)||Y2($)||j2($);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 Hj(v1(c6($)))}function Mj($){return Hj(J$(q$($)))}function Hj($){return{...$,calendar:_3($.calendar)}}function G$($){let Z=SV.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 Y2($){let Z=CV.exec($);return Z?((J)=>({isoYear:Pj(J),isoMonth:parseInt(J[4]),isoDay:1,...Y4(J[5])}))(Z):void 0}function j2($){let Z=AV.exec($);return Z?((J)=>({isoYear:_Z,isoMonth:parseInt(J[1]),isoDay:parseInt(J[2]),...Y4(J[3])}))(Z):void 0}function z2($,Z){let J=bV.exec($);return J?((W,Y)=>{let j=W[4]||W[5];if(Y&&j)throw RangeError(q1(j));return u7((MZ(W[2])*D4+MZ(W[3])*U4+MZ(W[4])*r0+X2(W[5]||""))*Q2(W[1]))})(J,Z):void 0}function Pj($){let Z=Q2($[1]),J=parseInt($[2]||$[3]);if(Z<0&&!J)throw RangeError(q1(-0));return Z*J}function Tj($){let Z=MZ($[3]);return{...h6(X2($[4]||""))[0],isoHour:MZ($[1]),isoMinute:MZ($[2]),isoSecond:Z===60?59:Z}}function Y4($){let Z,J,W=[];if($.replace(RV,(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 X2($){return parseInt($.padEnd(9,"0"))}function RZ($){return new RegExp(`^${$}$`,"i")}function Q2($){return $&&$!=="+"?-1:1}function MZ($){return $===void 0?0:parseInt($)}function Nj($){return j4(e($))}function j4($){let Z=G2($);return typeof Z=="number"?v$(Z):Z?((J)=>{if(wV.test(J))throw RangeError(mF);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=G2($);return typeof Z=="number"?Z:Z?Z.resolvedOptions().timeZone:i$}function G2($){let Z=z2($=$.toUpperCase(),1);return Z!==void 0?Z:$!==i$?kV($):void 0}function K2($,Z){return A0($.epochNanoseconds,Z.epochNanoseconds)}function B2($,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=$2(B),K=e6(B);return A0(F(K(G,Q,W)),F(K(G,Q,Y)))}function F2($,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!K2($,Z)}function xj($,Z){return!B2($,Z)&&!!X4($.timeZone,Z.timeZone)&&AZ($.calendar,Z.calendar)}function Cj($,Z){return!F2($,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=M0($),W=M0(Z);if(J===W)return 1;try{return lY(J)===lY(W)}catch(Y){}}function V2($,Z,J,W){let Y=CZ($,j0(W),3,5),j=Q4(Z.epochNanoseconds,J.epochNanoseconds,...Y);return a($?b0(j):j)}function U2($,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,H)=>{if(!X4(P,H))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(t7,O))}else D=H0;return a(J?b0(D):D)}function D2($,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,e7)}else U=H0;return a(Z?b0(U):U)}function O2($,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 L2($,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=H0;return a($?b0(F):F)}function M2($,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={...H0,...J4(G,j)};return a($?b0(B):B)}function LF($,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):H0}function MF($,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):H0}function fj($,Z,J,W,Y,j,z){let[X,Q,G]=((K,V,U,D)=>{function O(){return R={...m$(H,E++*-D),...P},f=m0(K,R),A0(I,f)===-D}let L=E0(V,K),P=h0(Y1,L),H=E0(U,K),I=U.epochNanoseconds,E=0,S=H2(L,H),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,{...H0,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{...H0,...EZ(n6(u0($,Z),W,Y,j),J)}}function wj($,Z,J){return{...H0,...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(w2);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=o2($),W=R6($);return{id:$,O:PF(Z),B:TF(Z)}}function PF($){return g0((Z)=>{let J=S0(Z);return $(J)},WeakMap)}function TF($){let Z=$(0).year-XV;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 W7($){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(o2($).resolvedOptions().calendar))throw RangeError(gF($));return $}function R6($){return $==="islamicc"&&($="islamic"),$.split("-")[0]}function mj($){return this.R($)[0]}function hj($){return this.R($)[1]}function P2($){let[Z]=this.h($);return G4(this.q(Z),S0($))+1}function pj($){let Z=yV.exec($);if(!Z)throw RangeError(yF($));return[parseInt(Z[1]),Boolean(Z[2])]}function f6($,Z,J){return $+(Z||J&&$>=J?1:0)}function Y7($,Z){return $-(Z&&$>=Z?1:0)}function cj($,Z){return(Z+$)*(Math.sign(Z)||1)||0}function j7($){return JX[uj($)]}function dj($){return tF[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 T2($,Z,J,W=[]){let Y=K$($,Z,W1,W);return $.dateFromFields(Y,J)}function N2($,Z,J,W){let Y=K$($,Z,v2,W);return $.yearMonthFromFields(Y,J)}function _2($,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($,X7,[],1),J))}function oj($){let Z=F1($,g2);return a(SZ({...H0,...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(bF(X));if(X==="constructor"||X==="__proto__")throw RangeError(f2(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(R2(X));Y[X]=ZX[X]}j=X}if(W&&!z)throw TypeError(gz(Z));return Y}function p$($,Z){return d6(hV({...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,v2);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(X7,W),...F1(Y,X7)},z)})($,Z,J))}function Jz($,Z){return a((J=$,W=Z,SZ({...J,...F1(W,g2)})));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 I2($,Z){let J=K$($,Z,$X);return $.monthDayFromFields(J)}function x2($,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 t8($,Z){let{era:J,eraYear:W,year:Y}=Z,j=j7($);if(J!==void 0||W!==void 0){if(J===void 0||W===void 0)throw TypeError(fF);if(!j)throw RangeError(RF);let z=j[J];if(z===void 0)throw RangeError(wF(J));let X=cj(W,z);if(Y!==void 0&&Y!==X)throw RangeError(kF);Y=X}else if(Y===void 0)throw TypeError(qF(j));return Y}function e8($,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(vF);return o0("month",Y,1,$.L(J),W)}function nY($,Z,J,W,Y){return q0(Z,"day",1,$.j(W,J),Y)}function $7($,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(M4,[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$(P7(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 C2($,Z,J=q){return P0($.epochNanoseconds,Z,J)}function Fz($){return O0($.epochNanoseconds)}function A2($,Z){return z0(E0(Z,$))}function S2($,Z){return X0(E0(Z,$))}function Vz($,Z,J){return x2($(Z.calendar),J)}function Uz($,Z,J){return I2($(Z.calendar),J)}function E2($,Z){return J1(E0(Z,$))}function Dz($,Z,J,W){let Y=((j,z,X,Q)=>{let G=I7(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,...x2(W,J)})}function Lz($,Z,J){return I2($(Z.calendar),J)}function Mz($,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 Hz($,Z=t0){return z0(v1({...$,...Z}))}function Pz($,Z,J){return x2($(Z.calendar),J)}function Tz($,Z,J){return I2($(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=M0($),W=M0(Z);if(J===W||J===q)return Z;if(W===q)return $;throw RangeError(w2)}function NF($,Z){return(J)=>J===q?$:J===L4||J===NZ?Object.assign(Object.create($),{id:J}):Object.assign(Object.create(Z),qV(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=B7(W,Y),$)||Object.assign(Y,Z),J&&(Y.timeZone=i$,["full","long"].includes(Y.timeStyle)&&(Y.timeStyle="medium")),Y)}function g1($,Z=b2){let[J,,,W]=$;return(Y,j=JU,...z)=>{let X=Z(W&&W(...z),Y,j,J),Q=X.resolvedOptions();return[X,..._F($,Q,z)]}}function b2($,Z,J,W){if(J=W(J),$){if(J.timeZone!==void 0)throw TypeError(oF);J.timeZone=$}return new B$(Z,J)}function _F($,Z,J){let[,W,Y]=$;return J.map((j)=>(j.calendar&&((z,X,Q)=>{if((Q||z!==q)&&z!==X)throw RangeError(w2)})(M0(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 IF=($,Z)=>`Non-integer ${$}: ${Z}`,xF=($,Z)=>`Non-positive ${$}: ${Z}`,CF=($,Z)=>`Non-finite ${$}: ${Z}`,AF=($)=>`Cannot convert bigint to ${$}`,SF=($)=>`Invalid bigint: ${$}`,EF="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}`,R2=($)=>`Missing ${$}`,f2=($)=>`Invalid field ${$}`,bF=($)=>`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",k2="Invalid calling context",RF="Forbidden era/eraYear",fF="Mismatching era/eraYear",kF="Mismatching year/eraYear",wF=($)=>`Invalid era: ${$}`,qF=($)=>"Missing year"+($?"/era/eraYear":""),yF=($)=>`Invalid monthCode: ${$}`,cz="Mismatching month/monthCode",vF="Missing month/monthCode",oY="Cannot guess year",K3="Invalid leap month",dz="Invalid protocol",A3="Invalid protocol results",w2="Mismatching Calendars",gF=($)=>`Invalid Calendar: ${$}`,uz="Mismatching TimeZones",mF="Forbidden ICU TimeZone",hF="Out-of-bounds offset",pF="Out-of-bounds TimeZone gap",cF="Invalid TimeZone offset",dF="Ambiguous offset",F4="Out-of-bounds date",uF="Out-of-bounds duration",lF="Cannot mix duration signs",V4="Missing relativeTo",iF="Cannot use large units",sF="Required smallestUnit or largestUnit",nF="smallestUnit > largestUnit",y0=($)=>`Cannot parse: ${$}`,q1=($)=>`Invalid substring: ${$}`,lz=($)=>`Cannot format ${$}`,iz="Mismatching types for formatting",oF="Cannot specify TimeZone",sz=w(M3,($,Z)=>Z),kZ=w(M3,($,Z,J)=>J),a0=w(x6,2),z7={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},S3=Object.keys(z7),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),X7=H3(h1),oz=["offset"],az=["timeZone"],rz=h1.concat(oz),tz=rz.concat(az),Q7=["era","eraYear"],aF=Q7.concat(["year"]),O4=["year"],q2=["monthCode"],y2=["month"].concat(q2),E3=["day"],v2=y2.concat(O4),ez=q2.concat(O4),W1=E3.concat(v2),rF=E3.concat(y2),$X=E3.concat(q2),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}},tF={chinese:13,dangi:13,hebrew:-6},e=w(v6,"string"),WX=w(v6,"boolean"),eF=w(v6,"number"),YX=w(v6,"function"),h=S3.map(($)=>$+"s"),g2=H3(h),$V=h.slice(0,6),jX=h.slice(6),ZV=jX.slice(1),JV=sz(h),H0=kZ(h,0),m2=kZ($V,0),h2=w(Y5,h),Y1=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],p2=["isoDay","isoMonth","isoYear"],M4=Y1.concat(p2),c2=H3(p2),zX=H3(Y1),XX=H3(M4),t0=kZ(zX,0),WV=w(Y5,M4),B$=Intl.DateTimeFormat,QX="en-GB",d2=1e8,YV=d2*v0,jV=[d2,0],zV=[-d2,0],O3=275760,L3=-271821,XV=1970,_Z=1972,k1=12,QV=xZ(1868,9,8),GV=g0(GF,WeakMap),k6="smallestUnit",G7="unit",F3="roundingIncrement",Z7="fractionalSecondDigits",GX="relativeTo",KX={constrain:0,reject:1},KV=Object.keys(KX),BV={compatible:0,reject:1,earlier:2,later:3},FV={reject:0,use:1,prefer:2,ignore:3},VV={auto:0,never:1,critical:2,always:3},UV={auto:0,never:1,critical:2},DV={auto:0,never:1},OV={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},b3=w(b7,k6),u2=w(b7,"largestUnit"),LV=w(b7,G7),BX=w(y$,"overflow",KX),FX=w(y$,"disambiguation",BV),MV=w(y$,"offset",FV),l2=w(y$,"calendarName",VV),HV=w(y$,"timeZoneName",UV),PV=w(y$,"offset",DV),R3=w(y$,"roundingMode",OV),wZ="PlainYearMonth",qZ="PlainMonthDay",u$="PlainDate",l$="PlainDateTime",H4="PlainTime",p1="ZonedDateTime",P4="Instant",T4="Duration",TV=[Math.floor,($)=>H6($)?Math.floor($):Math.round($),Math.ceil,($)=>H6($)?Math.ceil($):Math.round($),Math.trunc,($)=>H6($)?Math.trunc($)||0:Math.round($),($)=>$<0?Math.floor($):Math.ceil($),($)=>Math.sign($)*Math.round(Math.abs($))||0,($)=>H6($)?($=Math.trunc($)||0)+$%2:Math.round($)],i$="UTC",_6=5184000,NV=A6(1847),_V=A6(new Date().getUTCFullYear()+10),IV=/0+$/,E0=g0(DF,WeakMap),aY=4294967295,N4=g0(($)=>{let Z=G2($);return typeof Z=="object"?new UX(Z):new VX(Z||0)});class VX{constructor($){this.v=$}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor($){return[T7($,this.v)]}l(){}}class UX{constructor($){this.$=((Z)=>{function J(Q){let G=J7(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(OF),z=NV,X=_V;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=J7(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(M5($))*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]=H5($),Y=this.$.l(J+(Z>0||W?1:0),Z);if(Y!==void 0)return TZ(Y,r0)}}var i2="([+\u2212-])",I6="(?:[.,](\\d{1,9}))?",DX=`(?:(?:${i2}(\\d{6}))|(\\d{4}))-?(\\d{2})`,s2="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+I6+")?)?",n2=i2+s2,xV=DX+"-?(\\d{2})(?:[T ]"+s2+"(Z|"+n2+")?)?",OX="\\[(!?)([^\\]]*)\\]",_4=`((?:${OX}){0,9})`,CV=RZ(DX+_4),AV=RZ("(?:--)?(\\d{2})-?(\\d{2})"+_4),SV=RZ(xV+_4),EV=RZ("T?"+s2+"(?:"+n2+")?"+_4),bV=RZ(n2),RV=new RegExp(OX,"g"),fV=RZ(`${i2}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${I6}H)?(?:(\\d+)${I6}M)?(?:(\\d+)${I6}S)?)?`),kV=g0(($)=>new B$(QX,{timeZone:$,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),wV=/^(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$/,qV=g0(HF),o2=g0(($)=>new B$(QX,{calendar:$,timeZone:i$,era:"short",year:"numeric",month:"short",day:"numeric"})),yV=/^M(\d{2})(L?)$/,vV={era:C6,eraYear:x0,year:x0,month:hY,monthCode:C6,day:hY},gV=kZ(h1,x0),mV=kZ(h,D5),rY=Object.assign({},vV,gV,mV,{offset:C6}),hV=w(QF,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)),{...H0,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),H=Q.j(K,V),I=0;if(Math.sign(L)===-P){let E=H;[K,V]=Q._(K,V,-P),D=K-G,O=V-B,H=Q.j(K,V),I=P<0?-E:H}if(L=U-Math.min(F,H)+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),{...H0,years:j,months:z,days:X}},dateFromFields($,Z){let J=v(Z),W=t8(this,$),Y=e8(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=t8(this,$),Y=e8(this,$,W,J);return f$(P7(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,N7(j!==void 0?j:G,B),J))}else{G=j===void 0&&W?_Z:t8(this,$),B=e8(this,$,G,J),F=nY(this,$,B,G,J);let K=this.U(G);Q=B===K,X=Y7(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 j7(this)&&$.includes("year")?[...$,...Q7]:$},mergeFields($,Z){let J=Object.assign(Object.create(null),$);return $7(J,Z,y2),j7(this)&&($7(J,Z,aF),this.id===NZ&&$7(J,Z,rF,Q7)),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:P2,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}},pV={dayOfYear:P2,h:T5,q:xZ},cV=Object.assign({},pV,{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]}}),dV={dayOfYear:P2,h:W7,q:D3,weekOfYear:mj,yearOfWeek:hj,R(){return[]}},yZ=NF(Object.assign({},tY,cV,{h:T5,ee($){return this.id===L4?x5($):this.id===NZ?GV($):[]},I:($,Z)=>[Z,0],N($,Z){if(!Z)return[_Z,$]},K:_7,U(){},L:N5,J:($)=>$*k1,j:N7,X:_5,P:($,Z,J)=>({isoYear:$,isoMonth:Z,isoDay:J}),q:xZ,_:($,Z,J)=>($+=q6(J,k1),(Z+=V7(J,k1))<1?($--,Z+=k1):Z>k1&&($++,Z-=k1),[$,Z]),year($){return $.isoYear},month($){return $.isoMonth},day:($)=>$.isoDay}),Object.assign({},tY,dV,{h:W7,ee($){let Z=this.O($);return[Z.era,Z.eraYear]},I($,Z){let J=P6.call(this,$);return[Y7(Z,J),J===Z]},N($,Z,J){let[W,Y,j]=W7.call(this,{isoYear:_Z,isoMonth:k1,isoDay:31}),z=P6.call(this,W),X=Y===z;(Z$($,Y7(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$},a2={year:W$,month:W$},r2=Object.assign({},a2,{day:W$}),t2={hour:W$,minute:W$,second:W$},e2=Object.assign({},r2,t2),uV=Object.assign({},e2,{timeZoneName:"short"}),lV=Object.keys(a2),iV=Object.keys(LX),sV=Object.keys(r2),nV=Object.keys(t2),$9=["dateStyle"],oV=lV.concat($9),aV=iV.concat($9),Z9=sV.concat($9,["weekday"]),f3=nV.concat(["dayPeriod","timeStyle"]),J9=Z9.concat(f3),rV=J9.concat(vZ),tV=vZ.concat(f3),eV=vZ.concat(Z9),$U=vZ.concat(["day","weekday"],f3),ZU=vZ.concat(["year","weekday"],f3),JU={},W9=[c$(J9,e2),i6],MX=[c$(rV,uV),i6,0,($,Z)=>{let J=M0($.timeZone);if(Z&&M0(Z.timeZone)!==J)throw RangeError(uz);return J}],Y9=[c$(J9,e2,vZ),S0],j9=[c$(Z9,r2,tV),S0],z9=[c$(f3,t2,eV),($)=>j$($)/U1],X9=[c$(oV,a2,$U),S0,1],Q9=[c$(aV,LX,ZU),S0,1],eY;function L1($,Z,J,W,Y){function j(...Q){if(!(this instanceof j))throw TypeError(k2);NX(this,Z(...Q))}function z(Q,G){return Object.defineProperties(function(...B){return Q.call(this,X(this),...B)},K7(G))}function X(Q){let G=_0(Q);if(!G||G.branding!==$)throw TypeError(k2);return G}return Object.defineProperties(j.prototype,{...Z5(e0(z,J)),...w$(e0(z,W)),...w6("Temporal."+$)}),Object.defineProperties(j,{...w$(Y),...K7($)}),[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 B9($){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(MU),{i:z})))[J](W);var j,z};return Z}function O$(){throw TypeError(pz)}function w3({calendar:$}){return typeof $=="string"?new P9($):$}function HX($,Z){if(Z=j0(Z),D0($)){let W=_0($);if(W&&W.branding===qZ)return v(Z),W;let Y=SX($);return _2(R4(Y||q),!Y,$,Z)}let J=Bj(yZ,$);return v(Z),J}function CX($,Z,J){return W=Z.call($,R0(O0(J))),u7(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($,K9)}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||IU($):((Z)=>j4(Dj(e(Z))))($)}function F$($,Z){if(D0($)){let J=_0($)||{};switch(J.branding){case H4:return v(Z),J;case l$:return v(Z),J1(J);case p1:return v(Z),E2(G0,J)}return nj($,Z)}return v(Z),Fj($)}function F9($){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):N2(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),A2(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),S2(G0,W)}return T2(b4(q3($)),$,Z)}let J=W4($);return v(Z),J}function AX($,Z,J){return $1(Z.call($,Z0(X0(J,$))))}function M1($){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||mU($):((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(G9(J)),$)}function G9($){return E0($,G0)}function WU(){let $=B$.prototype,Z=Object.getOwnPropertyDescriptors($),J=Object.getOwnPropertyDescriptors(B$),W=function(Y,j={}){if(!(this instanceof W))return new W(Y,j);T9.set(this,((z,X={})=>{let Q=new B$(z,X),G=Q.resolvedOptions(),B=G.locale,F=h0(Object.keys(X),G),K=g0(zU),V=(...U)=>{let D,O=U.map((L,P)=>{let H=_0(L),I=(H||{}).branding;if(P&&D&&D!==I)throw TypeError(iz);return D=I,H});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")&&YU(Y);typeof j.value=="function"?j.value=Y==="constructor"?W:z||jU(Y):z&&(j.get=function(){return z.bind(this)})}return J.prototype.value=Object.create($,Z),Object.defineProperties(W,J),W}function YU($){return function(...Z){let J=T9.get(this),[W,...Y]=J(...Z);return W[$](...Y)}}function jU($){return function(...Z){return T9.get(this).u[$](...Z)}}function zU($){let Z=XU[$];if(!Z)throw TypeError(lz($));return g1(Z,g0(b2))}var XU={Instant:W9,PlainDateTime:Y9,PlainDate:j9,PlainTime:z9,PlainYearMonth:X9,PlainMonthDay:Q9},QU=g1(W9),GU=g1(MX),KU=g1(Y9),BU=g1(j9),FU=g1(z9),VU=g1(X9),UU=g1(Q9),V9={era:G5,eraYear:U7,year:P3,month:$1,daysInMonth:$1,daysInYear:$1,inLeapYear:WX,monthsInYear:$1},A4={monthCode:e},U9={day:$1},EX={dayOfWeek:$1,dayOfYear:$1,weekOfYear:K5,yearOfWeek:U7,daysInWeek:$1},bX=Object.assign({},V9,A4,U9,EX),C4=new WeakMap,_0=C4.get.bind(C4),NX=C4.set.bind(C4),DU={...I4(V9,[wZ]),...I4(EX,[]),...I4(A4,[wZ,qZ]),...I4(U9,[qZ])},D9=B9(bX),OU=B9({...V9,...A4}),LU=B9({...A4,...U9}),y3={calendarId:($)=>M0($.calendar)},MU=e0(($,Z)=>function(J){let{i:W}=this;return $(W[Z](Z0(X0(J,W))))},bX),HU=M3(($)=>(Z)=>Z[$],h.concat("sign")),O9=M3(($,Z)=>(J)=>J[Y1[Z]],h1),RX={epochSeconds:f5,epochMilliseconds:i6,epochMicroseconds:k5,epochNanoseconds:w5},v3=w(B7,new Set(["branding"])),[PU,hZ,TU]=L1(qZ,w(Gz,N0),{...y3,...LU},{getISOFields:v3,getCalendar:w3,with($,Z,J){return hZ($z(yU,$,this,pZ(Z),J))},equals:($,Z)=>Ej($,HX(Z)),toPlainDate($,Z){return Z0(_z(g3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=UU(Z,J,$);return W.format(Y)},toString:m7,toJSON:($)=>m7($),valueOf:O$},{from:($,Z)=>hZ(HX($,Z))}),fX={getOffsetNanosecondsFor:CX,getPossibleInstantsFor($,Z,J){let W=[...Z.call($,T0(z0(J,q)))].map((j)=>_U(j).epochNanoseconds),Y=W.length;return Y>1&&(W.sort(A0),l7(l0(u0(W[0],W[Y-1])))),W}},K9={getOffsetNanosecondsFor:CX},[NU,R0,_U]=L1(P4,Yz,RX,{add:($,Z)=>R0(i7(0,$,$0(Z))),subtract:($,Z)=>R0(i7(1,$,$0(Z))),until:($,Z,J)=>s(V2(0,$,D1(Z),J)),since:($,Z,J)=>s(V2(1,$,D1(Z),J)),round:($,Z)=>R0(v5($,Z)),equals:($,Z)=>Ij($,D1(Z)),toZonedDateTime($,Z){let J=y1(Z);return Q0(C2($,o(J.timeZone),N0(J.calendar)))},toZonedDateTimeISO:($,Z)=>Q0(C2($,o(Z))),toLocaleString($,Z,J){let[W,Y]=QU(Z,J,$);return W.format(Y)},toString:($,Z)=>w7(o,G0,$,Z),toJSON:($)=>w7(o,G0,$),valueOf:O$},{from:($)=>R0(D1($)),fromEpochSeconds:($)=>R0(Cz($)),fromEpochMilliseconds:($)=>R0(Az($)),fromEpochMicroseconds:($)=>R0(Sz($)),fromEpochNanoseconds:($)=>R0(Ez($)),compare:($,Z)=>K2(D1($),D1(Z))}),[S4,iP]=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,K9).getOffsetNanosecondsFor(J);return v$(W)},getPlainDateTimeFor($,Z,J=q){let W=D1(Z).epochNanoseconds,Y=x4(this,K9).getOffsetNanosecondsFor(W);return T0(z0(X$(W,Y),N0(J)))},getInstantFor($,Z,J){let W=V$(Z),Y=I7(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}}),IU=xX(Object.keys(fX)),[xU,U$]=L1(H4,Kz,O9,{getISOFields:v3,with($,Z,J){return U$(Zz(this,pZ(Z),J))},add:($,Z)=>U$(r7(0,$,$0(Z))),subtract:($,Z)=>U$(r7(1,$,$0(Z))),until:($,Z,J)=>s(M2(0,$,F$(Z),J)),since:($,Z,J)=>s(M2(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]=FU(Z,J,$);return W.format(Y)},toString:h7,toJSON:($)=>h7($),valueOf:O$},{from:($,Z)=>U$(F$($,Z)),compare:($,Z)=>z4(F$($),F$(Z))}),[CU,D$,AU]=L1(wZ,w(Qz,N0),{...y3,...OU},{getISOFields:v3,getCalendar:w3,with($,Z,J){return D$(ej(qU,$,this,pZ(Z),J))},add:($,Z,J)=>D$(a7(_X,0,$,$0(Z),J)),subtract:($,Z,J)=>D$(a7(_X,1,$,$0(Z),J)),until:($,Z,J)=>s(L2(IX,0,$,gZ(Z),J)),since:($,Z,J)=>s(L2(IX,1,$,gZ(Z),J)),equals:($,Z)=>Sj($,gZ(Z)),toPlainDate($,Z){return Z0(Nz(g3,$,this,Z))},toLocaleString($,Z,J){let[W,Y]=VU(Z,J,$);return W.format(Y)},toString:g7,toJSON:($)=>g7($),valueOf:O$},{from:($,Z)=>D$(gZ($,Z)),compare:($,Z)=>h$(gZ($),gZ(Z))}),[SU,T0]=L1(l$,w(zz,N0),{...y3,...D9,...O9},{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($,F9(Z))),add:($,Z,J)=>T0(n7(s$,0,$,$0(Z),J)),subtract:($,Z,J)=>T0(n7(s$,1,$,$0(Z),J)),until:($,Z,J)=>s(D2(O1,0,$,V$(Z),J)),since:($,Z,J)=>s(D2(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]=KU(Z,J,$);return W.format(Y)},toString:y7,toJSON:($)=>y7($),valueOf:O$},{from:($,Z)=>T0(V$($,Z)),compare:($,Z)=>F2(V$($),V$(Z))}),[EU,Z0,kX]=L1(u$,w(Xz,N0),{...y3,...D9},{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(o7(s$,0,$,$0(Z),J)),subtract:($,Z,J)=>Z0(o7(s$,1,$,$0(Z),J)),until:($,Z,J)=>s(O2(O1,0,$,f0(Z),J)),since:($,Z,J)=>s(O2(O1,1,$,f0(Z),J)),equals:($,Z)=>Aj($,f0(Z)),toZonedDateTime($,Z){let J=!D0(Z)||Z instanceof S4?{timeZone:Z}:Z;return Q0(Mz(o,F$,i,$,J))},toPlainDateTime:($,Z)=>T0(Hz($,F9(Z))),toPlainYearMonth($){return D$(Pz(E4,$,this))},toPlainMonthDay($){return hZ(Tz(R4,$,this))},toLocaleString($,Z,J){let[W,Y]=BU(Z,J,$);return W.format(Y)},toString:v7,toJSON:($)=>v7($),valueOf:O$},{from:($,Z)=>Z0(f0($,Z)),compare:($,Z)=>h$(f0($),f0(Z))}),L9={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))}},L9),qX=Object.assign({yearMonthFromFields($,Z,J,W){return AU(Z.call($,Object.assign(Object.create(null),J),W))}},L9),yX=Object.assign({monthDayFromFields($,Z,J,W){return TU(Z.call($,Object.assign(Object.create(null),J),W))}},L9),M9={mergeFields($,Z,J,W){return y1(Z.call($,Object.assign(Object.create(null),J),Object.assign(Object.create(null),W)))}},bU=Object.assign({},wX,M9),RU=Object.assign({},qX,M9),fU=Object.assign({},yX,M9),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 gU(Z.call($,Z0(X0(J,$)),Z0(X0(W,$)),Object.assign(Object.create(null),j,{largestUnit:S3[Y]})))}}),kU=Object.assign({},H9,{day:AX}),wU=Object.assign({},vX,{day:AX}),E4=M1(qX),b4=M1(wX),R4=M1(yX),qU=M1(RU),g3=M1(bU),yU=M1(fU),s$=M1(H9),O1=M1(vX),_X=M1(kU),IX=M1(wU),[vU,s,gU]=L1(T4,Bz,{...HU,blank:Wj},{with:($,Z)=>s(Jz($,Z)),negated:($)=>s(Z4($)),abs:($)=>s(Jj($)),add:($,Z,J)=>s(J2(k3,O1,i,0,$,$0(Z),J)),subtract:($,Z,J)=>s(J2(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,...DU,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(T2(Z,J,W,Q5($))),yearMonthFromFields:({id:$,o:Z},J,W)=>D$(N2(Z,J,W,z5($))),monthDayFromFields:({id:$,o:Z},J,W)=>hZ(_2(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(f2(Y));J.delete(Y),W.push(Y)}return $.fields(W)},mergeFields:({o:$},Z,J)=>$.mergeFields(F7(D7(Z)),F7(D7(J)))},[P9]=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 P9(Z):Z}}),mU=xX(Object.keys(gX).slice(4)),[hU,Q0]=L1(p1,w(jz,N0,o),{...RX,...y3,...TX(D9),...TX(O9),offset:($)=>v$(G9($).offsetNanoseconds),offsetNanoseconds:($)=>G9($).offsetNanoseconds,timeZoneId:($)=>M0($.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,$,F9(Z))),add:($,Z,J)=>Q0(s7(s$,i,0,$,$0(Z),J)),subtract:($,Z,J)=>Q0(s7(s$,i,1,$,$0(Z),J)),until:($,Z,J)=>s(a(U2(O1,i,0,$,mZ(Z),J))),since:($,Z,J)=>s(a(U2(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(A2(G0,$)),toPlainDate:($)=>Z0(S2(G0,$)),toPlainTime:($)=>U$(E2(G0,$)),toPlainYearMonth($){return D$(Vz(E4,$,this))},toPlainMonthDay($){return hZ(Uz(R4,$,this))},toLocaleString($,Z,J={}){let[W,Y]=GU(Z,J,$);return W.format(Y)},toString:($,Z)=>q7(G0,$,Z),toJSON:($)=>q7(G0,$),valueOf:O$},{from:($,Z)=>Q0(mZ($,Z)),compare:($,Z)=>B2(mZ($),mZ(Z))}),pU=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:CU,PlainMonthDay:PU,PlainDate:EU,PlainTime:xU,PlainDateTime:SU,ZonedDateTime:hU,Instant:NU,Calendar:P9,TimeZone:S4,Duration:vU,Now:pU})}),cU=WU(),T9=new WeakMap,dU=Object.defineProperties(Object.create(Intl),w$({DateTimeFormat:cU}));var f4="x-gemi-socket";var tP="gemi.v1",mX="/__gemi/socket",eP=/^[A-Za-z0-9_-]{1,32}$/,$T={Normal:1000,UnsupportedData:1003,PolicyViolation:1008,Restart:1012,TryAgainLater:1013,Revoked:4001};function YT($){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 uU,randomBytes as lU}from"crypto";function iU($=process.env.SECRET){if(!$)return"gemi:bc:";return`gemi:bc:${Buffer.from(uU("sha256",$,"gemi","gemi.broadcast.prefix",4)).toString("hex")}:`}var sU="__control",N9=250,nU=1e4,oU=15000;class _9{config;prefix;controlChannel;instanceId=lU(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??iU(),this.controlChannel=this.prefix+sU,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 $})(),oU,"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(nU,N9*2**this.reconnectAttempt);this.reconnectAttempt=Math.min(this.reconnectAttempt+1,16);let Z=Math.max(N9,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??aU(Math.min(Z,N9));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 aU($){return new Promise((Z)=>setTimeout(Z,$))}function pX($){return $ instanceof Error?$.message:String($)}import{createHmac as rU,hkdfSync as tU,randomBytes as cX}from"crypto";function dX($){return rU("sha256",eU()).update($).digest("base64url").slice(0,22)}var k4=null;function eU(){let $=process.env.SECRET||void 0;if(k4&&k4.secret===$)return k4.key;let Z=$?Buffer.from(tU("sha256",$,"gemi","gemi.broadcast.socket-tag",32)):cX(32);return k4={secret:$,key:Z},Z}function GT(){return cX(16).toString("base64url")}var $D=/^[A-Za-z0-9_-]{8,64}$/;function I9($){return typeof $==="string"&&$D.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=H1(hX(),$),this.driver=WD(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,JD($))}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=ZD($);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 ZD($){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 JD($){if($===null||$===void 0)return null;if(typeof $==="string")return I9($)?$:null;let J=($ instanceof Request?$.headers:("rawRequest"in $)?$.rawRequest.headers:$.headers)?.get(f4);return I9(J)?J:null}function WD($,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 _9({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 x9 extends Error{code;constructor($,Z=`OAuth callback failed: ${$}`){super(Z);this.name="OAuthCallbackError",this.code=$}}class YD{linkByEmail=!0;createUsers=!0;createUsersWithoutEmail=!1}import{createHash as C9,createHmac as jD,randomBytes as nX,timingSafeEqual as rX}from"crypto";var c3=600,q4="gemi_oauth",zD=`__Host-${q4}`;function uZ($,Z=q4){if(Z===q4)return $?zD:q4;return $?`__Host-${Z}`:Z}function p3($){return $.toString("base64url")}function tX($){return jD("sha256",UZ()).update(`gemi-oauth-state:${$}`).digest()}function oX($,Z){let J=C9("sha256").update($).digest(),W=C9("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=XD(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:QD(z)}}function XD($){return p3(C9("sha256").update($).digest())}function QD($){let Z=p3(Buffer.from(JSON.stringify($)));return`${Z}.${p3(tX(Z))}`}function GD($){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 KD($,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=GD($.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 KD(J.state,J.expiresAt,Z),{ok:!0,payload:J}}var A9=new WeakMap;function FD($){let Z=A9.get($);if(!Z)Z=$(BD(32).toString("hex")),A9.set($,Z),Z.catch(()=>A9.delete($));return Z}async function S9($,Z,J){if(typeof J==="string"&&J!=="")return await $.verifyPassword(Z,J);try{await $.verifyPassword(Z,await FD($.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 b9 extends Error{}function E9($){return typeof $==="string"&&$!==""?$:null}function eX($){return Q3($)}var VD=256;function $Q($){return typeof $==="string"&&$!==""&&$.length<=VD?$: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 R9 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(M(b).config[$]===!1)throw new W0("Not found",{status:404})}class r extends X3{async me(){let $=await w0.user();if(!$)throw new v8;return $}async verifyEmail($=new A){c1("password");let Z=await $.input(),{userProvider:J}=M(b),W=E9(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=M(b),{userProvider:J}=Z,W=E9($.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,M(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=M(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=M(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSessionV2({email:J});return $.ctx().setCookie("access_token",W.token,M(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=M(b),J=await this.verifyPinRequest($),W=await Z.createOrUpdateSession({email:J});return $.ctx().setCookie("access_token",W.token,M(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 R9){c1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=M(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await S9(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,M(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 R9){c1("password");let Z=await $.input(),{email:J,password:W}=Z.toJSON(),Y=J.toLowerCase().trim(),j=M(b),z=await j.userProvider.findUserByEmailAddress(Y,j.config.verifyEmail),X=typeof W==="string"&&await S9(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,M(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 $=M(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=M(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=M(b),{config:W}=J,Y=await J.revokeSession(Z,$.headers.get("User-Agent"));if($.ctx().setCookie("access_token","",M(b).accessTokenCookieOptions($,new Date(0))),M(b).cookieDomain($))$.ctx().setCookie("access_token","",{...M(b).accessTokenCookieOptions($,new Date(0)),domain:void 0});if(Y?.user)UD(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}=M(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}=M(b),W=await $.input(),{password:Y,token:j}=W.toJSON(),z=E9(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}=M(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 S9(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=M(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=M(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 x9)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,H=D?await W.findUserBySocialAccount(Z,D):null,I="signin",E=!H&&!P&&!L&&!!D&&z.createUsersWithoutEmail===!0;if(!H&&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{H=await this.createOAuthUserWithoutEmail({provider:Z,providerId:D,name:V,username:U,locale:M(l).detectLocale($)}),I="signup"}catch(N){let _=await W.findUserBySocialAccount(Z,D);if(!_)throw N;H=_}}if(!H){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=M(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(_)H=_.user,I=_.action}catch(_){let x=D?await W.findUserBySocialAccount(Z,D):null;if(!x)throw _;H=x}if(!H)return this.oauthFailure($,"account_conflict")}let S=await J.createOrUpdateSessionV2({email:H.email,id:H.id});if($.ctx().setCookie("access_token",S.token,M(b).accessTokenCookieOptions($,S.expiresAt)),I==="signup")await Y.onSignUp(H,"",$.search.toJSON());else await Y.onSignIn(H,$.search.toJSON());await n$(J.config,{session:S,user:H,isNewUser:I==="signup",method:"oauth",req:$});let R=JQ($)??Y.redirectPath,f=Y.oauthCompleteProfilePath?G1(Y.oauthCompleteProfilePath,""):"";if(f&&!H.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}=M(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=M(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}=M(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=M(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=M(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=M(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=M(l).detectLocale($);try{K=await J.transaction(async()=>{if(!await Z.claimOneTimeCode(Q,F.id))throw new b9;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 b9)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,M(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 UD($){try{let Z=$?.id;if(Z===void 0||Z===null)return;let J=M();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=M(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=M(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 M(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(M(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 f9 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 k9 extends I0{middlewares=["cache:private,0,no-store"];routes={"/set-locale/:locale":this.get(async()=>{let Z=new A().params.locale;return await M(l).onLocaleChange(Z),{locale:Z}}),"/translations/:locale/:scope*":this.get(async()=>{let $=new A,Z=`/${$.params.scope??""}`,J=$.params.locale,W=M(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 w9{}class q9 extends w9{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 q9,allowedHosts:[],maxSize:10485760,timeout:1e4}}class K0 extends Error{status;constructor($,Z,J){super(Z,J);this.status=$;this.name="ImageSourceError"}}var DD=new Set([301,302,303,307,308]),OD="/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 LD(j,Z,W),Q=X.headers.get("location");if(DD.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 LD($,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(OD))throw new K0(403,"This image source is not allowed");if(MD($.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 MD($){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 y9 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 MQ(400,"url query parameter is required");let X=M(HQ),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 MQ(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 MQ($,Z){return Response.json({error:Z},{status:$})}class HQ{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 v9 extends I0{middlewares=["cache:private,0"];routes={"/live":this.get(async()=>{let $=Bun.file(M(PQ).currentLogFilePath);return new Response(await $.text(),{headers:{"Content-Type":"text/plain"}})})}}function wN($){return $}function TQ(){return{onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{}}}function NQ(){return{partialRendering:!0,localeRouting:"prefix",theme:{},onNotFound:()=>{},onRequestStart:()=>{},onRequestEnd:()=>{},onRequestFail:()=>{},onStreamComplete:()=>{}}}function PD($){return"run"in $}function TD($){return Object.hasOwn($,"get")||Object.hasOwn($,"post")||Object.hasOwn($,"put")||Object.hasOwn($,"patch")||Object.hasOwn($,"delete")}function ND($){return Object.hasOwn($,"first")&&Object.hasOwn($,"second")}function _D($){if("__brand"in $)return $.__brand==="ApiRouter";return!1}function ID($){if("__internal_brand"in $)return $.__internal_brand==="ProxyHandler";return!1}function _Q($){if("__internal_brand"in $)return $.__internal_brand==="StreamHandler";return!1}function xD($){let Z=$.replace(/(?<!:\w*)\([\w-]+\)/g,"");if(Z===$)return $;let J=`/${Z}`.replace(/\/{2,}/g,"/");return J.length>1?J.replace(/\/$/,""):J}function g9($,Z="",J=[]){let W={};function Y(j,z,X,Q,G){let B=j==="/"?"":j,F=Z==="/"?"":Z,K=xD((`${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(ID(z)){let X=z;for(let Q of["GET","POST","PUT","DELETE"])Y(j,Q,X.run.bind(X),X.middlewares);continue}if(PD(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(TD(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(_D(z)){let X=new z,Q=g9(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(ND(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 m9($,Z){if($==="/")return Z;if(Z==="/")return $;return`${$}${Z}`}function h9($){let Z=p4($);return Z.length>1?Z.replace(/\/$/,""):Z}function IQ($,Z){return Z.map((J)=>({...J,path:h9(m9($,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=m9(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:h9(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:h9(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=m9(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 p9="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 CD=Object.defineProperty,C=($,Z)=>CD($,"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 AD=/[$_\p{ID_Start}]/u,SD=/[$_\u200C\u200D\p{ID_Continue}]/u,d9=".*";function AQ($,Z){return(Z?/^[\x00-\xFF]*$/:/^[\x00-\x7F]*$/).test($)}C(AQ,"isASCII");function i9($,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&&AD.test(Q)||X!==W+1&&SD.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(i9,"lexer");function s9($,Z={}){let J=i9($);Z.delimiter??="/#?",Z.prefixes??="./";let W=`[^${c0(Z.delimiter)}]+?`,Y=[],j=0,z=0,X="",Q=new Set,G=C((H)=>{if(z<J.length&&J[z].type===H)return J[z++].value},"tryConsume"),B=C(()=>G("OTHER_MODIFIER")??G("ASTERISK"),"tryConsumeModifier"),F=C((H)=>{let I=G(H);if(I!==void 0)return I;let{type:E,index:S}=J[z];throw TypeError(`Unexpected ${E} at ${S}, expected ${H}`)},"mustConsume"),K=C(()=>{let H="",I;for(;I=G("CHAR")??G("ESCAPED_CHAR");)H+=I;return H},"consumeText"),V=C((H)=>H,"DefaultEncodePart"),U=Z.encodePart||V,D="",O=C((H)=>{D+=H},"appendToPendingFixedValue"),L=C(()=>{D.length&&(Y.push(new sZ(3,"","",U(D),"",3)),D="")},"maybeAddPartFromPendingFixedValue"),P=C((H,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(H);return}if(L(),!I&&!E){if(!H)return;Y.push(new sZ(3,"","",U(H),"",f));return}let N;E?E==="*"?N=d9:N=E:N=W;let _=2;N===W?(_=1,N=""):N===d9&&(_=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(H),N,U(S),f))},"addPart");for(;z<J.length;){let H=G("CHAR"),I=G("NAME"),E=G("REGEX");if(!I&&!E&&(E=G("ASTERISK")),I||E){let R=H??"";Z.prefixes.indexOf(R)===-1&&(O(R),R=""),L();let f=B();P(R,I,E,"",f);continue}let S=H??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(s9,"parse");function c0($){return $.replace(/([.+*?^${}()[\]|/\\])/g,"\\$1")}C(c0,"escapeString");function u9($){return $&&$.ignoreCase?"ui":"u"}C(u9,"flags");function SQ($,Z,J){return n9(s9($,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 n9($,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=d9),!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,u9(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,u9(J))}C(n9,"partsToRegexp");var H$={delimiter:"",prefixes:"",sensitive:!0,strict:!0},ED={delimiter:".",prefixes:"",sensitive:!0,strict:!0},bD={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 o9($,Z){return $.startsWith(Z)?$.substring(Z.length,$.length):$}C(o9,"maybeStripPrefix");function bQ($,Z){return $.endsWith(Z)?$.substr(0,$.length-Z.length):$}C(bQ,"maybeStripSuffix");function a9($){return!$||$.length<2?!1:$[0]==="["||($[0]==="\\"||$[0]==="{")&&$[1]==="["}C(a9,"treatAsIPv6Hostname");var RQ=["ftp","file","http","https","ws","wss"];function r9($){if(!$)return!0;for(let Z of RQ)if($.test(Z))return!0;return!1}C(r9,"isSpecialScheme");function fQ($,Z){if($=o9($,"#"),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($=o9($,"?"),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||$===""?$:a9($)?$J($):e9($)}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 t9(Z)===$&&($=""),J||$===""?$:ZJ($)}C(gQ,"canonicalizePort");function mQ($,Z){return $=bQ($,":"),Z||$===""?$:d4($)}C(mQ,"canonicalizeProtocol");function t9($){switch($){case"ws":case"http":return"80";case"wws":case"https":return"443";case"ftp":return"21";default:return""}}C(t9,"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 e9($){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(e9,"hostnameEncodeCallback");function $J($){if($==="")return $;if(/[^0-9a-fA-F[\]:]/g.test($))throw TypeError(`Invalid IPv6 hostname '${$}'`);return $.toLowerCase()}C($J,"ipv6HostnameEncodeCallback");function ZJ($){if($===""||/^[0-9]*$/.test($)&&parseInt($)<=65535)return $;throw TypeError(`Invalid port '${$}'.`)}C(ZJ,"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=i9(this.#j,!0);this.#$<this.#W.length;this.#$+=this.#Y){if(this.#Y=1,this.#W[this.#$].type==="END"){if(this.#X===0){this.#H(),this.#K()?this.#J(9,1):this.#B()?this.#J(8,1):this.#J(7,0);continue}else if(this.#X===2){this.#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.#M()||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.#M()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 6:this.#M()?this.#J(7,0):this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 7:this.#B()?this.#J(8,1):this.#K()&&this.#J(9,1);break;case 8:this.#K()&&this.#J(9,1);break;case 9:break;case 10:break}}this.#Z.hostname!==void 0&&this.#Z.port===void 0&&(this.#Z.port="")}#J($,Z){switch(this.#X){case 0:break;case 1:this.#Z.protocol=this.#Q();break;case 2:break;case 3:this.#Z.username=this.#Q();break;case 4:this.#Z.password=this.#Q();break;case 5:this.#Z.hostname=this.#Q();break;case 6:this.#Z.port=this.#Q();break;case 7:this.#Z.pathname=this.#Q();break;case 8:this.#Z.search=this.#Q();break;case 9:this.#Z.hash=this.#Q();break;case 10:break}this.#X!==0&&$!==10&&([1,2,3,4].includes(this.#X)&&[6,7,8,9].includes($)&&(this.#Z.hostname??=""),[1,2,3,4,5,6].includes(this.#X)&&[8,9].includes($)&&(this.#Z.pathname??=this.#D?"/":""),[1,2,3,4,5,6,7].includes(this.#X)&&$===9&&(this.#Z.search??="")),this.#T($,Z)}#T($,Z){this.#X=$,this.#G=this.#$+Z,this.#$+=Z,this.#Y=0}#H(){this.#$=this.#G,this.#Y=0}#F($){this.#H(),this.#X=$}#O($){return $<0&&($=this.#W.length-$),$<this.#W.length?this.#W[$]:this.#W[this.#W.length-1]}#z($,Z){let J=this.#O($);return J.value===Z&&(J.type==="CHAR"||J.type==="ESCAPED_CHAR"||J.type==="INVALID_CHAR")}#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.#$,":")}#M(){return this.#z(this.#$,"/")}#B(){if(this.#z(this.#$,"?"))return!0;if(this.#W[this.#$].value!=="?")return!1;let $=this.#O(this.#$-1);return $.type!=="NAME"&&$.type!=="REGEX"&&$.type!=="CLOSE"&&$.type!=="ASTERISK"}#K(){return this.#z(this.#$,"#")}#x(){return this.#W[this.#$].type=="OPEN"}#C(){return this.#W[this.#$].type=="CLOSE"}#A(){return this.#z(this.#$,"[")}#S(){return this.#z(this.#$,"]")}#Q(){let $=this.#W[this.#$],Z=this.#O(this.#G).index;return this.#j.substring(Z,$.index)}#E(){let $={};Object.assign($,H$),$.encodePart=d4;let Z=SQ(this.#Q(),void 0,$);this.#D=r9(Z)}};C(iQ,"Parser");var c9=["protocol","username","password","hostname","port","pathname","search","hash"],M$="*";function l9($,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(l9,"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 JJ=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:M$,protocol:M$,username:M$,password:M$,hostname:M$,port:M$,search:M$,hash:M$};this.#j=lZ(j,$,!0),t9(this.#j.protocol)===this.#j.port&&(this.#j.port="");let z;for(z of c9){if(!(z in this.#j))continue;let X={},Q=this.#j[z];switch(this.#Z[z]=[],z){case"protocol":Object.assign(X,H$),X.encodePart=d4;break;case"username":Object.assign(X,H$),X.encodePart=hQ;break;case"password":Object.assign(X,H$),X.encodePart=pQ;break;case"hostname":Object.assign(X,ED),a9(Q)?X.encodePart=$J:X.encodePart=e9;break;case"port":Object.assign(X,H$),X.encodePart=ZJ;break;case"pathname":r9(this.#W.protocol)?(Object.assign(X,bD,Y),X.encodePart=cQ):(Object.assign(X,H$,Y),X.encodePart=dQ);break;case"search":Object.assign(X,H$,Y),X.encodePart=uQ;break;case"hash":Object.assign(X,H$,Y),X.encodePart=lQ;break}try{this.#Y[z]=s9(Q,X),this.#W[z]=n9(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,l9($,Z),!1)}catch{return!1}let W;for(W of c9)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,l9($,Z),!1)}catch{return null}let W={};Z?W.inputs=[$,Z]:W.inputs=[$];let Y;for(Y of c9){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(JJ,"URLPattern");function u3($,Z){for(let[J,W]of Object.entries($)){let Y=new JJ({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 RD($,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 fD($,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,fD(z.pathname,J));if(!X)return r$;return RD({segments:X.route.segments,params:X.params,search:z.search},j)}var WJ="x-gemi-from";import{createElement as u1,Fragment as DG}from"react";function kD($){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])=>[kD(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 YJ($){let Z=[];for(let[J,W]of $)Z.push(J,...YJ(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 jJ{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 wD=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>wD)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 zJ(){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&&M(l).isLocaleAware)T.getStore().setLocale(F);try{let K=M(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 qD=new Set(["script","style","template","title"]),yD=/\shidden([\s=/]|$)/i,vD=/"[^"]*"|'[^']*'/g;function gD($){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&&qD.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(yD.test(Q.replace(vD,'""')))W=1}return{shellChars:Z,deferredChars:J}}var mD=1000,hD=64;function pD($){return $>=1000?`${($/1000).toFixed(1)} kB`:`${$} chars`}function cD($,Z){if(Z.deferredChars<mD)return null;if(Z.shellChars>=hD)return null;return`[gemi] GET ${$} streams ${pD(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=cD(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(),gD(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 A_,createContext as dD,createElement as S_,lazy as E_,use as b_,useContext as R_}from"react";function WG($){return{islands:[],render:$,instances:new WeakMap,count:0}}var i3="gemi-slot",YG="data-slot",jG="data-gemi-slot";var uD=Symbol.for("gemi.staticRender"),zG=globalThis[uD]??=dD(null);import{createHash as BG}from"crypto";var XJ='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 lD}from"crypto";import{existsSync as QG,readFileSync as iD}from"fs";import{join as BJ}from"path";var GG=".script",sD=[".ts",".js"],nD="document-scripts.json",KG="data-gemi-script",oD=/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/;function aD($){if(typeof $!=="string"||!oD.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 rD($,Z){for(let J of sD){let W=BJ($,"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 tD($){return`'sha256-${lD("sha256").update($).digest("base64")}'`}var QJ,GJ=new Map;function eD(){if(QJ===void 0){let $=BJ(KJ(),"dist","server",nD);QJ=QG($)?JSON.parse(iD($,"utf8")):null}return QJ??null}async function FJ($){aD($);let Z=Bun.env.NODE_ENV==="production";if(Z){let j=eD()?.[$];if(j!==void 0)return j;let z=GJ.get($);if(z)return z}let J=BJ(KJ(),"app"),W=rD(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 GJ.set($,Y),Y.catch(()=>GJ.delete($)),Y}async function g_($){return tD(await FJ($))}var $O="gemi-islands",i_=`'sha256-${BG("sha256").update(DJ).digest("base64")}'`;function VJ($,Z,J,W){if(!J)return $;let Y=W?$.lastIndexOf(Z):$.indexOf(Z);return Y===-1?$+J:$.slice(0,Y)+J+$.slice(Y)}var UJ=($)=>$.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<"),s_=`'sha256-${BG("sha256").update(XJ).digest("base64")}'`,ZO='await import("/refresh.js").catch(()=>{});await import("/@vite/client").catch(()=>{});',JO="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}="${UJ(j.name)}">${j.source}</script>`:"";if(!Q&&!Y)return VJ($,"</head>",G,!1);let F=(Y?`<meta name="${JO}" content="${UJ(Y.identity)}"${Y.prefetch==="none"?' data-prefetch="none"':""}/>`:"")+[...z].map((U)=>`<link rel="modulepreload" href="${UJ(U)}"/>`).join("")+G,K=Y?XJ:DJ,V=(Q?`<script type="application/json" id="${$O}">${B1({i:X})}</script>`:"")+`<script type="module">${W?ZO+K:K}</script>`;return VJ(VJ($,"</head>",F,!1),"</body>",V,!0)}function WO($,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=WO($,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 OJ($){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 YO=async()=>(await import("./chunk-44y62yav.js")).default,LJ,s3=async(...$)=>{return LJ??=import("react-dom/server.browser").catch((Z)=>{throw LJ=void 0,Z}),(await LJ).renderToReadableStream(...$)},OG=1e4,LG="no-locale",jO="no-theme";async function zO($,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 PJ="/assets";function XO($){return $===PJ||$.startsWith(`${PJ}/`)}function QO($){let Z=$.filter(XO);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 "${PJ}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function GO($){let Z=M(j1).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function MJ($){let{status:Z=400,error:J,body:W,...Y}=$;return new Response(W??J?.message,{...Y,status:Z})}function KO($){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),QO(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=YJ(this.componentTree),this.staticRoutes=Object.entries(this.flatViewRoutes).filter(([,Y])=>Y.static).map(([Y])=>Y);for(let Y of this.staticRoutes){let j=this.flatViewRoutes[Y].static?.layout;if(j&&!this.flatComponentTree.includes(j))this.flatComponentTree.push(j)}if(this.notFound){for(let Y of[this.notFound.view,this.notFound.static?.layout])if(Y&&!this.flatComponentTree.includes(Y))this.flatComponentTree.push(Y)}this.root=$.root}async passesFeatureGates($){let Z=M($$);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 FJ(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 H=VG(await new Response(P).text());return new Response(FG(H,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:H,appId:I,features:E,staticView:S}=$,R=this.theme===!1||K||S?null:{cookie:this.theme.cookie??p9,default:this.theme.default??null,value:BO(Z,this.theme.cookie??p9)},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?GO(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(H){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,...IK}=B0.satoriOptions,xK=await Promise.all(Z3.map((r3)=>{return zO(r3.name,r3.weight,r3.style).then((bK)=>({...r3,data:bK}))})),rJ=new Headers(j);rJ.set("Content-Type","image/png");let[CK,AK]=await Promise.all([YO(),h4("Rendering an OG image")]),SK=await CK(B0.jsx,{...IK,fonts:xK}),EK=await AK(Buffer.from(SK)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(EK),{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 G8=this.modulePreloadLinks({clientEntry:WZ,modulePreloadManifest:$3,views:x??["404"],routeKey:Y??"404"}),K8=await T$(x??["404"]);N.data.prefetchedData=G.snapshotResolved(),G.markRenderStart();let s0=new AbortController,YZ=setTimeout(()=>s0.abort(),OG),_$=M6(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:[...G8,...K8,...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(i8(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(i8(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=M(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 _=MG(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 _=M(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={},H=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(jO),R=_.route.static,W&&this.partialRendering){let x=$.headers.get(WJ),I1=aQ({flatViewRoutes:this.flatViewRoutes,supportedLocales:M(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),H={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$=OJ(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 M(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=M(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 HG(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:M(jJ).id,features:await M($$).forClient()};let{params:G8,user:K8}=_,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 _8(jZ,J0)}if(W){J0.set("Content-Type","application/x-ndjson; charset=utf-8"),J0.append("Vary",WJ),i1.forEach((B0)=>J0.append("Set-Cookie",B0.toString())),await this.hooks.onRequestEnd(p);let k={meta:H&&!x.metadata.touched?null:_.meta,data:{[Q]:s0},breadcrumbs:YZ,prefetchedData:x.serverQueries.snapshotResolved(),i18n:C1,features:_.features,is404:!L,appId:_.appId,partial:H};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=OJ(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:G8,pathname:J.pathname,serverQueries:x.serverQueries,userAgent:$.headers.get("user-agent"),noStream:I,noTheme:E,url:J,user:K8,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?KO(y.payload.viewData??y.payload.api):MJ(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():MJ(zJ());if(y instanceof d1&&y.status===403)return W?oZ():MJ(zJ());throw y}},Z)}}function BO($,Z){let J=$.cookies?.get(Z);return xQ(J)?J:null}function TJ(){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 $=M(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 $=M(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 FO=new Set([n1,"cookie","content-type","content-length","transfer-encoding","connection","host","user-agent","forwarded"]),VO=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,UO=/^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]*$/;function DO($,Z,J,W){for(let[Y,j]of Object.entries(J.headers??{})){if(j===void 0||j===null)continue;let z=Y.toLowerCase();if(FO.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(!VO.test(Y)||!UO.test(j))throw Error(`dispatchAs: "${Y}" is not a cookie a Cookie header can carry.`);Z.push(`${Y}=${j}`)}}function OO($,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 LO(){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=g9({"/":$.rootRouter,"/auth":f9,"/__gemi__/services/i18n":k9,"/__gemi__/services/image":y9,...LO()?{"/__gemi__/services/logs":v9,"/__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 M(o1).runMiddleware(W)}catch(Y){if(Y.kind===a1)return PG(Y.payload.api);else{if(C$(Y))return TJ();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 TJ();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=M(l);if(G.isEnabled){let D=G.detectLocale(j);z.setLocale(D)}z.setRequest(j),M(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=OO(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)DO(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 MO}from"crypto";var t4="",IJ="*",HO=60000,PO=1e4,a4=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,r4=16,NJ=/^[!#$%&'*+.^_`|~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&&MO(J,W)}function TO($){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 NO($){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"||!NJ.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"||!NJ.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"||!NJ.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<r4)throw Error(`\`${Z}.secret.value\` must be at least ${r4} 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 _O($){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 AG($){if($===void 0)return[];if($===!0)return!0;if(!Array.isArray($))throw Error(`\`route.domains.devHosts\` must be a list of hostnames (or \`true\`). Got ${JSON.stringify($)}.`);return $.map((Z,J)=>{let W=typeof Z==="string"?Z.trim().toLowerCase():"",Y=W.startsWith(".")?W.slice(1):W;if(!Y||!Y.split(".").every((j)=>a4.test(j)))throw Error(`\`route.domains.devHosts[${J}]\` must be a bare hostname, e.g. "app.acme.test", or ".acme.test" for the domain and its subdomains \u2014 no scheme, port, path or "*". Got ${JSON.stringify(Z)}.`);return W})}function IO($){let Z=T1($.root),J=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==J||!Z.split(".").every((j)=>a4.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<r4)throw Error(`\`route.domains.ask.secret\` must be at least ${r4} characters. A guessable one is worse than leaving \`ask\` out.`);NO($.trustProxy),AG($.devHosts);let W=new Set,Y=null;for(let j of $.groups??[]){let{subdomain:z}=j;if(W.has(z))throw Error(`\`route.domains\` declares the subdomain "${z}" twice.`);if(W.add(z),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)=>a4.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;devHosts;hostTrusts;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeaders;constructor($){IO($),this.root=T1($.root),this.devHosts=AG($.devHosts),this.hostTrusts=TO($.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)?_O(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:t4,params:{},custom:!1};if($.endsWith(`.${this.root}`)){let W=$.slice(0,-(this.root.length+1)),Y=this.fixed.get(W);if(Y)return{host:$,group:Y.subdomain,params:{},custom:!1};if(this.param&&a4.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>=PO)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 xO={kind:"none"};function Ox($){let Z=($??"").trim().toLowerCase();if(Z===""||Z==="false"||Z==="off"||Z==="0")return xO;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 Lx($,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 SG=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,EG=16;function Mx($){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(!SG.test(Z))throw Error(`GEMI_CLIENT_IP_HEADER must be a single header name, e.g. "x-azure-clientip". Got ${JSON.stringify(Z)}.`);if(!SG.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<EG)throw Error(`GEMI_PROXY_SECRET must be at least ${EG} characters. A guessable one lets any client name its own address.`);return{header:Z.toLowerCase(),secretHeader:J.toLowerCase(),secret:W}}function bG($,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 CO="/__gemi__/domains/ask";class j1{static token="router.domains";resolver;acceptsCustomDomains;clientIpTrust;groups=new Map;constructor($,Z){this.groups.set(t4,$),this.clientIpTrust=Z.clientIpTrust??null;let{domains:J}=Z;if(this.acceptsCustomDomains=Boolean(J?.custom),!J){this.resolver=null;return}this.resolver=new 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?bG($.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!==CO)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??t4)}viewDispatchers(){return Array.from(new Set(Array.from(this.groups.values(),($)=>$.view)))}viewGroups(){let $=new Set,Z=[];for(let[J,W]of this.groups){if($.has(W.view))continue;$.add(W.view),Z.push({group:J,view:W.view})}return Z}}function tZ($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var RG=600000;function fG($,Z){return[U6($,Z),U6($,Z-1)]}class b{static token="auth";config;provider;constructor($={},Z=new r8){PY($.oauthProviders),this.config={...H1(TY($),$),emailCode:l8($.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=M().bound(j1)?M(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"?M(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(!m8($))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/RG),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 fG($,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(m8($)||!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()/RG),W=fG($,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 MY(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 e4{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=e4.ensure($,Z[0]);if(await J.promise,J.status==="rejected")throw J.error;return J.data}static prefetch($,...Z){e4.ensure($,Z[0])}static noPrefetch(){let $=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 AO($){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==="*"?AO(z):encodeURIComponent(String(z))}`});return`${$8}${J==="/"?"":J}`||$8}var kG=new Map;function wG($,Z){let J=kG.get($);if(!J)J=new URLPattern({pathname:`${$8}${$==="/"?"":$}`}),kG.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 qG($,Z,J="/"){let W=new URL($.origin),Y=Z.host?Z.host:Z.subdomain?`${Z.subdomain}.${$.root}`:$.root,j=new URL(J.startsWith("/")?J:`/${J}`,W),z=SO(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 SO($){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 yG{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=M(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 qG({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 wG(String($),Z)}}class vG{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 EO={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 DC($){return $}function gG(){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 bO="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=`${RO(this.prefix)}*`,J="0";do{let W=await $.send("SCAN",[J,"MATCH",Z,"COUNT",bO]),[Y,j]=Array.isArray(W)?W:["0",[]];if(J=String(Y),Array.isArray(j)&&j.length>0)await $.send("UNLINK",j.map(String))}while(J!=="0")}get client(){if(this.injectedClient)return this.injectedClient;let $=M(),Z=$.bound(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 RO($){return $.replace(/[*?[\]\\^-]/g,(Z)=>`\\${Z}`)}var fO="k:",mG="tag:",kO="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=H1(gG(),$),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 pG(this,Z)}async flush(){await this.store.flush()}async storeKey($){return fO+cG($)}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=mG+Z,W=await this.store.get(J);if(W!==null)return W;let Y=hG();return await this.store.set(J,Y,null),Y}))}async flushTags($){await Promise.all($.map((Z)=>this.store.set(mG+Z,hG(),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 pG extends RJ{manager;tagNames;constructor($,Z){super();this.manager=$;this.tagNames=Z}async flush(){await this.manager.flushTags([...this.tagNames])}async storeKey($){cG($);let Z=await this.manager.tagVersions([...this.tagNames]);return`${kO}${Z.join(",")}:${$}`}}function cG($){if(typeof $!=="string"||$==="")throw TypeError(`A cache key is a non-empty string; got ${JSON.stringify($)}.`);return $}function hG(){let $=new Uint8Array(9);return crypto.getRandomValues($),Array.from($,(Z)=>Z.toString(16).padStart(2,"0")).join("")}class dG 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 uG 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 iG extends g{static getFacadeAccessor(){return lG}static run($,Z,J){return this.getFacadeRoot().run($,Z,J)}static acquire($,Z={}){return this.getFacadeRoot().acquire($,Z)}}class nG extends g{static getFacadeAccessor(){return sG}static encrypt($){return this.getFacadeRoot().encrypt($)}static decrypt($){return this.getFacadeRoot().decrypt($)}static needsReencryption($){return this.getFacadeRoot().needsReencryption($)}}class oG 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 dC($){return $}function aG(){return{driver:"memory",pollInterval:30000,maxSubscriptions:1e4,batchSize:100,keepaliveInterval:5000}}function Z8($){let Z=new URLSearchParams;for(let[J,W]of $)Z.append(J,String(W));return Z.toString()}function 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:wO}=globalThis.Bun;function qO(){return Bun.semver.satisfies(Bun.version,">=1.4.0")}var yO=async($)=>{let Z=new wO($,{max:1,idleTimeout:0,maxLifetime:0});return{listen:(J,W,Y)=>Z.listen(J,W,Y),close:()=>Z.close({timeout:1})}},vO=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(()=>{})}},rG=($)=>qO()?yO($):vO($);var gO=/^[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(!gO.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??rG}async createTable(){for(let $ of mO(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 tG(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 mO($,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 WK=new TextEncoder;function eG($,Z){return WK.encode(`id: ${$}
|
|
50
|
+
data: ${JSON.stringify(Z)}
|
|
51
|
+
|
|
52
|
+
`)}function YK($,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 J8))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(JK())return B(K);try{K.enqueue(WK.encode($K))}catch{B(K)}},$.config.keepaliveInterval)},async pull(K){try{if(!Q){if(await z.ready(),Q=!0,!G)K.enqueue(eG(z.cursor,{type:"ready"}));return}let V=await z.next();if(V.done||G)return B(K);K.enqueue(eG(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:ZK()})}var jK=255,zK=500,hO=30000;class J8 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=zK;pollTimer=null;polling=null;constructor($={},Z={}){this.options=Z;this.config=H1(aG(),$),this.driver=cO(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 Z8(await this.driver.heads(Z))}subscribe($,Z={}){let J=yJ($);if(this.all.size>=this.config.maxSubscriptions)throw new J8(this.config.maxSubscriptions);let W=new XK(this,J,pO(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 YK(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=zK,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,hO)}}}class XK{manager;config;signal;channels;positions=new Map;readTo=new Map;dirty=new Set;pending=[];started=null;wakeUp=null;closed=!1;onAbort=()=>this.close();constructor($,Z,J,W,Y){this.manager=$;this.config=W;this.signal=Y;this.channels=Z;for(let j of Z){let z=J.get(j);if(z!==void 0)this.positions.set(j,z),this.readTo.set(j,z),this.dirty.add(j)}if(Y?.aborted)this.close();else Y?.addEventListener("abort",this.onAbort,{once:!0})}get cursor(){return Z8(this.positions)}get isClosed(){return this.closed}ready(){return this.started??=(async()=>{let $=this.channels.filter((J)=>!this.positions.has(J));if($.length===0)return;let Z=await this.manager.driver.heads($);for(let J of $){let W=Z.get(J)??0;this.positions.set(J,W),this.readTo.set(J,W)}})(),this.started}async next(){await this.ready();for(;;){if(this.closed)return{done:!0,value:void 0};let $=this.pending.shift();if($)return this.positions.set($.channel,$.seq),{done:!1,value:$};let Z=this.dirty.values().next().value;if(Z!==void 0){await this.read(Z);continue}await this.idle()}}async return(){return this.close(),{done:!0,value:void 0}}[Symbol.asyncIterator](){return this}close(){if(this.closed)return;this.closed=!0,this.pending.length=0,this.signal?.removeEventListener("abort",this.onAbort),this.manager.forget(this),this.wake()}moved($,Z){let J=this.readTo.get($);if(J!==void 0&&Z===J)return;this.dirty.add($),this.wake()}async read($){let Z=this.readTo.get($)??0;this.dirty.delete($);let{batchSize:J}=this.config,{entries:W,head:Y,gap:j}=await this.manager.driver.read($,Z,J);if(this.closed)return;if(j){this.readTo.set($,Y),this.pending.push({type:"reset",channel:$,seq:Y});return}for(let z of W)this.readTo.set($,z.seq),this.pending.push({type:"change",channel:$,seq:z.seq,data:z.data});if(W.length===J)this.dirty.add($)}idle(){return new Promise(($)=>{this.wakeUp=$})}wake(){let $=this.wakeUp;this.wakeUp=null,$?.()}}function vJ($){if(typeof $!=="string"||$===""||$.length>jK)throw Error(`A change feed channel is a string of 1 to ${jK} 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 pO($){if($===void 0||$===null)return new Map;if(typeof $==="string")return kJ($);let Z=$ instanceof Map?[...$]:Object.entries($);return kJ(Z8(new Map(Z)))}function cO($,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 QK 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}(${dO(Z.data)})`).join(", ")}function dO($){if($===void 0)return"";try{return JSON.stringify($)??String($)}catch{return String($)}}class GK 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(M())}}function NA($){return $}function KK(){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 uO(this.dialect,this.table))await this.sql.unsafe($)}async create($){let Z=this.q(),J=this.clock(Z),W=$.deadlineMs===null?Z`NULL`:Z`${J} + ${this.ms(Z,$.deadlineMs)}`,Y=$.status==="running"?J:Z`NULL`;await Z`
|
|
53
|
+
INSERT INTO ${this.name(Z)}
|
|
54
|
+
(id, kind, subject, owner, status, meta, version,
|
|
55
|
+
created_at, started_at, updated_at, deadline_at)
|
|
56
|
+
VALUES
|
|
57
|
+
(${$.id}, ${$.kind}, ${$.subject}, ${$.owner}, ${$.status},
|
|
58
|
+
${Y8($.meta)}, 1, ${J}, ${Y}, ${J}, ${W})
|
|
59
|
+
`;let j=await this.get($.id);if(!j)throw Error(`The run ${$.id} was not found after it was written.`);return j}async get($){let Z=this.q(),J=await Z`SELECT * FROM ${this.name(Z)} WHERE id = ${$}`;return J[0]?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 (${W8(Z,$.statuses)})`);let W=J.reduce((j,z)=>Z`${j} AND ${z}`);return(await Z`
|
|
60
|
+
SELECT * FROM ${this.name(Z)}
|
|
61
|
+
WHERE ${W}
|
|
62
|
+
ORDER BY created_at DESC, id DESC
|
|
63
|
+
LIMIT ${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 = ${Y8(J.progress)}`);if("result"in J)j.push(W`result = ${Y8(J.result)}`);if("error"in J)j.push(W`error = ${Y8(J.error)}`);let z=j.reduce((Q,G)=>W`${Q}, ${G}`),X=await W`
|
|
65
|
+
UPDATE ${this.name(W)} SET ${z}
|
|
66
|
+
WHERE id = ${$} AND status IN (${W8(W,Z)})
|
|
67
|
+
`;if(FK(X)===0)return null;return this.get($)}async overdue($,Z){let J=this.q();return(await J`
|
|
68
|
+
SELECT * FROM ${this.name(J)}
|
|
69
|
+
WHERE status IN (${W8(J,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 (${W8(Z,pJ)})
|
|
76
|
+
AND finished_at <= ${this.clock(Z)} - ${this.ms(Z,$)}
|
|
77
|
+
`;return FK(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 W8($,Z){return Z.map((J)=>$`${J}`).reduce((J,W)=>$`${J}, ${W}`)}function Y8($){return $===void 0||$===null?null:JSON.stringify($)}function j8($){if($===null||$===void 0)return null;return JSON.parse(String($))}function uJ($){return $===null||$===void 0?null:Number($)}function BK($){return $===null||$===void 0?null:String($)}function lJ($){return{id:String($.id),kind:String($.kind),subject:BK($.subject),owner:BK($.owner),status:String($.status),meta:j8($.meta),progress:j8($.progress),result:j8($.result),error:j8($.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 FK($){let Z=$;return Math.max(Number(Z.count??0),Number(Z.affectedRows??0))}function uO($,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 VK=191,UK=30000;class z8 extends Error{id;constructor($){super(`No run has the id ${$}.`);this.id=$;this.name="RunNotFoundError"}}class X8 extends Error{code;data;constructor($,Z={}){super($,Z.cause===void 0?void 0:{cause:Z.cause});this.name="RunFailure",this.code=Z.code,this.data=Z.data}}class sJ{options;static token="runs";store;config;ownFeed=null;constructor($={},Z={}){this.options=Z;this.config=H1(KK(),$),this.store=sO(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($){LK("kind",$.kind);let Z=$.id??`run_${crypto.randomUUID().replaceAll("-","")}`;LK("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 iO(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:OK(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 z8($);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 X8)&&!Y.signal.aborted)console.error(`[gemi] Run ${$} failed.`,Q);X=await this.change($,N1,{status:"failed",error:Q instanceof X8?OK(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 z8($);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 DK(z,Math.min(Q,X??1/0,UK),J))z=null;j=await this.store.get($)??j}}finally{Y.close()}}async*subscribe($,Z={}){let J=this.feed.subscribe(this.channel($),{signal:Z.signal});try{await J.ready();let W=await this.store.get($);if(!W)throw new z8($);if(yield W,_1(W.status))return;for await(let Y of J){let j=lO(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,DK(j,Math.min(z??1/0,UK))]);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 DK($,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 lO($,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 OK($){if(typeof $==="string")return{message:$};if($ instanceof X8)return{message:$.message,...$.code!==void 0?{code:$.code}:{},...$.data!==void 0?{data:$.data}:{}};if($ instanceof Error)return{message:$.message};return $}function LK($,Z){if(typeof Z!=="string"||Z===""||Z.length>VK)throw TypeError(`A run's ${$} is a string of 1 to ${VK} characters; got ${JSON.stringify(Z)}.`)}function iO($){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 sO($,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 MK 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 nO=/^[A-Za-z_][A-Za-z0-9_$]*$/;function oO($){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"||!nO.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 Q8{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=oO(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}=NK($,TK(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 PK($),M(f1).connection($)}}var ZZ=new Q8;class _K extends g{static getFacadeAccessor(){return f1}static connection($){return new Q8($)}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,fK as je,n0 as ke,J3 as le,U8 as me,XZ as ne,Y3 as oe,I0 as pe,Z6 as qe,g8 as re,m8 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,p8 as Ce,c8 as De,D6 as Ee,DZ as Fe,lB as Ge,UP as He,TY as Ie,SY as Je,s8 as Ke,EY as Le,bY as Me,eB as Ne,RY as Oe,n8 as Pe,JF as Qe,WF as Re,o8 as Se,fY as Te,kY as Ue,$$ as Ve,wY as We,XF as Xe,r8 as Ye,x8 as Ze,X6 as _e,S1 as $e,_8 as af,E1 as bf,P$ as cf,e4 as df,yG as ef,vG as ff,EO as gf,l1 as hf,DC as if,gG as jf,EJ as kf,bJ as lf,fJ as mf,pG as nf,dG as of,uG as pf,iG as qf,nG as rf,oG as sf,dC as tf,aG as uf,Z8 as vf,kJ as wf,wJ as xf,qJ as yf,J8 as zf,eZ as Af,XK as Bf,QK as Cf,d as Df,j3 as Ef,f4 as Ff,tP as Gf,eP as Hf,$T as If,YT as Jf,hX as Kf,_9 as Lf,dX as Mf,GT as Nf,iX as Of,p0 as Pf,h3 as Qf,sX as Rf,GK as Sf,NA as Tf,pJ as Uf,N1 as Vf,_1 as Wf,cJ as Xf,iJ as Yf,uO as Zf,z8 as _f,X8 as $f,sJ as ag,MK as bg,HK as cg,Q8 as dg,_K as eg,x9 as fg,YD as gg,w9 as hg,q9 as ig,HN as jg,DQ as kg,HQ as lg,J6 as mg,o1 as ng,wN as og,TQ as pg,NQ as qg,jJ as rg,oZ as sg,zJ as tg,g_ as ug,i_ as vg,s_ as wg,PJ as xg,XO as yg,MJ as zg,KO as Ag,n3 as Bg,TJ as Cg,PG as Dg,TG as Eg,o4 as Fg,Ox as Gg,Lx as Hg,Mx as Ig,j1 as Jg,b as Kg,w0 as Lg,W6 as Mg,NW as Ng,iK as Og,HW as Pg,IW as Qg,P8 as Rg,j6 as Sg,T8 as Tg,xW as Ug,eK as Vg,$B as Wg,RW as Xg,kW as Yg,qW as Zg,cW as _g,dW as $g,uW as ah,E8 as bh,zB as ch,Y0 as dh,ZY as eh,VZ as fh,zY as gh};
|
|
116
|
+
|
|
117
|
+
//# debugId=E8861722E3E8443D64756E2164756E21
|