@void/platform 1.3.0 → 1.5.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.
@@ -1,8 +1,8 @@
1
- var Kr=Object.defineProperty;var i=(e,t)=>Kr(e,"name",{value:t,configurable:!0});function F(e){return new Error(`[unenv] ${e} is not implemented yet!`)}i(F,"createNotImplementedError");var Ue=globalThis.performance?.timeOrigin??Date.now(),$e=globalThis.performance?.now?globalThis.performance.now.bind(globalThis.performance):()=>Date.now()-Ue,Gr={name:"node",entryType:"node",startTime:0,duration:0,nodeStart:0,v8Start:0,bootstrapComplete:0,environment:0,loopStart:0,loopExit:0,idleTime:0,uvMetricsInfo:{loopCount:0,events:0,eventsWaiting:0},detail:void 0,toJSON(){return this}},q=class{static{i(this,"PerformanceEntry")}__unenv__=!0;detail;entryType="event";name;startTime;constructor(t,r){this.name=t,this.startTime=r?.startTime||$e(),this.detail=r?.detail}get duration(){return $e()-this.startTime}toJSON(){return{name:this.name,entryType:this.entryType,startTime:this.startTime,duration:this.duration,detail:this.detail}}},He=class extends q{static{i(this,"PerformanceMark")}entryType="mark";constructor(){super(...arguments)}get duration(){return 0}},re=class extends q{static{i(this,"PerformanceMeasure")}entryType="measure"},ne=class extends q{static{i(this,"PerformanceResourceTiming")}entryType="resource";serverTiming=[];connectEnd=0;connectStart=0;decodedBodySize=0;domainLookupEnd=0;domainLookupStart=0;encodedBodySize=0;fetchStart=0;initiatorType="";name="";nextHopProtocol="";redirectEnd=0;redirectStart=0;requestStart=0;responseEnd=0;responseStart=0;secureConnectionStart=0;startTime=0;transferSize=0;workerStart=0;responseStatus=0},fe=class{static{i(this,"PerformanceObserverEntryList")}__unenv__=!0;getEntries(){return[]}getEntriesByName(t,r){return[]}getEntriesByType(t){return[]}},W=class{static{i(this,"Performance")}__unenv__=!0;timeOrigin=Ue;eventCounts=new Map;_entries=[];_resourceTimingBufferSize=0;navigation=void 0;timing=void 0;timerify(t,r){throw F("Performance.timerify")}get nodeTiming(){return Gr}eventLoopUtilization(){return{}}markResourceTiming(){return new ne("")}onresourcetimingbufferfull=null;now(){return this.timeOrigin===Ue?$e():Date.now()-this.timeOrigin}clearMarks(t){this._entries=t?this._entries.filter(r=>r.name!==t):this._entries.filter(r=>r.entryType!=="mark")}clearMeasures(t){this._entries=t?this._entries.filter(r=>r.name!==t):this._entries.filter(r=>r.entryType!=="measure")}clearResourceTimings(){this._entries=this._entries.filter(t=>t.entryType!=="resource"||t.entryType!=="navigation")}getEntries(){return this._entries}getEntriesByName(t,r){return this._entries.filter(n=>n.name===t&&(!r||n.entryType===r))}getEntriesByType(t){return this._entries.filter(r=>r.entryType===t)}mark(t,r){let n=new He(t,r);return this._entries.push(n),n}measure(t,r,n){let s,a;typeof r=="string"?(s=this.getEntriesByName(r,"mark")[0]?.startTime,a=this.getEntriesByName(n,"mark")[0]?.startTime):(s=Number.parseFloat(r?.start)||this.now(),a=Number.parseFloat(r?.end)||this.now());let c=new re(t,{startTime:s,detail:{start:s,end:a}});return this._entries.push(c),c}setResourceTimingBufferSize(t){this._resourceTimingBufferSize=t}addEventListener(t,r,n){throw F("Performance.addEventListener")}removeEventListener(t,r,n){throw F("Performance.removeEventListener")}dispatchEvent(t){throw F("Performance.dispatchEvent")}toJSON(){return this}},pe=class{static{i(this,"PerformanceObserver")}__unenv__=!0;static supportedEntryTypes=[];_callback=null;constructor(t){this._callback=t}takeRecords(){return[]}disconnect(){throw F("PerformanceObserver.disconnect")}observe(t){throw F("PerformanceObserver.observe")}bind(t){return t}runInAsyncScope(t,r,...n){return t.call(r,...n)}asyncId(){return 0}triggerAsyncId(){return 0}emitDestroy(){return this}},se=globalThis.performance&&"addEventListener"in globalThis.performance?globalThis.performance:new W;if(!("__unenv__"in se)){let e=W.prototype;for(let t of Object.getOwnPropertyNames(e))if(t!=="constructor"&&!(t in se)){let r=Object.getOwnPropertyDescriptor(e,t);r&&Object.defineProperty(se,t,r)}}globalThis.performance=se;globalThis.Performance=W;globalThis.PerformanceEntry=q;globalThis.PerformanceMark=He;globalThis.PerformanceMeasure=re;globalThis.PerformanceObserver=pe;globalThis.PerformanceObserverEntryList=fe;globalThis.PerformanceResourceTiming=ne;function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(j,"isRecord");function Fe(e){let t=new Headers({"Cache-Control":"no-store"});return e.retryAt&&Number.isFinite(Date.parse(e.retryAt))&&t.set("Retry-After",String(Math.max(0,Math.ceil((Date.parse(e.retryAt)-Date.now())/1e3)))),Response.json(e,{status:429,headers:t})}i(Fe,"usageLimitResponse");var rn=new TextEncoder,nn=new TextDecoder("utf-8",{fatal:!0});function mt(e){if(!/^[A-Za-z0-9_-]+$/.test(e)||e.length>1024)throw new Error("invalid receipt");let t=atob(e.replaceAll("-","+").replaceAll("_","/")+"=".repeat((4-e.length%4)%4));return Uint8Array.from(t,r=>r.charCodeAt(0))}i(mt,"unbase64url");async function sn(e,t){if(!e)throw new Error("Email signing key is not configured");return crypto.subtle.importKey("raw",rn.encode(e),{name:"HMAC",hash:"SHA-256"},!1,[t])}i(sn,"receiptKey");async function gt(e,t,r,n=Date.now()){try{if(e.length>1536)return null;let s=e.split(".");if(s.length!==2)return null;let a=mt(s[0]),c=mt(s[1]);if(a.byteLength>768||c.byteLength!==32||!await crypto.subtle.verify("HMAC",await sn(t,"verify"),Uint8Array.from(c),Uint8Array.from(a)))return null;let o=JSON.parse(nn.decode(a));if(typeof o!="object"||o===null)return null;let l=o;return l.version!==1||typeof l.receiptId!="string"||!/^[a-f0-9-]{16,64}$/.test(l.receiptId)||l.projectId!==r.projectId||l.deploymentId!==r.deploymentId||l.recipient!==r.recipient||typeof l.expiresAt!="number"||!Number.isSafeInteger(l.expiresAt)||l.expiresAt<n||l.expiresAt>n+6e4?null:l}catch{return null}}i(gt,"verifyEmailReceipt");var on="0123456789abcdefghijklmnopqrstuvwxyz";var an=new RegExp(`^proj_[${on}]{12}$`);function z(e){return typeof e=="string"&&an.test(e)}i(z,"isProjectId");var yt=Symbol();var ht=i((e,t)=>new Response(e,{headers:{"Content-Type":t.replace(/^[^;]+/,r=>r.toLowerCase())}}).formData(),"bufferToFormData");var cn=1e4,me=i(e=>"headers"in e,"isRawRequest"),Et=i(async(e,t=Object.create(null))=>{let{all:r=!1,dot:n=!1}=t,s=(me(e)?e.headers:e.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();return s==="multipart/form-data"||s==="application/x-www-form-urlencoded"?ln(e,{all:r,dot:n}):{}},"parseBody");async function ln(e,t){if(!me(e)&&e.bodyCache.formData)return bt(await e.bodyCache.formData,t);let r=me(e)?e.headers:e.raw.headers,n=await e.arrayBuffer(),s=ht(n,r.get("Content-Type")||"");me(e)||(e.bodyCache.formData=s);let a=await s;return a?bt(a,t):{}}i(ln,"parseFormData");function bt(e,t){let r=Object.create(null),n={count:0};return e.forEach((s,a)=>{t.all||a.endsWith("[]")?un(r,a,s):r[a]=s}),t.dot&&Object.entries(r).forEach(([s,a])=>{s.includes(".")&&(dn(r,s,a,n),delete r[s])}),r}i(bt,"convertFormDataToBodyData");var un=i((e,t,r)=>{e[t]!==void 0?Array.isArray(e[t])?e[t].push(r):e[t]=[e[t],r]:t.endsWith("[]")?e[t]=[r]:e[t]=r},"handleParsingAllValues"),dn=i((e,t,r,n)=>{if(/(?:^|\.)__proto__\./.test(t))return;let s=e,a=t.split(".",34);a.length>33&&wt(),a.forEach((c,o)=>{o===a.length-1?s[c]=r:((!s[c]||typeof s[c]!="object"||Array.isArray(s[c])||s[c]instanceof File)&&(n.count++>=cn&&wt(),s[c]=Object.create(null)),s=s[c])})},"handleParsingNestedValues"),wt=i(()=>{throw new Error("Nesting limit exceeded")},"throwNestingLimitExceeded");var Be=i(e=>{let t=e.split("/");return t[0]===""&&t.shift(),t},"splitPath"),Rt=i(e=>{let{groups:t,path:r}=fn(e),n=Be(r);return pn(n,t)},"splitRoutingPath"),fn=i(e=>{let t=[];return e=e.replace(/\{[^}]+\}/g,(r,n)=>{let s=`@${n}`;return t.push([s,r]),s}),{groups:t,path:e}},"extractGroupsFromPath"),pn=i((e,t)=>{for(let r=t.length-1;r>=0;r--){let[n]=t[r];for(let s=e.length-1;s>=0;s--)if(e[s].includes(n)){e[s]=e[s].replace(n,t[r][1]);break}}return e},"replaceGroupMarks"),ge={},At=i((e,t)=>{if(e==="*")return"*";let r=e.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(r){let n=`${e}#${t}`;return ge[n]||(r[2]?ge[n]=t&&t[0]!==":"&&t[0]!=="*"?[n,r[1],new RegExp(`^${r[2]}(?=/${t})`)]:[e,r[1],new RegExp(`^${r[2]}$`)]:ge[n]=[e,r[1],!0]),ge[n]}return null},"getPattern"),_t=i((e,t)=>{try{return t(e)}catch{return e.replace(/(?:%[0-9A-Fa-f]{2})+/g,r=>{try{return t(r)}catch{return r}})}},"tryDecode"),mn=i(e=>_t(e,decodeURI),"tryDecodeURI"),Ke=i(e=>{let t=e.url,r=t.indexOf("/",t.indexOf(":")+4),n=r;for(;n<t.length;n++){let s=t.charCodeAt(n);if(s===37){let a=t.indexOf("?",n),c=t.indexOf("#",n),o=a===-1?c===-1?void 0:c:c===-1?a:Math.min(a,c),l=t.slice(r,o);return mn(l.includes("%25")?l.replace(/%25/g,"%2525"):l)}else if(s===63||s===35)break}return t.slice(r,n)},"getPath");var vt=i(e=>{let t=Ke(e);return t.length>1&&t.at(-1)==="/"?t.slice(0,-1):t},"getPathNoStrict"),U=i((e,t,...r)=>(r.length&&(t=U(t,...r)),`${e?.[0]==="/"?"":"/"}${e}${t==="/"?"":`${e?.at(-1)==="/"?"":"/"}${t?.[0]==="/"?t.slice(1):t}`}`),"mergePath"),ye=i(e=>{if(e.charCodeAt(e.length-1)!==63||!e.includes(":"))return null;let t=e.split("/"),r=[],n="";return t.forEach(s=>{if(s!==""&&!/\:/.test(s))n+="/"+s;else if(/\:/.test(s))if(s.charCodeAt(s.length-1)===63){r.length===0&&n===""?r.push("/"):r.push(n);let a=s.slice(0,-1);n+="/"+a,r.push(n)}else n+="/"+s}),r.filter((s,a,c)=>c.indexOf(s)===a)},"checkOptionalParameter"),he=i(e=>e.indexOf("%")!==-1?_t(e,gn):e,"tryDecodeURIComponent"),qe=i(e=>(e.indexOf("+")!==-1&&(e=e.replace(/\+/g," ")),he(e)),"_decodeURI"),kt=i((e,t,r)=>{let n=e.indexOf("#",8);n!==-1&&(e=e.slice(0,n));let s;if(!r&&t&&t.indexOf("%")===-1&&t.indexOf("+")===-1){let o=e.indexOf("?",8);if(o===-1)return;for(e.startsWith(t,o+1)||(o=e.indexOf(`&${t}`,o+1));o!==-1;){let l=e.charCodeAt(o+t.length+1);if(l===61){let u=o+t.length+2,d=e.indexOf("&",u);return qe(e.slice(u,d===-1?void 0:d))}else if(l==38||isNaN(l))return"";o=e.indexOf(`&${t}`,o+1)}if(s=/[%+]/.test(e),!s)return}let a=Object.create(null);s??=/[%+]/.test(e);let c=e.indexOf("?",8);for(;c!==-1;){let o=e.indexOf("&",c+1),l=e.indexOf("=",c);l>o&&o!==-1&&(l=-1);let u=e.slice(c+1,l===-1?o===-1?void 0:o:l);if(s&&(u=qe(u)),c=o,u==="")continue;let d;l===-1?d="":(d=e.slice(l+1,o===-1?void 0:o),s&&(d=qe(d))),r?(a[u]&&Array.isArray(a[u])||(a[u]=[]),a[u].push(d)):a[u]??=d}return t?a[t]:a},"_getQueryParam"),St=kt,Tt=i((e,t)=>kt(e,t,!0),"getQueryParams"),gn=decodeURIComponent;var It=class{static{i(this,"HonoRequest")}raw;#t;#e;routeIndex=0;path;bodyCache={};constructor(e,t="/",r=[[]]){this.raw=e,this.path=t,this.#e=r}param(e){return e?this.#r(e):this.#o()}#r(e){let t=this.#e[0][this.routeIndex]?.[1][e],r=this.#n(t);return r&&he(r)}#o(){let e={},t=Object.keys(this.#e[0][this.routeIndex]?.[1]??{});for(let r of t){let n=this.#n(this.#e[0][this.routeIndex][1][r]);n!==void 0&&(e[r]=he(n))}return e}#n(e){return this.#e[1]?this.#e[1][e]:e}query(e){return St(this.url,e)}queries(e){return Tt(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t=Object.create(null);return this.raw.headers.forEach((r,n)=>{t[n]=r}),t}async parseBody(e){return Et(this,e)}#s=i(e=>{let{bodyCache:t,raw:r}=this,n=t[e];if(n)return n;for(let s in t)return t[s].then(a=>{s==="json"&&(a=JSON.stringify(a));let c=s==="formData"?void 0:r.headers.get("content-type");return new Response(a,{headers:c?{"Content-Type":c}:void 0})[e]()});return t[e]=r[e]()},"#cachedBody");json(){return this.#s("text").then(e=>JSON.parse(e))}text(){return this.#s("text")}arrayBuffer(){return this.#s("arrayBuffer")}bytes(){return this.#s("arrayBuffer").then(e=>new Uint8Array(e))}blob(){return this.#s("blob")}formData(){return this.#s("formData")}addValidatedData(e,t){(this.#t??={})[e]=t}valid(e){return this.#t?.[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[yt](){return this.#e}get matchedRoutes(){return this.#e[0].map(([[,e]])=>e)}get routePath(){return this.#e[0].map(([[,e]])=>e)[this.routeIndex].path}};var Pt={Stringify:1,BeforeStream:2,Stream:3},yn=i((e,t)=>{let r=new String(e);return r.isEscaped=!0,r.callbacks=t,r},"raw");var Ge=i(async(e,t,r,n,s)=>{typeof e=="object"&&!(e instanceof String)&&(e instanceof Promise||(e=e.toString()),e instanceof Promise&&(e=await e));let a=e.callbacks;if(!a?.length)return Promise.resolve(e);s?s[0]+=e:s=[e];let c=Promise.all(a.map(o=>o({phase:t,buffer:s,context:n}))).then(o=>Promise.all(o.filter(Boolean).map(l=>Ge(l,t,!1,n,s))).then(()=>s[0]));return r?yn(await c,a):c},"resolveCallback");var hn="text/plain; charset=UTF-8",Ve=i((e,t)=>({"Content-Type":e,...t}),"setDefaultContentType"),oe=i((e,t)=>new Response(e,t),"createResponseInstance"),We=class{static{i(this,"Context")}#t;#e;env={};#r;finalized=!1;error;#o;#n;#s;#u;#c;#l;#a;#d;#f;constructor(e,t){this.#t=e,t&&(this.#n=t.executionCtx,this.env=t.env,this.#l=t.notFoundHandler,this.#f=t.path,this.#d=t.matchResult)}get req(){return this.#e??=new It(this.#t,this.#f,this.#d),this.#e}get event(){if(this.#n&&"respondWith"in this.#n)return this.#n;throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#n)return this.#n;throw Error("This context has no ExecutionContext")}get res(){return this.#s||=oe(null,{headers:this.#a??=new Headers})}set res(e){if(this.#s&&e){e=oe(e.body,e);for(let[t,r]of this.#s.headers.entries())if(t!=="content-type")if(t==="set-cookie"){let n=this.#s.headers.getSetCookie();e.headers.delete("set-cookie");for(let s of n)e.headers.append("set-cookie",s)}else e.headers.set(t,r)}this.#s=e,this.finalized=!0}render=i((...e)=>(this.#c??=t=>this.html(t),this.#c(...e)),"render");setLayout=i(e=>this.#u=e,"setLayout");getLayout=i(()=>this.#u,"getLayout");setRenderer=i(e=>{this.#c=e},"setRenderer");header=i((e,t,r)=>{this.finalized&&(this.#s=oe(this.#s.body,this.#s));let n=this.#s?this.#s.headers:this.#a??=new Headers;t===void 0?n.delete(e):r?.append?n.append(e,t):n.set(e,t)},"header");status=i(e=>{this.#o=e},"status");set=i((e,t)=>{this.#r??=new Map,this.#r.set(e,t)},"set");get=i(e=>this.#r?this.#r.get(e):void 0,"get");get var(){return this.#r?Object.fromEntries(this.#r):{}}#i(e,t,r){let n=this.#s?new Headers(this.#s.headers):this.#a;if(typeof t=="object"&&t.headers){n??=new Headers;for(let[a,c]of new Headers(t.headers))a==="set-cookie"?n.append(a,c):n.set(a,c)}if(r){if(!n){let a=0;for(let c in r)if(++a>1||typeof r[c]!="string"){n=new Headers;break}}if(n)for(let a in r){let c=r[a];if(typeof c=="string")n.set(a,c);else{n.delete(a);for(let o of c)n.append(a,o)}}}let s=typeof t=="number"?t:t?.status??this.#o;return oe(e,{status:s,headers:n??r})}newResponse=i((...e)=>this.#i(...e),"newResponse");body=i((e,t,r)=>this.#i(e,t,r),"body");text=i((e,t,r)=>!this.#a&&!this.#o&&!t&&!r&&!this.finalized?new Response(e):this.#i(e,t,Ve(hn,r)),"text");json=i((e,t,r)=>this.#i(JSON.stringify(e),t,Ve("application/json",r)),"json");html=i((e,t,r)=>{let n=i(s=>this.#i(s,t,Ve("text/html; charset=UTF-8",r)),"res");return typeof e=="object"?Ge(e,Pt.Stringify,!1,{}).then(n):n(e)},"html");redirect=i((e,t)=>{let r=String(e);return this.header("Location",/[^\x00-\xFF]/.test(r)?encodeURI(r):r),this.newResponse(null,t??302)},"redirect");notFound=i(()=>(this.#l??=()=>oe(),this.#l(this)),"notFound")};var ze=i((e,t,r)=>(n,s)=>{let a=-1;return c(0);async function c(o){if(o<=a)throw new Error("next() called multiple times");a=o;let l,u=!1,d;if(e[o]?(d=e[o][0][0],n.req.routeIndex=o):d=o===e.length&&s||void 0,d)try{l=await d(n,()=>c(o+1))}catch(f){if(f instanceof Error&&t)n.error=f,l=await t(f,n),u=!0;else throw f}else n.finalized===!1&&r&&(l=await r(n));return l&&(n.finalized===!1||u)&&(n.res=l),n}},"compose");var Mt=["get","post","put","delete","options","patch","query"],be="Can not add a route since the matcher is already built.",we=class extends Error{static{i(this,"UnsupportedPathError")}};var Nt="__COMPOSED_HANDLER";var bn=i(e=>e.text("404 Not Found",404),"notFoundHandler"),Ot=i((e,t)=>{if("getResponse"in e){let r=e.getResponse();return t.newResponse(r.body,r)}return console.error(e),t.text("Internal Server Error",500)},"errorHandler"),Ct=class xt{static{i(this,"Hono")}get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#t="/";routes=[];constructor(t={}){[...Mt,"all"].forEach(s=>{this[s]=(a,...c)=>{let o=s.toUpperCase();return typeof a=="string"?this.#t=a:this.#o(o,this.#t,a),c.forEach(l=>{this.#o(o,this.#t,l)}),this}}),this.on=(s,a,...c)=>{for(let o of[a].flat()){this.#t=o;for(let l of[s].flat()){let u=l.toUpperCase();for(let d of c)this.#o(u,this.#t,d)}}return this},this.use=(s,...a)=>(typeof s=="string"?this.#t=s:(this.#t="*",a.unshift(s)),a.forEach(c=>{this.#o("ALL",this.#t,c)}),this);let{strict:r,...n}=t;Object.assign(this,n),this.getPath=r??!0?t.getPath??Ke:vt}#e(){let t=new xt({router:this.router,getPath:this.getPath});return t.errorHandler=this.errorHandler,t.#r=this.#r,t.routes=this.routes,t}#r=bn;errorHandler=Ot;route(t,r){let n=this.basePath(t);return r.routes.map(s=>{let a;r.errorHandler===Ot?a=s.handler:(a=i(async(c,o)=>(await ze([],r.errorHandler)(c,()=>s.handler(c,o))).res,"handler"),a[Nt]=s.handler),n.#o(s.method,s.path,a,s.basePath)}),this}basePath(t){let r=this.#e();return r._basePath=U(this._basePath,t),r}onError=i(t=>(this.errorHandler=t,this),"onError");notFound=i(t=>(this.#r=t,this),"notFound");mount(t,r,n){let s,a;n&&(typeof n=="function"?a=n:(a=n.optionHandler,n.replaceRequest===!1?s=i(l=>l,"replaceRequest"):s=n.replaceRequest));let c=a?l=>{let u=a(l);return Array.isArray(u)?u:[u]}:l=>{let u;try{u=l.executionCtx}catch{}return[l.env,u]};s||=(()=>{let l=U(this._basePath,t),u=l==="/"?0:l.length;return d=>{let f=new URL(d.url);return f.pathname=this.getPath(d).slice(u)||"/",new Request(f,d)}})();let o=i(async(l,u)=>{let d=await r(s(l.req.raw),...c(l));if(d)return d;await u()},"handler");return this.#o("ALL",U(t,"*"),o),this}#o(t,r,n,s){r=U(this._basePath,r);let a={basePath:s!==void 0?U(this._basePath,s):this._basePath,path:r,method:t,handler:n};this.router.add(t,r,[n,a]),this.routes.push(a)}#n(t,r){if(t instanceof Error)return this.errorHandler(t,r);throw t}#s(t,r,n,s){if(s==="HEAD")return(async()=>new Response(null,await this.#s(t,r,n,"GET")))();let a=this.getPath(t,{env:n}),c=this.router.match(s,a),o=new We(t,{path:a,matchResult:c,env:n,executionCtx:r,notFoundHandler:this.#r});if(c[0].length===1){let u;try{u=c[0][0][0][0](o,async()=>{o.res=await this.#r(o)})}catch(d){return this.#n(d,o)}return u instanceof Promise?u.then(d=>d||(o.finalized?o.res:this.#r(o))).catch(d=>this.#n(d,o)):u??this.#r(o)}let l=ze(c[0],this.errorHandler,this.#r);return(async()=>{try{let u=await l(o);if(!u.finalized)throw new Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return u.res}catch(u){return this.#n(u,o)}})()}fetch=i((t,...r)=>this.#s(t,r[1],r[0],t.method),"fetch");request=i((t,r,n,s)=>t instanceof Request?this.fetch(r?new Request(t,r):t,n,s):(t=t.toString(),this.fetch(new Request(/^https?:\/\//.test(t)?t:`http://localhost${U("/",t)}`,r),n,s)),"request");fire=i(()=>{addEventListener("fetch",t=>{t.respondWith(this.#s(t.request,t,void 0,t.request.method))})},"fire")};var v=i(()=>Object.create(null),"createNullObject");var Ee=[];function Je(e,t){let r=this.buildAllMatchers(),n=i(((s,a)=>{let c=r[s]||r.ALL,o=c[2][a];if(o)return o;let l=a.match(c[0]);if(!l)return[[],Ee];let u=l.indexOf("",1);return[c[1][u],l]}),"match");return this.match=n,n(e,t)}i(Je,"match");var Xe="[^/]+";var Qe="(?:|/.*)",$=Symbol(),Dt=new Set(".\\+*[^]$()");function wn(e,t){return e.length===1?t.length===1?e<t?-1:1:-1:t.length===1?1:e===".*"||e==="(?:|/.*)"?t==="(?:|/.*)"?-1:1:t===".*"||t==="(?:|/.*)"?-1:e==="[^/]+"?1:t==="[^/]+"?-1:e.length===t.length?e<t?-1:1:t.length-e.length}i(wn,"compareKey");var Lt=class Ye{static{i(this,"Node")}#t;#e;#r=v();insert(t,r,n,s,a){let c=this;for(let o=0,l=t.length;o<l;o++){let u=t[o],d=u.length===1?u==="*"?o===l-1?["","",".*"]:["","",Xe]:null:u==="/*"?["","",Qe]:u.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),f;if(d){let m=d[1],p=d[2]||"[^/]+";if(m&&d[2]&&(p===".*"||(p=p.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(p))||p.length===1&&Dt.has(p)))throw $;if(f=c.#r[p],!f){if(p!==".*"&&p!=="(?:|/.*)"){for(let g in c.#r)if((p.length>1||g.length>1)&&g!==".*"&&g!=="(?:|/.*)")throw $}f=c.#r[p]=new Ye}m!==""&&(f.#e??=s.varIndex++,n.push([m,f.#e]))}else if(f=c.#r[u],!f){for(let m in c.#r)if(m.length>1&&m!==".*"&&m!=="(?:|/.*)")throw $;f=c.#r[u]=new Ye}c=f}if(c.#t!==void 0)throw $;c.#t=a?-1:r}buildRegExpStr(){let t=Object.keys(this.#r).sort(wn).map(r=>{let n=this.#r[r],s=n.buildRegExpStr();return s===""?"":(typeof n.#e=="number"?`(${r})@${n.#e}`:Dt.has(r)?`\\${r}`:r)+s}).filter(Boolean);return typeof this.#t=="number"&&this.#t!==-1&&t.unshift(`#${this.#t}`),t.length===0?"":t.length===1?t[0]:"(?:"+t.join("|")+")"}};var Ze=class{static{i(this,"Trie")}#t={varIndex:0};#e=new Lt;#r=0;paths=v();insert(e,t){if(t){this.#e.insert(e.split(""),0,[],this.#t,!0);return}let r=[],n=[],s=e;for(let c=0;;){let o=!1;if(s=s.replace(/\{[^}]+\}/g,l=>{let u=`@\\${c}`;return n[c]=[u,l],c++,o=!0,u}),!o)break}let a=s.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let c=n.length-1;c>=0;c--){let[o]=n[c];for(let l=a.length-1;l>=0;l--)if(a[l].indexOf(o)!==-1){a[l]=a[l].replace(o,n[c][1]);break}}this.#e.insert(a,this.#r,r,this.#t,!1),this.paths[e]=[this.#r++,r]}buildRegExp(){let e=this.#e.buildRegExpStr();if(e==="")return[/^$/,[],[]];let t=0,r=[],n=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(s,a,c)=>a!==void 0?(r[++t]=Number(a),"$()"):(c!==void 0&&(n[Number(c)]=++t),"")),[new RegExp(`^${e}`),r,n]}};var jt=v();function Ut(e){return jt[e]??=new RegExp(`^${e.replace(/\/:[^/{}]+(?:\{\[\^\/]\+})?(?=[/{]|$)|\/?\*$|([.\\+*[^\]$()?{}|])/g,(t,r)=>r?`\\${r}`:t==="/*"?Qe:t==="*"?".*":`/:${Xe}`)}$`)}i(Ut,"buildWildcardRegExp");function Re(e,t){for(let r of Object.keys(e).sort((n,s)=>s.length-n.length))if(Ut(r).test(t))return[...e[r]]}i(Re,"findMiddleware");var Ae=class{static{i(this,"RegExpRouter")}name="RegExpRouter";#t;#e;#r;constructor(){this.#t={ALL:v()},this.#e={ALL:v()},this.#r={ALL:new Ze}}#o(e,t){try{this.#r[e].insert(t,!/\*|\/:/.test(t))}catch(r){throw r===$?new we(t):r}}add(e,t,r){let n=this.#t,s=this.#e;if(!n)throw new Error(be);if(!n[e]){this.#r[e]=new Ze;for(let o of[n,s]){o[e]=v();for(let l in o.ALL)o[e][l]=[...o.ALL[l]],this.#o(e,l)}}t==="/*"&&(t="*");let a=e==="ALL"?Object.keys(n):[e];if(/\*$/.test(t)){let o=Ut(t);for(let l of a)n[l][t]||(this.#o(l,t),n[l][t]=Re(n[l],t)||Re(n.ALL,t)||[]);for(let l of[n,s])for(let u of a)for(let d in l[u])o.test(d)&&l[u][d].push([r,t]);return}let c=ye(t)||[t];for(let o of c)for(let l of a)s[l][o]||(this.#o(l,o),s[l][o]=Re(n[l],o)||Re(n.ALL,o)||[]),s[l][o].push([r,o])}match=Je;buildAllMatchers(){let e=v();for(let t of Object.keys(this.#e))e[t]=this.#n(t);return this.#t=this.#e=this.#r=void 0,jt=v(),e}#n(e){let t=this.#t[e],r=this.#e[e],n=this.#r[e],s=v(),a=[],[c,o,l]=n.buildRegExp();for(let u of[t,r])for(let d in u){let f=u[d],m=n.paths[d];if(!m){s[d]=[f.map(([p])=>[p,v()]),Ee];continue}a[m[0]]=f.map(([p,g])=>[p,n.paths[g][1].reduceRight((w,[b],R)=>(w[b]=l[m[1][R][1]],w),v())])}return[c,o.map(u=>a[u]),s]}};var $t=class{static{i(this,"SmartRouter")}name="SmartRouter";#t=[];#e=[];constructor(e){this.#t=e.routers}add(e,t,r){if(!this.#e)throw new Error(be);this.#e.push([e,t,r])}match(e,t){if(!this.#e)throw new Error("Fatal error");let r=this.#t,n=this.#e,s=r.length,a=0,c;for(;a<s;a++){let o=r[a];try{for(let l=0,u=n.length;l<u;l++)o.add(...n[l]);c=o.match(e,t)}catch(l){if(l instanceof we)continue;throw l}this.match=o.match.bind(o),this.#t=[o],this.#e=void 0;break}if(a===s)throw new Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,c}get activeRouter(){if(this.#e||this.#t.length!==1)throw new Error("No active router has been determined yet.");return this.#t[0]}};var et=v(),En=0,Ht=class Ft{static{i(this,"Node")}#t=[];#e=v();#r=[];#o;#n=et;insert(t,r,n){let s=this,a=Rt(r),c=new Set,o=0;for(let l of a){let u=a[++o],d=At(l,u)||(u===void 0&&l&&l.indexOf("*")===l.length-1?l:null),f=Array.isArray(d),m=f?d[0]:d||l,p=s.#e[m]||=new Ft;d&&!p.#o&&(p.#o=d,s.#r.push(p)),s=p,f&&c.add(d[1])}s.#t.push({[t]:{handler:n,possibleKeys:[...c],score:++En}})}#s(t,r,n,s,a){for(let c=0,o=r.#t.length;c<o;c++){let l=r.#t[c],u=l[n]||l.ALL;if(u){u.params=v(),t.push(u);for(let d=0,f=u.possibleKeys.length;d<f;d++){let m=u.possibleKeys[d];u.params[m]=a?.[m]&&!d?a[m]:s[m]??a?.[m]}}}}search(t,r){let n=[];this.#n=et;let s=[this],a=Be(r),c=[],o=a.length,l=null;for(let u=0;u<o;u++){let d=a[u],f=u===o-1,m=[];for(let g=0,w=s.length;g<w;g++){let b=s[g],R=b.#e[d];R&&(R.#n=b.#n,f?(R.#e["*"]&&this.#s(n,R.#e["*"],t,b.#n),this.#s(n,R,t,b.#n)):m.push(R));for(let E of b.#r){let A=E.#o,y=b.#n===et?{}:{...b.#n};if(typeof A=="string"){(A==="*"||d.startsWith(A.slice(0,-1)))&&(this.#s(n,E,t,b.#n),A==="*"&&(E.#n=y,m.push(E)));continue}let[,_,C]=A;if(!(!d&&C===!0)){if(C!==!0){if(!l){l=[];let N=r[0]==="/"?1:0;for(let D=0;D<o;D++)l[D]=N,N+=a[D].length+1}let V=r.slice(l[u]),M=C.exec(V);if(M){y[_]=M[0],this.#s(n,E,t,b.#n,y),M[0].length===V.length&&E.#e["*"]&&this.#s(n,E.#e["*"],t,b.#n,y);for(let N in E.#e){E.#n=y;let D=M[0].match(/\//g)?.length??0;(c[D]||=[]).push(E);break}continue}}(C===!0||C.test(d))&&(y[_]=d,f?(this.#s(n,E,t,y,b.#n),E.#e["*"]&&this.#s(n,E.#e["*"],t,y,b.#n)):(E.#n=y,m.push(E)))}}}let p=c.shift();s=p?m.concat(p):m}return n[1]&&n.sort((u,d)=>u.score-d.score),[n.map(({handler:u,params:d})=>[u,d])]}};var tt=class{static{i(this,"TrieRouter")}name="TrieRouter";#t=new Ht;add(e,t,r){for(let n of ye(t)||[t])this.#t.insert(e,n,r)}match(e,t){return this.#t.search(e,t)}};var T=class extends Ct{static{i(this,"Hono")}constructor(e={}){super(e),this.router=e.router??new $t({routers:[new Ae,new tt]})}};var qt=i(e=>{let t={origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH","QUERY"],allowHeaders:[],exposeHeaders:[],...e},r=t.exposeHeaders?.length?t.exposeHeaders.join(","):void 0,n=t.allowHeaders?.length?t.allowHeaders.join(","):void 0,s=(c=>typeof c=="string"?c==="*"?()=>c:o=>c===o?o:null:typeof c=="function"?c:o=>c.includes(o)?o:null)(t.origin),a=(c=>{if(typeof c=="function")return async(o,l)=>(await c(o,l)).join(",");if(Array.isArray(c)){let o=c.join(",");return()=>o}else return()=>""})(t.allowMethods);return i(async function(o,l){function u(f,m){o.res.headers.set(f,m)}i(u,"set");let d=await s(o.req.header("origin")||"",o);if(d&&u("Access-Control-Allow-Origin",d),t.credentials&&u("Access-Control-Allow-Credentials","true"),r&&u("Access-Control-Expose-Headers",r),o.req.method==="OPTIONS"){t.origin!=="*"&&o.res.headers.append("Vary","Origin"),t.maxAge!=null&&u("Access-Control-Max-Age",t.maxAge.toString());let f=await a(o.req.header("origin")||"",o);f&&u("Access-Control-Allow-Methods",f);let m=n;if(!m){let p=o.req.header("Access-Control-Request-Headers");p&&(m=p.split(",").map(g=>g.trim()).join(","))}return m&&(u("Access-Control-Allow-Headers",m),o.res.headers.append("Vary","Access-Control-Request-Headers")),o.res.headers.delete("Content-Length"),o.res.headers.delete("Content-Type"),new Response(null,{headers:o.res.headers,status:204,statusText:"No Content"})}await l(),t.origin!=="*"&&o.header("Vary","Origin",{append:!0})},"cors")},"cors");var Rn="proxy-token:";function Bt(e){return`${Rn}${e}`}i(Bt,"proxyTokenStateKey");var An=Object.freeze({gen:0}),_n=30,vn=15e3,x=class extends Error{static{i(this,"ProxyTokenStateError")}constructor(t,r){super(t,r),this.name="ProxyTokenStateError"}};function Gt(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0&&e<Number.MAX_SAFE_INTEGER}i(Gt,"isStateGeneration");function kn(e){if(e==null)return An;let t;try{t=JSON.parse(e)}catch(n){throw new x("proxy token state is not JSON",{cause:n})}if(typeof t!="object"||t===null||Array.isArray(t))throw new x("proxy token state is not an object");let r=t.gen;if(!Gt(r))throw new x("proxy token state has an invalid generation");return{gen:r}}i(kn,"parseProxyTokenState");function Sn(e){if(!Gt(e.gen))throw new x("proxy token state has an invalid generation");return JSON.stringify({gen:e.gen})}i(Sn,"serializeProxyTokenState");var xl=Sn({gen:Number.MAX_SAFE_INTEGER-1});function Tn(e,t){return t>=e.gen}i(Tn,"isAcceptedGeneration");var J=new TextEncoder,In=new Map,Pn=new Map,Mn=new Map,Nn=new Map;function ve(e,t,r){let n=e.get(t);return n||(n=r(),e.set(t,n),n.catch(()=>e.delete(t))),n}i(ve,"cachedKey");function Vt(e){return ve(In,e,()=>crypto.subtle.importKey("raw",J.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]))}i(Vt,"legacyKey");async function rt(e,t,r){let n=await crypto.subtle.importKey("raw",J.encode(e),"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:J.encode(t),info:J.encode(r)},n,{name:"HMAC",hash:"SHA-256",length:256},!1,["sign","verify"])}i(rt,"hkdfHmacKey");function Wt(e){return ve(Pn,e,()=>rt(e,"void-proxy-token","proxy-token"))}i(Wt,"proxyTokenKey");function On(e){return ve(Mn,e,()=>rt(e,"void-proxy-internal","proxy-internal"))}i(On,"proxyInternalKey");function Cn(e){return ve(Nn,e,()=>rt(e,"void-ai-usage","ai-usage"))}i(Cn,"aiUsageKey");var xn=/^[A-Za-z0-9_-]{43}$/,Dn=/^([1-9][0-9]{0,15})\.([A-Za-z0-9_-]{43})$/;function Ln(e){let t="";for(let r of new Uint8Array(e))t+=String.fromCharCode(r);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}i(Ln,"encodeBase64url");function jn(e){let t=atob(`${e.replace(/-/g,"+").replace(/_/g,"/")}=`);return Uint8Array.from(t,r=>r.charCodeAt(0))}i(jn,"decodeMac");async function _e(e,t){return Ln(await crypto.subtle.sign("HMAC",await e,J.encode(t)))}i(_e,"sign");async function Kt(e,t,r){return crypto.subtle.verify("HMAC",await e,jn(r),J.encode(t))}i(Kt,"verify");function zt(e,t){return`void-proxy-token:${e}:${t}`}i(zt,"proxyTokenMessage");async function Jt(e,t,r){if(!z(t))throw new Error("invalid project id");if(!Number.isSafeInteger(r)||r<0)throw new RangeError(`invalid proxy token generation: ${r}`);return r===0?_e(Vt(e),t):`${r}.${await _e(Wt(e),zt(t,r))}`}i(Jt,"deriveProxyToken");async function Un(e,t,r){if(!z(t))return null;if(xn.test(r))return await Kt(Vt(e),t,r)?0:null;let n=Dn.exec(r);if(!n)return null;let s=Number(n[1]);return Number.isSafeInteger(s)&&await Kt(Wt(e),zt(t,s),n[2])?s:null}i(Un,"proxyTokenGeneration");async function $n(e,t,r){let n;try{n=r?.cacheTtl===void 0?await e.get(Bt(t)):await e.get(Bt(t),{cacheTtl:r.cacheTtl})}catch(s){throw new x("proxy token state unavailable",{cause:s})}return kn(n)}i($n,"readProxyTokenState");async function Yt(e){let t=await Un(e.jwtSecret,e.projectId,e.token);if(t===null)return!1;let r=await e.readState();return Tn(r,t)?!0:(console.warn("[proxy-token] rejected generation",{projectId:e.projectId,gen:t,floor:r.gen}),!1)}i(Yt,"verifyProxyToken");function Xt(e){let t=e?.maxEntries??1e3,r=e?.ttlMs??vn,n=e?.now??Date.now,s=new Map;return{async read(a,c){let o=s.get(c);if(o&&n()-o.fetchedAt<r)return o.state;s.delete(c);let l=await $n(a,c,{cacheTtl:_n});for(s.set(c,{state:l,fetchedAt:n()});s.size>t;){let u=s.keys().next().value;if(u===void 0)break;s.delete(u)}return l},clear(){s.clear()}}}i(Xt,"createProxyTokenStateCache");var ie="x-void-proxy-internal";function Hn(e,t){return`void-proxy-internal
1
+ var Fr=Object.defineProperty;var o=(e,t)=>Fr(e,"name",{value:t,configurable:!0});function F(e){return new Error(`[unenv] ${e} is not implemented yet!`)}o(F,"createNotImplementedError");var Ue=globalThis.performance?.timeOrigin??Date.now(),$e=globalThis.performance?.now?globalThis.performance.now.bind(globalThis.performance):()=>Date.now()-Ue,qr={name:"node",entryType:"node",startTime:0,duration:0,nodeStart:0,v8Start:0,bootstrapComplete:0,environment:0,loopStart:0,loopExit:0,idleTime:0,uvMetricsInfo:{loopCount:0,events:0,eventsWaiting:0},detail:void 0,toJSON(){return this}},q=class{static{o(this,"PerformanceEntry")}__unenv__=!0;detail;entryType="event";name;startTime;constructor(t,r){this.name=t,this.startTime=r?.startTime||$e(),this.detail=r?.detail}get duration(){return $e()-this.startTime}toJSON(){return{name:this.name,entryType:this.entryType,startTime:this.startTime,duration:this.duration,detail:this.detail}}},He=class extends q{static{o(this,"PerformanceMark")}entryType="mark";constructor(){super(...arguments)}get duration(){return 0}},re=class extends q{static{o(this,"PerformanceMeasure")}entryType="measure"},ne=class extends q{static{o(this,"PerformanceResourceTiming")}entryType="resource";serverTiming=[];connectEnd=0;connectStart=0;decodedBodySize=0;domainLookupEnd=0;domainLookupStart=0;encodedBodySize=0;fetchStart=0;initiatorType="";name="";nextHopProtocol="";redirectEnd=0;redirectStart=0;requestStart=0;responseEnd=0;responseStart=0;secureConnectionStart=0;startTime=0;transferSize=0;workerStart=0;responseStatus=0},fe=class{static{o(this,"PerformanceObserverEntryList")}__unenv__=!0;getEntries(){return[]}getEntriesByName(t,r){return[]}getEntriesByType(t){return[]}},V=class{static{o(this,"Performance")}__unenv__=!0;timeOrigin=Ue;eventCounts=new Map;_entries=[];_resourceTimingBufferSize=0;navigation=void 0;timing=void 0;timerify(t,r){throw F("Performance.timerify")}get nodeTiming(){return qr}eventLoopUtilization(){return{}}markResourceTiming(){return new ne("")}onresourcetimingbufferfull=null;now(){return this.timeOrigin===Ue?$e():Date.now()-this.timeOrigin}clearMarks(t){this._entries=t?this._entries.filter(r=>r.name!==t):this._entries.filter(r=>r.entryType!=="mark")}clearMeasures(t){this._entries=t?this._entries.filter(r=>r.name!==t):this._entries.filter(r=>r.entryType!=="measure")}clearResourceTimings(){this._entries=this._entries.filter(t=>t.entryType!=="resource"||t.entryType!=="navigation")}getEntries(){return this._entries}getEntriesByName(t,r){return this._entries.filter(n=>n.name===t&&(!r||n.entryType===r))}getEntriesByType(t){return this._entries.filter(r=>r.entryType===t)}mark(t,r){let n=new He(t,r);return this._entries.push(n),n}measure(t,r,n){let s,i;typeof r=="string"?(s=this.getEntriesByName(r,"mark")[0]?.startTime,i=this.getEntriesByName(n,"mark")[0]?.startTime):(s=Number.parseFloat(r?.start)||this.now(),i=Number.parseFloat(r?.end)||this.now());let a=new re(t,{startTime:s,detail:{start:s,end:i}});return this._entries.push(a),a}setResourceTimingBufferSize(t){this._resourceTimingBufferSize=t}addEventListener(t,r,n){throw F("Performance.addEventListener")}removeEventListener(t,r,n){throw F("Performance.removeEventListener")}dispatchEvent(t){throw F("Performance.dispatchEvent")}toJSON(){return this}},pe=class{static{o(this,"PerformanceObserver")}__unenv__=!0;static supportedEntryTypes=[];_callback=null;constructor(t){this._callback=t}takeRecords(){return[]}disconnect(){throw F("PerformanceObserver.disconnect")}observe(t){throw F("PerformanceObserver.observe")}bind(t){return t}runInAsyncScope(t,r,...n){return t.call(r,...n)}asyncId(){return 0}triggerAsyncId(){return 0}emitDestroy(){return this}},se=globalThis.performance&&"addEventListener"in globalThis.performance?globalThis.performance:new V;if(!("__unenv__"in se)){let e=V.prototype;for(let t of Object.getOwnPropertyNames(e))if(t!=="constructor"&&!(t in se)){let r=Object.getOwnPropertyDescriptor(e,t);r&&Object.defineProperty(se,t,r)}}globalThis.performance=se;globalThis.Performance=V;globalThis.PerformanceEntry=q;globalThis.PerformanceMark=He;globalThis.PerformanceMeasure=re;globalThis.PerformanceObserver=pe;globalThis.PerformanceObserverEntryList=fe;globalThis.PerformanceResourceTiming=ne;function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(j,"isRecord");function Fe(e){let t=new Headers({"Cache-Control":"no-store"});return e.retryAt&&Number.isFinite(Date.parse(e.retryAt))&&t.set("Retry-After",String(Math.max(0,Math.ceil((Date.parse(e.retryAt)-Date.now())/1e3)))),Response.json(e,{status:429,headers:t})}o(Fe,"usageLimitResponse");var en=new TextEncoder,tn=new TextDecoder("utf-8",{fatal:!0});function ft(e){if(!/^[A-Za-z0-9_-]+$/.test(e)||e.length>1024)throw new Error("invalid receipt");let t=atob(e.replaceAll("-","+").replaceAll("_","/")+"=".repeat((4-e.length%4)%4));return Uint8Array.from(t,r=>r.charCodeAt(0))}o(ft,"unbase64url");async function rn(e,t){if(!e)throw new Error("Email signing key is not configured");return crypto.subtle.importKey("raw",en.encode(e),{name:"HMAC",hash:"SHA-256"},!1,[t])}o(rn,"receiptKey");async function pt(e,t,r,n=Date.now()){try{if(e.length>1536)return null;let s=e.split(".");if(s.length!==2)return null;let i=ft(s[0]),a=ft(s[1]);if(i.byteLength>768||a.byteLength!==32||!await crypto.subtle.verify("HMAC",await rn(t,"verify"),Uint8Array.from(a),Uint8Array.from(i)))return null;let c=JSON.parse(tn.decode(i));if(typeof c!="object"||c===null)return null;let l=c;return l.version!==1||typeof l.receiptId!="string"||!/^[a-f0-9-]{16,64}$/.test(l.receiptId)||l.projectId!==r.projectId||l.deploymentId!==r.deploymentId||l.recipient!==r.recipient||typeof l.expiresAt!="number"||!Number.isSafeInteger(l.expiresAt)||l.expiresAt<n||l.expiresAt>n+6e4?null:l}catch{return null}}o(pt,"verifyEmailReceipt");var nn="0123456789abcdefghijklmnopqrstuvwxyz";var sn=new RegExp(`^proj_[${nn}]{12}$`);function z(e){return typeof e=="string"&&sn.test(e)}o(z,"isProjectId");var me=Symbol();var mt=o((e,t)=>new Response(e,{headers:{"Content-Type":t.replace(/^[^;]+/,r=>r.toLowerCase())}}).formData(),"bufferToFormData");var on=1e4,ge=o(e=>"headers"in e,"isRawRequest"),ht=o(async(e,t=Object.create(null))=>{let{all:r=!1,dot:n=!1}=t,s=(ge(e)?e.headers:e.raw.headers).get("Content-Type")?.split(";")[0].trim().toLowerCase();return s==="multipart/form-data"||s==="application/x-www-form-urlencoded"?an(e,{all:r,dot:n}):{}},"parseBody");async function an(e,t){if(!ge(e)&&e.bodyCache.formData)return gt(await e.bodyCache.formData,t);let r=ge(e)?e.headers:e.raw.headers,n=await e.arrayBuffer(),s=mt(n,r.get("Content-Type")||"");ge(e)||(e.bodyCache.formData=s);let i=await s;return i?gt(i,t):{}}o(an,"parseFormData");function gt(e,t){let r=Object.create(null),n={count:0};return e.forEach((s,i)=>{t.all||i.endsWith("[]")?cn(r,i,s):r[i]=s}),t.dot&&Object.entries(r).forEach(([s,i])=>{s.includes(".")&&(ln(r,s,i,n),delete r[s])}),r}o(gt,"convertFormDataToBodyData");var cn=o((e,t,r)=>{e[t]!==void 0?Array.isArray(e[t])?e[t].push(r):e[t]=[e[t],r]:t.endsWith("[]")?e[t]=[r]:e[t]=r},"handleParsingAllValues"),ln=o((e,t,r,n)=>{if(/(?:^|\.)__proto__\./.test(t))return;let s=e,i=t.split(".",34);i.length>33&&yt(),i.forEach((a,c)=>{c===i.length-1?s[a]=r:((!s[a]||typeof s[a]!="object"||Array.isArray(s[a])||s[a]instanceof File)&&(n.count++>=on&&yt(),s[a]=Object.create(null)),s=s[a])})},"handleParsingNestedValues"),yt=o(()=>{throw new Error("Nesting limit exceeded")},"throwNestingLimitExceeded");var Be=o(e=>{let t=e.split("/");return t[0]===""&&t.shift(),t},"splitPath"),he=o(e=>{let{groups:t,path:r}=un(e),n=Be(r);return dn(n,t)},"splitRoutingPath"),un=o(e=>{let t=[];return e=e.replace(/\{[^}]+\}/g,(r,n)=>{let s=`@${n}`;return t.push([s,r]),s}),{groups:t,path:e}},"extractGroupsFromPath"),dn=o((e,t)=>{for(let r=t.length-1;r>=0;r--){let[n]=t[r];for(let s=e.length-1;s>=0;s--)if(e[s].includes(n)){e[s]=e[s].replace(n,t[r][1]);break}}return e},"replaceGroupMarks"),ye={},be=o((e,t)=>{if(e==="*")return"*";let r=e.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(r){let n=`${e}#${t}`;return ye[n]||(r[2]?ye[n]=t&&t[0]!==":"&&t[0]!=="*"?[n,r[1],new RegExp(`^${r[2]}(?=/${t})`)]:[e,r[1],new RegExp(`^${r[2]}$`)]:ye[n]=[e,r[1],!0]),ye[n]}return null},"getPattern"),bt=o((e,t)=>{try{return t(e)}catch{return e.replace(/(?:%[0-9A-Fa-f]{2})+/g,r=>{try{return t(r)}catch{return r}})}},"tryDecode"),fn=o(e=>bt(e,decodeURI),"tryDecodeURI"),Ke=o(e=>{let t=e.url,r=t.indexOf("/",t.indexOf(":")+4),n=r;for(;n<t.length;n++){let s=t.charCodeAt(n);if(s===37){let i=t.indexOf("?",n),a=t.indexOf("#",n),c=i===-1?a===-1?void 0:a:a===-1?i:Math.min(i,a),l=t.slice(r,c);return fn(l.includes("%25")?l.replace(/%25/g,"%2525"):l)}else if(s===63||s===35)break}return t.slice(r,n)},"getPath");var wt=o(e=>{let t=Ke(e);return t.length>1&&t.at(-1)==="/"?t.slice(0,-1):t},"getPathNoStrict"),Rt=o((e,t,r)=>{e.at(-1)==="/"&&t.at(-1)!=="/"&&(e=e.slice(0,-1));let n=0;for(let s=t.indexOf("/");s!==-1&&s<r;s=t.indexOf("/",s+1))if(n=e.indexOf("/",n+1),n===-1)return"/";return e.slice(n)||"/"},"stripPathPrefix"),U=o((e,t,...r)=>(r.length&&(t=U(t,...r)),`${e?.[0]==="/"?"":"/"}${e}${t==="/"?"":`${e?.at(-1)==="/"?"":"/"}${t?.[0]==="/"?t.slice(1):t}`}`),"mergePath"),we=o(e=>{if(e.charCodeAt(e.length-1)!==63||!e.includes(":"))return null;let t=e.split("/"),r=[],n="";return t.forEach(s=>{if(s!==""&&!/\:/.test(s))n+="/"+s;else if(/\:/.test(s))if(s.charCodeAt(s.length-1)===63){r.length===0&&n===""?r.push("/"):r.push(n);let i=s.slice(0,-1);n+="/"+i,r.push(n)}else n+="/"+s}),r.filter((s,i,a)=>a.indexOf(s)===i)},"checkOptionalParameter"),Re=o(e=>e.indexOf("%")!==-1?bt(e,pn):e,"tryDecodeURIComponent"),qe=o(e=>(e.indexOf("+")!==-1&&(e=e.replace(/\+/g," ")),Re(e)),"_decodeURI"),Et=o((e,t,r)=>{let n=e.indexOf("#",8);n!==-1&&(e=e.slice(0,n));let s;if(!r&&t&&t.indexOf("%")===-1&&t.indexOf("+")===-1){let c=e.indexOf("?",8),l=c;if(l===-1)return;for(e.startsWith(t,l+1)||(l=e.indexOf(`&${t}`,l+1));l!==-1;){let u=e.charCodeAt(l+t.length+1);if(u===61||u===38||isNaN(u)){if(l>c&&/(?:^|&)[^=&]*[%+]/.test(e.slice(c+1,l)))break;if(u===61){let d=l+t.length+2,f=e.indexOf("&",d);return qe(e.slice(d,f===-1?void 0:f))}return""}l=e.indexOf(`&${t}`,l+1)}if(s=/[%+]/.test(e),!s)return}let i=Object.create(null);s??=/[%+]/.test(e);let a=e.indexOf("?",8);for(;a!==-1;){let c=e.indexOf("&",a+1),l=e.indexOf("=",a);l>c&&c!==-1&&(l=-1);let u=e.slice(a+1,l===-1?c===-1?void 0:c:l);if(s&&(u=qe(u)),a=c,u==="")continue;let d;l===-1?d="":(d=e.slice(l+1,c===-1?void 0:c),s&&(d=qe(d))),r?(i[u]&&Array.isArray(i[u])||(i[u]=[]),i[u].push(d)):i[u]??=d}return t?i[t]:i},"_getQueryParam"),At=Et,vt=o((e,t)=>Et(e,t,!0),"getQueryParams"),pn=decodeURIComponent;var _t=class{static{o(this,"HonoRequest")}raw;#t;#e;routeIndex=0;path;bodyCache={};constructor(e,t="/",r=[[]]){this.raw=e,this.path=t,this.#e=r}param(e){return e?this.#r(e):this.#o()}#r(e){let t=this.#e[0][this.routeIndex]?.[1][e],r=this.#s(t);return r&&Re(r)}#o(){let e={},t=Object.keys(this.#e[0][this.routeIndex]?.[1]??{});for(let r of t){let n=this.#s(this.#e[0][this.routeIndex][1][r]);n!==void 0&&(e[r]=Re(n))}return e}#s(e){return this.#e[1]?this.#e[1][e]:e}query(e){return At(this.url,e)}queries(e){return vt(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t=Object.create(null);return this.raw.headers.forEach((r,n)=>{t[n]=r}),t}async parseBody(e){return ht(this,e)}#n=o(e=>{let{bodyCache:t,raw:r}=this,n=t[e];if(n)return n;for(let s in t)return t[s].then(i=>{s==="json"&&(i=JSON.stringify(i));let a=s==="formData"?void 0:r.headers.get("content-type");return new Response(i,{headers:a?{"Content-Type":a}:void 0})[e]()});return t[e]=r[e]()},"#cachedBody");json(){return this.#n("text").then(e=>JSON.parse(e))}text(){return this.#n("text")}arrayBuffer(){return this.#n("arrayBuffer")}bytes(){return this.#n("arrayBuffer").then(e=>new Uint8Array(e))}blob(){return this.#n("blob")}formData(){return this.#n("formData")}addValidatedData(e,t){(this.#t??={})[e]=t}valid(e){return this.#t?.[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[me](){return this.#e}get matchedRoutes(){return this.#e[0].map(([[,e]])=>e)}get routePath(){return this.#e[0].map(([[,e]])=>e)[this.routeIndex].path}};var kt={Stringify:1,BeforeStream:2,Stream:3},mn=o((e,t)=>{let r=new String(e);return r.isEscaped=!0,r.callbacks=t,r},"raw");var Ge=o(async(e,t,r,n,s)=>{typeof e=="object"&&!(e instanceof String)&&(e instanceof Promise||(e=e.toString()),e instanceof Promise&&(e=await e));let i=e.callbacks;if(!i?.length)return Promise.resolve(e);s?s[0]+=e:s=[e];let a=Promise.all(i.map(c=>c({phase:t,buffer:s,context:n}))).then(c=>Promise.all(c.filter(Boolean).map(l=>Ge(l,t,!1,n,s))).then(()=>s[0]));return r?mn(await a,i):a},"resolveCallback");var gn="text/plain; charset=UTF-8",We=o((e,t)=>({"Content-Type":e,...t}),"setDefaultContentType"),oe=o((e,t)=>new Response(e,t),"createResponseInstance"),Ve=class{static{o(this,"Context")}#t;#e;env={};#r;finalized=!1;error;#o;#s;#n;#u;#c;#l;#a;#d;#f;constructor(e,t){this.#t=e,t&&(this.#s=t.executionCtx,this.env=t.env,this.#l=t.notFoundHandler,this.#f=t.path,this.#d=t.matchResult)}get req(){return this.#e??=new _t(this.#t,this.#f,this.#d),this.#e}get event(){if(this.#s&&"respondWith"in this.#s)return this.#s;throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#s)return this.#s;throw Error("This context has no ExecutionContext")}get res(){return this.#n||=oe(null,{headers:this.#a??=new Headers})}set res(e){if(this.#n&&e){e=oe(e.body,e);for(let[t,r]of this.#n.headers.entries())if(t!=="content-type")if(t==="set-cookie"){let n=this.#n.headers.getSetCookie();e.headers.delete("set-cookie");for(let s of n)e.headers.append("set-cookie",s)}else e.headers.set(t,r)}this.#n=e,this.finalized=!0}render=o((...e)=>(this.#c??=t=>this.html(t),this.#c(...e)),"render");setLayout=o(e=>this.#u=e,"setLayout");getLayout=o(()=>this.#u,"getLayout");setRenderer=o(e=>{this.#c=e},"setRenderer");header=o((e,t,r)=>{this.finalized&&!this.#n.bodyUsed&&(this.#n=oe(this.#n.body,this.#n));let n=this.#n?this.#n.headers:this.#a??=new Headers;t===void 0?n.delete(e):r?.append?n.append(e,t):n.set(e,t)},"header");status=o(e=>{this.#o=e},"status");set=o((e,t)=>{this.#r??=new Map,this.#r.set(e,t)},"set");get=o(e=>this.#r?this.#r.get(e):void 0,"get");get var(){return this.#r?Object.fromEntries(this.#r):{}}#i(e,t,r){let n=this.#n?new Headers(this.#n.headers):this.#a;if(typeof t=="object"&&t.headers){n??=new Headers;for(let[i,a]of new Headers(t.headers))i==="set-cookie"?n.append(i,a):n.set(i,a)}if(r){if(!n){let i=0;for(let a in r)if(++i>1||typeof r[a]!="string"){n=new Headers;break}}if(n)for(let i in r){let a=r[i];if(typeof a=="string")n.set(i,a);else{n.delete(i);for(let c of a)n.append(i,c)}}}let s=typeof t=="number"?t:t?.status??this.#o;return oe(e,{status:s,headers:n??r})}newResponse=o((...e)=>this.#i(...e),"newResponse");body=o((e,t,r)=>this.#i(e,t,r),"body");text=o((e,t,r)=>!this.#a&&!this.#o&&!t&&!r&&!this.finalized?new Response(e):this.#i(e,t,We(gn,r)),"text");json=o((e,t,r)=>this.#i(JSON.stringify(e),t,We("application/json",r)),"json");html=o((e,t,r)=>{let n=o(s=>this.#i(s,t,We("text/html; charset=UTF-8",r)),"res");return typeof e=="object"?Ge(e,kt.Stringify,!1,{}).then(n):n(e)},"html");redirect=o((e,t)=>{let r=String(e);return this.header("Location",/[^\x00-\xFF]/.test(r)?encodeURI(r):r),this.newResponse(null,t??302)},"redirect");notFound=o(()=>(this.#l??=()=>oe(),this.#l(this)),"notFound")};var ze=o((e,t,r)=>(n,s)=>{let i=-1;return a(0);async function a(c){if(c<=i)throw new Error("next() called multiple times");i=c;let l,u=!1,d;if(e[c]?(d=e[c][0][0],n.req.routeIndex=c):d=c===e.length&&s||void 0,d)try{l=await d(n,()=>a(c+1))}catch(f){if(f instanceof Error&&t)n.error=f,l=await t(f,n),u=!0;else throw f}else n.finalized===!1&&r&&(l=await r(n));return l&&(n.finalized===!1||u)&&(n.res=l),n}},"compose");var St=["get","post","put","delete","options","patch","query"],Ee="Can not add a route since the matcher is already built.",Ae=class extends Error{static{o(this,"UnsupportedPathError")}};var Tt="__COMPOSED_HANDLER";var yn=o((e,t,r)=>{if(!/[:*]/.test(t))return t.length;let n=e.req.path,s=e.req[me],i=new Set,a=0;for(let c of he(t)){let l=be(c);if(l&&l!=="*"){let u=l[1];if(i.has(u))throw new Error(`mount(): Duplicate path parameter "${u}" in "${r}".`);i.add(u)}if(l&&l!=="*"&&l[2]!==!0){let u=s.length===2?s[1][s[0][e.req.routeIndex][1][l[1]]]:s[0][e.req.routeIndex][1][l[1]];a+=u.length+1}else if(l||c.endsWith("*")){let u=n.indexOf("/",a+1);a=u===-1?n.length:u}else a+=c.length+1}return a},"getPathPrefixLength"),It=o((e,t,r)=>{if(/[^/]\*$/.test(r))throw new Error(`mount(): Wildcard must follow "/" in "${r}".`);let n=new URL(e.req.raw.url);return n.pathname=Rt(n.pathname,e.req.path,yn(e,t,r)),new Request(n,e.req.raw)},"createMountedRequest");var hn=o(e=>e.text("404 Not Found",404),"notFoundHandler"),Pt=o((e,t)=>{if("getResponse"in e){let r=e.getResponse();return t.newResponse(r.body,r)}return console.error(e),t.text("Internal Server Error",500)},"errorHandler"),Ot=class Mt{static{o(this,"Hono")}get;post;put;delete;options;patch;query;all;on;use;router;getPath;_basePath="/";#t="/";routes=[];constructor(t={}){[...St,"all"].forEach(s=>{this[s]=(i,...a)=>{let c=s.toUpperCase();return typeof i=="string"?this.#t=i:this.#o(c,this.#t,i),a.forEach(l=>{this.#o(c,this.#t,l)}),this}}),this.on=(s,i,...a)=>{for(let c of[i].flat()){this.#t=c;for(let l of[s].flat()){let u=l.toUpperCase();for(let d of a)this.#o(u,this.#t,d)}}return this},this.use=(s,...i)=>(typeof s=="string"?this.#t=s:(this.#t="*",i.unshift(s)),i.forEach(a=>{this.#o("ALL",this.#t,a)}),this);let{strict:r,...n}=t;Object.assign(this,n),this.getPath=r??!0?t.getPath??Ke:wt}#e(){let t=new Mt({router:this.router,getPath:this.getPath});return t.errorHandler=this.errorHandler,t.#r=this.#r,t.routes=this.routes,t}#r=hn;errorHandler=Pt;route(t,r){let n=this.basePath(t);return r.routes.map(s=>{let i;r.errorHandler===Pt?i=s.handler:(i=o(async(a,c)=>(await ze([],r.errorHandler)(a,()=>s.handler(a,c))).res,"handler"),i[Tt]=s.handler),n.#o(s.method,s.path,i,s.basePath)}),this}basePath(t){let r=this.#e();return r._basePath=U(this._basePath,t),r}onError=o(t=>(this.errorHandler=t,this),"onError");notFound=o(t=>(this.#r=t,this),"notFound");mount(t,r,n){let s,i;n&&(typeof n=="function"?i=n:(i=n.optionHandler,n.replaceRequest===!1?s=o(d=>d,"replaceRequest"):s=n.replaceRequest));let a=i?d=>{let f=i(d);return Array.isArray(f)?f:[f]}:d=>{let f;try{f=d.executionCtx}catch{}return[d.env,f]},c=U(this._basePath,t),l=o(d=>It(d,c.replace(/\/$/,""),U(c,"*")),"defaultReplaceRequest"),u=o(async(d,f)=>{let m=await r(s?s(d.req.raw):l(d),...a(d));if(m)return m;await f()},"handler");return this.#o("ALL",U(t,"*"),u),this}#o(t,r,n,s){r=U(this._basePath,r);let i={basePath:s!==void 0?U(this._basePath,s):this._basePath,path:r,method:t,handler:n};this.router.add(t,r,[n,i]),this.routes.push(i)}#s(t,r){if(t instanceof Error)return this.errorHandler(t,r);throw t}#n(t,r,n,s){if(s==="HEAD")return(async()=>new Response(null,await this.#n(t,r,n,"GET")))();let i=this.getPath(t,{env:n}),a=this.router.match(s,i),c=new Ve(t,{path:i,matchResult:a,env:n,executionCtx:r,notFoundHandler:this.#r});if(a[0].length===1){let u;try{u=a[0][0][0][0](c,async()=>{c.res=await this.#r(c)})}catch(d){return this.#s(d,c)}return u instanceof Promise?u.then(d=>d||(c.finalized?c.res:this.#r(c))).catch(d=>this.#s(d,c)):u??this.#r(c)}let l=ze(a[0],this.errorHandler,this.#r);return(async()=>{try{let u=await l(c);if(!u.finalized)throw new Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return u.res}catch(u){return this.#s(u,c)}})()}fetch=o((t,...r)=>this.#n(t,r[1],r[0],t.method),"fetch");request=o((t,r,n,s)=>t instanceof Request?this.fetch(r?new Request(t,r):t,n,s):(t=t.toString(),this.fetch(new Request(/^https?:\/\//.test(t)?t:`http://localhost${U("/",t)}`,r),n,s)),"request");fire=o(()=>{addEventListener("fetch",t=>{t.respondWith(this.#n(t.request,t,void 0,t.request.method))})},"fire")};var M=o(()=>Object.create(null),"createNullObject");var Je=[];function Nt(e,t){let r=this.buildAllMatchers(),n=o(((s,i)=>{let a=r[s]||r.ALL,c=a[2][i];if(c)return c;let l=i.match(a[0]);if(!l)return[[],Je];let u=l.indexOf("",1);return[a[1][u],l]}),"match");return this.match=n,n(e,t)}o(Nt,"match");var bn="[^/]+",wn="[^]*",Rn="(?:|/[^]*)",$=Symbol(),Ct=new Set(".\\+*[^]$()");function En(e,t){return e.length===1?t.length===1?e<t?-1:1:-1:t.length===1?1:e==="[^]*"||e==="(?:|/[^]*)"?t==="[^]*"?-1:1:t==="[^]*"||t==="(?:|/[^]*)"?-1:e==="[^/]+"?1:t==="[^/]+"?-1:e.length===t.length?e<t?-1:1:t.length-e.length}o(En,"compareKey");var xt=class Ye{static{o(this,"Node")}#t;#e;#r=M();insert(t,r,n,s,i){let a=this;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=u.length===1?u==="*"?c===l-1?["","",wn]:["","",bn]:null:u==="/*"?["","",Rn]:u.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),f;if(d){let m=d[1],p=d[2]||"[^/]+";if(m&&d[2]&&(new RegExp(p).test("")||(p=p.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(p))||p.length===1&&Ct.has(p)))throw $;if(i.push(p),f=a.#r[p],!f){if(p!=="[^]*"&&p!=="(?:|/[^]*)"){for(let g in a.#r)if((p.length>1||g.length>1)&&g!=="[^]*"&&g!=="(?:|/[^]*)")throw $}f=a.#r[p]=new Ye}m!==""&&(f.#e??=s.varIndex++,n.push([m,f.#e]))}else if(i.push(u),f=a.#r[u],!f){for(let m in a.#r)if(m.length>1&&m!=="[^]*"&&m!=="(?:|/[^]*)")throw $;f=a.#r[u]=new Ye}a=f}if(a.#t!==void 0)throw $;a.#t=r}buildRegExpStr(){let t=Object.keys(this.#r).sort(En).map(r=>{let n=this.#r[r],s=n.buildRegExpStr();return s===""?"":(typeof n.#e=="number"?`(${r})@${n.#e}`:Ct.has(r)?`\\${r}`:r)+s}).filter(Boolean);return typeof this.#t=="number"&&this.#t!==-1&&t.unshift(`#${this.#t}`),t.length===0?"":t.length===1?t[0]:"(?:"+t.join("|")+")"}};var Xe=class{static{o(this,"Trie")}#t={varIndex:0};#e=new xt;#r=0;paths=M();insert(e,t){let r=[];if(t){this.#e.insert(e.split(""),-1,[],this.#t,r),this.paths[e]=[-1,[],r];return}let n=[],s=[],i=e;for(let c=0;;){let l=!1;if(i=i.replace(/\{(?:\{[\d,]+\}|[^}])+\}/g,u=>{let d=`@\\${c}`;return s[c]=[d,u],c++,l=!0,d}),!l)break}let a=i.match(/(?::[^\/]+)|(?:\/\*$)|./gs)||[];for(let c=s.length-1;c>=0;c--){let[l]=s[c];for(let u=a.length-1;u>=0;u--)if(a[u].indexOf(l)!==-1){a[u]=a[u].replace(l,s[c][1]);break}}this.#e.insert(a,this.#r,n,this.#t,r),this.paths[e]=[this.#r++,n,r]}buildRegExp(){let e=this.#e.buildRegExpStr();if(e==="")return[/^$/,[],[]];let t=0,r=[],n=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(s,i,a)=>i!==void 0?(r[++t]=Number(i),"$()"):(a!==void 0&&(n[Number(a)]=++t),"")),[new RegExp(`^${e}`),r,n]}};function An(e){let t=e[e.length-1];return t==="[^]*"||t==="(?:|/[^]*)"}o(An,"endsWithWildcard");function vn(e,t){let r=e.length-1;for(let n=0;n<r;n++)if(e[n]!==t[n])return!1;return e[r]==="[^]*"||t.length===r||t[r]==="/"}o(vn,"covers");var Dt=class{static{o(this,"RegExpRouter")}name="RegExpRouter";#t;#e;constructor(){this.#t={ALL:[]},this.#e={ALL:new Xe}}#r(e,t){try{this.#e[e].insert(t,!/\*|\/:/.test(t))}catch(r){throw r===$?new Ae(t):r}}add(e,t,r){let n=this.#t;if(!n)throw new Error(Ee);let s=this.#e;if(!n[e]){s[e]=new Xe,n[e]=[...n.ALL];for(let c in s.ALL.paths)this.#r(e,c)}t==="/*"&&(t="*");let i=e==="ALL"?Object.keys(n):[e],a=we(t)||[t];for(let c of a)for(let l of i)s[l].paths[c]||this.#r(l,c),n[l].push([r,c])}match=Nt;buildAllMatchers(){let e=M();for(let t of Object.keys(this.#t))e[t]=this.#o(t);return this.#t=this.#e=void 0,e}#o(e){let t=this.#t[e],r=this.#e[e],n=M(),s=[],[i,a,c]=r.buildRegExp(),l=M(),u=t.map(([f,m],p)=>((l[m]??=[]).push(p),[f,r.paths[m][1].reduceRight((g,[w,h])=>(g[w]=c[h],g),M())])),d=Object.keys(l).filter(f=>An(r.paths[f][2]));for(let f in r.paths){let[m,,p]=r.paths[f],g=[...l[f]];for(let h of d)h!==f&&vn(r.paths[h][2],p)&&g.push(...l[h]);let w=g.sort((h,E)=>h-E).map(h=>u[h]);if(m===-1){let h=Math.max(-1,...w.flatMap(([,E])=>Object.values(E)));n[f]=[w,h===-1?Je:f.match(i).slice(0,h+1)]}else s[m]=w}return[i,a.map(f=>s[f]),n]}};var Lt=class{static{o(this,"SmartRouter")}name="SmartRouter";#t=[];#e=[];constructor(e){this.#t=e.routers}add(e,t,r){if(!this.#e)throw new Error(Ee);this.#e.push([e,t,r])}match(e,t){if(!this.#e)throw new Error("Fatal error");let r=this.#t,n=this.#e,s=r.length,i=0,a;for(;i<s;i++){let c=r[i];try{for(let l=0,u=n.length;l<u;l++)c.add(...n[l]);a=c.match(e,t)}catch(l){if(l instanceof Ae)continue;throw l}this.match=c.match.bind(c),this.#t=[c],this.#e=void 0;break}if(i===s)throw new Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,a}get activeRouter(){if(this.#e||this.#t.length!==1)throw new Error("No active router has been determined yet.");return this.#t[0]}};var Qe=M(),_n=0,jt=class Ut{static{o(this,"Node")}#t=[];#e=M();#r=[];#o;#s=Qe;insert(t,r,n){let s=this,i=he(r),a=new Set,c=0;for(let l of i){let u=i[++c],d=be(l,u)||(u===void 0&&l&&l.indexOf("*")===l.length-1?l:null),f=Array.isArray(d),m=f?d[0]:d||l,p=s.#e[m]||=new Ut;d&&!p.#o&&(p.#o=d,s.#r.push(p)),s=p,f&&a.add(d[1])}s.#t.push({[t]:{handler:n,possibleKeys:[...a],score:++_n}})}#n(t,r,n,s,i){for(let a=0,c=r.#t.length;a<c;a++){let l=r.#t[a],u=l[n]||l.ALL;if(u){u.params=M(),t.push(u);for(let d=0,f=u.possibleKeys.length;d<f;d++){let m=u.possibleKeys[d];u.params[m]=i?.[m]&&!d?i[m]:s[m]??i?.[m]}}}}search(t,r){let n=[];this.#s=Qe;let s=[this],i=Be(r),a=[],c=i.length,l=null;for(let u=0;u<c;u++){let d=i[u],f=u===c-1,m=[];for(let g=0,w=s.length;g<w;g++){let h=s[g],E=h.#e[d];E&&(E.#s=h.#s,f?(E.#e["*"]&&this.#n(n,E.#e["*"],t,h.#s),this.#n(n,E,t,h.#s)):m.push(E));for(let R of h.#r){let A=R.#o,y=h.#s===Qe?{}:{...h.#s};if(typeof A=="string"){(A==="*"||d.startsWith(A.slice(0,-1)))&&(this.#n(n,R,t,h.#s),A==="*"&&(R.#s=y,m.push(R)));continue}let[,v,C]=A;if(!(!d&&C===!0)){if(C!==!0){if(!l){l=[];let O=r[0]==="/"?1:0;for(let D=0;D<c;D++)l[D]=O,O+=i[D].length+1}let W=r.slice(l[u]),P=C.exec(W);if(P){Object.hasOwn(y,v)||(y[v]=P[0]),this.#n(n,R,t,h.#s,y),P[0].length===W.length&&R.#e["*"]&&this.#n(n,R.#e["*"],t,h.#s,y);for(let O in R.#e){R.#s=y;let D=P[0].match(/\//g)?.length??0;(a[D]||=[]).push(R);break}continue}}(C===!0||C.test(d))&&(Object.hasOwn(y,v)||(y[v]=d),f?(this.#n(n,R,t,y,h.#s),R.#e["*"]&&this.#n(n,R.#e["*"],t,y,h.#s)):(R.#s=y,m.push(R)))}}}let p=a.shift();s=p?m.concat(p):m}return n[1]&&n.sort((u,d)=>u.score-d.score),[n.map(({handler:u,params:d})=>[u,d])]}};var Ze=class{static{o(this,"TrieRouter")}name="TrieRouter";#t=new jt;add(e,t,r){for(let n of we(t)||[t])this.#t.insert(e,n,r)}match(e,t){return this.#t.search(e,t)}};var S=class extends Ot{static{o(this,"Hono")}constructor(e={}){super(e),this.router=e.router??new Lt({routers:[new Dt,new Ze]})}};var $t=o(e=>{let t={origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH","QUERY"],allowHeaders:[],exposeHeaders:[],...e},r=t.exposeHeaders?.length?t.exposeHeaders.join(","):void 0,n=t.allowHeaders?.length?t.allowHeaders.join(","):void 0,s=(a=>typeof a=="string"?a==="*"?()=>a:c=>a===c?c:null:typeof a=="function"?a:c=>a.includes(c)?c:null)(t.origin),i=(a=>{if(typeof a=="function")return async(c,l)=>(await a(c,l)).join(",");if(Array.isArray(a)){let c=a.join(",");return()=>c}else return()=>""})(t.allowMethods);return o(async function(c,l){function u(f,m){c.res.headers.set(f,m)}o(u,"set");let d=await s(c.req.header("origin")||"",c);if(d&&u("Access-Control-Allow-Origin",d),t.credentials&&u("Access-Control-Allow-Credentials","true"),r&&u("Access-Control-Expose-Headers",r),c.req.method==="OPTIONS"){t.origin!=="*"&&c.res.headers.append("Vary","Origin"),t.maxAge!=null&&u("Access-Control-Max-Age",t.maxAge.toString());let f=await i(c.req.header("origin")||"",c);f&&u("Access-Control-Allow-Methods",f);let m=n;if(!m){let p=c.req.header("Access-Control-Request-Headers");p&&(m=p.split(",").map(g=>g.trim()).join(","))}return m&&(u("Access-Control-Allow-Headers",m),c.res.headers.append("Vary","Access-Control-Request-Headers")),c.res.headers.delete("Content-Length"),c.res.headers.delete("Content-Type"),new Response(null,{headers:c.res.headers,status:204,statusText:"No Content"})}await l(),t.origin!=="*"&&c.header("Vary","Origin",{append:!0})},"cors")},"cors");var kn="proxy-token:";function Ht(e){return`${kn}${e}`}o(Ht,"proxyTokenStateKey");var Sn=Object.freeze({gen:0}),Tn=30,In=15e3,x=class extends Error{static{o(this,"ProxyTokenStateError")}constructor(t,r){super(t,r),this.name="ProxyTokenStateError"}};function qt(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0&&e<Number.MAX_SAFE_INTEGER}o(qt,"isStateGeneration");function Pn(e){if(e==null)return Sn;let t;try{t=JSON.parse(e)}catch(n){throw new x("proxy token state is not JSON",{cause:n})}if(typeof t!="object"||t===null||Array.isArray(t))throw new x("proxy token state is not an object");let r=t.gen;if(!qt(r))throw new x("proxy token state has an invalid generation");return{gen:r}}o(Pn,"parseProxyTokenState");function On(e){if(!qt(e.gen))throw new x("proxy token state has an invalid generation");return JSON.stringify({gen:e.gen})}o(On,"serializeProxyTokenState");var Dl=On({gen:Number.MAX_SAFE_INTEGER-1});function Mn(e,t){return t>=e.gen}o(Mn,"isAcceptedGeneration");var J=new TextEncoder,Nn=new Map,Cn=new Map,xn=new Map,Dn=new Map;function _e(e,t,r){let n=e.get(t);return n||(n=r(),e.set(t,n),n.catch(()=>e.delete(t))),n}o(_e,"cachedKey");function Bt(e){return _e(Nn,e,()=>crypto.subtle.importKey("raw",J.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]))}o(Bt,"legacyKey");async function et(e,t,r){let n=await crypto.subtle.importKey("raw",J.encode(e),"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:J.encode(t),info:J.encode(r)},n,{name:"HMAC",hash:"SHA-256",length:256},!1,["sign","verify"])}o(et,"hkdfHmacKey");function Kt(e){return _e(Cn,e,()=>et(e,"void-proxy-token","proxy-token"))}o(Kt,"proxyTokenKey");function Ln(e){return _e(xn,e,()=>et(e,"void-proxy-internal","proxy-internal"))}o(Ln,"proxyInternalKey");function jn(e){return _e(Dn,e,()=>et(e,"void-ai-usage","ai-usage"))}o(jn,"aiUsageKey");var Un=/^[A-Za-z0-9_-]{43}$/,$n=/^([1-9][0-9]{0,15})\.([A-Za-z0-9_-]{43})$/;function Hn(e){let t="";for(let r of new Uint8Array(e))t+=String.fromCharCode(r);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}o(Hn,"encodeBase64url");function Fn(e){let t=atob(`${e.replace(/-/g,"+").replace(/_/g,"/")}=`);return Uint8Array.from(t,r=>r.charCodeAt(0))}o(Fn,"decodeMac");async function ve(e,t){return Hn(await crypto.subtle.sign("HMAC",await e,J.encode(t)))}o(ve,"sign");async function Ft(e,t,r){return crypto.subtle.verify("HMAC",await e,Fn(r),J.encode(t))}o(Ft,"verify");function Gt(e,t){return`void-proxy-token:${e}:${t}`}o(Gt,"proxyTokenMessage");async function Wt(e,t,r){if(!z(t))throw new Error("invalid project id");if(!Number.isSafeInteger(r)||r<0)throw new RangeError(`invalid proxy token generation: ${r}`);return r===0?ve(Bt(e),t):`${r}.${await ve(Kt(e),Gt(t,r))}`}o(Wt,"deriveProxyToken");async function qn(e,t,r){if(!z(t))return null;if(Un.test(r))return await Ft(Bt(e),t,r)?0:null;let n=$n.exec(r);if(!n)return null;let s=Number(n[1]);return Number.isSafeInteger(s)&&await Ft(Kt(e),Gt(t,s),n[2])?s:null}o(qn,"proxyTokenGeneration");async function Bn(e,t,r){let n;try{n=r?.cacheTtl===void 0?await e.get(Ht(t)):await e.get(Ht(t),{cacheTtl:r.cacheTtl})}catch(s){throw new x("proxy token state unavailable",{cause:s})}return Pn(n)}o(Bn,"readProxyTokenState");async function Vt(e){let t=await qn(e.jwtSecret,e.projectId,e.token);if(t===null)return!1;let r=await e.readState();return Mn(r,t)?!0:(console.warn("[proxy-token] rejected generation",{projectId:e.projectId,gen:t,floor:r.gen}),!1)}o(Vt,"verifyProxyToken");function zt(e){let t=e?.maxEntries??1e3,r=e?.ttlMs??In,n=e?.now??Date.now,s=new Map;return{async read(i,a){let c=s.get(a);if(c&&n()-c.fetchedAt<r)return c.state;s.delete(a);let l=await Bn(i,a,{cacheTtl:Tn});for(s.set(a,{state:l,fetchedAt:n()});s.size>t;){let u=s.keys().next().value;if(u===void 0)break;s.delete(u)}return l},clear(){s.clear()}}}o(zt,"createProxyTokenStateCache");var ie="x-void-proxy-internal";function Kn(e,t){return`void-proxy-internal
2
2
  ${e}
3
- ${t}`}i(Hn,"proxyInternalMessage");function ae(e,t,r){return _e(On(e),Hn(t,r))}i(ae,"deriveProxyInternalAuth");async function nt(e,t){let r=await _e(Cn(e),`void-ai-usage
4
- ${t}`);return`${t}.${r.slice(0,22)}`}i(nt,"deriveAiUsageTag");function h(e){return typeof e=="string"?e:null}i(h,"asString");function Y(e){return j(e)?e:{}}i(Y,"asRecord");function X(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}i(X,"isQueryValue");var ot="void",Fn={"google-ai-studio":{header:"x-goog-api-key",prefix:""}},qn="__voidFile",ke=class extends Error{static{i(this,"BadRequestError")}},Q=new T;function Bn(e){return typeof e=="object"&&e!==null&&"stream"in e}i(Bn,"hasStreamFlag");function Kn(e){return ArrayBuffer.isView(e)}i(Kn,"isBinaryView");function Gn(e){return typeof e=="object"&&e!==null&&e[qn]===!0&&typeof e.data=="string"&&(e.name===void 0||typeof e.name=="string")&&(e.type===void 0||typeof e.type=="string")}i(Gn,"isSerializedFileInput");function Qt(e){let t;try{t=atob(e)}catch{throw new ke("invalid file data")}let r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}i(Qt,"base64ToBytes");function Vn(e,t){let r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t.slice(1):t;return`${r}/${n}`}i(Vn,"gatewayEndpointUrl");function Wn(e){if(/^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(e)||e.includes("\\"))return!0;let t=e.split(/[?#]/,1)[0]??"";for(let r of t.split("/"))try{if(decodeURIComponent(r)==="..")return!0}catch{return!0}return!1}i(Wn,"isUnsafeProviderPath");function zn(e){let t=Y(e),r=h(t.type);return r==="none"||r==="json"||r==="text"||r==="base64"||r==="form"?t:{type:"none"}}i(zn,"providerBody");function Jn(e,t,r){if(Gn(r)){let n=new Blob([Qt(r.data)],{type:r.type??"application/octet-stream"});e.append(t,n,r.name??t);return}e.append(t,r)}i(Jn,"appendSerializedFormValue");function Yn(e){if(e.type==="none")return{};if(e.type==="json")return{body:JSON.stringify(e.value),contentType:"application/json"};if(e.type==="text")return{body:e.data,contentType:e.contentType};if(e.type==="base64")return{body:Qt(e.data).buffer,contentType:e.contentType};let t=new FormData;for(let r of e.entries)Jn(t,r.name,r.value);return{body:t}}i(Yn,"providerRequestBody");function Xn(e){let t=new Headers;for(let[r,n]of Object.entries(Y(e)))typeof n=="string"&&t.set(r,n);return t}i(Xn,"headersFromRecord");function Qn(e){return Fn[e]??{header:"authorization",prefix:"Bearer "}}i(Qn,"providerAuthDefaults");var Zn=new Set(["id","metadata","collectLog"]),Zt=/^cf-aig-/i,es=new Set(["cf-aig-cache-ttl","cf-aig-skip-cache","cf-aig-request-timeout","cf-aig-max-attempts","cf-aig-retry-delay","cf-aig-backoff","cf-aig-event-id"]),ts="cf-aig-cache-key";function er(e,t){return`${e}:${t}`}i(er,"projectCacheKey");function st(e,t){return Object.fromEntries(Object.entries(e).filter(([r])=>!t(r)))}i(st,"withoutKeys");function tr(e,t,r,n){let s=st(Y(e),o=>o==="signal"),a=st(Y(s.gateway),o=>Zn.has(o));typeof a.cacheKey=="string"&&(a.cacheKey=er(t,a.cacheKey));let c={...s,gateway:{...a,id:n,metadata:{projectId:r}}};return"extraHeaders"in s&&(c.extraHeaders=st(Y(s.extraHeaders),o=>Zt.test(o))),c}i(tr,"gatewayOptions");function rs({headers:e,provider:t,providerKey:r,projectId:n,apiKeyHeader:s,apiKeyPrefix:a,contentType:c}){let o=Qn(t),l=s??o.header,u=a??o.prefix;e.set(l,`${u}${r}`);let d=[...e.keys()].filter(f=>Zt.test(f)&&!es.has(f));for(let f of d){let m=e.get(f);f===ts&&m!==null?e.set(f,er(n,m)):e.delete(f)}return c&&!e.has("content-type")&&e.set("content-type",c),e}i(rs,"applyProviderHeaders");function ns(e){return e?{"content-type":e}:void 0}i(ns,"headersForContentType");function ss(e){let t=new Headers,r=e.headers.get("content-type"),n=e.headers.get("cache-control");return r&&t.set("content-type",r),n&&t.set("cache-control",n),t}i(ss,"filteredResponseHeaders");function rr(e){return e instanceof Response?e:j(e)?e.response instanceof Response?e.response:rr(e.cause):null}i(rr,"responseFromThrown");function nr(e){if(!j(e))return null;let t=e.status??e.statusCode;return typeof t=="number"&&Number.isInteger(t)&&t>=400&&t<=599?t:nr(e.cause)}i(nr,"statusFromThrown");function sr(e){return e instanceof Error?e.message:String(e)}i(sr,"messageFromThrown");function os(e){return typeof e=="object"&&e!==null&&"response"in e&&typeof e.response=="function"}i(os,"hasResponseMethod");async function is(e,t){return e instanceof Response?e:os(e)?e.response():e instanceof ReadableStream?new Response(e,{headers:t?{"content-type":"text/event-stream","cache-control":"no-cache"}:{"content-type":"application/octet-stream"}}):e instanceof Blob?new Response(e,{headers:ns(e.type)}):e instanceof ArrayBuffer||Kn(e)?new Response(e,{headers:{"content-type":"application/octet-stream"}}):Response.json(e)}i(is,"responseFromAiResult");async function as(e){let t=rr(e);if(t)return or(t,!1);let r=nr(e)??502;return Response.json({error:sr(e)},{status:r})}i(as,"responseFromAiError");async function or(e,t){return t&&e.body?new Response(e.body,{headers:{"content-type":"text/event-stream","cache-control":"no-cache","access-control-allow-origin":"*"}}):new Response(e.body,{status:e.status,headers:ss(e)})}i(or,"responseFromGateway");Q.post("/run",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.model);if(!n)return e.json({error:"model required"},400);let s=tr(t.options,r,await nt(e.env.JWT_SECRET,r),e.env.AI_GATEWAY_ID??ot);try{let a=await e.env.AI.run(n,t.inputs,{...s,signal:e.req.raw.signal});return is(a,Bn(t.inputs)&&t.inputs.stream===!0)}catch(a){let c=sr(a);return console.error("AI inference error:",c),as(a)}});Q.post("/provider",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.provider),s=h(t.path),a=h(t.method)??"POST",c=h(t.providerKey),o=h(t.apiKeyHeader),l=h(t.apiKeyPrefix);if(!n)return e.json({error:"provider required"},400);if(!s)return e.json({error:"path required"},400);if(!c)return e.json({error:"providerKey required"},400);if(Wn(s))return e.json({error:"path must be relative"},400);try{let d=await e.env.AI.gateway(e.env.AI_GATEWAY_ID??ot).getUrl(n),f=Yn(zn(t.body)),m=rs({headers:Xn(t.headers),provider:n,providerKey:c,projectId:r,apiKeyHeader:o,apiKeyPrefix:l,contentType:f.contentType}),p=await fetch(Vn(d,s),{method:a,headers:m,body:f.body});if(!p.ok){let g=await p.text(),w;try{w=JSON.parse(g).error?.message??g}catch{w=g}return e.json({error:w},p.status)}return or(p,!1)}catch(u){if(u instanceof ke)return e.json({error:u.message},400);let d=u instanceof Error?u.message:String(u);return console.error("AI Gateway error:",d),e.json({error:"gateway error"},502)}});Q.post("/models",async e=>{let t=e.get("body");try{let r=await e.env.AI.models(t.inputs);return e.json(r)}catch(r){let n=r instanceof Error?r.message:String(r);return console.error("AI inference error:",n),e.json({error:"inference error"},502)}});Q.post("/toMarkdown",async e=>{let t=e.get("body"),r=e.get("projectId"),n=tr(t.options,r,await nt(e.env.JWT_SECRET,r),e.env.AI_GATEWAY_ID??ot);try{let s=await e.env.AI.toMarkdown(t.inputs,n);return e.json(s)}catch(s){let a=s instanceof Error?s.message:String(s);return console.error("AI inference error:",a),e.json({error:"inference error"},502)}});function ir(e,t){if(!e)return!0;try{let r=JSON.parse(e);return!!r&&typeof r=="object"&&!Array.isArray(r)&&r[t]===!0}catch{return!1}}i(ir,"proxyCapabilityEnabled");var ar=Xt();async function it(e,t,r){try{return await Yt({jwtSecret:e.JWT_SECRET,projectId:t,token:r,readState:i(()=>ar.read(e.ROUTING,t),"readState")})?"ok":"invalid"}catch(n){if(n instanceof x)return console.error("[proxy-token] state unavailable",{projectId:t,error:n}),"unavailable";throw n}}i(it,"verifyTenantProxyToken");async function cr(e,t,r){let n=r??(await ar.read(e.ROUTING,t)).gen;return Jt(e.JWT_SECRET,t,n)}i(cr,"tenantSendToken");async function cs(e,t,r){let n=await e.fetch(`https://api/internal/resolve-worker/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"resolve-worker",r)}});if(n.status===404||n.status===409)return null;if(!n.ok)throw new Error(`worker resolution failed with status ${n.status}`);let s=await n.json();if(typeof s.workerName!="string"||typeof s.deploymentId!="string")throw new Error("worker resolution returned an invalid response");let a={workerName:s.workerName,deploymentId:s.deploymentId};return ls(s.proxyTokenGen)?{...a,proxyTokenGen:s.proxyTokenGen}:a}i(cs,"resolveWorker");function ls(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}i(ls,"isGeneration");async function P(e,t,r,n,s={}){let a;try{a=await cs(e.API,e.JWT_SECRET,t)}catch{return s.fallbackOnDispatchError?null:Response.json({error:"active worker resolution failed"},{status:502})}if(!a)return null;let c;try{c=await cr(e,t,a.proxyTokenGen)}catch(l){if(!(l instanceof x))throw l;return console.error("[proxy-token] state unavailable",{projectId:t,error:l}),s.fallbackOnDispatchError?null:Response.json({error:"project token state unavailable"},{status:502})}let o;try{o=e.DISPATCH.get(a.workerName)}catch{return null}try{let l=await o.fetch(`https://worker/__void${r}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":c},body:JSON.stringify(n)});return l.status===404?null:l}catch{return s.fallbackOnDispatchError?null:Response.json({error:"worker dispatch failed; operation result is unknown"},{status:502})}}i(P,"dispatchToWorker");var ur=new TextEncoder,Se,lr;async function us(e){return Se&&lr===e||(Se=await crypto.subtle.importKey("raw",ur.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),lr=e),Se}i(us,"getSignKey");async function Z(e,t){let r=await us(t),n=new Uint8Array(await crypto.subtle.sign("HMAC",r,ur.encode(e)));return btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}i(Z,"hmacSign");var dr=new Map;async function O(e,t,r,n,s){let a=`${r}:${n}:${s}`,c=dr.get(a);if(c)return c;let o=await e.fetch(`https://api/internal/resolve-resource/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"resolve-resource",r)},body:JSON.stringify({type:n,binding:s})});if(!o.ok){let u=await o.text().catch(()=>o.statusText);throw new Error(`Resource resolution failed (${o.status}): ${u}`)}let l=await o.json();return dr.set(a,l.cf_id),l.cf_id}i(O,"resolveResource");async function fr(e,t,r,n,s,a,c){try{if(!c||new URL(c).origin!==c)return!1;let o=await Z(ds(r,c),t);return(await e.fetch(`https://api/internal/verify-owner/${r}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":o},body:JSON.stringify({userId:n,...s?{jwt:s}:{},...a?{accessAssertion:a}:{},proxyOrigin:c})})).ok}catch{return!1}}i(fr,"verifyProjectDeployAccess");function ds(e,t){return`void-proxy-owner-v2
3
+ ${t}`}o(Kn,"proxyInternalMessage");function ae(e,t,r){return ve(Ln(e),Kn(t,r))}o(ae,"deriveProxyInternalAuth");async function tt(e,t){let r=await ve(jn(e),`void-ai-usage
4
+ ${t}`);return`${t}.${r.slice(0,22)}`}o(tt,"deriveAiUsageTag");function b(e){return typeof e=="string"?e:null}o(b,"asString");function Y(e){return j(e)?e:{}}o(Y,"asRecord");function X(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"}o(X,"isQueryValue");var nt="void",Gn={"google-ai-studio":{header:"x-goog-api-key",prefix:""}},Wn="__voidFile",ke=class extends Error{static{o(this,"BadRequestError")}},Q=new S;function Vn(e){return typeof e=="object"&&e!==null&&"stream"in e}o(Vn,"hasStreamFlag");function zn(e){return ArrayBuffer.isView(e)}o(zn,"isBinaryView");function Jn(e){return typeof e=="object"&&e!==null&&e[Wn]===!0&&typeof e.data=="string"&&(e.name===void 0||typeof e.name=="string")&&(e.type===void 0||typeof e.type=="string")}o(Jn,"isSerializedFileInput");function Jt(e){let t;try{t=atob(e)}catch{throw new ke("invalid file data")}let r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}o(Jt,"base64ToBytes");function Yn(e,t){let r=e.endsWith("/")?e.slice(0,-1):e,n=t.startsWith("/")?t.slice(1):t;return`${r}/${n}`}o(Yn,"gatewayEndpointUrl");function Xn(e){if(/^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(e)||e.includes("\\"))return!0;let t=e.split(/[?#]/,1)[0]??"";for(let r of t.split("/"))try{if(decodeURIComponent(r)==="..")return!0}catch{return!0}return!1}o(Xn,"isUnsafeProviderPath");function Qn(e){let t=Y(e),r=b(t.type);return r==="none"||r==="json"||r==="text"||r==="base64"||r==="form"?t:{type:"none"}}o(Qn,"providerBody");function Zn(e,t,r){if(Jn(r)){let n=new Blob([Jt(r.data)],{type:r.type??"application/octet-stream"});e.append(t,n,r.name??t);return}e.append(t,r)}o(Zn,"appendSerializedFormValue");function es(e){if(e.type==="none")return{};if(e.type==="json")return{body:JSON.stringify(e.value),contentType:"application/json"};if(e.type==="text")return{body:e.data,contentType:e.contentType};if(e.type==="base64")return{body:Jt(e.data).buffer,contentType:e.contentType};let t=new FormData;for(let r of e.entries)Zn(t,r.name,r.value);return{body:t}}o(es,"providerRequestBody");function ts(e){let t=new Headers;for(let[r,n]of Object.entries(Y(e)))typeof n=="string"&&t.set(r,n);return t}o(ts,"headersFromRecord");function rs(e){return Gn[e]??{header:"authorization",prefix:"Bearer "}}o(rs,"providerAuthDefaults");var ns=new Set(["id","metadata","collectLog"]),Yt=/^cf-aig-/i,ss=new Set(["cf-aig-cache-ttl","cf-aig-skip-cache","cf-aig-request-timeout","cf-aig-max-attempts","cf-aig-retry-delay","cf-aig-backoff","cf-aig-event-id"]),os="cf-aig-cache-key";function Xt(e,t){return`${e}:${t}`}o(Xt,"projectCacheKey");function rt(e,t){return Object.fromEntries(Object.entries(e).filter(([r])=>!t(r)))}o(rt,"withoutKeys");function Qt(e,t,r,n){let s=rt(Y(e),c=>c==="signal"),i=rt(Y(s.gateway),c=>ns.has(c));typeof i.cacheKey=="string"&&(i.cacheKey=Xt(t,i.cacheKey));let a={...s,gateway:{...i,id:n,metadata:{projectId:r}}};return"extraHeaders"in s&&(a.extraHeaders=rt(Y(s.extraHeaders),c=>Yt.test(c))),a}o(Qt,"gatewayOptions");function is({headers:e,provider:t,providerKey:r,projectId:n,apiKeyHeader:s,apiKeyPrefix:i,contentType:a}){let c=rs(t),l=s??c.header,u=i??c.prefix;e.set(l,`${u}${r}`);let d=[...e.keys()].filter(f=>Yt.test(f)&&!ss.has(f));for(let f of d){let m=e.get(f);f===os&&m!==null?e.set(f,Xt(n,m)):e.delete(f)}return a&&!e.has("content-type")&&e.set("content-type",a),e}o(is,"applyProviderHeaders");function as(e){return e?{"content-type":e}:void 0}o(as,"headersForContentType");function cs(e){let t=new Headers,r=e.headers.get("content-type"),n=e.headers.get("cache-control");return r&&t.set("content-type",r),n&&t.set("cache-control",n),t}o(cs,"filteredResponseHeaders");function Zt(e){return e instanceof Response?e:j(e)?e.response instanceof Response?e.response:Zt(e.cause):null}o(Zt,"responseFromThrown");function er(e){if(!j(e))return null;let t=e.status??e.statusCode;return typeof t=="number"&&Number.isInteger(t)&&t>=400&&t<=599?t:er(e.cause)}o(er,"statusFromThrown");function tr(e){return e instanceof Error?e.message:String(e)}o(tr,"messageFromThrown");function ls(e){return typeof e=="object"&&e!==null&&"response"in e&&typeof e.response=="function"}o(ls,"hasResponseMethod");async function us(e,t){return e instanceof Response?e:ls(e)?e.response():e instanceof ReadableStream?new Response(e,{headers:t?{"content-type":"text/event-stream","cache-control":"no-cache"}:{"content-type":"application/octet-stream"}}):e instanceof Blob?new Response(e,{headers:as(e.type)}):e instanceof ArrayBuffer||zn(e)?new Response(e,{headers:{"content-type":"application/octet-stream"}}):Response.json(e)}o(us,"responseFromAiResult");async function ds(e){let t=Zt(e);if(t)return rr(t,!1);let r=er(e)??502;return Response.json({error:tr(e)},{status:r})}o(ds,"responseFromAiError");async function rr(e,t){return t&&e.body?new Response(e.body,{headers:{"content-type":"text/event-stream","cache-control":"no-cache","access-control-allow-origin":"*"}}):new Response(e.body,{status:e.status,headers:cs(e)})}o(rr,"responseFromGateway");Q.post("/run",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.model);if(!n)return e.json({error:"model required"},400);let s=Qt(t.options,r,await tt(e.env.JWT_SECRET,r),e.env.AI_GATEWAY_ID??nt);try{let i=await e.env.AI.run(n,t.inputs,{...s,signal:e.req.raw.signal});return us(i,Vn(t.inputs)&&t.inputs.stream===!0)}catch(i){let a=tr(i);return console.error("AI inference error:",a),ds(i)}});Q.post("/provider",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.provider),s=b(t.path),i=b(t.method)??"POST",a=b(t.providerKey),c=b(t.apiKeyHeader),l=b(t.apiKeyPrefix);if(!n)return e.json({error:"provider required"},400);if(!s)return e.json({error:"path required"},400);if(!a)return e.json({error:"providerKey required"},400);if(Xn(s))return e.json({error:"path must be relative"},400);try{let d=await e.env.AI.gateway(e.env.AI_GATEWAY_ID??nt).getUrl(n),f=es(Qn(t.body)),m=is({headers:ts(t.headers),provider:n,providerKey:a,projectId:r,apiKeyHeader:c,apiKeyPrefix:l,contentType:f.contentType}),p=await fetch(Yn(d,s),{method:i,headers:m,body:f.body});if(!p.ok){let g=await p.text(),w;try{w=JSON.parse(g).error?.message??g}catch{w=g}return e.json({error:w},p.status)}return rr(p,!1)}catch(u){if(u instanceof ke)return e.json({error:u.message},400);let d=u instanceof Error?u.message:String(u);return console.error("AI Gateway error:",d),e.json({error:"gateway error"},502)}});Q.post("/models",async e=>{let t=e.get("body");try{let r=await e.env.AI.models(t.inputs);return e.json(r)}catch(r){let n=r instanceof Error?r.message:String(r);return console.error("AI inference error:",n),e.json({error:"inference error"},502)}});Q.post("/toMarkdown",async e=>{let t=e.get("body"),r=e.get("projectId"),n=Qt(t.options,r,await tt(e.env.JWT_SECRET,r),e.env.AI_GATEWAY_ID??nt);try{let s=await e.env.AI.toMarkdown(t.inputs,n);return e.json(s)}catch(s){let i=s instanceof Error?s.message:String(s);return console.error("AI inference error:",i),e.json({error:"inference error"},502)}});function nr(e,t){if(!e)return!0;try{let r=JSON.parse(e);return!!r&&typeof r=="object"&&!Array.isArray(r)&&r[t]===!0}catch{return!1}}o(nr,"proxyCapabilityEnabled");var sr=zt();async function st(e,t,r){try{return await Vt({jwtSecret:e.JWT_SECRET,projectId:t,token:r,readState:o(()=>sr.read(e.ROUTING,t),"readState")})?"ok":"invalid"}catch(n){if(n instanceof x)return console.error("[proxy-token] state unavailable",{projectId:t,error:n}),"unavailable";throw n}}o(st,"verifyTenantProxyToken");async function or(e,t,r){let n=r??(await sr.read(e.ROUTING,t)).gen;return Wt(e.JWT_SECRET,t,n)}o(or,"tenantSendToken");async function fs(e,t,r){let n=await e.fetch(`https://api/internal/resolve-worker/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"resolve-worker",r)}});if(n.status===404||n.status===409)return null;if(!n.ok)throw new Error(`worker resolution failed with status ${n.status}`);let s=await n.json();if(typeof s.workerName!="string"||typeof s.deploymentId!="string")throw new Error("worker resolution returned an invalid response");let i={workerName:s.workerName,deploymentId:s.deploymentId};return ps(s.proxyTokenGen)?{...i,proxyTokenGen:s.proxyTokenGen}:i}o(fs,"resolveWorker");function ps(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>=0}o(ps,"isGeneration");async function I(e,t,r,n,s={}){let i;try{i=await fs(e.API,e.JWT_SECRET,t)}catch{return s.fallbackOnDispatchError?null:Response.json({error:"active worker resolution failed"},{status:502})}if(!i)return null;let a;try{a=await or(e,t,i.proxyTokenGen)}catch(l){if(!(l instanceof x))throw l;return console.error("[proxy-token] state unavailable",{projectId:t,error:l}),s.fallbackOnDispatchError?null:Response.json({error:"project token state unavailable"},{status:502})}let c;try{c=e.DISPATCH.get(i.workerName)}catch{return null}try{let l=await c.fetch(`https://worker/__void${r}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":a},body:JSON.stringify(n)});return l.status===404?null:l}catch{return s.fallbackOnDispatchError?null:Response.json({error:"worker dispatch failed; operation result is unknown"},{status:502})}}o(I,"dispatchToWorker");var ar=new TextEncoder,Se,ir;async function ms(e){return Se&&ir===e||(Se=await crypto.subtle.importKey("raw",ar.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),ir=e),Se}o(ms,"getSignKey");async function Z(e,t){let r=await ms(t),n=new Uint8Array(await crypto.subtle.sign("HMAC",r,ar.encode(e)));return btoa(String.fromCharCode(...n)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}o(Z,"hmacSign");var cr=new Map;async function N(e,t,r,n,s){let i=`${r}:${n}:${s}`,a=cr.get(i);if(a)return a;let c=await e.fetch(`https://api/internal/resolve-resource/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"resolve-resource",r)},body:JSON.stringify({type:n,binding:s})});if(!c.ok){let u=await c.text().catch(()=>c.statusText);throw new Error(`Resource resolution failed (${c.status}): ${u}`)}let l=await c.json();return cr.set(i,l.cf_id),l.cf_id}o(N,"resolveResource");async function lr(e,t,r,n,s,i,a){try{if(!a||new URL(a).origin!==a)return!1;let c=await Z(gs(r,a),t);return(await e.fetch(`https://api/internal/verify-owner/${r}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":c},body:JSON.stringify({userId:n,...s?{jwt:s}:{},...i?{accessAssertion:i}:{},proxyOrigin:a})})).ok}catch{return!1}}o(lr,"verifyProjectDeployAccess");function gs(e,t){return`void-proxy-owner-v2
5
5
  ${e}
6
- ${t}`}i(ds,"ownerVerificationMessage");async function pr(e,t,r,n,s){try{let a=await e.fetch(`https://api/internal/verify-prerender-build/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"verify-prerender-build",r)},body:JSON.stringify({userId:n,...s})});return a.status===400&&!s.buildId&&!s.credentialId?(await a.json().catch(()=>null))?.error==="userId and credential provenance required":a.ok}catch{return!1}}i(pr,"verifyPrerenderAuthority");var fs="https://api.cloudflare.com/client/v4",Te=new T;Te.post("/query",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.sql);if(!n||!s)return e.json({error:"binding and sql required"},400);let a=await P(e.env,r,"/d1/query",t);if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"d1",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=await fetch(`${fs}/accounts/${e.env.CF_ACCOUNT_ID}/d1/database/${c}/query`,{method:"POST",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`,"Content-Type":"application/json"},body:JSON.stringify({sql:s,params:t.params??[]})});if(!o.ok)return e.json({error:"D1 query failed",status:o.status},502);let u=(await o.json()).result?.[0];if(!u)return e.json({error:"unexpected D1 response"},502);switch(t.method){case"first":return e.json(u.results?.[0]??null);case"raw":{let d=u.results?.length?Object.keys(u.results[0]):[],f=(u.results??[]).map(m=>Object.values(m));return e.json({columns:d,results:f,meta:u.meta})}case"run":return e.json({success:!0,meta:u.meta});default:return e.json({results:u.results??[],success:!0,meta:u.meta})}});Te.post("/batch",async e=>{let t=e.get("body"),r=e.get("projectId");if(!h(t.binding)||!Array.isArray(t.statements))return e.json({error:"binding and statements required"},400);let s=await P(e.env,r,"/d1/batch",t);return s||e.json({error:"atomic D1 batch unavailable for active deployment"},503)});import{EmailMessage as Es}from"cloudflare:email";var Ie=new TextEncoder,ce=new TextDecoder,ps=5e3,Pe=15e3,mr=15e3,ms=65536;async function gs(e,t){if(!t)throw new Error("Email signing key is not configured");return Z(e,t)}i(gs,"sign");async function at(e,t,r,n=ps){let s=new AbortController,a=Date.now()+n,c=i(async p=>{let g=a-Date.now();if(g<=0)throw s.abort(),new Error("EMAIL_ADMISSION_TIMEOUT");let w=p(),b;try{return await Promise.race([w,new Promise((R,E)=>{b=setTimeout(()=>{s.abort(),E(new Error("EMAIL_ADMISSION_TIMEOUT"))},g)})])}finally{b!==void 0&&clearTimeout(b)}},"beforeDeadline"),o=JSON.stringify(r),l=await gs(o,e.EMAIL_SIGNING_SECRET),u=await c(()=>e.API.fetch(`https://api/internal/email/actions${t}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":l},body:o,signal:s.signal}));if(!u.ok)throw u.body?.cancel().catch(()=>{}),u.status===409?new Error("IDEMPOTENCY_CONFLICT"):new Error(`EMAIL_ADMISSION_${u.status}`);let d=u.body?.getReader();if(!d)throw new Error("EMAIL_ADMISSION_EMPTY_RESPONSE");let f=new Uint8Array(ms),m=0;try{for(;;){let p=await c(()=>d.read());if(p.done)break;if(m+p.value.byteLength>f.length)throw new Error("EMAIL_ADMISSION_RESPONSE_TOO_LARGE");f.set(p.value,m),m+=p.value.byteLength}return JSON.parse(ce.decode(f.subarray(0,m)))}finally{d.cancel().catch(()=>{});try{d.releaseLock()}catch{}}}i(at,"call");function ys(e){if(hs(e)===-1)return e;let t=new Map,r=[],n=0,s=0,a=!1,c=!0,o=!0,l=i(p=>{p.byteLength!==0&&(r.push(p),n+=p.byteLength)},"append"),u=i((p,g,w)=>{l(e.subarray(s,p)),l(w),s=g,a=!0},"replace"),d=0;for(;d<e.byteLength;){let p=gr(e,d),g=p===e.byteLength?e.byteLength:p+2;if(c){if(p===d)c=!1,o=!1;else if(o&&(Me(e,d,p,"Date: ")||Me(e,d,p,"Message-ID: ")))u(d,g,new Uint8Array);else if(bs(e,d,p)){let w=p,b=g,R=ce.decode(e.subarray(d,w));for(;e[b]===32||e[b]===9;)w=gr(e,b),R+=` ${ce.decode(e.subarray(b,w)).replace(/^[ \t]+/,"")}`,b=w===e.byteLength?e.byteLength:w+2;let E=R.replace(/boundary="(=_void_(?:mixed|alternative|related)_[A-Za-z0-9_-]+)"/g,(A,y)=>{let _=t.get(y);return _||(_=`<void-boundary-${t.size}>`,t.set(y,_)),`boundary="${_}"`});E!==R&&u(d,w,Ie.encode(E)),d=b;continue}}else if(e[d]===45&&e[d+1]===45){let w=d+2,b=yr(e,w,p)?ce.decode(e.subarray(w,p)):void 0,R=b===void 0?void 0:t.get(b);if(R!==void 0)u(d,p,Ie.encode(`--${R}`)),c=!0;else if(p-w>=2&&e[p-2]===45&&e[p-1]===45&&yr(e,w,p-2)){let E=ce.decode(e.subarray(w,p-2)),A=t.get(E);A!==void 0&&u(d,p,Ie.encode(`--${A}--`))}}d=g}if(!a)return e;l(e.subarray(s));let f=new Uint8Array(n),m=0;for(let p of r)f.set(p,m),m+=p.byteLength;return f}i(ys,"canonicalizeVoidMime");function hs(e){for(let t=0;t+3<e.byteLength;t++)if(e[t]===13&&e[t+1]===10&&e[t+2]===13&&e[t+3]===10)return t;return-1}i(hs,"findCrlfCrlf");function gr(e,t){let r=t;for(;r<e.byteLength;){let n=e.indexOf(13,r);if(n===-1)return e.byteLength;if(e[n+1]===10)return n;r=n+1}return e.byteLength}i(gr,"findCrlf");function Me(e,t,r,n){if(r-t<n.length)return!1;for(let s=0;s<n.length;s++){let a=e[t+s],c=n.charCodeAt(s);if((a>=65&&a<=90?a+32:a)!==(c|32))return!1}return!0}i(Me,"asciiPrefixEquals");function bs(e,t,r){let n="Content-Type:";if(!Me(e,t,r,n))return!1;let s=t+n.length;for(;s<r&&(e[s]===32||e[s]===9||e[s]===11||e[s]===12);)s++;return Me(e,s,r,"multipart/")}i(bs,"isMultipartContentType");function yr(e,t,r){if(r<=t)return!1;for(let n=t;n<r;n++){let s=e[n];if(!(s>=65&&s<=90||s>=97&&s<=122||s>=48&&s<=57||s===95||s===45||s===61))return!1}return!0}i(yr,"isBoundaryToken");async function hr(e,t,r,n){let s=ys(n),a=Ie.encode(JSON.stringify({kind:e,from:t.toLowerCase(),recipients:[...new Set(r.map(o=>o.toLowerCase()))].sort()})),c=new Uint8Array(a.length+1+s.length);return c.set(a),c[a.length]=0,c.set(s,a.length+1),[...new Uint8Array(await crypto.subtle.digest("SHA-256",c))].map(o=>o.toString(16).padStart(2,"0")).join("")}i(hr,"emailPayloadDigest");function br(e,t,r=mr){return at(e,"/admit",t,Math.min(r,mr))}i(br,"admitEmail");function ct(e,t,r,n=Pe){return at(e,`/${encodeURIComponent(t)}/start`,{recipients:r},Math.min(n,Pe))}i(ct,"startEmailAttempt");function B(e,t,r,n,s={},a=Pe){return at(e,`/${encodeURIComponent(t)}/finish`,{recipients:r,state:n,...s},Math.min(a,Pe))}i(B,"finishEmailAttempt");var wr=5e3,Er=4*1024;function Rr(e){return e.token}i(Rr,"leaseBearer");async function Ar(e,t,r,n=wr){if(!e.EMAIL_SIGNING_SECRET)return null;let s=new AbortController,a=Date.now()+Math.min(n,wr),c=i(async m=>{let p=a-Date.now();if(p<=0)throw s.abort(),new Error("email credential lease timed out");let g=m(),w;try{return await Promise.race([g,new Promise((b,R)=>{w=setTimeout(()=>{s.abort(),R(new Error("email credential lease timed out"))},p)})])}finally{w!==void 0&&clearTimeout(w)}},"beforeDeadline"),o;try{let m=await Z(`email-lease-v1
6
+ ${t}`}o(gs,"ownerVerificationMessage");async function ur(e,t,r,n,s){try{let i=await e.fetch(`https://api/internal/verify-prerender-build/${r}`,{method:"POST",headers:{"content-type":"application/json",[ie]:await ae(t,"verify-prerender-build",r)},body:JSON.stringify({userId:n,...s})});return i.status===400&&!s.buildId&&!s.credentialId?(await i.json().catch(()=>null))?.error==="userId and credential provenance required":i.ok}catch{return!1}}o(ur,"verifyPrerenderAuthority");var ys="https://api.cloudflare.com/client/v4",Te=new S;Te.post("/query",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.sql);if(!n||!s)return e.json({error:"binding and sql required"},400);let i=await I(e.env,r,"/d1/query",t);if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"d1",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=await fetch(`${ys}/accounts/${e.env.CF_ACCOUNT_ID}/d1/database/${a}/query`,{method:"POST",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`,"Content-Type":"application/json"},body:JSON.stringify({sql:s,params:t.params??[]})});if(!c.ok)return e.json({error:"D1 query failed",status:c.status},502);let u=(await c.json()).result?.[0];if(!u)return e.json({error:"unexpected D1 response"},502);switch(t.method){case"first":return e.json(u.results?.[0]??null);case"raw":{let d=u.results?.length?Object.keys(u.results[0]):[],f=(u.results??[]).map(m=>Object.values(m));return e.json({columns:d,results:f,meta:u.meta})}case"run":return e.json({success:!0,meta:u.meta});default:return e.json({results:u.results??[],success:!0,meta:u.meta})}});Te.post("/batch",async e=>{let t=e.get("body"),r=e.get("projectId");if(!b(t.binding)||!Array.isArray(t.statements))return e.json({error:"binding and statements required"},400);let s=await I(e.env,r,"/d1/batch",t);return s||e.json({error:"atomic D1 batch unavailable for active deployment"},503)});import{EmailMessage as _s}from"cloudflare:email";var Ie=new TextEncoder,ce=new TextDecoder,hs=5e3,Pe=15e3,dr=15e3,bs=65536;async function ws(e,t){if(!t)throw new Error("Email signing key is not configured");return Z(e,t)}o(ws,"sign");async function ot(e,t,r,n=hs){let s=new AbortController,i=Date.now()+n,a=o(async p=>{let g=i-Date.now();if(g<=0)throw s.abort(),new Error("EMAIL_ADMISSION_TIMEOUT");let w=p(),h;try{return await Promise.race([w,new Promise((E,R)=>{h=setTimeout(()=>{s.abort(),R(new Error("EMAIL_ADMISSION_TIMEOUT"))},g)})])}finally{h!==void 0&&clearTimeout(h)}},"beforeDeadline"),c=JSON.stringify(r),l=await ws(c,e.EMAIL_SIGNING_SECRET),u=await a(()=>e.API.fetch(`https://api/internal/email/actions${t}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":l},body:c,signal:s.signal}));if(!u.ok)throw u.body?.cancel().catch(()=>{}),u.status===409?new Error("IDEMPOTENCY_CONFLICT"):new Error(`EMAIL_ADMISSION_${u.status}`);let d=u.body?.getReader();if(!d)throw new Error("EMAIL_ADMISSION_EMPTY_RESPONSE");let f=new Uint8Array(bs),m=0;try{for(;;){let p=await a(()=>d.read());if(p.done)break;if(m+p.value.byteLength>f.length)throw new Error("EMAIL_ADMISSION_RESPONSE_TOO_LARGE");f.set(p.value,m),m+=p.value.byteLength}return JSON.parse(ce.decode(f.subarray(0,m)))}finally{d.cancel().catch(()=>{});try{d.releaseLock()}catch{}}}o(ot,"call");function Rs(e){if(Es(e)===-1)return e;let t=new Map,r=[],n=0,s=0,i=!1,a=!0,c=!0,l=o(p=>{p.byteLength!==0&&(r.push(p),n+=p.byteLength)},"append"),u=o((p,g,w)=>{l(e.subarray(s,p)),l(w),s=g,i=!0},"replace"),d=0;for(;d<e.byteLength;){let p=fr(e,d),g=p===e.byteLength?e.byteLength:p+2;if(a){if(p===d)a=!1,c=!1;else if(c&&(Oe(e,d,p,"Date: ")||Oe(e,d,p,"Message-ID: ")))u(d,g,new Uint8Array);else if(As(e,d,p)){let w=p,h=g,E=ce.decode(e.subarray(d,w));for(;e[h]===32||e[h]===9;)w=fr(e,h),E+=` ${ce.decode(e.subarray(h,w)).replace(/^[ \t]+/,"")}`,h=w===e.byteLength?e.byteLength:w+2;let R=E.replace(/boundary="(=_void_(?:mixed|alternative|related)_[A-Za-z0-9_-]+)"/g,(A,y)=>{let v=t.get(y);return v||(v=`<void-boundary-${t.size}>`,t.set(y,v)),`boundary="${v}"`});R!==E&&u(d,w,Ie.encode(R)),d=h;continue}}else if(e[d]===45&&e[d+1]===45){let w=d+2,h=pr(e,w,p)?ce.decode(e.subarray(w,p)):void 0,E=h===void 0?void 0:t.get(h);if(E!==void 0)u(d,p,Ie.encode(`--${E}`)),a=!0;else if(p-w>=2&&e[p-2]===45&&e[p-1]===45&&pr(e,w,p-2)){let R=ce.decode(e.subarray(w,p-2)),A=t.get(R);A!==void 0&&u(d,p,Ie.encode(`--${A}--`))}}d=g}if(!i)return e;l(e.subarray(s));let f=new Uint8Array(n),m=0;for(let p of r)f.set(p,m),m+=p.byteLength;return f}o(Rs,"canonicalizeVoidMime");function Es(e){for(let t=0;t+3<e.byteLength;t++)if(e[t]===13&&e[t+1]===10&&e[t+2]===13&&e[t+3]===10)return t;return-1}o(Es,"findCrlfCrlf");function fr(e,t){let r=t;for(;r<e.byteLength;){let n=e.indexOf(13,r);if(n===-1)return e.byteLength;if(e[n+1]===10)return n;r=n+1}return e.byteLength}o(fr,"findCrlf");function Oe(e,t,r,n){if(r-t<n.length)return!1;for(let s=0;s<n.length;s++){let i=e[t+s],a=n.charCodeAt(s);if((i>=65&&i<=90?i+32:i)!==(a|32))return!1}return!0}o(Oe,"asciiPrefixEquals");function As(e,t,r){let n="Content-Type:";if(!Oe(e,t,r,n))return!1;let s=t+n.length;for(;s<r&&(e[s]===32||e[s]===9||e[s]===11||e[s]===12);)s++;return Oe(e,s,r,"multipart/")}o(As,"isMultipartContentType");function pr(e,t,r){if(r<=t)return!1;for(let n=t;n<r;n++){let s=e[n];if(!(s>=65&&s<=90||s>=97&&s<=122||s>=48&&s<=57||s===95||s===45||s===61))return!1}return!0}o(pr,"isBoundaryToken");async function mr(e,t,r,n){let s=Rs(n),i=Ie.encode(JSON.stringify({kind:e,from:t.toLowerCase(),recipients:[...new Set(r.map(c=>c.toLowerCase()))].sort()})),a=new Uint8Array(i.length+1+s.length);return a.set(i),a[i.length]=0,a.set(s,i.length+1),[...new Uint8Array(await crypto.subtle.digest("SHA-256",a))].map(c=>c.toString(16).padStart(2,"0")).join("")}o(mr,"emailPayloadDigest");function gr(e,t,r=dr){return ot(e,"/admit",t,Math.min(r,dr))}o(gr,"admitEmail");function it(e,t,r,n=Pe){return ot(e,`/${encodeURIComponent(t)}/start`,{recipients:r},Math.min(n,Pe))}o(it,"startEmailAttempt");function B(e,t,r,n,s={},i=Pe){return ot(e,`/${encodeURIComponent(t)}/finish`,{recipients:r,state:n,...s},Math.min(i,Pe))}o(B,"finishEmailAttempt");var yr=5e3,hr=4*1024;function br(e){return e.token}o(br,"leaseBearer");async function wr(e,t,r,n=yr){if(!e.EMAIL_SIGNING_SECRET)return null;let s=new AbortController,i=Date.now()+Math.min(n,yr),a=o(async m=>{let p=i-Date.now();if(p<=0)throw s.abort(),new Error("email credential lease timed out");let g=m(),w;try{return await Promise.race([g,new Promise((h,E)=>{w=setTimeout(()=>{s.abort(),E(new Error("email credential lease timed out"))},p)})])}finally{w!==void 0&&clearTimeout(w)}},"beforeDeadline"),c;try{let m=await Z(`email-lease-v1
7
7
  ${r}
8
- ${t.toLowerCase()}`,e.EMAIL_SIGNING_SECRET);o=await c(()=>e.API.fetch("https://api/internal/email/domain-credential",{method:"POST",headers:{"content-type":"application/json","x-void-internal":m},body:JSON.stringify({domain:t,projectId:r}),signal:s.signal}))}catch{return null}if(!o.ok)return o.body?.cancel().catch(()=>{}),null;let l=o.headers.get("content-length");if(l!==null&&(!/^\d+$/.test(l)||Number(l)>Er))return o.body?.cancel().catch(()=>{}),null;let u=o.body?.getReader();if(!u)return null;let d=new Uint8Array(Er),f=0;try{for(;;){let p=await c(()=>u.read());if(p.done)break;if(f+p.value.byteLength>d.byteLength)throw new Error("email credential lease response too large");d.set(p.value,f),f+=p.value.byteLength}if(l!==null&&f!==Number(l))return null;let m=JSON.parse(new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(d.subarray(0,f)));return ws(m)}catch{return null}finally{u.cancel().catch(()=>{});try{u.releaseLock()}catch{}}}i(Ar,"leaseEmailDomainCredential");function ws(e){if(typeof e!="object"||e===null)return null;let t=e.kind,r=e.accountId;if(typeof r!="string"||!/^[a-zA-Z0-9_-]{1,128}$/.test(r))return null;if(t==="api_token"){let n=e.token;return typeof n=="string"&&n.length>0?{kind:t,token:n,accountId:r}:null}return null}i(ws,"parseLease");var Ne=class extends Error{static{i(this,"EmailProviderTimeoutError")}constructor(){super("email provider outcome unknown after timeout"),this.name="EmailProviderTimeoutError"}};function _r(e=6e4){let t=Date.now()+e;return{remainingMs(r=0){return Math.max(0,t-Date.now()-r)},expired(r=0){return Date.now()>=t-r},async run(r,n=0){let s=Math.min(3e4,t-Date.now()-n);if(s<=0)throw new Ne;let a=r(),c;try{return await Promise.race([a,new Promise((o,l)=>{c=setTimeout(()=>l(new Ne),s)})])}finally{c!==void 0&&clearTimeout(c)}}}}i(_r,"createEmailProviderDeadline");var dt=new T,Rs=5e4,K=5e3,Oe=5*1024*1024,As=16*1024,_s=new Set(["from","to","cc","bcc","subject","reply-to","date","message-id","in-reply-to","references","mime-version","content-type","content-transfer-encoding","content-disposition"]);function vs(e){let t=0,r=!1;for(let n=0;n<e.byteLength;){let s=n;for(;s<e.byteLength&&e[s]!==10;)s++;let a=s>n&&e[s-1]===13?s-1:s;if(a===n)return!0;if(e[n]!==32&&e[n]!==9){let c=n;for(;c<a&&e[c]!==58;)c++;let o=new TextDecoder().decode(e.subarray(n,c)).toLowerCase();r=c<a&&!_s.has(o)}if(r&&(t+=a-n+2,t>As))return!1;n=s+1}return!0}i(vs,"customMimeHeaderBytesWithinLimit");var kr=50,Sr=320,Tr=320;function ks(e){let t=e.EMAIL_SENDER_DOMAIN;if(typeof t!="string")return null;let r=t.trim().toLowerCase();return r.length>0?r:null}i(ks,"readSenderDomain");var Ss=/[.*+?^${}()|[\]\\]/g;function Ts(e){return e.replace(Ss,"\\$&")}i(Ts,"escapeRegExp");var Ir=new Map;function Is(e){let t=Ir.get(e);if(t)return t;let r=new RegExp(`^[a-z0-9._-]+(?:\\+[a-z0-9._=/-]+)*@${Ts(e)}$`);return Ir.set(e,r),r}i(Is,"strictFromRe");var Ps=new RegExp("[\\u0000-\\u001f\\u007f]+","g");function Nr(e,t=200){return e.slice(0,t).replace(Ps," ")}i(Nr,"sanitizeForLog");var Ms=128;function Ns(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}i(Ns,"bytesToStream");var Pr=10,Ce=13,Or=32,Cr=9,Os=58,xe=[102,114,111,109];function Cs(e,t,r){if(r-t<=xe.length)return-1;for(let s=0;s<xe.length;s++)if((e[t+s]|32)!==xe[s])return-1;let n=t+xe.length;for(;n<r&&(e[n]===Or||e[n]===Cr);)n++;return n<r&&e[n]===Os?n+1:-1}i(Cs,"fromValueStart");var xs={missing:"the message has no From header",multiple:"the message has more than one From header",malformed:"the From header must hold a single mailbox"};function Ds(e){let t=e.byteLength,r=0,n=-1,s=-1,a=!1,c=!1,o=e.indexOf(Ce),l=0;for(;l<t;){let f=e.indexOf(Pr,l),p=f===-1?t:f;if(p>l&&e[p-1]===Ce&&p--,p===l)break;if(o!==-1&&o<l&&(o=e.indexOf(Ce,l)),o!==-1&&o<p)return{ok:!1,reason:"malformed"};if(e[l]===Or||e[l]===Cr)c&&(s=p,a=!0);else{let g=Cs(e,l,p);c=g!==-1,c&&(r++,n=g,s=p,a=!1)}l=f===-1?t:f+1}if(r===0)return{ok:!1,reason:"missing"};if(r>1)return{ok:!1,reason:"multiple"};let u=e.subarray(n,s);if(a){u=e.slice(n,s);let f=0;for(let m=0;m<u.length;m++){let p=u[m];p!==Ce&&p!==Pr&&(u[f++]=p)}u=u.subarray(0,f)}let d=Ls(new TextDecoder().decode(u));return d===null?{ok:!1,reason:"malformed"}:{ok:!0,addrSpec:d}}i(Ds,"readMimeFromAddrSpec");function Ls(e){let t=!1,r=!1,n=-1,s=-1,a=-1;for(let o=0;o<e.length;o++){let l=e[o];if(t){r?r=!1:l==="\\"?r=!0:l==='"'&&(t=!1);continue}switch(l){case'"':if(n!==-1)return null;t=!0;break;case"<":if(n!==-1)return null;n=o;break;case">":if(n===-1||s!==-1)return null;s=o;break;case"@":a===-1&&(a=o);break;case",":case";":case":":case"(":case")":case"[":case"]":case"\\":return null;default:break}}if(t)return null;let c;if(n===-1)c=e.trim();else{if(s===-1||e.slice(s+1).trim().length!==0||a!==-1&&a<n)return null;c=e.slice(n+1,s)}return/^[\x21-\x7e]+$/.test(c)?c:null}i(Ls,"singleMailboxAddrSpec");dt.post("/send",async e=>{let t=_r(Rs),r=e.get("projectId"),n=e.get("body"),s=h(n.from),a=h(n.mimeBase64),c=h(n.requestId),o=c===null?"unknown":Nr(c,Ms),l=h(n.idempotencyKey);if(l!==null&&(l.length===0||l.length>128||!/^[\x20-\x7e]+$/.test(l)))return e.json({ok:!1,error:{code:"INVALID_TO",message:"invalid idempotency key"}},400);let u=l??(c&&c.length<=128&&/^[\x20-\x7e]+$/.test(c)?c:crypto.randomUUID()),d=Array.isArray(n.recipients)?n.recipients:null;if(!s||!a||!d)return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"invalid body"}},400);if(d.length>kr)return e.json({ok:!1,error:{code:"INVALID_TO",message:`too many recipients (max ${kr}, got ${d.length})`}},413);if(s.length>Tr)return e.json({ok:!1,error:{code:"INVALID_FROM",message:`sender exceeds ${Tr} characters`}},413);let f=ks(e.env);if(!f)return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"email sender domain is not configured"}},502);let m=[],p=new Set;for(let k of d){if(typeof k!="string")continue;if(k.length>Sr)return e.json({ok:!1,error:{code:"INVALID_TO",message:`recipient exceeds ${Sr} characters`}},413);let I=k.trim().toLowerCase();!I||p.has(I)||(p.add(I),m.push(I))}if(m.length===0)return e.json({ok:!1,error:{code:"INVALID_TO",message:"no recipients"}},200);if(a.length>Math.ceil(Oe*4/3)+4)return e.json({ok:!1,error:{code:"MIME_ERROR",message:`mime exceeds ${Oe} bytes (base64 length ${a.length})`}},413);let g;try{g=Fs(a)}catch{return e.json({ok:!1,error:{code:"MIME_ERROR",message:"invalid base64 mime"}},400)}if(g.byteLength>Oe)return e.json({ok:!1,error:{code:"MIME_ERROR",message:`mime exceeds ${Oe} bytes (got ${g.byteLength})`}},413);if(!vs(g))return e.json({ok:!1,error:{code:"MIME_ERROR",message:"custom headers exceed the 16 KiB limit"}},413);let w=s.indexOf("@"),b=w===-1?"":s.slice(w+1).toLowerCase();if(b!==""&&b!==f)return Hs(e,r,s,b,f,m,g,o,u,t);let R=e.env.SEND_EMAIL;if(typeof R?.send!="function")return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"email sending is not configured"}},502);let E=s.split("@")[0]?.split("+")[0]??"";if(!/^[\x21-\x7e]+$/.test(s))return e.json({ok:!1,error:{code:"INVALID_FROM",message:"from address must be printable ASCII"}},403);let A=s.toLowerCase();if(!Is(f).test(A))return e.json({ok:!1,error:{code:"INVALID_FROM",message:`from address must be <${E}>[+tag]@${f}`}},200);if((A.slice(0,A.indexOf("@")).split("+")[0]??"")!==E.toLowerCase())return e.json({ok:!1,error:{code:"INVALID_FROM",message:`from address must be <${E}>[+tag]@${f}`}},200);let C=xr(e,g,s);if(C)return C;let V=await Dr(e,t,{projectId:r,operationKey:u,from:s,recipients:m,raw:g,transport:"binding"});if(V instanceof Response)return V;let{admission:M,deliveries:N}=V,D=M.recipients.filter(k=>k.state==="reserved").map(k=>k.recipient);for(let k=0;k<D.length;k++){let I=D[k];if(t.expired(K)){let H=D.slice(k),te=await lt(e.env,M.operationId,H,t.remainingMs());for(let de of H)N.push({recipient:de,ok:!1,state:te?"cancelled":"outcome_unknown",error:te?{code:"UPSTREAM_ERROR",message:"email batch deadline elapsed before provider submission"}:{code:"OUTCOME_UNKNOWN",message:"could not cancel unstarted email attempt"}});break}try{await ct(e.env,M.operationId,[I],t.remainingMs(K))}catch{let H=await lt(e.env,M.operationId,[I],t.remainingMs());N.push({recipient:I,ok:!1,state:H?"cancelled":"outcome_unknown",error:H?{code:"UPSTREAM_ERROR",message:"email attempt did not start; reservation cancelled"}:{code:"OUTCOME_UNKNOWN",message:"could not confirm email attempt status"}});continue}try{let H=new Es(s,I,Ns(g)),te=await t.run(()=>R.send(H),K),de=typeof te?.messageId=="string"?te.messageId:"";try{await B(e.env,M.operationId,[I],"provider_accepted",{providerReference:de},t.remainingMs())}catch{N.push({recipient:I,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"provider accepted email but outcome could not be recorded"}});continue}N.push({recipient:I,ok:!0,state:"provider_accepted",messageId:de})}catch{try{await B(e.env,M.operationId,[I],"outcome_unknown",{errorCode:"OUTCOME_UNKNOWN"},t.remainingMs())}catch{}N.push({recipient:I,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"provider outcome unknown; inspect email logs before retrying"}})}}return Lr(r,o,N),N.some(k=>!k.ok)?e.json({ok:!1,operationId:M.operationId,deliveries:N},200):e.json({ok:!0,operationId:M.operationId,ids:N.map(k=>({recipient:k.recipient,messageId:k.messageId,state:"provider_accepted"}))})});var Mr=64*1024;async function js(e,t=3e4){let r=new AbortController,n=Date.now()+Math.min(3e4,t),s=JSON.stringify({from:e.from,recipients:e.recipients,mime_message:e.mimeMessage}),a=i(async f=>{let m=n-Date.now();if(m<=0)throw r.abort(),new Error("email sending request timed out");let p=f(),g;try{return await Promise.race([p,new Promise((w,b)=>{g=setTimeout(()=>{r.abort(),b(new Error("email sending request timed out"))},m)})])}finally{g!==void 0&&clearTimeout(g)}},"beforeDeadline"),c=await a(()=>fetch(`https://api.cloudflare.com/client/v4/accounts/${e.accountId}/email/sending/send_raw`,{method:"POST",headers:{authorization:`Bearer ${e.bearer}`,"content-type":"application/json"},body:s,signal:r.signal}));if(!c.ok)return c.body?.cancel().catch(()=>{}),{ok:!1,status:c.status};let o=c.headers.get("content-length");if(o!==null&&(!/^\d+$/.test(o)||Number(o)>Mr))throw c.body?.cancel().catch(()=>{}),new Error("email sending API response too large");let l=c.body?.getReader();if(!l)throw new Error("email sending API response unreadable");let u=new Uint8Array(Mr),d=0;try{for(;;){let f=await a(()=>l.read());if(f.done)break;if(d+f.value.byteLength>u.byteLength)throw new Error("email sending API response too large");u.set(f.value,d),d+=f.value.byteLength}if(o!==null&&d!==Number(o))throw new Error("email sending API response length mismatch");return{ok:!0,data:JSON.parse(new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(u.subarray(0,d)))}}finally{l.cancel().catch(()=>{});try{l.releaseLock()}catch{}}}i(js,"requestSendRaw");function De(e){if(!Array.isArray(e))return null;let t=new Set;for(let r of e){if(typeof r!="string")return null;t.add(r.toLowerCase())}return t}i(De,"readSendRawAddressList");function Us(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=De(t.delivered),n=De(t.permanent_bounces),s=De(t.queued),a=De(t.suppressed_recipients);return!r||!n||!s||!a||typeof t.message_id!="string"||t.message_id===""?null:{delivered:r,messageId:t.message_id,permanentBounces:n,queued:s,suppressedRecipients:a}}i(Us,"parseSendRawResult");function $s(e,t){let r=t.toLowerCase(),n=[e.delivered.has(r),e.queued.has(r),e.permanentBounces.has(r),e.suppressedRecipients.has(r)];return n.filter(Boolean).length!==1?"outcome_unknown":n[0]||n[1]?"provider_accepted":n[2]?"permanent_bounce":"suppressed"}i($s,"classifySendRawRecipient");async function Hs(e,t,r,n,s,a,c,o,l,u){if(!/^[\x21-\x7e]+$/.test(r))return e.json({ok:!1,error:{code:"INVALID_FROM",message:"from address must be printable ASCII"}},403);let d=xr(e,c,r);if(d)return d;let f;try{f=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(c)}catch{return e.json({ok:!1,error:{code:"MIME_ERROR",message:"mime must be valid UTF-8"}},400)}let m=await Dr(e,u,{projectId:t,operationKey:l,from:r,recipients:a,raw:c,transport:"send_raw"});if(m instanceof Response)return m;let{admission:p,deliveries:g}=m;if(a=p.recipients.filter(y=>y.state==="reserved").map(y=>y.recipient),a.length===0)return ut(e,p.operationId,g);let w=await Ar(e.env,n,t,u.remainingMs(K));if(!w)return await B(e.env,p.operationId,a,"cancelled",{},u.remainingMs()).catch(()=>{}),e.json({ok:!1,operationId:p.operationId,error:{code:"UPSTREAM_ERROR",message:"could not lease the domain credential"}},502);if(p.accountId!==w.accountId)return await B(e.env,p.operationId,a,"cancelled",{},u.remainingMs()).catch(()=>{}),e.json({ok:!1,operationId:p.operationId,error:{code:"UPSTREAM_ERROR",message:"email domain changed during admission"}},503);try{await ct(e.env,p.operationId,a,u.remainingMs(K))}catch{let y=await lt(e.env,p.operationId,a,u.remainingMs());for(let _ of a)g.push({recipient:_,ok:!1,state:y?"cancelled":"outcome_unknown",error:y?{code:"UPSTREAM_ERROR",message:"email attempt did not start; reservation cancelled"}:{code:"OUTCOME_UNKNOWN",message:"could not confirm email attempt status"}});return ut(e,p.operationId,g)}let b=null,R="failed",E=null,A=null;try{A=await js({accountId:w.accountId,bearer:Rr(w),from:r,recipients:a,mimeMessage:f},u.remainingMs(K))}catch{b={code:"UPSTREAM_ERROR",message:"email sending request failed"},R="outcome_unknown"}if(A)if(!A.ok)b={code:A.status===429?"QUOTA_EXCEEDED":"UPSTREAM_ERROR",message:`email sending API returned ${A.status}`},R=A.status>=500||A.status===408?"outcome_unknown":"failed";else{let y=A.data,_=typeof y=="object"&&y!==null?y.success:void 0;_===!1?b={code:"UPSTREAM_ERROR",message:"email sending API refused the message"}:_!==!0?(b={code:"OUTCOME_UNKNOWN",message:"email sending API response invalid"},R="outcome_unknown"):(E=Us(y.result),E||(b={code:"OUTCOME_UNKNOWN",message:"email sending API response invalid"},R="outcome_unknown"))}for(let y of a){if(b){g.push({recipient:y,ok:!1,state:R,error:b});continue}let _=$s(E,y);_==="permanent_bounce"?g.push({recipient:y,ok:!1,state:"failed",error:{code:"UNVERIFIED_DESTINATION",message:`recipient '${y}' permanently bounced`}}):_==="suppressed"?g.push({recipient:y,ok:!1,state:"failed",error:{code:"UNVERIFIED_DESTINATION",message:`recipient '${y}' is on the suppression list`}}):_==="outcome_unknown"?g.push({recipient:y,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"email sending API did not classify the recipient"}}):g.push({recipient:y,ok:!0,state:"provider_accepted",messageId:E.messageId})}for(let y of g.filter(_=>p.recipients.some(C=>C.recipient===_.recipient&&C.state==="reserved")))try{await B(e.env,p.operationId,[y.recipient],y.ok?"provider_accepted":y.state==="outcome_unknown"?"outcome_unknown":"failed",{providerReference:y.messageId,errorCode:y.ok?void 0:y.state==="outcome_unknown"?"OUTCOME_UNKNOWN":b?.code??y.error?.code},u.remainingMs()),y.state=y.ok?"provider_accepted":y.state==="outcome_unknown"?"outcome_unknown":"failed",y.state==="outcome_unknown"&&!y.ok&&(y.error={code:"OUTCOME_UNKNOWN",message:"provider outcome unknown; inspect email logs before retrying"})}catch{y.ok=!1,y.state="outcome_unknown",y.error={code:"OUTCOME_UNKNOWN",message:"provider outcome could not be recorded"}}return Lr(t,o,g),g.some(y=>!y.ok)?e.json({ok:!1,operationId:p.operationId,deliveries:g},200):e.json({ok:!0,operationId:p.operationId,ids:g.map(y=>({recipient:y.recipient,messageId:y.messageId,state:"provider_accepted"}))})}i(Hs,"sendViaCustomDomain");function xr(e,t,r){let n=Ds(t);if(n.ok&&n.addrSpec.toLowerCase()===r.toLowerCase())return null;let s=n.ok?"the From header address does not match the envelope sender":xs[n.reason];return e.json({ok:!1,error:{code:"INVALID_FROM",message:`mime From must be the envelope sender ${r}: ${s}`}},403)}i(xr,"refuseMimeFromMismatch");async function Dr(e,t,r){let{projectId:n,operationKey:s,from:a,recipients:c,raw:o,transport:l}=r,u;try{u=await br(e.env,{projectId:n,kind:"direct",key:s,digest:await hr("direct",a,c,o),from:a,recipients:c,transport:l},t.remainingMs(K))}catch(f){let m=f instanceof Error&&f.message==="IDEMPOTENCY_CONFLICT";return e.json({ok:!1,error:{code:m?"IDEMPOTENCY_CONFLICT":"UPSTREAM_ERROR",message:m?"idempotency key has different content":"email admission unavailable"}},m?409:503)}let d=u.recipients.filter(f=>f.state!=="reserved").map(f=>({recipient:f.recipient,ok:f.state==="provider_accepted",state:f.state,messageId:f.providerReference??void 0,error:f.state==="provider_accepted"?void 0:{code:f.errorCode??(f.state==="outcome_unknown"||f.state==="attempt_started"?"OUTCOME_UNKNOWN":f.state==="cancelled"?"UPSTREAM_ERROR":"UNVERIFIED_DESTINATION"),message:f.state==="outcome_unknown"||f.state==="attempt_started"?"provider outcome unknown; inspect email logs before retrying":f.state==="cancelled"?"email attempt was cancelled before provider submission":"recipient was not admitted"}}));if(u.replay){for(let f of u.recipients.filter(m=>m.state==="reserved"))d.push({recipient:f.recipient,ok:!1,state:"reserved",error:{code:"OUTCOME_UNKNOWN",message:"email action remains reserved; inspect email logs before retrying"}});return ut(e,u.operationId,d)}return{admission:u,deliveries:d}}i(Dr,"admitDirectSend");async function lt(e,t,r,n){try{let s=await B(e,t,r,"cancelled",{},n);return r.every(a=>s.recipients.some(c=>c.recipient===a&&c.state==="cancelled"))}catch{return!1}}i(lt,"cancelUnstartedRecipients");function ut(e,t,r){return r.length===0?e.json({ok:!1,operationId:t,error:{code:"OUTCOME_UNKNOWN",message:"email action remains reserved"}},200):r.some(n=>!n.ok)?e.json({ok:!1,operationId:t,deliveries:r},200):e.json({ok:!0,operationId:t,ids:r.map(n=>({recipient:n.recipient,messageId:n.messageId??"",state:n.state}))},200)}i(ut,"emailActionResponse");function Lr(e,t,r){for(let n of r){let s=n.ok?"sent":n.error?.code??"unknown_error",a=n.messageId??"";console.log(`[email-log] ${e} ${t} ${Nr(n.recipient,320)} ${s} ${a} @${Date.now()}`)}}i(Lr,"logSend");function Fs(e){let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}i(Fs,"base64Decode");function jr(e,t,r){let n=e.getReader(),s=!1,a,c,o=i(()=>{s=!0,a!==void 0&&clearTimeout(a),r?.removeEventListener("abort",u)},"cleanup"),l=i(()=>{s||(o(),c.error(new Error("Authentication expired or was revoked. Sign in again.")),n.cancel().catch(()=>{}))},"stop"),u=i(()=>l(),"abort"),d=i(async()=>{if(s)return!1;try{if(await t())return!s}catch{}return l(),!1},"check"),f=i(()=>{a=setTimeout(async()=>{await d()&&f()},15e3)},"schedule");return new ReadableStream({start(m){c=m,r?.addEventListener("abort",u,{once:!0}),r?.aborted?l():f()},async pull(m){try{let p=await n.read();if(s)return;p.done?(o(),m.close()):await d()&&m.enqueue(p.value)}catch(p){s||(o(),m.error(p),n.cancel().catch(()=>{}))}},async cancel(m){o(),await n.cancel(m)}},{highWaterMark:0})}i(jr,"guardHumanStream");var Le="https://api.cloudflare.com/client/v4",ee=new T;ee.post("/get",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let a=await P(e.env,r,"/kv/get",t,{fallbackOnDispatchError:!0});if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${c}/values/${encodeURIComponent(s)}`,{headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});if(o.status===404)return e.json(null);if(!o.ok)return e.json({error:"KV get failed",status:o.status},502);let l=h(t.type)??"text";return l==="json"?e.json(await o.json()):l==="arrayBuffer"?new Response(await o.arrayBuffer(),{headers:{"content-type":"application/octet-stream"}}):l==="stream"?new Response(o.body,{headers:{"content-type":"application/octet-stream"}}):e.json(await o.text())});ee.post("/put",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let a=await P(e.env,r,"/kv/put",t);if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=new URLSearchParams;X(t.expiration)&&o.set("expiration",String(t.expiration)),X(t.expiration_ttl)&&o.set("expiration_ttl",String(t.expiration_ttl));let l=o.toString()?`?${o.toString()}`:"",u,d="text/plain";if(t.base64===!0&&typeof t.value=="string"){let m=atob(t.value),p=new Uint8Array(m.length);for(let g=0;g<m.length;g++)p[g]=m.charCodeAt(g);u=p.buffer,d="application/octet-stream"}else u=typeof t.value=="string"?t.value:JSON.stringify(t.value);let f=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${c}/values/${encodeURIComponent(s)}${l}`,{method:"PUT",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`,"Content-Type":d},body:u});return f.ok?e.json({success:!0}):e.json({error:"KV put failed",status:f.status},502)});ee.post("/delete",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let a=await P(e.env,r,"/kv/delete",t);if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${c}/values/${encodeURIComponent(s)}`,{method:"DELETE",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});return!o.ok&&o.status!==404?e.json({error:"KV delete failed",status:o.status},502):e.json({success:!0})});ee.post("/list",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding);if(!n)return e.json({error:"binding required"},400);let s=await P(e.env,r,"/kv/list",t,{fallbackOnDispatchError:!0});if(s)return s;let a;try{a=await O(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=new URLSearchParams,o=h(t.prefix);o&&c.set("prefix",o),X(t.limit)&&c.set("limit",String(t.limit));let l=h(t.cursor);l&&c.set("cursor",l);let u=c.toString()?`?${c.toString()}`:"",d=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${a}/keys${u}`,{headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});if(!d.ok)return e.json({error:"KV list failed",status:d.status},502);let f=await d.json();return e.json({keys:f.result??[],list_complete:!f.result_info?.cursor,cursor:f.result_info?.cursor??null})});var Ur="__void/platform/disabled/v1",$r="disabled";var le="https://api.cloudflare.com/client/v4",G=new T;function ue(e){return{Authorization:`Bearer ${e}`}}i(ue,"cfHeaders");G.post("/get",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let a=await P(e.env,r,"/r2/get",t,{fallbackOnDispatchError:!0});if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${c}/objects/${encodeURIComponent(s)}`,{headers:ue(e.env.CF_API_TOKEN)});if(o.status===404)return e.json(null);if(!o.ok)return e.json({error:"R2 get failed",status:o.status},502);let l=new Headers;return l.set("content-type",o.headers.get("content-type")??"application/octet-stream"),o.headers.has("content-length")&&l.set("content-length",o.headers.get("content-length")),o.headers.has("etag")&&l.set("etag",o.headers.get("etag")),o.headers.has("last-modified")&&l.set("last-modified",o.headers.get("last-modified")),new Response(o.body,{headers:l})});G.on("POST",["/put","/put-conditional"],async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key),a=h(t.base64);if(!n||!s)return e.json({error:"binding and key required"},400);let c=t.onlyIf!==void 0||e.req.path.endsWith("/put-conditional"),o=await P(e.env,r,c?"/r2/put-conditional":"/r2/put",t);if(o)return o;if(c)return e.json({error:"R2 conditional writes require an active deployment with the current Void remote-binding handler. Update your Void platform and redeploy the project."},501);let l;try{l=await O(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let u=a?Uint8Array.from(atob(a),f=>f.charCodeAt(0)):new TextEncoder().encode(t.value??""),d=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${l}/objects/${encodeURIComponent(s)}`,{method:"PUT",headers:{...ue(e.env.CF_API_TOKEN),"Content-Type":h(t.contentType)??"application/octet-stream"},body:u});return d.ok?e.json({success:!0}):e.json({error:"R2 put failed",status:d.status},502)});G.post("/delete",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding);if(!n)return e.json({error:"binding required"},400);let s=Array.isArray(t.keys)&&t.keys.every(o=>typeof o=="string")?t.keys:typeof t.key=="string"?[t.key]:[];if(s.length===0)return e.json({error:"key or keys required"},400);let a=await P(e.env,r,"/r2/delete",t);if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}for(let o of s){let l=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${c}/objects/${encodeURIComponent(o)}`,{method:"DELETE",headers:ue(e.env.CF_API_TOKEN)});if(!l.ok&&l.status!==404)return e.json({error:"R2 delete failed",status:l.status},502)}return e.json({success:!0})});G.post("/list",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding);if(!n)return e.json({error:"binding required"},400);let s=await P(e.env,r,"/r2/list",t,{fallbackOnDispatchError:!0});if(s)return s;let a;try{a=await O(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=new URLSearchParams,o=h(t.prefix);o&&c.set("prefix",o),X(t.limit)&&c.set("per_page",String(t.limit));let l=h(t.cursor);l&&c.set("cursor",l);let u=h(t.delimiter);u&&c.set("delimiter",u);let d=c.toString()?`?${c.toString()}`:"",f=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${a}/objects${d}`,{headers:ue(e.env.CF_API_TOKEN)});if(!f.ok)return e.json({error:"R2 list failed",status:f.status},502);let m=await f.json();return e.json({objects:(m.result??[]).map(p=>({key:p.key,size:p.size,lastModified:p.last_modified??""})),truncated:!!m.result_info?.cursor,cursor:m.result_info?.cursor??null})});G.post("/head",async e=>{let t=e.get("body"),r=e.get("projectId"),n=h(t.binding),s=h(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let a=await P(e.env,r,"/r2/head",t,{fallbackOnDispatchError:!0});if(a)return a;let c;try{c=await O(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let o=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${c}/objects/${encodeURIComponent(s)}`,{method:"HEAD",headers:ue(e.env.CF_API_TOKEN)});return o.status===404?e.json(null):o.ok?e.json({key:s,size:parseInt(o.headers.get("content-length")??"0"),etag:o.headers.get("etag")??"",lastModified:o.headers.get("last-modified")??"",contentType:o.headers.get("content-type")??"application/octet-stream"}):e.json({error:"R2 head failed",status:o.status},502)});var qs=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}),Bs=1024*1024,Ks=8*1024*1024,L=class extends Error{constructor(r,n){super(r);this.status=n;this.name="RequestBodyError"}status;static{i(this,"RequestBodyError")}};function Hr(e){switch(e){case"/ai/run":case"/ai/provider":case"/ai/toMarkdown":case"/kv/put":case"/r2/put":case"/r2/put-conditional":return Ks;default:return Bs}}i(Hr,"requestBodyMaxBytes");async function Gs(e,t){let r=e-Date.now();if(r<=0)throw new L("request body timeout",408);let n;return Promise.race([t(),new Promise((s,a)=>{n=setTimeout(()=>a(new L("request body timeout",408)),r)})]).finally(()=>{n!==void 0&&clearTimeout(n)})}i(Gs,"beforeDeadline");async function ft(e,t){let r=e.headers.get("content-length");if(r!==null&&/^\d+$/.test(r)&&Number(r)>t)throw e.body?.cancel().catch(()=>{}),new L("request body too large",413);if(e.headers.has("content-encoding")||!e.body||r!==null&&!/^\d+$/.test(r))throw e.body?.cancel().catch(()=>{}),new L("invalid request body",400);let n=r===null?null:Number(r),s=e.body.getReader(),a=new Uint8Array(Math.min(1024,t)),c=Date.now()+5e3,o=0;try{for(;;){let l=await Gs(c,()=>s.read());if(l.done)break;let u=o+l.value.byteLength;if(u>t)throw new L("request body too large",413);if(u>a.byteLength){let d=new Uint8Array(Math.min(t,Math.max(u,a.byteLength*2)));d.set(a.subarray(0,o)),a=d}a.set(l.value,o),o=u}}finally{s.cancel().catch(()=>{}),s.releaseLock()}if(o===0||n!==null&&o!==n)throw new L("invalid request body length",400);return JSON.parse(qs.decode(a.subarray(0,o)))}i(ft,"readRequestJson");var pt=new T;pt.post("/",async e=>{let t=e.get("projectId"),r=e.get("body"),n=await e.env.API.fetch(`https://api/internal/revalidate/${t}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":r.aiToken},body:JSON.stringify({paths:r.paths,all:r.all})});return new Response(n.body,{status:n.status,headers:n.headers})});var S=new T;S.use("/*",async(e,t)=>{let r=e.env.PLATFORM_HEALTH_PROBE_TOKEN;if(!(r!==void 0&&r!==""&&e.req.path==="/health"&&e.req.header("X-Void-Platform-Probe")===r)&&(e.env.PLATFORM_TRAFFIC_STATE==="staging"||e.env.PLATFORM_TRAFFIC_STATE==="sandbox-drain"||e.env.PLATFORM_INSTALLATION_ID&&await e.env.ROUTING.get(Ur)===$r))return e.json({error:"Platform disabled"},503);await t()});S.use("/*",qt({origin:"*",allowMethods:["POST","OPTIONS"],allowHeaders:["content-type","authorization"]}));S.get("/health",e=>e.json({ok:!0,bindings:{ai:!!e.env.AI,kv:!!e.env.ROUTING,jwt:!!e.env.JWT_SECRET,api:!!e.env.API,sendEmail:!!e.env.SEND_EMAIL,emailDomain:!!e.env.EMAIL_SENDER_DOMAIN}}));S.all("/*",async(e,t)=>{if(e.req.method!=="POST")return e.json({error:"method not allowed"},405);await t()});S.post("/email/verify-receipt",async e=>{let t;try{t=await ft(e.req.raw,2*1024)}catch{return e.json({valid:!1},400)}if(!t||typeof t!="object")return e.json({valid:!1},400);let r=t;if(typeof r.projectId!="string"||r.projectId.length>128||typeof r.deploymentId!="string"||r.deploymentId.length>128||typeof r.recipient!="string"||r.recipient.length>320||typeof r.receipt!="string"||r.receipt.length>1536)return e.json({valid:!1},400);if(!z(r.projectId))return e.json({valid:!1},403);let n=await it(e.env,r.projectId,e.req.header("x-void-internal")??"");if(n!=="ok")return e.json({valid:!1},n==="unavailable"?503:403);if(!e.env.EMAIL_SIGNING_SECRET)return e.json({valid:!1},503);let s=await gt(r.receipt,e.env.EMAIL_SIGNING_SECRET,{projectId:r.projectId,deploymentId:r.deploymentId,recipient:r.recipient});return e.json({valid:s!==null,receiptId:s?.receiptId})});S.post("/email/relay",e=>e.json({error:"not found"},404));S.post("/*",async(e,t)=>{let r=new URL(e.req.url),n=r.pathname,s=e.req.header("authorization"),a=s?.startsWith("Bearer ")?s.slice(7):"",c=a?await zs(a,e.env.JWT_SECRET):null;if(s!==void 0&&!c)return e.json({error:"invalid or expired token",message:"This proxy credential is invalid or expired. Sign in to the connected platform again for remote development, or restart the build to obtain a fresh prerender token."},401);if(s===void 0&&r.hostname.includes("."))return e.json({error:"authorization required",message:"Send a Void platform token in the Authorization header."},401);let o;try{let u=n==="/email"||n.startsWith("/email/")?8388608:Hr(n),d=await ft(e.req.raw,u);if(!j(d))return e.json({error:"invalid JSON body"},400);o=d}catch(u){return n!=="/email"&&!n.startsWith("/email/")&&u instanceof L?e.json({error:u.message},u.status):e.json({error:"invalid JSON body"},400)}e.set("body",o);let l;if(c){let u=h(o.projectId);if(!u)return e.json({error:"projectId required"},400);if(c.aud==="prerender"){if(!c.project||c.project!==u)return e.json({error:"forbidden",message:"This prerender token does not match the requested project. Restart the build with a prerender token issued for the selected project."},403);if(!await pr(e.env.API,e.env.JWT_SECRET,u,c.sub,{...c.build?{buildId:c.build}:{},...c.credential?{credentialId:c.credential}:{}}))return e.json({error:c.credential?"prerender token credential is no longer active":c.build?"prerender token build is no longer active":"prerender token authority is no longer active",message:c.credential?"The deploy credential used for prerendering is no longer authorized. Ask the project owner for an active deploy credential, then restart the build.":c.build?"This build is no longer authorized to prerender. Start a new build to obtain a fresh prerender token.":"This prerender token is no longer authorized. Confirm your project access with a project admin or owner, then restart the build to obtain a fresh token."},403)}else{let d=i(()=>fr(e.env.API,e.env.JWT_SECRET,u,c.sub,a,e.req.header("Cf-Access-Jwt-Assertion"),new URL(e.req.url).origin),"checkOwner");if(l=i(async()=>c.exp>Date.now()/1e3&&await d(),"revalidateHuman"),!await l())return e.json({error:"forbidden",message:"Remote access could not be authorized. Check the selected platform and project, then ask a project admin or owner to confirm your access. If your access is correct, retry shortly."},403)}e.set("projectId",u)}else{let u=h(o.projectId),d=h(o.aiToken);if(!u||!d)return e.json({error:"projectId and aiToken required"},400);if(!z(u))return e.json({error:"invalid project token"},403);let f=await it(e.env,u,d);if(f==="unavailable")return e.json({error:"project token state unavailable"},503);if(f==="invalid")return e.json({error:"invalid project token"},403);e.set("projectId",u)}await t(),l&&e.res.body&&(e.res.headers.get("content-type")?.includes("text/event-stream")||n.startsWith("/ai/")||n==="/r2/get")&&(e.res=new Response(jr(e.res.body,l,e.req.raw.signal),e.res))});S.post("/ai/*",async(e,t)=>{if(await e.env.ROUTING.get(`ai-block:${e.get("projectId")}`,{cacheTtl:60}))return Fe({code:"usage_limit",resource:"ai",reason:"monthly_quota",message:"AI usage limit exceeded"});await t()});S.post("/email/*",async(e,t)=>{if(!ir(e.env.PLATFORM_CAPABILITIES,"email"))return e.json({error:"platform capability unavailable",capability:"email",message:"This Void platform does not enable email."},501);await t()});S.route("/ai",Q);S.route("/d1",Te);S.route("/kv",ee);S.route("/r2",G);S.route("/revalidate",pt);S.route("/email",dt);var Nd={fetch:S.fetch},Br=new TextEncoder,Vs=new TextDecoder,je,Fr;async function Ws(e){return je&&Fr===e||(je=await crypto.subtle.importKey("raw",Br.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["verify"]),Fr=e),je}i(Ws,"getVerifyKey");function qr(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=atob(t);return Uint8Array.from(r,n=>n.charCodeAt(0))}i(qr,"base64urlDecode");async function zs(e,t){let r=e.split(".");if(r.length!==3)return null;let[n,s,a]=r;try{let c=await Ws(t),o=qr(a);if(!await crypto.subtle.verify("HMAC",c,o.buffer,Br.encode(`${n}.${s}`)))return null;let u=JSON.parse(Vs.decode(qr(s))),d=Math.floor(Date.now()/1e3);return u.exp<=d||u.aud!=="api"&&u.aud!=="prerender"?null:u}catch{return null}}i(zs,"verifyJwt");export{Nd as default};
8
+ ${t.toLowerCase()}`,e.EMAIL_SIGNING_SECRET);c=await a(()=>e.API.fetch("https://api/internal/email/domain-credential",{method:"POST",headers:{"content-type":"application/json","x-void-internal":m},body:JSON.stringify({domain:t,projectId:r}),signal:s.signal}))}catch{return null}if(!c.ok)return c.body?.cancel().catch(()=>{}),null;let l=c.headers.get("content-length");if(l!==null&&(!/^\d+$/.test(l)||Number(l)>hr))return c.body?.cancel().catch(()=>{}),null;let u=c.body?.getReader();if(!u)return null;let d=new Uint8Array(hr),f=0;try{for(;;){let p=await a(()=>u.read());if(p.done)break;if(f+p.value.byteLength>d.byteLength)throw new Error("email credential lease response too large");d.set(p.value,f),f+=p.value.byteLength}if(l!==null&&f!==Number(l))return null;let m=JSON.parse(new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(d.subarray(0,f)));return vs(m)}catch{return null}finally{u.cancel().catch(()=>{});try{u.releaseLock()}catch{}}}o(wr,"leaseEmailDomainCredential");function vs(e){if(typeof e!="object"||e===null)return null;let t=e.kind,r=e.accountId;if(typeof r!="string"||!/^[a-zA-Z0-9_-]{1,128}$/.test(r))return null;if(t==="api_token"){let n=e.token;return typeof n=="string"&&n.length>0?{kind:t,token:n,accountId:r}:null}return null}o(vs,"parseLease");var Me=class extends Error{static{o(this,"EmailProviderTimeoutError")}constructor(){super("email provider outcome unknown after timeout"),this.name="EmailProviderTimeoutError"}};function Rr(e=6e4){let t=Date.now()+e;return{remainingMs(r=0){return Math.max(0,t-Date.now()-r)},expired(r=0){return Date.now()>=t-r},async run(r,n=0){let s=Math.min(3e4,t-Date.now()-n);if(s<=0)throw new Me;let i=r(),a;try{return await Promise.race([i,new Promise((c,l)=>{a=setTimeout(()=>l(new Me),s)})])}finally{a!==void 0&&clearTimeout(a)}}}}o(Rr,"createEmailProviderDeadline");var lt=new S,ks=5e4,K=5e3,Ne=5*1024*1024,Ss=16*1024,Ts=new Set(["from","to","cc","bcc","subject","reply-to","date","message-id","in-reply-to","references","mime-version","content-type","content-transfer-encoding","content-disposition"]);function Is(e){let t=0,r=!1;for(let n=0;n<e.byteLength;){let s=n;for(;s<e.byteLength&&e[s]!==10;)s++;let i=s>n&&e[s-1]===13?s-1:s;if(i===n)return!0;if(e[n]!==32&&e[n]!==9){let a=n;for(;a<i&&e[a]!==58;)a++;let c=new TextDecoder().decode(e.subarray(n,a)).toLowerCase();r=a<i&&!Ts.has(c)}if(r&&(t+=i-n+2,t>Ss))return!1;n=s+1}return!0}o(Is,"customMimeHeaderBytesWithinLimit");var Ar=50,vr=320,_r=320;function Ps(e){let t=e.EMAIL_SENDER_DOMAIN;if(typeof t!="string")return null;let r=t.trim().toLowerCase();return r.length>0?r:null}o(Ps,"readSenderDomain");var Os=/[.*+?^${}()|[\]\\]/g;function Ms(e){return e.replace(Os,"\\$&")}o(Ms,"escapeRegExp");var kr=new Map;function Ns(e){let t=kr.get(e);if(t)return t;let r=new RegExp(`^[a-z0-9._-]+(?:\\+[a-z0-9._=/-]+)*@${Ms(e)}$`);return kr.set(e,r),r}o(Ns,"strictFromRe");var Cs=new RegExp("[\\u0000-\\u001f\\u007f]+","g");function Ir(e,t=200){return e.slice(0,t).replace(Cs," ")}o(Ir,"sanitizeForLog");var xs=128;function Ds(e){return new ReadableStream({start(t){t.enqueue(e),t.close()}})}o(Ds,"bytesToStream");var Sr=10,Ce=13,Pr=32,Or=9,Ls=58,xe=[102,114,111,109];function js(e,t,r){if(r-t<=xe.length)return-1;for(let s=0;s<xe.length;s++)if((e[t+s]|32)!==xe[s])return-1;let n=t+xe.length;for(;n<r&&(e[n]===Pr||e[n]===Or);)n++;return n<r&&e[n]===Ls?n+1:-1}o(js,"fromValueStart");var Us={missing:"the message has no From header",multiple:"the message has more than one From header",malformed:"the From header must hold a single mailbox"};function $s(e){let t=e.byteLength,r=0,n=-1,s=-1,i=!1,a=!1,c=e.indexOf(Ce),l=0;for(;l<t;){let f=e.indexOf(Sr,l),p=f===-1?t:f;if(p>l&&e[p-1]===Ce&&p--,p===l)break;if(c!==-1&&c<l&&(c=e.indexOf(Ce,l)),c!==-1&&c<p)return{ok:!1,reason:"malformed"};if(e[l]===Pr||e[l]===Or)a&&(s=p,i=!0);else{let g=js(e,l,p);a=g!==-1,a&&(r++,n=g,s=p,i=!1)}l=f===-1?t:f+1}if(r===0)return{ok:!1,reason:"missing"};if(r>1)return{ok:!1,reason:"multiple"};let u=e.subarray(n,s);if(i){u=e.slice(n,s);let f=0;for(let m=0;m<u.length;m++){let p=u[m];p!==Ce&&p!==Sr&&(u[f++]=p)}u=u.subarray(0,f)}let d=Hs(new TextDecoder().decode(u));return d===null?{ok:!1,reason:"malformed"}:{ok:!0,addrSpec:d}}o($s,"readMimeFromAddrSpec");function Hs(e){let t=!1,r=!1,n=-1,s=-1,i=-1;for(let c=0;c<e.length;c++){let l=e[c];if(t){r?r=!1:l==="\\"?r=!0:l==='"'&&(t=!1);continue}switch(l){case'"':if(n!==-1)return null;t=!0;break;case"<":if(n!==-1)return null;n=c;break;case">":if(n===-1||s!==-1)return null;s=c;break;case"@":i===-1&&(i=c);break;case",":case";":case":":case"(":case")":case"[":case"]":case"\\":return null;default:break}}if(t)return null;let a;if(n===-1)a=e.trim();else{if(s===-1||e.slice(s+1).trim().length!==0||i!==-1&&i<n)return null;a=e.slice(n+1,s)}return/^[\x21-\x7e]+$/.test(a)?a:null}o(Hs,"singleMailboxAddrSpec");lt.post("/send",async e=>{let t=Rr(ks),r=e.get("projectId"),n=e.get("body"),s=b(n.from),i=b(n.mimeBase64),a=b(n.requestId),c=a===null?"unknown":Ir(a,xs),l=b(n.idempotencyKey);if(l!==null&&(l.length===0||l.length>128||!/^[\x20-\x7e]+$/.test(l)))return e.json({ok:!1,error:{code:"INVALID_TO",message:"invalid idempotency key"}},400);let u=l??(a&&a.length<=128&&/^[\x20-\x7e]+$/.test(a)?a:crypto.randomUUID()),d=Array.isArray(n.recipients)?n.recipients:null;if(!s||!i||!d)return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"invalid body"}},400);if(d.length>Ar)return e.json({ok:!1,error:{code:"INVALID_TO",message:`too many recipients (max ${Ar}, got ${d.length})`}},413);if(s.length>_r)return e.json({ok:!1,error:{code:"INVALID_FROM",message:`sender exceeds ${_r} characters`}},413);let f=Ps(e.env);if(!f)return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"email sender domain is not configured"}},502);let m=[],p=new Set;for(let _ of d){if(typeof _!="string")continue;if(_.length>vr)return e.json({ok:!1,error:{code:"INVALID_TO",message:`recipient exceeds ${vr} characters`}},413);let T=_.trim().toLowerCase();!T||p.has(T)||(p.add(T),m.push(T))}if(m.length===0)return e.json({ok:!1,error:{code:"INVALID_TO",message:"no recipients"}},200);if(i.length>Math.ceil(Ne*4/3)+4)return e.json({ok:!1,error:{code:"MIME_ERROR",message:`mime exceeds ${Ne} bytes (base64 length ${i.length})`}},413);let g;try{g=Gs(i)}catch{return e.json({ok:!1,error:{code:"MIME_ERROR",message:"invalid base64 mime"}},400)}if(g.byteLength>Ne)return e.json({ok:!1,error:{code:"MIME_ERROR",message:`mime exceeds ${Ne} bytes (got ${g.byteLength})`}},413);if(!Is(g))return e.json({ok:!1,error:{code:"MIME_ERROR",message:"custom headers exceed the 16 KiB limit"}},413);let w=s.indexOf("@"),h=w===-1?"":s.slice(w+1).toLowerCase();if(h!==""&&h!==f)return Ks(e,r,s,h,f,m,g,c,u,t);let E=e.env.SEND_EMAIL;if(typeof E?.send!="function")return e.json({ok:!1,error:{code:"UPSTREAM_ERROR",message:"email sending is not configured"}},502);let R=s.split("@")[0]?.split("+")[0]??"";if(!/^[\x21-\x7e]+$/.test(s))return e.json({ok:!1,error:{code:"INVALID_FROM",message:"from address must be printable ASCII"}},403);let A=s.toLowerCase();if(!Ns(f).test(A))return e.json({ok:!1,error:{code:"INVALID_FROM",message:`from address must be <${R}>[+tag]@${f}`}},200);if((A.slice(0,A.indexOf("@")).split("+")[0]??"")!==R.toLowerCase())return e.json({ok:!1,error:{code:"INVALID_FROM",message:`from address must be <${R}>[+tag]@${f}`}},200);let C=Mr(e,g,s);if(C)return C;let W=await Nr(e,t,{projectId:r,operationKey:u,from:s,recipients:m,raw:g,transport:"binding"});if(W instanceof Response)return W;let{admission:P,deliveries:O}=W,D=P.recipients.filter(_=>_.state==="reserved").map(_=>_.recipient);for(let _=0;_<D.length;_++){let T=D[_];if(t.expired(K)){let H=D.slice(_),te=await at(e.env,P.operationId,H,t.remainingMs());for(let de of H)O.push({recipient:de,ok:!1,state:te?"cancelled":"outcome_unknown",error:te?{code:"UPSTREAM_ERROR",message:"email batch deadline elapsed before provider submission"}:{code:"OUTCOME_UNKNOWN",message:"could not cancel unstarted email attempt"}});break}try{await it(e.env,P.operationId,[T],t.remainingMs(K))}catch{let H=await at(e.env,P.operationId,[T],t.remainingMs());O.push({recipient:T,ok:!1,state:H?"cancelled":"outcome_unknown",error:H?{code:"UPSTREAM_ERROR",message:"email attempt did not start; reservation cancelled"}:{code:"OUTCOME_UNKNOWN",message:"could not confirm email attempt status"}});continue}try{let H=new _s(s,T,Ds(g)),te=await t.run(()=>E.send(H),K),de=typeof te?.messageId=="string"?te.messageId:"";try{await B(e.env,P.operationId,[T],"provider_accepted",{providerReference:de},t.remainingMs())}catch{O.push({recipient:T,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"provider accepted email but outcome could not be recorded"}});continue}O.push({recipient:T,ok:!0,state:"provider_accepted",messageId:de})}catch{try{await B(e.env,P.operationId,[T],"outcome_unknown",{errorCode:"OUTCOME_UNKNOWN"},t.remainingMs())}catch{}O.push({recipient:T,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"provider outcome unknown; inspect email logs before retrying"}})}}return Cr(r,c,O),O.some(_=>!_.ok)?e.json({ok:!1,operationId:P.operationId,deliveries:O},200):e.json({ok:!0,operationId:P.operationId,ids:O.map(_=>({recipient:_.recipient,messageId:_.messageId,state:"provider_accepted"}))})});var Tr=64*1024;async function Fs(e,t=3e4){let r=new AbortController,n=Date.now()+Math.min(3e4,t),s=JSON.stringify({from:e.from,recipients:e.recipients,mime_message:e.mimeMessage}),i=o(async f=>{let m=n-Date.now();if(m<=0)throw r.abort(),new Error("email sending request timed out");let p=f(),g;try{return await Promise.race([p,new Promise((w,h)=>{g=setTimeout(()=>{r.abort(),h(new Error("email sending request timed out"))},m)})])}finally{g!==void 0&&clearTimeout(g)}},"beforeDeadline"),a=await i(()=>fetch(`https://api.cloudflare.com/client/v4/accounts/${e.accountId}/email/sending/send_raw`,{method:"POST",headers:{authorization:`Bearer ${e.bearer}`,"content-type":"application/json"},body:s,signal:r.signal}));if(!a.ok)return a.body?.cancel().catch(()=>{}),{ok:!1,status:a.status};let c=a.headers.get("content-length");if(c!==null&&(!/^\d+$/.test(c)||Number(c)>Tr))throw a.body?.cancel().catch(()=>{}),new Error("email sending API response too large");let l=a.body?.getReader();if(!l)throw new Error("email sending API response unreadable");let u=new Uint8Array(Tr),d=0;try{for(;;){let f=await i(()=>l.read());if(f.done)break;if(d+f.value.byteLength>u.byteLength)throw new Error("email sending API response too large");u.set(f.value,d),d+=f.value.byteLength}if(c!==null&&d!==Number(c))throw new Error("email sending API response length mismatch");return{ok:!0,data:JSON.parse(new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(u.subarray(0,d)))}}finally{l.cancel().catch(()=>{});try{l.releaseLock()}catch{}}}o(Fs,"requestSendRaw");function De(e){if(!Array.isArray(e))return null;let t=new Set;for(let r of e){if(typeof r!="string")return null;t.add(r.toLowerCase())}return t}o(De,"readSendRawAddressList");function qs(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=De(t.delivered),n=De(t.permanent_bounces),s=De(t.queued),i=De(t.suppressed_recipients);return!r||!n||!s||!i||typeof t.message_id!="string"||t.message_id===""?null:{delivered:r,messageId:t.message_id,permanentBounces:n,queued:s,suppressedRecipients:i}}o(qs,"parseSendRawResult");function Bs(e,t){let r=t.toLowerCase(),n=[e.delivered.has(r),e.queued.has(r),e.permanentBounces.has(r),e.suppressedRecipients.has(r)];return n.filter(Boolean).length!==1?"outcome_unknown":n[0]||n[1]?"provider_accepted":n[2]?"permanent_bounce":"suppressed"}o(Bs,"classifySendRawRecipient");async function Ks(e,t,r,n,s,i,a,c,l,u){if(!/^[\x21-\x7e]+$/.test(r))return e.json({ok:!1,error:{code:"INVALID_FROM",message:"from address must be printable ASCII"}},403);let d=Mr(e,a,r);if(d)return d;let f;try{f=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}).decode(a)}catch{return e.json({ok:!1,error:{code:"MIME_ERROR",message:"mime must be valid UTF-8"}},400)}let m=await Nr(e,u,{projectId:t,operationKey:l,from:r,recipients:i,raw:a,transport:"send_raw"});if(m instanceof Response)return m;let{admission:p,deliveries:g}=m;if(i=p.recipients.filter(y=>y.state==="reserved").map(y=>y.recipient),i.length===0)return ct(e,p.operationId,g);let w=await wr(e.env,n,t,u.remainingMs(K));if(!w)return await B(e.env,p.operationId,i,"cancelled",{},u.remainingMs()).catch(()=>{}),e.json({ok:!1,operationId:p.operationId,error:{code:"UPSTREAM_ERROR",message:"could not lease the domain credential"}},502);if(p.accountId!==w.accountId)return await B(e.env,p.operationId,i,"cancelled",{},u.remainingMs()).catch(()=>{}),e.json({ok:!1,operationId:p.operationId,error:{code:"UPSTREAM_ERROR",message:"email domain changed during admission"}},503);try{await it(e.env,p.operationId,i,u.remainingMs(K))}catch{let y=await at(e.env,p.operationId,i,u.remainingMs());for(let v of i)g.push({recipient:v,ok:!1,state:y?"cancelled":"outcome_unknown",error:y?{code:"UPSTREAM_ERROR",message:"email attempt did not start; reservation cancelled"}:{code:"OUTCOME_UNKNOWN",message:"could not confirm email attempt status"}});return ct(e,p.operationId,g)}let h=null,E="failed",R=null,A=null;try{A=await Fs({accountId:w.accountId,bearer:br(w),from:r,recipients:i,mimeMessage:f},u.remainingMs(K))}catch{h={code:"UPSTREAM_ERROR",message:"email sending request failed"},E="outcome_unknown"}if(A)if(!A.ok)h={code:A.status===429?"QUOTA_EXCEEDED":"UPSTREAM_ERROR",message:`email sending API returned ${A.status}`},E=A.status>=500||A.status===408?"outcome_unknown":"failed";else{let y=A.data,v=typeof y=="object"&&y!==null?y.success:void 0;v===!1?h={code:"UPSTREAM_ERROR",message:"email sending API refused the message"}:v!==!0?(h={code:"OUTCOME_UNKNOWN",message:"email sending API response invalid"},E="outcome_unknown"):(R=qs(y.result),R||(h={code:"OUTCOME_UNKNOWN",message:"email sending API response invalid"},E="outcome_unknown"))}for(let y of i){if(h){g.push({recipient:y,ok:!1,state:E,error:h});continue}let v=Bs(R,y);v==="permanent_bounce"?g.push({recipient:y,ok:!1,state:"failed",error:{code:"UNVERIFIED_DESTINATION",message:`recipient '${y}' permanently bounced`}}):v==="suppressed"?g.push({recipient:y,ok:!1,state:"failed",error:{code:"UNVERIFIED_DESTINATION",message:`recipient '${y}' is on the suppression list`}}):v==="outcome_unknown"?g.push({recipient:y,ok:!1,state:"outcome_unknown",error:{code:"OUTCOME_UNKNOWN",message:"email sending API did not classify the recipient"}}):g.push({recipient:y,ok:!0,state:"provider_accepted",messageId:R.messageId})}for(let y of g.filter(v=>p.recipients.some(C=>C.recipient===v.recipient&&C.state==="reserved")))try{await B(e.env,p.operationId,[y.recipient],y.ok?"provider_accepted":y.state==="outcome_unknown"?"outcome_unknown":"failed",{providerReference:y.messageId,errorCode:y.ok?void 0:y.state==="outcome_unknown"?"OUTCOME_UNKNOWN":h?.code??y.error?.code},u.remainingMs()),y.state=y.ok?"provider_accepted":y.state==="outcome_unknown"?"outcome_unknown":"failed",y.state==="outcome_unknown"&&!y.ok&&(y.error={code:"OUTCOME_UNKNOWN",message:"provider outcome unknown; inspect email logs before retrying"})}catch{y.ok=!1,y.state="outcome_unknown",y.error={code:"OUTCOME_UNKNOWN",message:"provider outcome could not be recorded"}}return Cr(t,c,g),g.some(y=>!y.ok)?e.json({ok:!1,operationId:p.operationId,deliveries:g},200):e.json({ok:!0,operationId:p.operationId,ids:g.map(y=>({recipient:y.recipient,messageId:y.messageId,state:"provider_accepted"}))})}o(Ks,"sendViaCustomDomain");function Mr(e,t,r){let n=$s(t);if(n.ok&&n.addrSpec.toLowerCase()===r.toLowerCase())return null;let s=n.ok?"the From header address does not match the envelope sender":Us[n.reason];return e.json({ok:!1,error:{code:"INVALID_FROM",message:`mime From must be the envelope sender ${r}: ${s}`}},403)}o(Mr,"refuseMimeFromMismatch");async function Nr(e,t,r){let{projectId:n,operationKey:s,from:i,recipients:a,raw:c,transport:l}=r,u;try{u=await gr(e.env,{projectId:n,kind:"direct",key:s,digest:await mr("direct",i,a,c),from:i,recipients:a,transport:l},t.remainingMs(K))}catch(f){let m=f instanceof Error&&f.message==="IDEMPOTENCY_CONFLICT";return e.json({ok:!1,error:{code:m?"IDEMPOTENCY_CONFLICT":"UPSTREAM_ERROR",message:m?"idempotency key has different content":"email admission unavailable"}},m?409:503)}let d=u.recipients.filter(f=>f.state!=="reserved").map(f=>({recipient:f.recipient,ok:f.state==="provider_accepted",state:f.state,messageId:f.providerReference??void 0,error:f.state==="provider_accepted"?void 0:{code:f.errorCode??(f.state==="outcome_unknown"||f.state==="attempt_started"?"OUTCOME_UNKNOWN":f.state==="cancelled"?"UPSTREAM_ERROR":"UNVERIFIED_DESTINATION"),message:f.state==="outcome_unknown"||f.state==="attempt_started"?"provider outcome unknown; inspect email logs before retrying":f.state==="cancelled"?"email attempt was cancelled before provider submission":"recipient was not admitted"}}));if(u.replay){for(let f of u.recipients.filter(m=>m.state==="reserved"))d.push({recipient:f.recipient,ok:!1,state:"reserved",error:{code:"OUTCOME_UNKNOWN",message:"email action remains reserved; inspect email logs before retrying"}});return ct(e,u.operationId,d)}return{admission:u,deliveries:d}}o(Nr,"admitDirectSend");async function at(e,t,r,n){try{let s=await B(e,t,r,"cancelled",{},n);return r.every(i=>s.recipients.some(a=>a.recipient===i&&a.state==="cancelled"))}catch{return!1}}o(at,"cancelUnstartedRecipients");function ct(e,t,r){return r.length===0?e.json({ok:!1,operationId:t,error:{code:"OUTCOME_UNKNOWN",message:"email action remains reserved"}},200):r.some(n=>!n.ok)?e.json({ok:!1,operationId:t,deliveries:r},200):e.json({ok:!0,operationId:t,ids:r.map(n=>({recipient:n.recipient,messageId:n.messageId??"",state:n.state}))},200)}o(ct,"emailActionResponse");function Cr(e,t,r){for(let n of r){let s=n.ok?"sent":n.error?.code??"unknown_error",i=n.messageId??"";console.log(`[email-log] ${e} ${t} ${Ir(n.recipient,320)} ${s} ${i} @${Date.now()}`)}}o(Cr,"logSend");function Gs(e){let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}o(Gs,"base64Decode");function xr(e,t,r){let n=e.getReader(),s=!1,i,a,c=o(()=>{s=!0,i!==void 0&&clearTimeout(i),r?.removeEventListener("abort",u)},"cleanup"),l=o(()=>{s||(c(),a.error(new Error("Authentication expired or was revoked. Sign in again.")),n.cancel().catch(()=>{}))},"stop"),u=o(()=>l(),"abort"),d=o(async()=>{if(s)return!1;try{if(await t())return!s}catch{}return l(),!1},"check"),f=o(()=>{i=setTimeout(async()=>{await d()&&f()},15e3)},"schedule");return new ReadableStream({start(m){a=m,r?.addEventListener("abort",u,{once:!0}),r?.aborted?l():f()},async pull(m){try{let p=await n.read();if(s)return;p.done?(c(),m.close()):await d()&&m.enqueue(p.value)}catch(p){s||(c(),m.error(p),n.cancel().catch(()=>{}))}},async cancel(m){c(),await n.cancel(m)}},{highWaterMark:0})}o(xr,"guardHumanStream");var Le="https://api.cloudflare.com/client/v4",ee=new S;ee.post("/get",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let i=await I(e.env,r,"/kv/get",t,{fallbackOnDispatchError:!0});if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${a}/values/${encodeURIComponent(s)}`,{headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});if(c.status===404)return e.json(null);if(!c.ok)return e.json({error:"KV get failed",status:c.status},502);let l=b(t.type)??"text";return l==="json"?e.json(await c.json()):l==="arrayBuffer"?new Response(await c.arrayBuffer(),{headers:{"content-type":"application/octet-stream"}}):l==="stream"?new Response(c.body,{headers:{"content-type":"application/octet-stream"}}):e.json(await c.text())});ee.post("/put",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let i=await I(e.env,r,"/kv/put",t);if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=new URLSearchParams;X(t.expiration)&&c.set("expiration",String(t.expiration)),X(t.expiration_ttl)&&c.set("expiration_ttl",String(t.expiration_ttl));let l=c.toString()?`?${c.toString()}`:"",u,d="text/plain";if(t.base64===!0&&typeof t.value=="string"){let m=atob(t.value),p=new Uint8Array(m.length);for(let g=0;g<m.length;g++)p[g]=m.charCodeAt(g);u=p.buffer,d="application/octet-stream"}else u=typeof t.value=="string"?t.value:JSON.stringify(t.value);let f=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${a}/values/${encodeURIComponent(s)}${l}`,{method:"PUT",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`,"Content-Type":d},body:u});return f.ok?e.json({success:!0}):e.json({error:"KV put failed",status:f.status},502)});ee.post("/delete",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let i=await I(e.env,r,"/kv/delete",t);if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${a}/values/${encodeURIComponent(s)}`,{method:"DELETE",headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});return!c.ok&&c.status!==404?e.json({error:"KV delete failed",status:c.status},502):e.json({success:!0})});ee.post("/list",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding);if(!n)return e.json({error:"binding required"},400);let s=await I(e.env,r,"/kv/list",t,{fallbackOnDispatchError:!0});if(s)return s;let i;try{i=await N(e.env.API,e.env.JWT_SECRET,r,"kv",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let a=new URLSearchParams,c=b(t.prefix);c&&a.set("prefix",c),X(t.limit)&&a.set("limit",String(t.limit));let l=b(t.cursor);l&&a.set("cursor",l);let u=a.toString()?`?${a.toString()}`:"",d=await fetch(`${Le}/accounts/${e.env.CF_ACCOUNT_ID}/storage/kv/namespaces/${i}/keys${u}`,{headers:{Authorization:`Bearer ${e.env.CF_API_TOKEN}`}});if(!d.ok)return e.json({error:"KV list failed",status:d.status},502);let f=await d.json();return e.json({keys:f.result??[],list_complete:!f.result_info?.cursor,cursor:f.result_info?.cursor??null})});var Dr="__void/platform/disabled/v1",Lr="disabled";var le="https://api.cloudflare.com/client/v4",G=new S;function ue(e){return{Authorization:`Bearer ${e}`}}o(ue,"cfHeaders");G.post("/get",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let i=await I(e.env,r,"/r2/get",t,{fallbackOnDispatchError:!0});if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${a}/objects/${encodeURIComponent(s)}`,{headers:ue(e.env.CF_API_TOKEN)});if(c.status===404)return e.json(null);if(!c.ok)return e.json({error:"R2 get failed",status:c.status},502);let l=new Headers;return l.set("content-type",c.headers.get("content-type")??"application/octet-stream"),c.headers.has("content-length")&&l.set("content-length",c.headers.get("content-length")),c.headers.has("etag")&&l.set("etag",c.headers.get("etag")),c.headers.has("last-modified")&&l.set("last-modified",c.headers.get("last-modified")),new Response(c.body,{headers:l})});G.on("POST",["/put","/put-conditional"],async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key),i=b(t.base64);if(!n||!s)return e.json({error:"binding and key required"},400);let a=t.onlyIf!==void 0||e.req.path.endsWith("/put-conditional"),c=await I(e.env,r,a?"/r2/put-conditional":"/r2/put",t);if(c)return c;if(a)return e.json({error:"R2 conditional writes require an active deployment with the current Void remote-binding handler. Update your Void platform and redeploy the project."},501);let l;try{l=await N(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let u=i?Uint8Array.from(atob(i),f=>f.charCodeAt(0)):new TextEncoder().encode(t.value??""),d=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${l}/objects/${encodeURIComponent(s)}`,{method:"PUT",headers:{...ue(e.env.CF_API_TOKEN),"Content-Type":b(t.contentType)??"application/octet-stream"},body:u});return d.ok?e.json({success:!0}):e.json({error:"R2 put failed",status:d.status},502)});G.post("/delete",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding);if(!n)return e.json({error:"binding required"},400);let s=Array.isArray(t.keys)&&t.keys.every(c=>typeof c=="string")?t.keys:typeof t.key=="string"?[t.key]:[];if(s.length===0)return e.json({error:"key or keys required"},400);let i=await I(e.env,r,"/r2/delete",t);if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}for(let c of s){let l=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${a}/objects/${encodeURIComponent(c)}`,{method:"DELETE",headers:ue(e.env.CF_API_TOKEN)});if(!l.ok&&l.status!==404)return e.json({error:"R2 delete failed",status:l.status},502)}return e.json({success:!0})});G.post("/list",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding);if(!n)return e.json({error:"binding required"},400);let s=await I(e.env,r,"/r2/list",t,{fallbackOnDispatchError:!0});if(s)return s;let i;try{i=await N(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let a=new URLSearchParams,c=b(t.prefix);c&&a.set("prefix",c),X(t.limit)&&a.set("per_page",String(t.limit));let l=b(t.cursor);l&&a.set("cursor",l);let u=b(t.delimiter);u&&a.set("delimiter",u);let d=a.toString()?`?${a.toString()}`:"",f=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${i}/objects${d}`,{headers:ue(e.env.CF_API_TOKEN)});if(!f.ok)return e.json({error:"R2 list failed",status:f.status},502);let m=await f.json();return e.json({objects:(m.result??[]).map(p=>({key:p.key,size:p.size,lastModified:p.last_modified??""})),truncated:!!m.result_info?.cursor,cursor:m.result_info?.cursor??null})});G.post("/head",async e=>{let t=e.get("body"),r=e.get("projectId"),n=b(t.binding),s=b(t.key);if(!n||!s)return e.json({error:"binding and key required"},400);let i=await I(e.env,r,"/r2/head",t,{fallbackOnDispatchError:!0});if(i)return i;let a;try{a=await N(e.env.API,e.env.JWT_SECRET,r,"r2",n)}catch{return e.json({error:`unknown binding "${n}"`},404)}let c=await fetch(`${le}/accounts/${e.env.CF_ACCOUNT_ID}/r2/buckets/${a}/objects/${encodeURIComponent(s)}`,{method:"HEAD",headers:ue(e.env.CF_API_TOKEN)});return c.status===404?e.json(null):c.ok?e.json({key:s,size:parseInt(c.headers.get("content-length")??"0"),etag:c.headers.get("etag")??"",lastModified:c.headers.get("last-modified")??"",contentType:c.headers.get("content-type")??"application/octet-stream"}):e.json({error:"R2 head failed",status:c.status},502)});var Ws=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!1}),Vs=1024*1024,zs=8*1024*1024,L=class extends Error{constructor(r,n){super(r);this.status=n;this.name="RequestBodyError"}status;static{o(this,"RequestBodyError")}};function jr(e){switch(e){case"/ai/run":case"/ai/provider":case"/ai/toMarkdown":case"/kv/put":case"/r2/put":case"/r2/put-conditional":return zs;default:return Vs}}o(jr,"requestBodyMaxBytes");async function Js(e,t){let r=e-Date.now();if(r<=0)throw new L("request body timeout",408);let n;return Promise.race([t(),new Promise((s,i)=>{n=setTimeout(()=>i(new L("request body timeout",408)),r)})]).finally(()=>{n!==void 0&&clearTimeout(n)})}o(Js,"beforeDeadline");async function ut(e,t){let r=e.headers.get("content-length");if(r!==null&&/^\d+$/.test(r)&&Number(r)>t)throw e.body?.cancel().catch(()=>{}),new L("request body too large",413);if(e.headers.has("content-encoding")||!e.body||r!==null&&!/^\d+$/.test(r))throw e.body?.cancel().catch(()=>{}),new L("invalid request body",400);let n=r===null?null:Number(r),s=e.body.getReader(),i=new Uint8Array(Math.min(1024,t)),a=Date.now()+5e3,c=0;try{for(;;){let l=await Js(a,()=>s.read());if(l.done)break;let u=c+l.value.byteLength;if(u>t)throw new L("request body too large",413);if(u>i.byteLength){let d=new Uint8Array(Math.min(t,Math.max(u,i.byteLength*2)));d.set(i.subarray(0,c)),i=d}i.set(l.value,c),c=u}}finally{s.cancel().catch(()=>{}),s.releaseLock()}if(c===0||n!==null&&c!==n)throw new L("invalid request body length",400);return JSON.parse(Ws.decode(i.subarray(0,c)))}o(ut,"readRequestJson");var dt=new S;dt.post("/",async e=>{let t=e.get("projectId"),r=e.get("body"),n=await e.env.API.fetch(`https://api/internal/revalidate/${t}`,{method:"POST",headers:{"content-type":"application/json","x-void-internal":r.aiToken},body:JSON.stringify({paths:r.paths,all:r.all})});return new Response(n.body,{status:n.status,headers:n.headers})});var k=new S;k.use("/*",async(e,t)=>{let r=e.env.PLATFORM_HEALTH_PROBE_TOKEN;if(!(r!==void 0&&r!==""&&e.req.path==="/health"&&e.req.header("X-Void-Platform-Probe")===r)&&(e.env.PLATFORM_TRAFFIC_STATE==="staging"||e.env.PLATFORM_TRAFFIC_STATE==="sandbox-drain"||e.env.PLATFORM_INSTALLATION_ID&&await e.env.ROUTING.get(Dr)===Lr))return e.json({error:"Platform disabled"},503);await t()});k.use("/*",$t({origin:"*",allowMethods:["POST","OPTIONS"],allowHeaders:["content-type","authorization"]}));k.get("/health",e=>e.json({ok:!0,bindings:{ai:!!e.env.AI,kv:!!e.env.ROUTING,jwt:!!e.env.JWT_SECRET,api:!!e.env.API,sendEmail:!!e.env.SEND_EMAIL,emailDomain:!!e.env.EMAIL_SENDER_DOMAIN}}));k.all("/*",async(e,t)=>{if(e.req.method!=="POST")return e.json({error:"method not allowed"},405);await t()});k.post("/email/verify-receipt",async e=>{let t;try{t=await ut(e.req.raw,2*1024)}catch{return e.json({valid:!1},400)}if(!t||typeof t!="object")return e.json({valid:!1},400);let r=t;if(typeof r.projectId!="string"||r.projectId.length>128||typeof r.deploymentId!="string"||r.deploymentId.length>128||typeof r.recipient!="string"||r.recipient.length>320||typeof r.receipt!="string"||r.receipt.length>1536)return e.json({valid:!1},400);if(!z(r.projectId))return e.json({valid:!1},403);let n=await st(e.env,r.projectId,e.req.header("x-void-internal")??"");if(n!=="ok")return e.json({valid:!1},n==="unavailable"?503:403);if(!e.env.EMAIL_SIGNING_SECRET)return e.json({valid:!1},503);let s=await pt(r.receipt,e.env.EMAIL_SIGNING_SECRET,{projectId:r.projectId,deploymentId:r.deploymentId,recipient:r.recipient});return e.json({valid:s!==null,receiptId:s?.receiptId})});k.post("/email/relay",e=>e.json({error:"not found"},404));k.post("/*",async(e,t)=>{let r=new URL(e.req.url),n=r.pathname,s=e.req.header("authorization"),i=s?.startsWith("Bearer ")?s.slice(7):"",a=i?await Qs(i,e.env.JWT_SECRET):null;if(s!==void 0&&!a)return e.json({error:"invalid or expired token",message:"This proxy credential is invalid or expired. Sign in to the connected platform again for remote development, or restart the build to obtain a fresh prerender token."},401);if(s===void 0&&r.hostname.includes("."))return e.json({error:"authorization required",message:"Send a Void platform token in the Authorization header."},401);let c;try{let u=n==="/email"||n.startsWith("/email/")?8388608:jr(n),d=await ut(e.req.raw,u);if(!j(d))return e.json({error:"invalid JSON body"},400);c=d}catch(u){return n!=="/email"&&!n.startsWith("/email/")&&u instanceof L?e.json({error:u.message},u.status):e.json({error:"invalid JSON body"},400)}e.set("body",c);let l;if(a){let u=b(c.projectId);if(!u)return e.json({error:"projectId required"},400);if(a.aud==="prerender"){if(!a.project||a.project!==u)return e.json({error:"forbidden",message:"This prerender token does not match the requested project. Restart the build with a prerender token issued for the selected project."},403);if(!await ur(e.env.API,e.env.JWT_SECRET,u,a.sub,{...a.build?{buildId:a.build}:{},...a.credential?{credentialId:a.credential}:{}}))return e.json({error:a.credential?"prerender token credential is no longer active":a.build?"prerender token build is no longer active":"prerender token authority is no longer active",message:a.credential?"The deploy credential used for prerendering is no longer authorized. Ask the project owner for an active deploy credential, then restart the build.":a.build?"This build is no longer authorized to prerender. Start a new build to obtain a fresh prerender token.":"This prerender token is no longer authorized. Confirm your project access with a project admin or owner, then restart the build to obtain a fresh token."},403)}else{let d=o(()=>lr(e.env.API,e.env.JWT_SECRET,u,a.sub,i,e.req.header("Cf-Access-Jwt-Assertion"),new URL(e.req.url).origin),"checkOwner");if(l=o(async()=>a.exp>Date.now()/1e3&&await d(),"revalidateHuman"),!await l())return e.json({error:"forbidden",message:"Remote access could not be authorized. Check the selected platform and project, then ask a project admin or owner to confirm your access. If your access is correct, retry shortly."},403)}e.set("projectId",u)}else{let u=b(c.projectId),d=b(c.aiToken);if(!u||!d)return e.json({error:"projectId and aiToken required"},400);if(!z(u))return e.json({error:"invalid project token"},403);let f=await st(e.env,u,d);if(f==="unavailable")return e.json({error:"project token state unavailable"},503);if(f==="invalid")return e.json({error:"invalid project token"},403);e.set("projectId",u)}await t(),l&&e.res.body&&(e.res.headers.get("content-type")?.includes("text/event-stream")||n.startsWith("/ai/")||n==="/r2/get")&&(e.res=new Response(xr(e.res.body,l,e.req.raw.signal),e.res))});k.post("/ai/*",async(e,t)=>{if(await e.env.ROUTING.get(`ai-block:${e.get("projectId")}`,{cacheTtl:60}))return Fe({code:"usage_limit",resource:"ai",reason:"monthly_quota",message:"AI usage limit exceeded"});await t()});k.post("/email/*",async(e,t)=>{if(!nr(e.env.PLATFORM_CAPABILITIES,"email"))return e.json({error:"platform capability unavailable",capability:"email",message:"This Void platform does not enable email."},501);await t()});k.route("/ai",Q);k.route("/d1",Te);k.route("/kv",ee);k.route("/r2",G);k.route("/revalidate",dt);k.route("/email",lt);var Nd={fetch:k.fetch},Hr=new TextEncoder,Ys=new TextDecoder,je,Ur;async function Xs(e){return je&&Ur===e||(je=await crypto.subtle.importKey("raw",Hr.encode(e),{name:"HMAC",hash:"SHA-256"},!1,["verify"]),Ur=e),je}o(Xs,"getVerifyKey");function $r(e){let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=atob(t);return Uint8Array.from(r,n=>n.charCodeAt(0))}o($r,"base64urlDecode");async function Qs(e,t){let r=e.split(".");if(r.length!==3)return null;let[n,s,i]=r;try{let a=await Xs(t),c=$r(i);if(!await crypto.subtle.verify("HMAC",a,c.buffer,Hr.encode(`${n}.${s}`)))return null;let u=JSON.parse(Ys.decode($r(s))),d=Math.floor(Date.now()/1e3);return u.exp<=d||u.aud!=="api"&&u.aud!=="prerender"?null:u}catch{return null}}o(Qs,"verifyJwt");export{Nd as default};
@@ -1,4 +1,4 @@
1
- //#region src/validate.ts
1
+ // src/validate.ts
2
2
  function isRecord(value) {
3
3
  return typeof value === "object" && value !== null && !Array.isArray(value);
4
4
  }
@@ -26,5 +26,4 @@ function isUsageProtocolVersion(value) {
26
26
  function isSourceRevision(value) {
27
27
  return value.length <= 200 && /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(value);
28
28
  }
29
- //#endregion
30
29
  export { isSourceRevision as a, requiredString as c, isSandboxDrainProtocol as i, isPrintableText as n, isUsageProtocolVersion as o, isRecord as r, record as s, assertRecord as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@void/platform",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Packaged runtime and installation contracts for self-hosted Void platforms.",
5
5
  "homepage": "https://void.cloud",
6
6
  "bugs": {
@@ -45,10 +45,10 @@
45
45
  "pathslash": "^0.1.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@types/node": "^26.6.5",
48
+ "@types/node": "^26.6.6",
49
49
  "typescript": "7.0.2",
50
- "vite-plus": "1.3.0",
51
- "wrangler": "^4.151.3"
50
+ "vite-plus": "1.4.0",
51
+ "wrangler": "^4.156.1"
52
52
  },
53
53
  "scripts": {
54
54
  "build": "vp pack && node scripts/build-runtime.mjs",