@bunny.net/edgescript-sdk
Version:
2 lines (1 loc) • 4.4 kB
JavaScript
var F=Object.defineProperty;var l=(e,n)=>{for(var r in n)F(e,r,{get:n[r],enumerable:!0})};var D={};l(D,{http:()=>N,ip:()=>S,socketAddr:()=>v,tcp:()=>k});var k={};l(k,{bind:()=>b,isTcpListener:()=>R,toString:()=>M,unstable_local_addr:()=>L,unstable_new:()=>_});var E=e=>(e=e.toLowerCase(),e.includes("ios")?"iOS":e==="android"?"Android":e==="darwin"?"MacOS":e==="win32"?"Windows":e==="freebsd"?"FreeBSD":e==="openbsd"?"OpenBSD":e==="linux"?"Linux":e?`Other:${e}`:"Unknown"),g=()=>{if(typeof Bunny<"u")return{_tag:"_Platform",version:"0.12.0",name:"Unknown",runtime:"bunny",runtime_version:"unknown"};if(typeof Deno<"u"&&Deno.build!=null)return{_tag:"_Platform",version:"0.12.0",name:E(Deno.build.os),runtime:"deno",runtime_version:typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};let e=globalThis.process;return Object.prototype.toString.call(typeof e<"u"?e:0)==="[object process]"?{_tag:"_Platform",version:"0.12.0",name:E(e.platform),runtime:"node",runtime_version:e.version}:{_tag:"_Platform",version:"0.12.0",name:"Unknown",runtime:"unknown",runtime_version:"unknown"}};var v={};l(v,{InvalidAddr:()=>H,isV4:()=>T,v4:()=>s});var s={};l(s,{ip:()=>C,port:()=>B,tryFromString:()=>U});var S={};l(S,{toString:()=>A,tryParseFromString:()=>O});function A(e){return`${e[0]}.${e[1]}.${e[2]}.${e[3]}`}function O(e){let n=e.split(".").map(Number);return n.length!==4||n.some(r=>isNaN(r)||r<0||r>255)?new SyntaxError("Invalid IP address"):[n[0],n[1],n[2],n[3]]}function B(e){return e.port}function C(e){return e.ip}function U(e){let n=e.split(":");if(n.length!==2)return new SyntaxError("Invalid SocketAddrV4 address");let r=O(n[0]);if(r instanceof SyntaxError)return r;let t=Number(n[1]);return isNaN(t)||t<0||t>65535?new SyntaxError("Invalid Port"):{_tag:"SocketAddrV4",port:t,ip:r}}function T(e){return e._tag==="SocketAddrV4"}var j=Symbol("invalidAddr"),H=class extends Error{_guard=j;constructor(n){super(n),this.name="InvalidAddr"}toString(){return`${this.name}: ${this.message}`}};function R(e){return e instanceof Object&&e._tag==="TcpListener"}function L(e){return e.addr}function M(e){switch(e.addr._tag){case"SocketAddrV4":return`${s.ip(e.addr).join(".")}:${s.port(e.addr)}`;case"NoAddr":return"No addr associated to this listener. You should be running in a controlled environment."}}function _(){switch(g().runtime){case"bunny":return{_tag:"TcpListener",addr:{_tag:"NoAddr"}};default:return{_tag:"TcpListener",addr:{_tag:"SocketAddrV4",port:8080,ip:[127,0,0,1]}}}}function b(e){return{_tag:"TcpListener",addr:e}}var N={};l(N,{serve:()=>$,servePullZone:()=>Y});var z={get:()=>{}},Q=new Proxy({},z);function V(e){return e instanceof Response}function W(e){return e instanceof Request}function Z(e){if(typeof e=="object"&&e!==null){let n=e.port;return n!==void 0&&typeof n=="number"&&e.hostname!==void 0}return!1}function $(e,n){let r,t;if(Z(e)){let o=s.tryFromString(`${e.hostname}:${e.port}`);if(o instanceof Error)throw o;t=b(o),r=n}else R(e)?(r=n,t=e):(r=e,t=_());if(r===void 0)throw new Error("An issue happened.");switch(g().runtime){case"bunny":return Bunny.v1.serve(r),{};case"node":return(void 0)(t,r);case"deno":{let o=L(t);if(!T(o))throw new Error("An issue happened with the addr.");let w=s.port(o),d=A(s.ip(o));return Deno.serve({port:w,hostname:d},r),{}}case"unknown":return{}}}function Y(e,n){let r,t={url:"https://bunny.net"};if(n&&(t=n),Z(e)){let i=s.tryFromString(`${e.hostname}:${e.port}`);if(i instanceof Error)throw i;r=b(i)}else R(e)?r=e:(e&&(t=e),r=_());let y=[],o=[],w=g();switch(w.runtime){case"bunny":{Bunny.v1.registerMiddlewares({onOriginRequest:y,onOriginResponse:o});break}default:$(r,async q=>{let x=new URL(q.url),h=new URL(t.url);x.protocol=h.protocol,x.hostname=h.hostname,x.port=h.port;let P=new Request(x,q);for(let[m,f]of y.entries()){let u=await f({request:P});if(V(u))return u;W(u)&&(P=u)}let a=await fetch(P),p=new Headers;for(let[m,f]of a.headers.entries())p.set(m,f);let c;switch(w.runtime){case"node":{if(p.get("content-type")==="text/html"&&a.body!==null){let m=await a.text();p.delete("content-encoding"),c=new Response(m,{headers:p})}else c=new Response(a.body,{...a,headers:p});break}default:c=new Response(a.body,{...a,headers:p})}for(let[m,f]of o.entries()){let u=await f({request:P,response:c});V(u)&&(c=u)}return c})}let d={};return d.onOriginResponse=i=>(o.push(i),d),d.onOriginRequest=i=>(y.push(i),d),d}export{D as net};