You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hydro/packages/ui-default/static/streamsaver/mitm.html

1 line
2.5 KiB
HTML

<script>let keepAlive=()=>{keepAlive=()=>{};var e=location.href.substr(0,location.href.lastIndexOf("/"))+"/ping",a=setInterval((()=>{sw?sw.postMessage("ping"):fetch(e).then((e=>e.text(!e.ok&&clearInterval(a))))}),1e4)},messages=[];window.onmessage=e=>messages.push(e);let sw=null,scope="";function registerWorker(){return navigator.serviceWorker.getRegistration("./").then((e=>e||navigator.serviceWorker.register("sw.js",{scope:"./"}))).then((e=>{const a=e.installing||e.waiting;return scope=e.scope,(sw=e.active)||new Promise((r=>{a.addEventListener("statechange",fn=()=>{"activated"===a.state&&(a.removeEventListener("statechange",fn),sw=e.active,r())})}))}))}function onMessage(e){let{data:a,ports:r,origin:t}=e;if(!r||!r.length)throw new TypeError("[StreamSaver] You didn't send a messageChannel");if("object"!=typeof a)throw new TypeError("[StreamSaver] You didn't send a object");a.origin=t,a.referrer=a.referrer||document.referrer||t,a.streamSaverVersion=new URLSearchParams(location.search).get("version"),"1.2.0"===a.streamSaverVersion&&console.warn("[StreamSaver] please update streamsaver"),a.headers?new Headers(a.headers):console.warn("[StreamSaver] pass `data.headers` that you would like to pass along to the service worker\nit should be a 2D array or a key/val object that fetch's Headers api accepts"),"string"==typeof a.filename&&(console.warn("[StreamSaver] You shouldn't send `data.filename` anymore. It should be included in the Content-Disposition header option"),a.filename=a.filename.replace(/\//g,":")),a.size&&console.warn("[StreamSaver] You shouldn't send `data.size` anymore. It should be included in the content-length header option"),a.readableStream&&console.warn("[StreamSaver] You should send the readableStream in the messageChannel, not throught mitm"),a.pathname||(console.warn("[StreamSaver] Please send `data.pathname` (eg: /pictures/summer.jpg)"),a.pathname=Math.random().toString().slice(-6)+"/"+a.filename),a.pathname=a.pathname.replace(/^\/+/g,"");let n=t.replace(/(^\w+:|^)\/\//,"");if(a.url=new URL(`${scope+n}/${a.pathname}`).toString(),!a.url.startsWith(`${scope+n}/`))throw new TypeError("[StreamSaver] bad `data.pathname`");const s=a.readableStream?[r[0],a.readableStream]:[r[0]];return a.readableStream||a.transferringReadable||keepAlive(),sw.postMessage(a,s)}window.opener&&window.opener.postMessage("StreamSaver::loadedPopup","*"),navigator.serviceWorker?registerWorker().then((()=>{window.onmessage=onMessage,messages.forEach(window.onmessage)})):keepAlive();</script>