var sharedLib={};sharedLib.IndexedDBAdapter=function(database,logger){this.__parent=typeof window==="undefined"?self:window;this.__database=database;this.__logger=logger};sharedLib.IndexedDBAdapter.DATABASES={SERVICE_WORKER_STORAGE:{DATABASE_NAME:"AppboyServiceWorkerAsyncStorage",VERSION:2,OBJECT_STORES:{DATA:"data",PUSH_CLICKS:"pushClicks"}}};sharedLib.IndexedDBAdapter.prototype._getIndexedDB=function(){if("indexedDB"in this.__parent)return this.__parent.indexedDB};sharedLib.IndexedDBAdapter.prototype._isSupported=function(){return this._getIndexedDB()!=null};sharedLib.IndexedDBAdapter.prototype._withDatabase=function(action){var openRequest=this._getIndexedDB().open(this.__database.DATABASE_NAME,this.__database.VERSION);if(openRequest==null)return false;var self=this;openRequest.onupgradeneeded=function(event){self.__logger.info("Upgrading indexedDB database "+self.__database.DATABASE_NAME+" to v"+self.__database.VERSION+"...");var db=event.target.result;for(var key in self.__database.OBJECT_STORES)if(!db.objectStoreNames.contains(self.__database.OBJECT_STORES[key]))db.createObjectStore(self.__database.OBJECT_STORES[key])};openRequest.onsuccess=function(event){self.__logger.info("Opened indexedDB database "+self.__database.DATABASE_NAME+" v"+self.__database.VERSION);var db=event.target.result;db.onversionchange=function(){db.close();self.__logger.error("Needed to close the database unexpectedly because of an upgrade in another tab")};action(db)};openRequest.onerror=function(event){self.__logger.info("Could not open indexedDB database "+self.__database.DATABASE_NAME+" v"+self.__database.VERSION+": "+event.target.errorCode);return true};return true};sharedLib.IndexedDBAdapter.prototype.setItem=function(objectStore,key,item){if(!this._isSupported())return false;var self=this;var success=this._withDatabase(function(db){if(!db.objectStoreNames.contains(objectStore)){self.__logger.error("Could not store object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME+" because "+objectStore+" is not a valid objectStore");return}var transaction=db.transaction([objectStore],"readwrite");var store=transaction.objectStore(objectStore);var putRequest=store.put(item,key);putRequest.onerror=function(){self.__logger.error("Could not store object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)};putRequest.onsuccess=function(){self.__logger.info("Stored object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)}});return success};sharedLib.IndexedDBAdapter.prototype.getItem=function(objectStore,key,callback){if(!this._isSupported())return false;var self=this;var success=this._withDatabase(function(db){if(!db.objectStoreNames.contains(objectStore)){self.__logger.error("Could not retrieve object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME+" because "+objectStore+" is not a valid objectStore");return}var transaction=db.transaction([objectStore],"readonly");var store=transaction.objectStore(objectStore);var getRequest=store.get(key);getRequest.onerror=function(){self.__logger.error("Could not retrieve object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)};getRequest.onsuccess=function(event){self.__logger.info("Retrieved object "+key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME);var object=event.target.result;if(object!=null)callback(object)}});return success};sharedLib.IndexedDBAdapter.prototype.getLastItem=function(objectStore,callback){if(!this._isSupported())return false;var self=this;var success=this._withDatabase(function(db){if(!db.objectStoreNames.contains(objectStore)){self.__logger.error("Could not retrieve last record from "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME+" because "+objectStore+" is not a valid objectStore");return}var transaction=db.transaction([objectStore],"readonly");var store=transaction.objectStore(objectStore);var cursorRequest=store.openCursor(null,"prev");cursorRequest.onerror=function(){self.__logger.error("Could not open cursor for "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)};cursorRequest.onsuccess=function(event){var result=event.target.result;if(result!=null&&result.value!=null&&result.key!=null){self.__logger.info("Retrieved last record "+result.key+" in "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME);callback(result.key,result.value)}}});return success};sharedLib.IndexedDBAdapter.prototype.deleteItem=function(objectStore,key){if(!this._isSupported())return false;var self=this;var success=this._withDatabase(function(db){if(!db.objectStoreNames.contains(objectStore)){self.__logger.error("Could not delete record "+key+" from "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME+" because "+objectStore+" is not a valid objectStore");return}var transaction=db.transaction([objectStore],"readwrite");var store=transaction.objectStore(objectStore);var deleteRequest=store["delete"](key);deleteRequest.onerror=function(){self.__logger.error("Could not delete record "+key+" from "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)};deleteRequest.onsuccess=function(){self.__logger.info("Deleted record "+key+" from "+objectStore+" on indexedDB database "+self.__database.DATABASE_NAME)}});return success};var NONE_ACTION="ab_none";var URI_ACTION="ab_uri";var showNotification=function(payload){if(payload==null||Object.keys(payload).length===0){console.log("Appboy: server has no pending push message for this registration. Ignoring push event.");return}var title=payload.t;var body=payload.a;var icon=payload.i;var image=payload.img;var shouldFetchTriggers=payload.ab_push_fetch_test_triggers_key;var data={url:payload.u,ab_ids:{cid:payload.cid},extra:payload.e};var requireInteraction=payload.ri;if(shouldFetchTriggers){console.log("Appboy: service worker 2.0.3 found trigger fetch key in push payload.");data["fetchTriggers"]=true}var actions=payload.pab||[];var actionTargets={};for(var i=0;i