Files
edgetunnel/dist/apps/node-vless/main.js
zizifn 8757f3e2bb Refactor deno (#107)
* refactor deno

* refactor deno

* add deno bunled

* add eamodio.gitlens

---------

Co-authored-by: zizifn3 <75520940+zizifn3@users.noreply.github.com>
2023-03-29 18:23:32 +08:00

2 lines
9.0 KiB
JavaScript

(()=>{"use strict";var e={873:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.serverIndexPage=t.index401=t.serverStaticFile=void 0;const o=r(561),n=r(411),s=r(864),a={".js":"application/javascript,charset=UTF-8",".html":"text/html,charset=UTF-8",".css":"text/css; charset=UTF-8"},i="dist/apps/cf-page/",c="dist/apps/node-vless/assets/401.html";let l=null;t.serverStaticFile=function(e,t){let r=new URL(e.url,`http://${e.headers.host}`).pathname;if(r=(0,n.join)(i,r),console.log("....",r),l=(0,n.resolve)(r),console.log(l),(0,o.existsSync)(l)){let e=(0,n.extname)(l);console.log("fileExt",e);let r=a[e];return t.writeHead(200,{"Content-Type":r,"Cache-Control":(0,s.cacheHeader)({public:!0,maxAge:"1year",staleWhileRevalidate:"1year"})}),(0,o.createReadStream)(l).pipe(t)}return t.writeHead(404),t.write("not found"),t.end(),t},t.index401=function(e,t){const r=(0,n.resolve)(c);(0,o.existsSync)(r)?(0,o.createReadStream)(r).pipe(t):(t.writeHead(401),t.write("UUID env not set"),t.end())},t.serverIndexPage=function(e,t,r){}},94:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processVlessHeader=t.closeWebSocket=t.makeReadableWebSocketStream=t.delay=void 0;var o=r(563);Object.defineProperty(t,"delay",{enumerable:!0,get:function(){return o.delay}}),Object.defineProperty(t,"makeReadableWebSocketStream",{enumerable:!0,get:function(){return o.makeReadableWebSocketStream}}),Object.defineProperty(t,"closeWebSocket",{enumerable:!0,get:function(){return o.closeWebSocket}}),Object.defineProperty(t,"processVlessHeader",{enumerable:!0,get:function(){return o.processVlessHeader}})},563:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.processVlessHeader=t.closeWebSocket=t.makeReadableWebSocketStream=t.delay=t.vlessJs=void 0;const o=r(752),n=r(828);function s(e){e.readyState===e.OPEN&&e.close()}t.vlessJs=function(){return"vless-js"},t.delay=function(e){return new Promise(((t,r)=>{setTimeout(t,e)}))},t.makeReadableWebSocketStream=function(e,t,r){let n=!1;return new ReadableStream({start(a){e.addEventListener("message",(e=>o.__awaiter(this,void 0,void 0,(function*(){if(n)return;const t=e.data;a.enqueue(t)})))),e.addEventListener("error",(e=>{r("socket has error"),n=!0,a.error(e)})),e.addEventListener("close",(()=>{try{if(r("webSocket is close"),n)return;a.close()}catch(c){r("websocketStream can't close DUE to ",c)}}));const{earlyData:i,error:c}=function(e){if(!e)return{error:null};try{e=e.replace(/-/g,"+").replace(/_/g,"/");const t=atob(e);return{earlyData:Uint8Array.from(t,(e=>e.charCodeAt(0))).buffer,error:null}}catch(c){return{error:c}}}(t);if(c)return r("earlyDataHeader has invaild base64"),void s(e);i&&a.enqueue(i)},pull(e){},cancel(t){r("websocketStream is cancel DUE to ",t),n||(n=!0,s(e))}})},t.closeWebSocket=s,t.processVlessHeader=function(e,t){if(e.byteLength<24)return{hasError:!0,message:"invalid data"};const r=new Uint8Array(e.slice(0,1));let o=!1,s=!1;if((0,n.stringify)(new Uint8Array(e.slice(1,17)))===t&&(o=!0),!o)return{hasError:!0,message:"invalid user"};const a=new Uint8Array(e.slice(17,18))[0],i=new Uint8Array(e.slice(18+a,18+a+1))[0];if(1===i);else{if(2!==i)return{hasError:!0,message:`command ${i} is not support, command 01-tcp,02-udp,03-mux`};s=!0}const c=18+a+1,l=e.slice(c,c+2),d=new DataView(l).getInt16(0);let u=c+2;const p=new Uint8Array(e.slice(u,u+1))[0];let f=0,m=u+1,h="";switch(p){case 1:f=4,h=new Uint8Array(e.slice(m,m+f)).join(".");break;case 2:f=new Uint8Array(e.slice(m,m+1))[0],m+=1,h=(new TextDecoder).decode(e.slice(m,m+f));break;case 3:f=16;const t=new DataView(e.slice(m,m+f)),r=[];for(let e=0;e<8;e++)r.push(t.getUint16(2*e).toString(16));h=r.join(":");break;default:console.log(`invild addressType is ${p}`)}return h?{hasError:!1,addressRemote:h,portRemote:d,rawDataIndex:m+f,vlessVersion:r,isUDP:s}:{hasError:!0,message:`addressValue is empty, addressType is ${p}`}}},864:e=>{e.exports=require("pretty-cache-header")},752:e=>{e.exports=require("tslib")},828:e=>{e.exports=require("uuid")},352:e=>{e.exports=require("ws")},685:e=>{e.exports=require("http")},215:e=>{e.exports=require("node:dgram")},604:e=>{e.exports=require("node:dns")},561:e=>{e.exports=require("node:fs")},503:e=>{e.exports=require("node:net")},411:e=>{e.exports=require("node:path")},477:e=>{e.exports=require("node:stream/web")},781:e=>{e.exports=require("stream")},310:e=>{e.exports=require("url")}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var s=t[o]={exports:{}};return e[o](s,s.exports,r),s.exports}var o={};(()=>{var e=o;Object.defineProperty(e,"__esModule",{value:!0});const t=r(752),n=r(685),s=r(310),a=r(352),i=r(873),c=r(828),l=r(561),d=r(604),u=r(215),p=r(94),f=r(503),m=r(781),h=r(477),b=process.env.PORT,v=process.env.UUID||"",w=process.env.DNSORDER||"verbatim";"ipv4first"===w&&(0,d.setDefaultResultOrder)(w);let y=(0,c.validate)(v);y||console.log("not set valid UUID");const S=(0,n.createServer)(((e,t)=>{var r;if(!y)return(0,i.index401)(e,t);const o=new URL(e.url,`http://${e.headers.host}`);if("GET"===e.method&&o.pathname.startsWith("/health"))return t.writeHead(200),t.write("health 200"),void t.end();if(o.pathname.includes(v)){const e="dist/apps/cf-page/index.html";return t.writeHead(200,{"Content-Type":"text/html,charset=UTF-8"}),(0,l.createReadStream)(e).pipe(t)}if("GET"===e.method&&o.pathname.startsWith("/assets"))return(0,i.serverStaticFile)(e,t);const n=(null===(r=(e.headers.authorization||"").split(" "))||void 0===r?void 0:r[1])||"",s=Buffer.from(n,"base64").toString("ascii");s&&s.includes(v)?(t.writeHead(302,{"content-type":"text/html; charset=utf-8",Location:`./${v}`}),t.end()):(t.writeHead(401,{"content-type":"text/html; charset=utf-8","WWW-Authenticate":"Basic"}),t.end())})),g=new a.WebSocketServer({noServer:!0});function x(e){try{e.close()}catch(t){console.log("error close udp",t)}}g.on("connection",(function(e,r){return t.__awaiter(this,void 0,void 0,(function*(){let o="",n="";try{const s=(e,t)=>{console.log(`[${o}:${n}] ${e}`,t||"")};let a,i=null,c=null;const l=r.headers["sec-websocket-protocol"],d=(0,p.makeReadableWebSocketStream)(e,l,s);let b=null;d.pipeTo(new h.WritableStream({write(e,r){return t.__awaiter(this,void 0,void 0,(function*(){if(Buffer.isBuffer(e)||(e=Buffer.from(e)),c){const t=c.writable.getWriter();return yield t.write(e.buffer.slice(e.byteOffset,e.byteOffset+e.length)),void t.releaseLock()}if(i)return void(yield function(e,r){return t.__awaiter(this,void 0,void 0,(function*(){return new Promise(((t,o)=>{e.write(r,(e=>{e?o(e):t("")}))}))}))}(i,e));const l=e.buffer.slice(e.byteOffset,e.byteOffset+e.length),{hasError:d,message:m,portRemote:w,addressRemote:y,rawDataIndex:S,vlessVersion:g,isUDP:k}=(0,p.processVlessHeader)(l,v);o=y||"",n=`${w}--${Math.random()} ${k?"udp ":"tcp "} `,d&&r.error(`[${o}:${n}] ${m} `),console.log(`[${o}:${n}] connecting`),b=new Uint8Array([g[0],0]);const U=l.slice(S);if(k){c=function(e,r){const o=(0,u.createSocket)("udp4"),n=new h.TransformStream({start(e){o.on("message",((t,r)=>{e.enqueue(Buffer.concat([new Uint8Array([0,r.size]),t]))})),o.on("error",(t=>{console.log("udpClient error event",t),e.error(t)}))},transform(n,s){return t.__awaiter(this,void 0,void 0,(function*(){for(let t=0;t<n.byteLength;){const a=n.slice(t,t+2),i=new DataView(a).getInt16(0),c=new Uint8Array(n.slice(t+2,t+2+i));t=t+2+i,yield new Promise(((t,n)=>{o.send(c,e,r,(e=>{e&&(console.log("udps send error",e),s.error(`Failed to send UDP packet !! ${e}`),x(o)),t(!0)}))}))}}))},flush(e){x(o),e.terminate()}});return n}(w,o);const e=c.writable.getWriter();e.write(U).catch((e=>console.log)),e.releaseLock(),a(c)}else i=yield function(e,r,o){return t.__awaiter(this,void 0,void 0,(function*(){return new Promise(((t,n)=>{const s=(0,f.connect)({port:e,host:r},(()=>{o("connected"),t(s)}));s.addListener("error",(()=>{n("remoteSocket has error")}))}))}))}(w,o,s),i.write(new Uint8Array(U)),a(i)}))},close(){console.log(`[${o}:${n}] readableWebSocketStream is close`)},abort(e){console.log(`[${o}:${n}] readableWebSocketStream is abort`,JSON.stringify(e))}})).catch((e=>{console.error(`[${o}:${n}] readableWebSocketStream pipeto has exception`,e.stack||e)})),yield new Promise((e=>a=e));let w=null==c?void 0:c.readable;i&&(w=m.Readable.toWeb(i)),yield w.pipeTo(new h.WritableStream({start(){e.readyState===e.OPEN&&e.send(b)},write(r,o){return t.__awaiter(this,void 0,void 0,(function*(){e.readyState===e.OPEN&&(yield function(e,r){return t.__awaiter(this,void 0,void 0,(function*(){return new Promise(((t,o)=>{e.send(r,(e=>{e?o(e):t("")}))}))}))}(e,r))}))},close(){console.log(`[${o}:${n}] remoteConnection!.readable is close`)},abort(t){(0,p.closeWebSocket)(e),console.error(`[${o}:${n}] remoteConnection!.readable abort`,t)}}))}catch(s){console.error(`[${o}:${n}] processWebSocket has exception `,s.stack||s),(0,p.closeWebSocket)(e)}}))})),S.on("upgrade",(function(e,t,r){const{pathname:o}=(0,s.parse)(e.url);g.handleUpgrade(e,t,r,(function(t){g.emit("connection",t,e)}))})),S.listen({port:b,host:"0.0.0.0"},(()=>{console.log(`server listen in http://127.0.0.1:${b}`)}))})();var n=exports;for(var s in o)n[s]=o[s];o.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
//# sourceMappingURL=main.js.map