summaryrefslogtreecommitdiff
path: root/swayback/static/sw.js
diff options
context:
space:
mode:
Diffstat (limited to 'swayback/static/sw.js')
-rw-r--r--swayback/static/sw.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/swayback/static/sw.js b/swayback/static/sw.js
new file mode 100644
index 0000000..f3a63db
--- /dev/null
+++ b/swayback/static/sw.js
@@ -0,0 +1,39 @@
+self.addEventListener('install', function(event) {
+ console.log ('installed service worker', event);
+ self.skipWaiting();
+});
+/* load stuff through service worker immediately? XXX: only debugging? */
+self.addEventListener('activate', event => {
+ event.waitUntil(clients.claim());
+});
+
+self.addEventListener('fetch', function(event) {
+ console.log ('fetch event', event.request.url, event);
+ let url = new URL (event.request.url);
+ url.protocol = 'https:';
+ url.port = 443;
+ url.hash = '';
+ if (url.hostname.endsWith ('.swayback.localhost')) {
+ url.hostname = url.hostname.slice (0, url.hostname.length-'.swayback.localhost'.length);
+ }
+ console.log ('orig url', url);
+ let body = new FormData ();
+ body.append ('url', url);
+ body.append ('method', event.request.method);
+ let req = new Request ('http://swayback.localhost:5000/raw', {method: 'POST', body: body});
+
+ event.respondWith (
+ fetch(req)
+ .then(function (response) {
+ // response may be used only once
+ // we need to save clone to put one copy in cache
+ // and serve second one
+ let responseClone = response.clone();
+ console.log ('got resp', responseClone);
+ return response;
+ })
+ .catch (function () {
+ console.log ('nope');
+ })
+ );
+});