@void/platform 0.26.0 → 0.26.1

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