diff --git a/app.js b/app.js
index f26532f1..37bd4155 100644
--- a/app.js
+++ b/app.js
@@ -417,6 +417,12 @@ const script = {
],
mesh_pool : [
"&mesh/pool"
+ ],
+ cache : [
+ "main/service",
+ ],
+ service : [
+ "moto/service"
]
};
@@ -474,6 +480,7 @@ function handleOptions(req, res, next) {
} catch (e) {
logger.log("ua parse error on : "+req.headers['user-agent']);
}
+ res.setHeader("Service-Worker-Allowed", "/");
if (req.method === 'OPTIONS') {
addCorsHeaders(req, res);
res.end();
diff --git a/src/main/service.js b/src/main/service.js
new file mode 100644
index 00000000..a69d9530
--- /dev/null
+++ b/src/main/service.js
@@ -0,0 +1,21 @@
+async function start_service_worker() {
+ // install service worker
+ console.log('registering service worker');
+
+ try {
+ // const reg = await navigator.serviceWorker.register("/src/moto/service.js?013", { scope: "/" });
+ const reg = await navigator.serviceWorker.register("/code/service.js?021", { scope: "/" });
+ if (reg.installing) {
+ console.log('service worker installing');
+ } else if (reg.waiting) {
+ console.log('service worker waiting');
+ } else if (reg.active) {
+ console.log('service worker active');
+ } else {
+ console.log({ service_worker: reg });
+ }
+ } catch (err) {
+ console.log('service worker registration failed');
+ }
+}
+if (navigator.serviceWorker) start_service_worker();
diff --git a/src/moto/service.js b/src/moto/service.js
new file mode 100644
index 00000000..c3ea235b
--- /dev/null
+++ b/src/moto/service.js
@@ -0,0 +1,99 @@
+console.log('service worker running 021');
+
+const addResourcesToCache = async (resources) => {
+ console.log('cache resources', resources);
+ const cache = await caches.open('v4');
+ await cache.addAll(resources);
+};
+
+const putInCache = async (request, response) => {
+ const cache = await caches.open('v4');
+ console.log('cache', request.request.url);
+ await cache.put(request, response);
+};
+
+const cacheFirst = async ({
+ request,
+ preloadResponsePromise,
+ fallbackUrl
+}) => {
+ // First try to get the resource from the cache
+ const responseFromCache = await caches.match(request);
+ if (responseFromCache) {
+ console.log('sw cached', request.url);
+ return responseFromCache;
+ }
+
+ // Next try to use the preloaded response, if it's there
+ // const preloadResponse = await preloadResponsePromise;
+ // if (preloadResponse) {
+ // console.info('using preload response', preloadResponse);
+ // putInCache(request, preloadResponse.clone());
+ // return preloadResponse;
+ // }
+
+ // Next try to get the resource from the network
+ try {
+ console.log('fetch', request.request.url);
+ const responseFromNetwork = await fetch(request);
+ // response may be used only once
+ // we need to save clone to put one copy in cache
+ // and serve second one
+ putInCache(request, responseFromNetwork.clone());
+ return responseFromNetwork;
+ } catch (error) {
+ const fallbackResponse = await caches.match(fallbackUrl);
+ if (fallbackResponse) {
+ return fallbackResponse;
+ }
+ // when even the fallback response is not available,
+ // there is nothing we can do, but we must always
+ // return a Response object
+ return new Response('Network error happened', {
+ status: 408,
+ headers: {
+ 'Content-Type': 'text/plain'
+ },
+ });
+ }
+};
+
+const enableNavigationPreload = async () => {
+ if (self.registration.navigationPreload) {
+ // Enable navigation preloads!
+ console.log('sw preload');
+ try {
+ await self.registration.navigationPreload.enable();
+ } catch (e) {
+ console.log('sw preload fail', e);
+ }
+
+ }
+};
+
+self.addEventListener('activate', (event) => {
+ console.log('sw activate preload');
+ // event.waitUntil(enableNavigationPreload());
+ // console.log('sw clients claim');
+ // event.waitUntil(clients.claim());
+});
+
+self.addEventListener('install', (event) => {
+ console.log('sw install');
+ event.waitUntil(
+ addResourcesToCache([
+ // '/',
+ ])
+ );
+});
+
+self.addEventListener('fetch', (event) => {
+ // console.log('sw fetch', event.request.url);
+ event.respondWith(
+ cacheFirst({
+ request: event.request,
+ preloadResponsePromise: event.preloadResponse,
+ fallbackUrl: '//static.grid.space/img/logo_gs.png',
+ })
+ );
+});
diff --git a/web/kiri/index.html b/web/kiri/index.html
index 074aed3b..78c26b61 100644
--- a/web/kiri/index.html
+++ b/web/kiri/index.html
@@ -19,7 +19,8 @@
-
+
+