tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

fetch-response.js (1277B)


      1 self.addEventListener('fetch', event => {
      2    const path = event.request.url.match(/\/(?<name>[^\/]+)$/);
      3    switch (path?.groups?.name) {
      4        case 'constructed':
      5            event.respondWith(new Response(new Uint8Array([1, 2, 3])));
      6            break;
      7        case 'forward':
      8            event.respondWith(fetch('/common/text-plain.txt'));
      9            break;
     10        case 'stream':
     11            event.respondWith((async() => {
     12                const res = await fetch('/common/text-plain.txt');
     13                const body = await res.body;
     14                const reader = await body.getReader();
     15                const stream = new ReadableStream({
     16                    async start(controller) {
     17                        while (true) {
     18                            const {done, value} = await reader.read();
     19                            if (done)
     20                                break;
     21 
     22                            controller.enqueue(value);
     23                        }
     24                        controller.close();
     25                        reader.releaseLock();
     26                    }
     27                });
     28                return new Response(stream);
     29            })());
     30            break;
     31        default:
     32          event.respondWith(fetch(event.request));
     33          break;
     34    }
     35 });