-"use strict";let u=self.Deno?.createHttpClient({allowHost:!0}),i=class{report=!0;instanceId;#i=!0;#d=!0;#n=2;#c;#s;#r;#l;#e;#o;#t=new Map;#a=new Set;constructor(e,o){if(!Request.prototype.hasOwnProperty("body"))throw this.#d=!1,new Error("Fetch requests do not support streamable bodies");if(typeof self?.WebSocketStream!="function")throw this.#i=!1,new Error("WebSocket does not support streaming");typeof self?.Deno<"u"&&(this.#n=0),this.#s=o,this.#c=e}async start(){let e=this;if(e.#e)switch(e.#e.readyState){case WebSocket.CLOSING:case WebSocket.CLOSED:throw new Error("Attempted reconnection for an active dialer")}e.instanceId=self.crypto?.randomUUID(),e.#r=`${e.#c}/ws/${e.instanceId}`,e.#l=e.#r.replace("http","ws"),e.#e=new WebSocket(`${e.#r}/ctrl?token=${e.#s}`),e.#e.addEventListener("error",o=>{console.warn("Control socket has errored out:",o.error)}),e.#e.addEventListener("close",o=>{console.warn("Control socket closed."),e.#o?.abort()}),e.#e.addEventListener("opened",o=>{console.warn("Control socket is now ready."),e.#o=new AbortController}),e.#e.addEventListener("message",async o=>{let t=JSON.parse(o.data);switch(console.debug(t),t.m){case"PING":{console.debug("Pong!");break}case"APPAT":{switch(t.e?.appat){case"requestEnd":{e.#t.has(t.c)?(e.#t.get(t.c)[2](),console.info("Closed an ongoing upload.")):(e.#a.add(t.c),console.info("Closed a future upload."));break}}break}case"WS":break;case"WT":break;case"HEAD":case"GET":case"POST":case"PUT":case"DELETE":case"OPTIONS":case"PATCH":{let s={method:t.m,signal:e.#o};if(t.hasOwnProperty("e")){if(t.e.hasOwnProperty("r")){s.referrerPolicy="unsafe-url";let r=new URL(t.e.r);s.referrer=t.e.r.replace(`${r.protocol}//${r.hostname}`)}t.e.hasOwnProperty("h")&&(s.headers=t.e.h)}try{let c=await new WebSocketStream(`${e.#l}/${t.c}?token=${e.#s}`).opened;switch(t.m){case"POST":case"PUT":case"DELETE":case"OPTIONS":case"PATCH":{let l=c.readable.getReader();s.body=new ReadableStream({queueingStrategy:new ByteLengthQueuingStrategy({highWaterMark:65536}),start:async a=>{e.#t.set(t.c,[a,l,()=>{a.close(),e.#t.delete(t.c)}])},pull:async a=>{if(e.#a.has(t.c))e.#t.get(t.c)[2]();else if(e.#t.has(t.c)){let{value:p,done:h}=await l.read();p!==void 0&&a.enqueue(p),(h||e.#a.has(t.c))&&e.#t.get(t.c)[2]()}}}),e.#n>1?(s.duplex="half",e.#e.send(`{"c":"${t.c}","s":1,"t":"AppatError","e":"appat.halfDuplex"}`)):s.duplex="full";break}}u&&(s.client=u);let f=await fetch(t.u,s);if(e.report){let l={c:t.c,s:f.status,t:f.statusText,h:{}};for(let[a,p]of f.headers.entries())l.h[a]=p;e.#e.send(JSON.stringify(l))}t.m==="HEAD"?c.close():await f.body.pipeTo(c.writable)}catch(r){if(console.warn(r),e.report){let c={c:t.c,s:0,t:r.name,e:`${r.message}
0 commit comments