/**
* @copyright 2018 Amazon Web Services
*
* An example service worker that utilizes lifecycle events.
* https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
*
* This service worker provides the means to cache local static assets
* into browsers Cache Storage as well as network requests using the
* fetch events. Network requests and static assets are cached and
* available offline. Other strategies exist for offline application development:
* https://hacks.mozilla.org/2016/10/offline-strategies-come-to-the-service-worker-cookbook/
*
*/
/**
* Static assets to cache. This is specific on your application
* and build process and framework
*/
var appCacheFiles = [
'/',
'/index.html'
],
// The name of the Cache Storage
appCache = 'aws-amplify-v1';
/**
* The install event is fired when the service worker
* is installed.
* https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
*/
addEventListener('install', (event) => {
console.log('[Service Worker] Install Event', event)
event.waitUntil(
caches.open(appCache).then(function(cache) {
return cache.addAll(appCacheFiles);
})
);
})
/**
* The activate vent is fired when the service worker is activated
* and added to the home screen.
* https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
*/
addEventListener('activate', (event) => {
console.log('[Service Worker] Activate Event ', event)
})
/**
* The fetch event is fired for every network request. It is also dependent
* on the scope of which your service worker was registered.
* https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
*/
addEventListener('fetch', function(event) {
//return fetch(event.request);
console.log('[Service Worker] Fetch: ', event);
let url = new URL(event.request.url);
//url.pathname
event.respondWith(
caches.match(event.request).then(function(resp) {
return resp || fetch(event.request).then(function(response) {
return caches.open(appCache).then(function(cache) {
if (event.request.method === 'GET') {
cache.put(event.request, response.clone());
}
return response;
});
});
})
);
});
/**
* The message will receive messages sent from the application.
* This can be useful for updating a service worker or messaging
* other clients (browser restrictions currently exist)
* https://developer.mozilla.org/en-US/docs/Web/API/Client/postMessage
*/
addEventListener('message', (event) => {
console.log('[Service Worker] Message Event: ', event.data)
})
/**
* Listen for incoming Push events
*/
addEventListener('push', (event) => {
console.log('[Service Worker] Push Received.');
console.log(`[Service Worker] Push had this data: "${event.data.text()}"`);
if (!(self.Notification && self.Notification.permission === 'granted'))
return;
var data = {};
if (event.data)
data = event.data.json();
var title = data.title || "Web Push Notification";
var message = data.message || "New Push Notification Received";
var icon = "images/notification-icon.png";
var badge = 'images/notification-badge.png';
var options = {
body: message,
icon: icon,
badge: badge
};
event.waitUntil(self.registration.showNotification(title,options));
});
/**
* Handle a notification click
*/
addEventListener('notificationclick', (event) => {
console.log('[Service Worker] Notification click: ', event);
event.notification.close();
event.waitUntil(
clients.openWindow('https://aws-amplify.github.io/amplify-js')
);
});