@bunny.net/edgescript-sdk
Version:
2 lines (1 loc) • 4.63 kB
JavaScript
var B=Object.defineProperty;var f=(e,n)=>{for(var r in n)B(e,r,{get:n[r],enumerable:!0})};var F={};f(F,{http:()=>L,ip:()=>S,socketAddr:()=>g,tcp:()=>k});var k={};f(k,{bind:()=>H,isTcpListener:()=>R,toString:()=>z,unstable_local_addr:()=>P,unstable_new:()=>b});var q=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"),y=()=>{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:q(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:q(e.platform),runtime:"node",runtime_version:e.version}:{_tag:"_Platform",version:"0.12.0",name:"Unknown",runtime:"unknown",runtime_version:"unknown"}};var g={};f(g,{InvalidAddr:()=>I,isV4:()=>h,v4:()=>s});var s={};f(s,{ip:()=>U,port:()=>C,tryFromString:()=>j});var S={};f(S,{toString:()=>x,tryParseFromString:()=>T});function x(e){return`${e[0]}.${e[1]}.${e[2]}.${e[3]}`}function T(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 C(e){return e.port}function U(e){return e.ip}function j(e){let n=e.split(":");if(n.length!==2)return new SyntaxError("Invalid SocketAddrV4 address");let r=T(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 h(e){return e._tag==="SocketAddrV4"}var M=Symbol("invalidAddr"),I=class extends Error{_guard=M;constructor(n){super(n),this.name="InvalidAddr"}toString(){return`${this.name}: ${this.message}`}};function R(e){return e instanceof Object&&e._tag==="TcpListener"}function P(e){return e.addr}function z(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 b(){switch(y().runtime){case"bunny":return{_tag:"TcpListener",addr:{_tag:"NoAddr"}};default:return{_tag:"TcpListener",addr:{_tag:"SocketAddrV4",port:8080,ip:[127,0,0,1]}}}}function H(e){return{_tag:"TcpListener",addr:e}}var L={};f(L,{serve:()=>D,servePullZone:()=>J});import*as E from"@hono/node-server";import{Hono as W}from"hono";function V(e,n){let r=P(e);if(!h(r))throw new Error("An issue happened with the addr.");let t=s.port(r),p=x(s.ip(r)),o=new W;return o.all("*",c=>n(c.req.raw)),E.serve({fetch:o.fetch,hostname:p,port:t}),{}}function Z(e){return e instanceof Response}function G(e){return e instanceof Request}function $(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 D(e,n){let r,t;if($(e)){let o=s.tryFromString(`${e.hostname}:${e.port}`);if(o instanceof Error)throw o;t=H(o),r=n}else R(e)?(r=n,t=e):(r=e,t=b());if(r===void 0)throw new Error("An issue happened.");switch(y().runtime){case"bunny":return Bunny.v1.serve(r),{};case"node":return V(t,r);case"deno":{let o=P(t);if(!h(o))throw new Error("An issue happened with the addr.");let c=s.port(o),d=x(s.ip(o));return Deno.serve({port:c,hostname:d},r),{}}case"unknown":return{}}}function J(e,n){let r,t={url:"https://bunny.net"};if(n&&(t=n),$(e)){let i=s.tryFromString(`${e.hostname}:${e.port}`);if(i instanceof Error)throw i;r=H(i)}else R(e)?r=e:(e&&(t=e),r=b());let p=[],o=[],c=y();switch(c.runtime){case"bunny":{Bunny.v1.registerMiddlewares({onOriginRequest:p,onOriginResponse:o});break}default:D(r,async N=>{let A=new URL(N.url),O=new URL(t.url);A.protocol=O.protocol,A.hostname=O.hostname,A.port=O.port;let _=new Request(A,N);for(let[v,w]of p.entries()){let u=await w({request:_});if(Z(u))return u;G(u)&&(_=u)}let a=await fetch(_),l=new Headers;for(let[v,w]of a.headers.entries())l.set(v,w);let m;switch(c.runtime){case"node":{if(l.get("content-type")==="text/html"&&a.body!==null){let v=await a.text();l.delete("content-encoding"),m=new Response(v,{headers:l})}else m=new Response(a.body,{...a,headers:l});break}default:m=new Response(a.body,{...a,headers:l})}for(let[v,w]of o.entries()){let u=await w({request:_,response:m});Z(u)&&(m=u)}return m})}let d={};return d.onOriginResponse=i=>(o.push(i),d),d.onOriginRequest=i=>(p.push(i),d),d}export{F as net};