My comment was mainly about serviceWorker.ready.then.
I've never seen a JS API using such pattern - the name of the event as a property which is a promise.
A manager object/class also usually rings a bell.
Not that I'm an API specialist but I would rather implement it as:
document.addEventListener("serviceready", function() {
window.pushNotification.register().then(.....
For an event that only happens once, then the
navigator.serviceWorker.ready.then(function(){...
version is preferable to document.addEventListener("serviceready", function() {
because A) you don't have to worry about removing your event listener after the fact, and B) if the event has already happened, then your callback will be called immediately.
Whether this is a good thing or not is another question I don't know the answer to.