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