From 83f8b830140018d9422ac10f520720aeda693ace Mon Sep 17 00:00:00 2001 From: 3Kmfi6HP <58669916+3Kmfi6HP@users.noreply.github.com> Date: Sun, 16 Jul 2023 04:50:52 +0700 Subject: [PATCH] add minify option --- minify/README.md | 1 + minify/_worker.js | 35 + minify/_worker.js.map | 8 + package-lock.json | 1673 +++++++++++++++++++++++++++++++++++++++++ package.json | 7 +- 5 files changed, 1721 insertions(+), 3 deletions(-) create mode 100644 minify/README.md create mode 100644 minify/_worker.js create mode 100644 minify/_worker.js.map create mode 100644 package-lock.json diff --git a/minify/README.md b/minify/README.md new file mode 100644 index 000000000..5474d5e92 --- /dev/null +++ b/minify/README.md @@ -0,0 +1 @@ +This folder contains the built output assets for the worker "cf-worker-ws-dev" generated at 2023-07-15T21:49:34.430Z. \ No newline at end of file diff --git a/minify/_worker.js b/minify/_worker.js new file mode 100644 index 000000000..12be964b5 --- /dev/null +++ b/minify/_worker.js @@ -0,0 +1,35 @@ +import{connect as V}from"cloudflare:sockets";var $="d342d11e-d424-4583-b36e-524ab1f0afa4",C=["cdn-all.xn--b6gac.eu.org","cdn.xn--b6gac.eu.org","cdn-b100.xn--b6gac.eu.org","edgetunnel.anycast.eu.org","cdn.anycast.eu.org"],T=C[Math.floor(Math.random()*C.length)],I="https://sky.rethinkdns.com/1:-Pf_____9_8A_AMAIgE8kMABVDDmKOHTAKg=",A="",k="",D="";if(!B($))throw new Error("uuid is not valid");var Z={async fetch(e,t,i){try{$=t.UUID||$,T=t.PROXYIP||T,I=t.DNS_RESOLVER_URL||I,A=t.NODE_ID||A,k=t.API_TOKEN||k,D=t.API_HOST||D;let n=e.headers.get("Upgrade");if(!n||n!=="websocket")switch(new URL(e.url).pathname){case"/":return new Response(JSON.stringify(e.cf),{status:200});case"/connect":let[l,r]=["cloudflare.com","80"];console.log(`Connecting to ${l}:${r}...`);try{let o=await V({hostname:l,port:parseInt(r,10)}),a=o.writable.getWriter();try{await a.write(new TextEncoder().encode(`GET / HTTP/1.1\r +Host: `+l+`\r +\r +`))}catch(u){return a.releaseLock(),await o.close(),new Response(u.message,{status:500})}a.releaseLock();let s=o.readable.getReader(),c;try{c=(await s.read()).value}catch(u){return await s.releaseLock(),await o.close(),new Response(u.message,{status:500})}return await s.releaseLock(),await o.close(),new Response(new TextDecoder().decode(c),{status:200})}catch(o){return new Response(o.message,{status:500})}case`/${$}`:{let o=q($,e.headers.get("Host"));return new Response(`${o}`,{status:200,headers:{"Content-Type":"text/plain;charset=utf-8"}})}default:return new Response("Not found",{status:404})}else return await M(e)}catch(n){let d=n;return new Response(d.toString())}}};async function M(e){let t=new WebSocketPair,[i,n]=Object.values(t);n.accept();let d="",l="",r=(w,g)=>{console.log(`[${d}:${l}] ${w}`,g||"")},o=e.headers.get("sec-websocket-protocol")||"",a=F(n,o,r),s={value:null},c=null,u=!1;return a.pipeTo(new WritableStream({async write(w,g){if(u&&c)return c(w);if(s.value){let E=s.value.writable.getWriter();await E.write(w),E.releaseLock();return}let{hasError:U,message:P,portRemote:h=443,addressRemote:y="",rawDataIndex:f,vlessVersion:m=new Uint8Array([0,0]),isUDP:b}=await G(w,$);if(d=y,l=`${h}--${Math.random()} ${b?"udp ":"tcp "} `,U)throw new Error(P);if(b)if(h===53)u=!0;else throw new Error("UDP proxy only enable for DNS which is port 53");let R=new Uint8Array([m[0],0]),S=w.slice(f);if(u){let{write:E}=await X(n,R,r);c=E,c(S);return}z(s,y,h,S,n,R,r)},close(){r("readableWebSocketStream is close")},abort(w){r("readableWebSocketStream is abort",JSON.stringify(w))}})).catch(w=>{r("readableWebSocketStream pipeTo error",w)}),new Response(null,{status:101,webSocket:i})}var L=null,W=null;async function H(){let e={method:"GET",redirect:"follow"};try{let t=await fetch(`https://${D}/api/v1/server/UniProxy/user?node_id=${A}&node_type=v2ray&token=${k}`,e);if(!t.ok)return console.error("Error: Network response was not ok"),null;let i=await t.json();return L=i,W&&clearTimeout(W),W=setTimeout(()=>H(),3e5),i}catch(t){return console.error("Error:",t),null}}async function j(){return L||await H()}async function v(e){if(!A||!k||!D)return!1;try{let t=await j();return t?t.users.some(n=>n.uuid===e):!1}catch(t){return console.error("Error:",t),!1}}async function z(e,t,i,n,d,l,r){async function o(c,u){let w=V({hostname:c,port:u});e.value=w,r(`connected to ${c}:${u}`);let g=w.writable.getWriter();return await g.write(n),g.releaseLock(),w}async function a(){let c=await o(T||t,i);c.closed.catch(u=>{console.log("retry tcpSocket closed error",u)}).finally(()=>{x(d)}),O(c,d,l,null,r)}let s=await o(t,i);O(s,d,l,a,r)}function F(e,t,i){let n=!1;return new ReadableStream({start(l){e.addEventListener("message",a=>{if(n)return;let s=a.data;l.enqueue(s)}),e.addEventListener("close",()=>{x(e),!n&&l.close()}),e.addEventListener("error",a=>{i("webSocketServer has error"),l.error(a)});let{earlyData:r,error:o}=K(t);o?l.error(o):r&&l.enqueue(r)},pull(l){},cancel(l){n||(i(`ReadableStream was canceled, due to ${l}`),n=!0,x(e))}})}async function G(e,t){if(e.byteLength<24)return{hasError:!0,message:"invalid data"};let i=new Uint8Array(e.slice(0,1)),n=!1,d=!1,l=new Uint8Array(e.slice(1,17)),r=Q(l),o=t.includes(",")?t.split(","):[t],a=await v(r);if(n=o.some(b=>a||r===b.trim()),console.log(`checkUuidInApi: ${await v(r)}, userID: ${r}`),!n)return{hasError:!0,message:"invalid user"};let s=new Uint8Array(e.slice(17,18))[0],c=new Uint8Array(e.slice(18+s,18+s+1))[0];if(c!==1)if(c===2)d=!0;else return{hasError:!0,message:`command ${c} is not support, command 01-tcp,02-udp,03-mux`};let u=18+s+1,w=e.slice(u,u+2),g=new DataView(w).getUint16(0),U=u+2,h=new Uint8Array(e.slice(U,U+1))[0],y=0,f=U+1,m="";switch(h){case 1:y=4,m=new Uint8Array(e.slice(f,f+y)).join(".");break;case 2:y=new Uint8Array(e.slice(f,f+1))[0],f+=1,m=new TextDecoder().decode(e.slice(f,f+y));break;case 3:y=16;let b=new DataView(e.slice(f,f+y)),R=[];for(let S=0;S<8;S++)R.push(b.getUint16(S*2).toString(16));m=R.join(":");break;default:return{hasError:!0,message:`invild addressType is ${h}`}}return m?{hasError:!1,addressRemote:m,addressType:h,portRemote:g,rawDataIndex:f+y,vlessVersion:i,isUDP:d}:{hasError:!0,message:`addressValue is empty, addressType is ${h}`}}async function O(e,t,i,n,d){let l=0,r=[],o=i,a=!1;await e.readable.pipeTo(new WritableStream({start(){},async write(s,c){a=!0,t.readyState!==_&&c.error("webSocket.readyState is not open, maybe close"),o?(t.send(await new Blob([o,s]).arrayBuffer()),o=null):t.send(s)},close(){d(`remoteConnection!.readable is close with hasIncomingData is ${a}`)},abort(s){console.error("remoteConnection!.readable abort",s)}})).catch(s=>{console.error("remoteSocketToWS has exception ",s.stack||s),x(t)}),a===!1&&n&&(d("retry"),n())}function K(e){if(!e)return{error:null};try{e=e.replace(/-/g,"+").replace(/_/g,"/");let t=atob(e);return{earlyData:Uint8Array.from(t,n=>n.charCodeAt(0)).buffer,error:null}}catch(t){return{error:t}}}function B(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}var _=1,Y=2;function x(e){try{(e.readyState===_||e.readyState===Y)&&e.close()}catch(t){console.error("safeCloseWebSocket error",t)}}var p=[];for(let e=0;e<256;++e)p.push((e+256).toString(16).slice(1));function J(e,t=0){return(p[e[t+0]]+p[e[t+1]]+p[e[t+2]]+p[e[t+3]]+"-"+p[e[t+4]]+p[e[t+5]]+"-"+p[e[t+6]]+p[e[t+7]]+"-"+p[e[t+8]]+p[e[t+9]]+"-"+p[e[t+10]]+p[e[t+11]]+p[e[t+12]]+p[e[t+13]]+p[e[t+14]]+p[e[t+15]]).toLowerCase()}function Q(e,t=0){let i=J(e,t);if(!B(i))throw TypeError("Stringified UUID is invalid");return i}async function X(e,t,i){let n=!1,d=new TransformStream({start(r){},transform(r,o){for(let a=0;a>8&255,s&255]);e.readyState===_&&(i(`doh success and dns message length is ${s}`),n?e.send(await new Blob([c,a]).arrayBuffer()):(e.send(await new Blob([t,c,a]).arrayBuffer()),n=!0))}})).catch(r=>{i("dns udp has error"+r)});let l=d.writable.getWriter();return{write(r){l.write(r)}}}function q(e,t){let i=`vless://${e}@${t}:443?encryption=none&security=tls&sni=${t}&fp=randomized&type=ws&host=${t}&path=%2F%3Fed%3D2048#${t}`,n=`vless://${e}@${T}:443?encryption=none&security=tls&sni=${t}&fp=randomized&type=ws&host=${t}&path=%2F%3Fed%3D2048#${t}`;return` +################################################################ +v2ray default ip +--------------------------------------------------------------- +${i} +--------------------------------------------------------------- +################################################################ +v2ray with best ip +--------------------------------------------------------------- +${n} +--------------------------------------------------------------- +################################################################ +clash-meta +--------------------------------------------------------------- +- type: vless + name: ${t} + server: ${t} + port: 443 + uuid: ${e} + network: ws + tls: true + udp: false + sni: ${t} + client-fingerprint: chrome + ws-opts: + path: "/?ed=2048" + headers: + host: ${t} +--------------------------------------------------------------- +################################################################ +`}export{Z as default}; +//# sourceMappingURL=_worker.js.map diff --git a/minify/_worker.js.map b/minify/_worker.js.map new file mode 100644 index 000000000..d2734686c --- /dev/null +++ b/minify/_worker.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["../_worker.js"], + "sourceRoot": "minify", + "sourcesContent": ["// version base on commit 43fad05dcdae3b723c53c226f8181fc5bd47223e, time is 2023-06-22 15:20:02 UTC.\r\n// @ts-ignore\r\nimport { connect } from 'cloudflare:sockets';\r\n\r\n// How to generate your own UUID:\r\n// [Windows] Press \"Win + R\", input cmd and run: Powershell -NoExit -Command \"[guid]::NewGuid()\"\r\nlet userID = 'd342d11e-d424-4583-b36e-524ab1f0afa4';\r\n\r\nconst proxyIPs = ['cdn-all.xn--b6gac.eu.org', 'cdn.xn--b6gac.eu.org', 'cdn-b100.xn--b6gac.eu.org', 'edgetunnel.anycast.eu.org', 'cdn.anycast.eu.org'];\r\nlet proxyIP = proxyIPs[Math.floor(Math.random() * proxyIPs.length)];\r\n\r\nlet dohURL = 'https://sky.rethinkdns.com/1:-Pf_____9_8A_AMAIgE8kMABVDDmKOHTAKg='; // https://cloudflare-dns.com/dns-query or https://dns.google/dns-query\r\n\r\n// v2board api environment variables\r\nlet nodeId = ''; // 1\r\n\r\nlet apiToken = ''; //abcdefghijklmnopqrstuvwxyz123456\r\n\r\nlet apiHost = ''; // api.v2board.com\r\n\r\nif (!isValidUUID(userID)) {\r\n\tthrow new Error('uuid is not valid');\r\n}\r\n\r\nexport default {\r\n\t/**\r\n\t * @param {import(\"@cloudflare/workers-types\").Request} request\r\n\t * @param {{UUID: string, PROXYIP: string, DNS_RESOLVER_URL: string, NODE_ID: int, API_HOST: string, API_TOKEN: string}} env\r\n\t * @param {import(\"@cloudflare/workers-types\").ExecutionContext} ctx\r\n\t * @returns {Promise}\r\n\t */\r\n\tasync fetch(request, env, ctx) {\r\n\t\ttry {\r\n\t\t\tuserID = env.UUID || userID;\r\n\t\t\tproxyIP = env.PROXYIP || proxyIP;\r\n\t\t\tdohURL = env.DNS_RESOLVER_URL || dohURL;\r\n\t\t\tnodeId = env.NODE_ID || nodeId;\r\n\t\t\tapiToken = env.API_TOKEN || apiToken;\r\n\t\t\tapiHost = env.API_HOST || apiHost;\r\n\t\t\tconst upgradeHeader = request.headers.get('Upgrade');\r\n\t\t\tif (!upgradeHeader || upgradeHeader !== 'websocket') {\r\n\t\t\t\tconst url = new URL(request.url);\r\n\t\t\t\tswitch (url.pathname) {\r\n\t\t\t\t\tcase '/':\r\n\t\t\t\t\t\treturn new Response(JSON.stringify(request.cf), { status: 200 });\r\n\t\t\t\t\tcase '/connect': // for test connect to cf socket\r\n\t\t\t\t\t\tconst [hostname, port] = ['cloudflare.com', '80'];\r\n\t\t\t\t\t\tconsole.log(`Connecting to ${hostname}:${port}...`);\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst socket = await connect({\r\n\t\t\t\t\t\t\t\thostname: hostname,\r\n\t\t\t\t\t\t\t\tport: parseInt(port, 10),\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tconst writer = socket.writable.getWriter();\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tawait writer.write(new TextEncoder().encode('GET / HTTP/1.1\\r\\nHost: ' + hostname + '\\r\\n\\r\\n'));\r\n\t\t\t\t\t\t\t} catch (writeError) {\r\n\t\t\t\t\t\t\t\twriter.releaseLock();\r\n\t\t\t\t\t\t\t\tawait socket.close();\r\n\t\t\t\t\t\t\t\treturn new Response(writeError.message, { status: 500 });\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\twriter.releaseLock();\r\n\r\n\t\t\t\t\t\t\tconst reader = socket.readable.getReader();\r\n\t\t\t\t\t\t\tlet value;\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tconst result = await reader.read();\r\n\t\t\t\t\t\t\t\tvalue = result.value;\r\n\t\t\t\t\t\t\t} catch (readError) {\r\n\t\t\t\t\t\t\t\tawait reader.releaseLock();\r\n\t\t\t\t\t\t\t\tawait socket.close();\r\n\t\t\t\t\t\t\t\treturn new Response(readError.message, { status: 500 });\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tawait reader.releaseLock();\r\n\t\t\t\t\t\t\tawait socket.close();\r\n\r\n\t\t\t\t\t\t\treturn new Response(new TextDecoder().decode(value), { status: 200 });\r\n\t\t\t\t\t\t} catch (connectError) {\r\n\t\t\t\t\t\t\treturn new Response(connectError.message, { status: 500 });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\tcase `/${userID}`: {\r\n\t\t\t\t\t\tconst vlessConfig = getVLESSConfig(userID, request.headers.get('Host'));\r\n\t\t\t\t\t\treturn new Response(`${vlessConfig}`, {\r\n\t\t\t\t\t\t\tstatus: 200,\r\n\t\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t\t\"Content-Type\": \"text/plain;charset=utf-8\",\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn new Response('Not found', { status: 404 });\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\treturn await vlessOverWSHandler(request);\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\t/** @type {Error} */ let e = err;\r\n\t\t\treturn new Response(e.toString());\r\n\t\t}\r\n\t},\r\n};\r\n\r\n\r\n\r\n\r\n/**\r\n * \r\n * @param {import(\"@cloudflare/workers-types\").Request} request\r\n */\r\nasync function vlessOverWSHandler(request) {\r\n\r\n\t/** @type {import(\"@cloudflare/workers-types\").WebSocket[]} */\r\n\t// @ts-ignore\r\n\tconst webSocketPair = new WebSocketPair();\r\n\tconst [client, webSocket] = Object.values(webSocketPair);\r\n\r\n\twebSocket.accept();\r\n\r\n\tlet address = '';\r\n\tlet portWithRandomLog = '';\r\n\tconst log = (/** @type {string} */ info, /** @type {string | undefined} */ event) => {\r\n\t\tconsole.log(`[${address}:${portWithRandomLog}] ${info}`, event || '');\r\n\t};\r\n\tconst earlyDataHeader = request.headers.get('sec-websocket-protocol') || '';\r\n\r\n\tconst readableWebSocketStream = makeReadableWebSocketStream(webSocket, earlyDataHeader, log);\r\n\r\n\t/** @type {{ value: import(\"@cloudflare/workers-types\").Socket | null}}*/\r\n\tlet remoteSocketWapper = {\r\n\t\tvalue: null,\r\n\t};\r\n\tlet udpStreamWrite = null;\r\n\tlet isDns = false;\r\n\r\n\t// ws --> remote\r\n\treadableWebSocketStream.pipeTo(new WritableStream({\r\n\t\tasync write(chunk, controller) {\r\n\t\t\tif (isDns && udpStreamWrite) {\r\n\t\t\t\treturn udpStreamWrite(chunk);\r\n\t\t\t}\r\n\t\t\tif (remoteSocketWapper.value) {\r\n\t\t\t\tconst writer = remoteSocketWapper.value.writable.getWriter()\r\n\t\t\t\tawait writer.write(chunk);\r\n\t\t\t\twriter.releaseLock();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst {\r\n\t\t\t\thasError,\r\n\t\t\t\tmessage,\r\n\t\t\t\tportRemote = 443,\r\n\t\t\t\taddressRemote = '',\r\n\t\t\t\trawDataIndex,\r\n\t\t\t\tvlessVersion = new Uint8Array([0, 0]),\r\n\t\t\t\tisUDP,\r\n\t\t\t} = await processVlessHeader(chunk, userID);\r\n\t\t\taddress = addressRemote;\r\n\t\t\tportWithRandomLog = `${portRemote}--${Math.random()} ${isUDP ? 'udp ' : 'tcp '\r\n\t\t\t\t} `;\r\n\t\t\tif (hasError) {\r\n\t\t\t\t// controller.error(message);\r\n\t\t\t\tthrow new Error(message); // cf seems has bug, controller.error will not end stream\r\n\t\t\t\t// webSocket.close(1000, message);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// if UDP but port not DNS port, close it\r\n\t\t\tif (isUDP) {\r\n\t\t\t\tif (portRemote === 53) {\r\n\t\t\t\t\tisDns = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// controller.error('UDP proxy only enable for DNS which is port 53');\r\n\t\t\t\t\tthrow new Error('UDP proxy only enable for DNS which is port 53'); // cf seems has bug, controller.error will not end stream\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// [\"version\", \"\u9644\u52A0\u4FE1\u606F\u957F\u5EA6 N\"]\r\n\t\t\tconst vlessResponseHeader = new Uint8Array([vlessVersion[0], 0]);\r\n\t\t\tconst rawClientData = chunk.slice(rawDataIndex);\r\n\r\n\t\t\t// TODO: support udp here when cf runtime has udp support\r\n\t\t\tif (isDns) {\r\n\t\t\t\tconst { write } = await handleUDPOutBound(webSocket, vlessResponseHeader, log);\r\n\t\t\t\tudpStreamWrite = write;\r\n\t\t\t\tudpStreamWrite(rawClientData);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\thandleTCPOutBound(remoteSocketWapper, addressRemote, portRemote, rawClientData, webSocket, vlessResponseHeader, log);\r\n\t\t},\r\n\t\tclose() {\r\n\t\t\tlog(`readableWebSocketStream is close`);\r\n\t\t},\r\n\t\tabort(reason) {\r\n\t\t\tlog(`readableWebSocketStream is abort`, JSON.stringify(reason));\r\n\t\t},\r\n\t})).catch((err) => {\r\n\t\tlog('readableWebSocketStream pipeTo error', err);\r\n\t});\r\n\r\n\treturn new Response(null, {\r\n\t\tstatus: 101,\r\n\t\t// @ts-ignore\r\n\t\twebSocket: client,\r\n\t});\r\n}\r\n\r\nlet apiResponseCache = null;\r\nlet cacheTimeout = null;\r\nasync function fetchApiResponse() {\r\n\tconst requestOptions = {\r\n\t\tmethod: 'GET',\r\n\t\tredirect: 'follow'\r\n\t};\r\n\r\n\ttry {\r\n\t\tconst response = await fetch(`https://${apiHost}/api/v1/server/UniProxy/user?node_id=${nodeId}&node_type=v2ray&token=${apiToken}`, requestOptions);\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tconsole.error('Error: Network response was not ok');\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst apiResponse = await response.json();\r\n\t\tapiResponseCache = apiResponse;\r\n\r\n\t\t// Refresh the cache every 5 minutes (300000 milliseconds)\r\n\t\tif (cacheTimeout) {\r\n\t\t\tclearTimeout(cacheTimeout);\r\n\t\t}\r\n\t\tcacheTimeout = setTimeout(() => fetchApiResponse(), 300000);\r\n\r\n\t\treturn apiResponse;\r\n\t} catch (error) {\r\n\t\tconsole.error('Error:', error);\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nasync function getApiResponse() {\r\n\tif (!apiResponseCache) {\r\n\t\treturn await fetchApiResponse();\r\n\t}\r\n\treturn apiResponseCache;\r\n}\r\n\r\nasync function checkUuidInApiResponse(targetUuid) {\r\n\t// Check if any of the environment variables are empty\r\n\tif (!nodeId || !apiToken || !apiHost) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\ttry {\r\n\t\tconst apiResponse = await getApiResponse();\r\n\t\tif (!apiResponse) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tconst isUuidInResponse = apiResponse.users.some(user => user.uuid === targetUuid);\r\n\t\treturn isUuidInResponse;\r\n\t} catch (error) {\r\n\t\tconsole.error('Error:', error);\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\n// Usage example:\r\n// const targetUuid = \"65590e04-a94c-4c59-a1f2-571bce925aad\";\r\n// checkUuidInApiResponse(targetUuid).then(result => console.log(result));\r\n\r\n/**\r\n * Handles outbound TCP connections.\r\n *\r\n * @param {any} remoteSocket \r\n * @param {string} addressRemote The remote address to connect to.\r\n * @param {number} portRemote The remote port to connect to.\r\n * @param {Uint8Array} rawClientData The raw client data to write.\r\n * @param {import(\"@cloudflare/workers-types\").WebSocket} webSocket The WebSocket to pass the remote socket to.\r\n * @param {Uint8Array} vlessResponseHeader The VLESS response header.\r\n * @param {function} log The logging function.\r\n * @returns {Promise} The remote socket.\r\n */\r\nasync function handleTCPOutBound(remoteSocket, addressRemote, portRemote, rawClientData, webSocket, vlessResponseHeader, log,) {\r\n\tasync function connectAndWrite(address, port) {\r\n\t\t/** @type {import(\"@cloudflare/workers-types\").Socket} */\r\n\t\tconst tcpSocket = connect({\r\n\t\t\thostname: address,\r\n\t\t\tport: port,\r\n\t\t});\r\n\t\tremoteSocket.value = tcpSocket;\r\n\t\tlog(`connected to ${address}:${port}`);\r\n\t\tconst writer = tcpSocket.writable.getWriter();\r\n\t\tawait writer.write(rawClientData); // first write, nomal is tls client hello\r\n\t\twriter.releaseLock();\r\n\t\treturn tcpSocket;\r\n\t}\r\n\r\n\t// if the cf connect tcp socket have no incoming data, we retry to redirect ip\r\n\tasync function retry() {\r\n\t\tconst tcpSocket = await connectAndWrite(proxyIP || addressRemote, portRemote)\r\n\t\t// no matter retry success or not, close websocket\r\n\t\ttcpSocket.closed.catch(error => {\r\n\t\t\tconsole.log('retry tcpSocket closed error', error);\r\n\t\t}).finally(() => {\r\n\t\t\tsafeCloseWebSocket(webSocket);\r\n\t\t})\r\n\t\tremoteSocketToWS(tcpSocket, webSocket, vlessResponseHeader, null, log);\r\n\t}\r\n\r\n\tconst tcpSocket = await connectAndWrite(addressRemote, portRemote);\r\n\r\n\t// when remoteSocket is ready, pass to websocket\r\n\t// remote--> ws\r\n\tremoteSocketToWS(tcpSocket, webSocket, vlessResponseHeader, retry, log);\r\n}\r\n\r\n/**\r\n * \r\n * @param {import(\"@cloudflare/workers-types\").WebSocket} webSocketServer\r\n * @param {string} earlyDataHeader for ws 0rtt\r\n * @param {(info: string)=> void} log for ws 0rtt\r\n */\r\nfunction makeReadableWebSocketStream(webSocketServer, earlyDataHeader, log) {\r\n\tlet readableStreamCancel = false;\r\n\tconst stream = new ReadableStream({\r\n\t\tstart(controller) {\r\n\t\t\twebSocketServer.addEventListener('message', (event) => {\r\n\t\t\t\tif (readableStreamCancel) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst message = event.data;\r\n\t\t\t\tcontroller.enqueue(message);\r\n\t\t\t});\r\n\r\n\t\t\t// The event means that the client closed the client -> server stream.\r\n\t\t\t// However, the server -> client stream is still open until you call close() on the server side.\r\n\t\t\t// The WebSocket protocol says that a separate close message must be sent in each direction to fully close the socket.\r\n\t\t\twebSocketServer.addEventListener('close', () => {\r\n\t\t\t\t// client send close, need close server\r\n\t\t\t\t// if stream is cancel, skip controller.close\r\n\t\t\t\tsafeCloseWebSocket(webSocketServer);\r\n\t\t\t\tif (readableStreamCancel) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcontroller.close();\r\n\t\t\t}\r\n\t\t\t);\r\n\t\t\twebSocketServer.addEventListener('error', (err) => {\r\n\t\t\t\tlog('webSocketServer has error');\r\n\t\t\t\tcontroller.error(err);\r\n\t\t\t}\r\n\t\t\t);\r\n\t\t\t// for ws 0rtt\r\n\t\t\tconst { earlyData, error } = base64ToArrayBuffer(earlyDataHeader);\r\n\t\t\tif (error) {\r\n\t\t\t\tcontroller.error(error);\r\n\t\t\t} else if (earlyData) {\r\n\t\t\t\tcontroller.enqueue(earlyData);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tpull(controller) {\r\n\t\t\t// if ws can stop read if stream is full, we can implement backpressure\r\n\t\t\t// https://streams.spec.whatwg.org/#example-rs-push-backpressure\r\n\t\t},\r\n\t\tcancel(reason) {\r\n\t\t\t// 1. pipe WritableStream has error, this cancel will called, so ws handle server close into here\r\n\t\t\t// 2. if readableStream is cancel, all controller.close/enqueue need skip,\r\n\t\t\t// 3. but from testing controller.error still work even if readableStream is cancel\r\n\t\t\tif (readableStreamCancel) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlog(`ReadableStream was canceled, due to ${reason}`)\r\n\t\t\treadableStreamCancel = true;\r\n\t\t\tsafeCloseWebSocket(webSocketServer);\r\n\t\t}\r\n\t});\r\n\r\n\treturn stream;\r\n\r\n}\r\n\r\n// https://xtls.github.io/development/protocols/vless.html\r\n// https://github.com/zizifn/excalidraw-backup/blob/main/v2ray-protocol.excalidraw\r\n\r\n/**\r\n * \r\n * @param { ArrayBuffer} vlessBuffer \r\n * @param {string} userID \r\n * @returns \r\n */\r\nasync function processVlessHeader(\r\n\tvlessBuffer,\r\n\tuserID\r\n) {\r\n\tif (vlessBuffer.byteLength < 24) {\r\n\t\treturn {\r\n\t\t\thasError: true,\r\n\t\t\tmessage: 'invalid data',\r\n\t\t};\r\n\t}\r\n\tconst version = new Uint8Array(vlessBuffer.slice(0, 1));\r\n\tlet isValidUser = false;\r\n\tlet isUDP = false;\r\n\tconst slicedBuffer = new Uint8Array(vlessBuffer.slice(1, 17));\r\n\tconst slicedBufferString = stringify(slicedBuffer);\r\n\r\n\tconst uuids = userID.includes(',') ? userID.split(\",\") : [userID];\r\n\r\n\tconst checkUuidInApi = await checkUuidInApiResponse(slicedBufferString);\r\n\tisValidUser = uuids.some(userUuid => checkUuidInApi || slicedBufferString === userUuid.trim());\r\n\r\n\tconsole.log(`checkUuidInApi: ${await checkUuidInApiResponse(slicedBufferString)}, userID: ${slicedBufferString}`);\r\n\r\n\tif (!isValidUser) {\r\n\t\treturn {\r\n\t\t\thasError: true,\r\n\t\t\tmessage: 'invalid user',\r\n\t\t};\r\n\t}\r\n\r\n\tconst optLength = new Uint8Array(vlessBuffer.slice(17, 18))[0];\r\n\t//skip opt for now\r\n\r\n\tconst command = new Uint8Array(\r\n\t\tvlessBuffer.slice(18 + optLength, 18 + optLength + 1)\r\n\t)[0];\r\n\r\n\t// 0x01 TCP\r\n\t// 0x02 UDP\r\n\t// 0x03 MUX\r\n\tif (command === 1) {\r\n\t} else if (command === 2) {\r\n\t\tisUDP = true;\r\n\t} else {\r\n\t\treturn {\r\n\t\t\thasError: true,\r\n\t\t\tmessage: `command ${command} is not support, command 01-tcp,02-udp,03-mux`,\r\n\t\t};\r\n\t}\r\n\tconst portIndex = 18 + optLength + 1;\r\n\tconst portBuffer = vlessBuffer.slice(portIndex, portIndex + 2);\r\n\t// port is big-Endian in raw data etc 80 == 0x005d\r\n\tconst portRemote = new DataView(portBuffer).getUint16(0);\r\n\r\n\tlet addressIndex = portIndex + 2;\r\n\tconst addressBuffer = new Uint8Array(\r\n\t\tvlessBuffer.slice(addressIndex, addressIndex + 1)\r\n\t);\r\n\r\n\t// 1--> ipv4 addressLength =4\r\n\t// 2--> domain name addressLength=addressBuffer[1]\r\n\t// 3--> ipv6 addressLength =16\r\n\tconst addressType = addressBuffer[0];\r\n\tlet addressLength = 0;\r\n\tlet addressValueIndex = addressIndex + 1;\r\n\tlet addressValue = '';\r\n\tswitch (addressType) {\r\n\t\tcase 1:\r\n\t\t\taddressLength = 4;\r\n\t\t\taddressValue = new Uint8Array(\r\n\t\t\t\tvlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength)\r\n\t\t\t).join('.');\r\n\t\t\tbreak;\r\n\t\tcase 2:\r\n\t\t\taddressLength = new Uint8Array(\r\n\t\t\t\tvlessBuffer.slice(addressValueIndex, addressValueIndex + 1)\r\n\t\t\t)[0];\r\n\t\t\taddressValueIndex += 1;\r\n\t\t\taddressValue = new TextDecoder().decode(\r\n\t\t\t\tvlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength)\r\n\t\t\t);\r\n\t\t\tbreak;\r\n\t\tcase 3:\r\n\t\t\taddressLength = 16;\r\n\t\t\tconst dataView = new DataView(\r\n\t\t\t\tvlessBuffer.slice(addressValueIndex, addressValueIndex + addressLength)\r\n\t\t\t);\r\n\t\t\t// 2001:0db8:85a3:0000:0000:8a2e:0370:7334\r\n\t\t\tconst ipv6 = [];\r\n\t\t\tfor (let i = 0; i < 8; i++) {\r\n\t\t\t\tipv6.push(dataView.getUint16(i * 2).toString(16));\r\n\t\t\t}\r\n\t\t\taddressValue = ipv6.join(':');\r\n\t\t\t// seems no need add [] for ipv6\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\treturn {\r\n\t\t\t\thasError: true,\r\n\t\t\t\tmessage: `invild addressType is ${addressType}`,\r\n\t\t\t};\r\n\t}\r\n\tif (!addressValue) {\r\n\t\treturn {\r\n\t\t\thasError: true,\r\n\t\t\tmessage: `addressValue is empty, addressType is ${addressType}`,\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\thasError: false,\r\n\t\taddressRemote: addressValue,\r\n\t\taddressType,\r\n\t\tportRemote,\r\n\t\trawDataIndex: addressValueIndex + addressLength,\r\n\t\tvlessVersion: version,\r\n\t\tisUDP,\r\n\t};\r\n}\r\n\r\n\r\n/**\r\n * \r\n * @param {import(\"@cloudflare/workers-types\").Socket} remoteSocket \r\n * @param {import(\"@cloudflare/workers-types\").WebSocket} webSocket \r\n * @param {ArrayBuffer} vlessResponseHeader \r\n * @param {(() => Promise) | null} retry\r\n * @param {*} log \r\n */\r\nasync function remoteSocketToWS(remoteSocket, webSocket, vlessResponseHeader, retry, log) {\r\n\t// remote--> ws\r\n\tlet remoteChunkCount = 0;\r\n\tlet chunks = [];\r\n\t/** @type {ArrayBuffer | null} */\r\n\tlet vlessHeader = vlessResponseHeader;\r\n\tlet hasIncomingData = false; // check if remoteSocket has incoming data\r\n\tawait remoteSocket.readable\r\n\t\t.pipeTo(\r\n\t\t\tnew WritableStream({\r\n\t\t\t\tstart() {\r\n\t\t\t\t},\r\n\t\t\t\t/**\r\n\t\t\t\t * \r\n\t\t\t\t * @param {Uint8Array} chunk \r\n\t\t\t\t * @param {*} controller \r\n\t\t\t\t */\r\n\t\t\t\tasync write(chunk, controller) {\r\n\t\t\t\t\thasIncomingData = true;\r\n\t\t\t\t\t// remoteChunkCount++;\r\n\t\t\t\t\tif (webSocket.readyState !== WS_READY_STATE_OPEN) {\r\n\t\t\t\t\t\tcontroller.error(\r\n\t\t\t\t\t\t\t'webSocket.readyState is not open, maybe close'\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (vlessHeader) {\r\n\t\t\t\t\t\twebSocket.send(await new Blob([vlessHeader, chunk]).arrayBuffer());\r\n\t\t\t\t\t\tvlessHeader = null;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// seems no need rate limit this, CF seems fix this??..\r\n\t\t\t\t\t\t// if (remoteChunkCount > 20000) {\r\n\t\t\t\t\t\t// \t// cf one package is 4096 byte(4kb), 4096 * 20000 = 80M\r\n\t\t\t\t\t\t// \tawait delay(1);\r\n\t\t\t\t\t\t// }\r\n\t\t\t\t\t\twebSocket.send(chunk);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tclose() {\r\n\t\t\t\t\tlog(`remoteConnection!.readable is close with hasIncomingData is ${hasIncomingData}`);\r\n\t\t\t\t\t// safeCloseWebSocket(webSocket); // no need server close websocket frist for some case will casue HTTP ERR_CONTENT_LENGTH_MISMATCH issue, client will send close event anyway.\r\n\t\t\t\t},\r\n\t\t\t\tabort(reason) {\r\n\t\t\t\t\tconsole.error(`remoteConnection!.readable abort`, reason);\r\n\t\t\t\t},\r\n\t\t\t})\r\n\t\t)\r\n\t\t.catch((error) => {\r\n\t\t\tconsole.error(\r\n\t\t\t\t`remoteSocketToWS has exception `,\r\n\t\t\t\terror.stack || error\r\n\t\t\t);\r\n\t\t\tsafeCloseWebSocket(webSocket);\r\n\t\t});\r\n\r\n\t// seems is cf connect socket have error,\r\n\t// 1. Socket.closed will have error\r\n\t// 2. Socket.readable will be close without any data coming\r\n\tif (hasIncomingData === false && retry) {\r\n\t\tlog(`retry`)\r\n\t\tretry();\r\n\t}\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} base64Str \r\n * @returns \r\n */\r\nfunction base64ToArrayBuffer(base64Str) {\r\n\tif (!base64Str) {\r\n\t\treturn { error: null };\r\n\t}\r\n\ttry {\r\n\t\t// go use modified Base64 for URL rfc4648 which js atob not support\r\n\t\tbase64Str = base64Str.replace(/-/g, '+').replace(/_/g, '/');\r\n\t\tconst decode = atob(base64Str);\r\n\t\tconst arryBuffer = Uint8Array.from(decode, (c) => c.charCodeAt(0));\r\n\t\treturn { earlyData: arryBuffer.buffer, error: null };\r\n\t} catch (error) {\r\n\t\treturn { error };\r\n\t}\r\n}\r\n\r\n/**\r\n * This is not real UUID validation\r\n * @param {string} uuid \r\n */\r\nfunction isValidUUID(uuid) {\r\n\tconst uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n\treturn uuidRegex.test(uuid);\r\n}\r\n\r\nconst WS_READY_STATE_OPEN = 1;\r\nconst WS_READY_STATE_CLOSING = 2;\r\n/**\r\n * Normally, WebSocket will not has exceptions when close.\r\n * @param {import(\"@cloudflare/workers-types\").WebSocket} socket\r\n */\r\nfunction safeCloseWebSocket(socket) {\r\n\ttry {\r\n\t\tif (socket.readyState === WS_READY_STATE_OPEN || socket.readyState === WS_READY_STATE_CLOSING) {\r\n\t\t\tsocket.close();\r\n\t\t}\r\n\t} catch (error) {\r\n\t\tconsole.error('safeCloseWebSocket error', error);\r\n\t}\r\n}\r\n\r\nconst byteToHex = [];\r\nfor (let i = 0; i < 256; ++i) {\r\n\tbyteToHex.push((i + 256).toString(16).slice(1));\r\n}\r\nfunction unsafeStringify(arr, offset = 0) {\r\n\treturn (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + \"-\" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + \"-\" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + \"-\" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + \"-\" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\r\n}\r\nfunction stringify(arr, offset = 0) {\r\n\tconst uuid = unsafeStringify(arr, offset);\r\n\tif (!isValidUUID(uuid)) {\r\n\t\tthrow TypeError(\"Stringified UUID is invalid\");\r\n\t}\r\n\treturn uuid;\r\n}\r\n\r\n\r\n/**\r\n * \r\n * @param {import(\"@cloudflare/workers-types\").WebSocket} webSocket \r\n * @param {ArrayBuffer} vlessResponseHeader \r\n * @param {(string)=> void} log \r\n */\r\nasync function handleUDPOutBound(webSocket, vlessResponseHeader, log) {\r\n\r\n\tlet isVlessHeaderSent = false;\r\n\tconst transformStream = new TransformStream({\r\n\t\tstart(controller) {\r\n\r\n\t\t},\r\n\t\ttransform(chunk, controller) {\r\n\t\t\t// udp message 2 byte is the the length of udp data\r\n\t\t\t// TODO: this should have bug, beacsue maybe udp chunk can be in two websocket message\r\n\t\t\tfor (let index = 0; index < chunk.byteLength;) {\r\n\t\t\t\tconst lengthBuffer = chunk.slice(index, index + 2);\r\n\t\t\t\tconst udpPakcetLength = new DataView(lengthBuffer).getUint16(0);\r\n\t\t\t\tconst udpData = new Uint8Array(\r\n\t\t\t\t\tchunk.slice(index + 2, index + 2 + udpPakcetLength)\r\n\t\t\t\t);\r\n\t\t\t\tindex = index + 2 + udpPakcetLength;\r\n\t\t\t\tcontroller.enqueue(udpData);\r\n\t\t\t}\r\n\t\t},\r\n\t\tflush(controller) {\r\n\t\t}\r\n\t});\r\n\r\n\t// only handle dns udp for now\r\n\ttransformStream.readable.pipeTo(new WritableStream({\r\n\t\tasync write(chunk) {\r\n\t\t\tconst resp = await fetch(dohURL, // dns server url\r\n\t\t\t\t{\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t'content-type': 'application/dns-message',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbody: chunk,\r\n\t\t\t\t})\r\n\t\t\tconst dnsQueryResult = await resp.arrayBuffer();\r\n\t\t\tconst udpSize = dnsQueryResult.byteLength;\r\n\t\t\t// console.log([...new Uint8Array(dnsQueryResult)].map((x) => x.toString(16)));\r\n\t\t\tconst udpSizeBuffer = new Uint8Array([(udpSize >> 8) & 0xff, udpSize & 0xff]);\r\n\t\t\tif (webSocket.readyState === WS_READY_STATE_OPEN) {\r\n\t\t\t\tlog(`doh success and dns message length is ${udpSize}`);\r\n\t\t\t\tif (isVlessHeaderSent) {\r\n\t\t\t\t\twebSocket.send(await new Blob([udpSizeBuffer, dnsQueryResult]).arrayBuffer());\r\n\t\t\t\t} else {\r\n\t\t\t\t\twebSocket.send(await new Blob([vlessResponseHeader, udpSizeBuffer, dnsQueryResult]).arrayBuffer());\r\n\t\t\t\t\tisVlessHeaderSent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t})).catch((error) => {\r\n\t\tlog('dns udp has error' + error)\r\n\t});\r\n\r\n\tconst writer = transformStream.writable.getWriter();\r\n\r\n\treturn {\r\n\t\t/**\r\n\t\t * \r\n\t\t * @param {Uint8Array} chunk \r\n\t\t */\r\n\t\twrite(chunk) {\r\n\t\t\twriter.write(chunk);\r\n\t\t}\r\n\t};\r\n}\r\n\r\n/**\r\n * \r\n * @param {string} userID \r\n * @param {string | null} hostName\r\n * @returns {string}\r\n */\r\nfunction getVLESSConfig(userID, hostName) {\r\n\tconst vlessMain = `vless://${userID}@${hostName}:443?encryption=none&security=tls&sni=${hostName}&fp=randomized&type=ws&host=${hostName}&path=%2F%3Fed%3D2048#${hostName}`\r\n\tconst vlessSec = `vless://${userID}@${proxyIP}:443?encryption=none&security=tls&sni=${hostName}&fp=randomized&type=ws&host=${hostName}&path=%2F%3Fed%3D2048#${hostName}`\r\n\treturn `\r\n################################################################\r\nv2ray default ip\r\n---------------------------------------------------------------\r\n${vlessMain}\r\n---------------------------------------------------------------\r\n################################################################\r\nv2ray with best ip\r\n---------------------------------------------------------------\r\n${vlessSec}\r\n---------------------------------------------------------------\r\n################################################################\r\nclash-meta\r\n---------------------------------------------------------------\r\n- type: vless\r\n name: ${hostName}\r\n server: ${hostName}\r\n port: 443\r\n uuid: ${userID}\r\n network: ws\r\n tls: true\r\n udp: false\r\n sni: ${hostName}\r\n client-fingerprint: chrome\r\n ws-opts:\r\n path: \"/?ed=2048\"\r\n headers:\r\n host: ${hostName}\r\n---------------------------------------------------------------\r\n################################################################\r\n`;\r\n}\r\n"], + "mappings": "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", + "names": ["connect", "userID", "proxyIPs", "proxyIP", "dohURL", "nodeId", "apiToken", "apiHost", "isValidUUID", "worker_default", "request", "env", "ctx", "upgradeHeader", "hostname", "port", "socket", "writer", "writeError", "reader", "value", "readError", "connectError", "vlessConfig", "getVLESSConfig", "vlessOverWSHandler", "err", "e", "webSocketPair", "client", "webSocket", "address", "portWithRandomLog", "log", "info", "event", "earlyDataHeader", "readableWebSocketStream", "makeReadableWebSocketStream", "remoteSocketWapper", "udpStreamWrite", "isDns", "chunk", "controller", "hasError", "message", "portRemote", "addressRemote", "rawDataIndex", "vlessVersion", "isUDP", "processVlessHeader", "vlessResponseHeader", "rawClientData", "write", "handleUDPOutBound", "handleTCPOutBound", "reason", "apiResponseCache", "cacheTimeout", "fetchApiResponse", "requestOptions", "response", "apiResponse", "error", "getApiResponse", "checkUuidInApiResponse", "targetUuid", "user", "remoteSocket", "connectAndWrite", "tcpSocket", "retry", "safeCloseWebSocket", "remoteSocketToWS", "webSocketServer", "readableStreamCancel", "earlyData", "base64ToArrayBuffer", "vlessBuffer", "version", "isValidUser", "slicedBuffer", "slicedBufferString", "stringify", "uuids", "checkUuidInApi", "userUuid", "optLength", "command", "portIndex", "portBuffer", "addressIndex", "addressType", "addressLength", "addressValueIndex", "addressValue", "dataView", "ipv6", "i", "remoteChunkCount", "chunks", "vlessHeader", "hasIncomingData", "WS_READY_STATE_OPEN", "base64Str", "decode", "c", "uuid", "WS_READY_STATE_CLOSING", "byteToHex", "unsafeStringify", "arr", "offset", "isVlessHeaderSent", "transformStream", "index", "lengthBuffer", "udpPakcetLength", "udpData", "dnsQueryResult", "udpSize", "udpSizeBuffer", "hostName", "vlessMain", "vlessSec"] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..8f1aea9b4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1673 @@ +{ + "name": "edtunnel", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "edtunnel", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@cloudflare/workers-types": "^4.20230710.1", + "wrangler": "^3.2.0" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz", + "integrity": "sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==", + "dev": true, + "dependencies": { + "mime": "^3.0.0" + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20230710.0.tgz", + "integrity": "sha512-TDEgTfzTkveW+U0qtg9/60PXbl2klnEso0oio501zAnY2SOC1x7M0qb8UkhvjHFUVpwdykUzTPWPIWFBcF1ibA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20230710.0.tgz", + "integrity": "sha512-dxBwnKcj7TiM1JGiODg0LASa25A9P0XLeMkmF8YCECZoq+3QLH/uY4Vbm1xeEy8iXUZrt/uYN72bBE83vY4HIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20230710.0.tgz", + "integrity": "sha512-WrKZwL76i51jQLFpSxklpRSm2s8T9Xf6tVzQaiLTtpguKZSF/CTAyjjEOVfS7FXk+Te8lyAJAFQnj5QHoJ3pzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20230710.0.tgz", + "integrity": "sha512-eWdbOoqFqQ4m1/Wwy2dRDaOVXjOmWGjwBliU8pvm2m9RjfRTdfik7z6E3vOkalxqJDHiJ0f8SUykKz2oM1lD0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20230710.0.tgz", + "integrity": "sha512-P5ihH98Pb72HrsVsvb/HCSezvAvEtPeVQVBKgIclNE9e0fkA4zX9QMzBBFvLy3yr0YLf4r7MO2tNnt7JFnheGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20230710.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20230710.1.tgz", + "integrity": "sha512-VqEY/ZqyHKBn6ivdePSWebpqojwbCXVEuwLkMYHs0UoOAqcGylkVcabdZYdQJKeNxXcOUZ9UBId/x9UsPUm2XQ==", + "dev": true + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", + "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", + "dev": true, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", + "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.3.tgz", + "integrity": "sha512-mueuEoh+s1eRbSJqq9KNBQwI4QhQV6sRXIfTyLXSHGMpyew61rOK4qY21uKbXl1iBoMb0AdL1deWFCQVlN2qHA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.3.tgz", + "integrity": "sha512-RolFVeinkeraDvN/OoRf1F/lP0KUfGNb5jxy/vkIMeRRChkrX/HTYN6TYZosRJs3a1+8wqpxAo5PI5hFmxyPRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.3.tgz", + "integrity": "sha512-SFpTUcIT1bIJuCCBMCQWq1bL2gPTjWoLZdjmIhjdcQHaUfV41OQfho6Ici5uvvkMmZRXIUGpM3GxysP/EU7ifQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.3.tgz", + "integrity": "sha512-DO8WykMyB+N9mIDfI/Hug70Dk1KipavlGAecxS3jDUwAbTpDXj0Lcwzw9svkhxfpCagDmpaTMgxWK8/C/XcXvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.3.tgz", + "integrity": "sha512-uEqZQ2omc6BvWqdCiyZ5+XmxuHEi1SPzpVxXCSSV2+Sh7sbXbpeNhHIeFrIpRjAs0lI1FmA1iIOxFozKBhKgRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.3.tgz", + "integrity": "sha512-nJansp3sSXakNkOD5i5mIz2Is/HjzIhFs49b1tjrPrpCmwgBmH9SSzhC/Z1UqlkivqMYkhfPwMw1dGFUuwmXhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.3.tgz", + "integrity": "sha512-TfoDzLw+QHfc4a8aKtGSQ96Wa+6eimljjkq9HKR0rHlU83vw8aldMOUSJTUDxbcUdcgnJzPaX8/vGWm7vyV7ug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.3.tgz", + "integrity": "sha512-VwswmSYwVAAq6LysV59Fyqk3UIjbhuc6wb3vEcJ7HEJUtFuLK9uXWuFoH1lulEbE4+5GjtHi3MHX+w1gNHdOWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.3.tgz", + "integrity": "sha512-7I3RlsnxEFCHVZNBLb2w7unamgZ5sVwO0/ikE2GaYvYuUQs9Qte/w7TqWcXHtCwxvZx/2+F97ndiUQAWs47ZfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.3.tgz", + "integrity": "sha512-X8FDDxM9cqda2rJE+iblQhIMYY49LfvW4kaEjoFbTTQ4Go8G96Smj2w3BRTwA8IHGoi9dPOPGAX63dhuv19UqA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.3.tgz", + "integrity": "sha512-hIbeejCOyO0X9ujfIIOKjBjNAs9XD/YdJ9JXAy1lHA+8UXuOqbFe4ErMCqMr8dhlMGBuvcQYGF7+kO7waj2KHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.3.tgz", + "integrity": "sha512-znFRzICT/V8VZQMt6rjb21MtAVJv/3dmKRMlohlShrbVXdBuOdDrGb+C2cZGQAR8RFyRe7HS6klmHq103WpmVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.3.tgz", + "integrity": "sha512-EV7LuEybxhXrVTDpbqWF2yehYRNz5e5p+u3oQUS2+ZFpknyi1NXxr8URk4ykR8Efm7iu04//4sBg249yNOwy5Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.3.tgz", + "integrity": "sha512-uDxqFOcLzFIJ+r/pkTTSE9lsCEaV/Y6rMlQjUI9BkzASEChYL/aSQjZjchtEmdnVxDKETnUAmsaZ4pqK1eE5BQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.3.tgz", + "integrity": "sha512-NbeREhzSxYwFhnCAQOQZmajsPYtX71Ufej3IQ8W2Gxskfz9DK58ENEju4SbpIj48VenktRASC52N5Fhyf/aliQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.3.tgz", + "integrity": "sha512-SDiG0nCixYO9JgpehoKgScwic7vXXndfasjnD5DLbp1xltANzqZ425l7LSdHynt19UWOcDjG9wJJzSElsPvk0w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.3.tgz", + "integrity": "sha512-AzbsJqiHEq1I/tUvOfAzCY15h4/7Ivp3ff/o1GpP16n48JMNAtbW0qui2WCgoIZArEHD0SUQ95gvR0oSO7ZbdA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.3.tgz", + "integrity": "sha512-gSABi8qHl8k3Cbi/4toAzHiykuBuWLZs43JomTcXkjMZVkp0gj3gg9mO+9HJW/8GB5H89RX/V0QP4JGL7YEEVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.3.tgz", + "integrity": "sha512-SF9Kch5Ete4reovvRO6yNjMxrvlfT0F0Flm+NPoUw5Z4Q3r1d23LFTgaLwm3Cp0iGbrU/MoUI+ZqwCv5XJijCw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.3.tgz", + "integrity": "sha512-u5aBonZIyGopAZyOnoPAA6fGsDeHByZ9CnEzyML9NqntK6D/xl5jteZUKm/p6nD09+v3pTM6TuUIqSPcChk5gg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.3.tgz", + "integrity": "sha512-GlgVq1WpvOEhNioh74TKelwla9KDuAaLZrdxuuUgsP2vayxeLgVc+rbpIv0IYF4+tlIzq2vRhofV+KGLD+37EQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.3.tgz", + "integrity": "sha512-5/JuTd8OWW8UzEtyf19fbrtMJENza+C9JoPIkvItgTBQ1FO2ZLvjbPO6Xs54vk0s5JB5QsfieUEshRQfu7ZHow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "dependencies": { + "printable-characters": "^1.0.42" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-sqlite3": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.4.0.tgz", + "integrity": "sha512-NmsNW1CQvqMszu/CFAJ3pLct6NEFlNfuGM6vw72KHkjOD1UDnL96XNN1BMQc1hiHo8vE2GbOWQYIpZ+YM5wrZw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/capnp-ts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", + "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "tslib": "^2.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/esbuild": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.3.tgz", + "integrity": "sha512-71f7EjPWTiSguen8X/kxEpkAS7BFHwtQKisCDDV3Y4GLGWBaoSCyD5uXkaUew6JDzA9FEN1W23mdnSwW9kqCeg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.3", + "@esbuild/android-arm64": "0.16.3", + "@esbuild/android-x64": "0.16.3", + "@esbuild/darwin-arm64": "0.16.3", + "@esbuild/darwin-x64": "0.16.3", + "@esbuild/freebsd-arm64": "0.16.3", + "@esbuild/freebsd-x64": "0.16.3", + "@esbuild/linux-arm": "0.16.3", + "@esbuild/linux-arm64": "0.16.3", + "@esbuild/linux-ia32": "0.16.3", + "@esbuild/linux-loong64": "0.16.3", + "@esbuild/linux-mips64el": "0.16.3", + "@esbuild/linux-ppc64": "0.16.3", + "@esbuild/linux-riscv64": "0.16.3", + "@esbuild/linux-s390x": "0.16.3", + "@esbuild/linux-x64": "0.16.3", + "@esbuild/netbsd-x64": "0.16.3", + "@esbuild/openbsd-x64": "0.16.3", + "@esbuild/sunos-x64": "0.16.3", + "@esbuild/win32-arm64": "0.16.3", + "@esbuild/win32-ia32": "0.16.3", + "@esbuild/win32-x64": "0.16.3" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "node_modules/get-source/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/miniflare": { + "version": "3.20230710.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20230710.0.tgz", + "integrity": "sha512-kVxJoJFeepK+rGJp9UN0D8d3sL6hjFbzd3qcLUUUKosp0ouoleOa6uPNK0b8fEBWWqFUD2W4V4ziN7UvXFB4pg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-walk": "^8.2.0", + "better-sqlite3": "^8.1.0", + "capnp-ts": "^0.7.0", + "exit-hook": "^2.2.1", + "glob-to-regexp": "^0.4.1", + "http-cache-semantics": "^4.1.0", + "kleur": "^4.1.5", + "set-cookie-parser": "^2.6.0", + "source-map-support": "0.5.21", + "stoppable": "^1.1.0", + "undici": "^5.13.0", + "workerd": "1.20230710.0", + "ws": "^8.11.0", + "youch": "^3.2.2", + "zod": "^3.20.6" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", + "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/workerd": { + "version": "1.20230710.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20230710.0.tgz", + "integrity": "sha512-4iC+8w3UNixJ+b6GA2VOG2B6rnfSbSnm7Fnvsvq9iJuolG34fnD9xrfaXu6oN7H3Wyby3z8OIm0fy3szTvuRcg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20230710.0", + "@cloudflare/workerd-darwin-arm64": "1.20230710.0", + "@cloudflare/workerd-linux-64": "1.20230710.0", + "@cloudflare/workerd-linux-arm64": "1.20230710.0", + "@cloudflare/workerd-windows-64": "1.20230710.0" + } + }, + "node_modules/wrangler": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.2.0.tgz", + "integrity": "sha512-Fne5c91uolV4+E0B60F/meWbD/sr/oSPBfr6x1gapu6I7Ipu5uUt29K/fuGRgXRQcVVKnd5k3fS++ruuLODoxA==", + "dev": true, + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.2.0", + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@esbuild-plugins/node-modules-polyfill": "^0.1.4", + "blake3-wasm": "^2.1.5", + "chokidar": "^3.5.3", + "esbuild": "0.16.3", + "miniflare": "3.20230710.0", + "nanoid": "^3.3.3", + "path-to-regexp": "^6.2.0", + "selfsigned": "^2.0.1", + "source-map": "^0.7.4", + "xxhash-wasm": "^1.0.1" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=16.13.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xxhash-wasm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", + "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/youch": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.2.3.tgz", + "integrity": "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw==", + "dev": true, + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json index 8c3d92219..985c87409 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,17 @@ { "name": "edtunnel", "version": "1.0.0", - "description": ".", + "description": "A tunnel for the edgetunnel project to allow deployed applications to cloudflare pages and workers to be accessed via a custom domain.", "main": "_worker.js", "scripts": { "deploy": "wrangler deploy", + "build": "wrangler deploy --dry-run --outdir=minify --minify", "dev": "wrangler dev --remote" }, "author": "", "license": "ISC", "devDependencies": { - "@cloudflare/workers-types": "^4.20230518.0", - "wrangler": "^3.1.2" + "@cloudflare/workers-types": "^4.20230710.1", + "wrangler": "^3.2.0" } } \ No newline at end of file