forked from webtorrent/webtorrent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sw.min.js
1 lines (1 loc) · 2.23 KB
/
sw.min.js
1
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module){async function serve({request}){const{url,method,headers,destination}=request,clientlist=await clients.matchAll({type:"window",includeUncontrolled:!0}),[data,port]=await new Promise(resolve=>{for(const client of clientlist){const messageChannel=new MessageChannel,{port1,port2}=messageChannel;port1.onmessage=({data})=>{resolve([data,port1])},client.postMessage({url,method,headers:Object.fromEntries(headers.entries()),scope:self.registration.scope,destination,type:"webtorrent"},[port2])}});if("STREAM"!==data.body&&"DOWNLOAD"!==data.body)return new Response(data.body,data);let timeOut=null;return new Response(new ReadableStream({pull(controller){return new Promise(resolve=>{port.onmessage=({data})=>{data?controller.enqueue(data):(clearTimeout(timeOut),controller.close(),port.onmessage=null),resolve()},cancellable||(clearTimeout(timeOut),"STREAM"===data.body&&(timeOut=setTimeout(()=>{controller.close(),port.postMessage(!1),port.onmessage=null,resolve()},portTimeoutDuration))),port.postMessage(!0)})},cancel(){port.postMessage(!1),clearTimeout(timeOut),port.onmessage=null}}),data)}const portTimeoutDuration=5e3;let cancellable=!1;module.exports=event=>{const{url}=event.request;return url.includes(self.registration.scope+"webtorrent/")?url.includes(self.registration.scope+"webtorrent/keepalive/")?new Response:url.includes(self.registration.scope+"webtorrent/cancel/")?new Response(new ReadableStream({cancel(){cancellable=!0}})):serve(event):null}},{}],2:[function(require){const fileResponse=require("./worker-server.js");self.addEventListener("install",()=>{self.skipWaiting()}),self.addEventListener("fetch",event=>{const res=fileResponse(event);res&&event.respondWith(res)}),self.addEventListener("activate",()=>{self.clients.claim()})},{"./worker-server.js":1}]},{},[2]);