From c98004b85473bd0c5b7758c8dd7ae0c226ff774d Mon Sep 17 00:00:00 2001 From: Rob Fox Date: Mon, 29 Sep 2014 18:43:15 +0300 Subject: [PATCH 1/8] cURL tutorial in index --- index.html | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index f68739a..e8c22d9 100644 --- a/index.html +++ b/index.html @@ -2,12 +2,22 @@ - - ScaleDrone HTML5 JavaScript push notifications - + + ScaleDrone HTML5 JavaScript push notifications + - + You can push a notification from Terminal using cURL: + +
+        
+            curl --include \
+                 --request POST \
+                 --data-binary 'Buy cheese and bread for breakfast.' \
+                 https://api2.scaledrone.com/dIVCxD01G4x1sDtC/notifications/publish
+         
+    
+ \ No newline at end of file From 4cd4165767a61575e4aff8f53e9c9e29ffe6388f Mon Sep 17 00:00:00 2001 From: Serge Date: Mon, 29 Sep 2014 19:00:13 +0300 Subject: [PATCH 2/8] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 971793e..4ea795b 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ Beware that HTML5 Notifications are not supported by all browsers yet, you can g Create a new free channel at [ScaleDrone.com](https://www.scaledrone.com/) or use the one from the example for testing. +### Example + +[http://scaledrone.github.io/html5-javascript-push-notifications/](http://scaledrone.github.io/html5-javascript-push-notifications/) + ### Running Clone this repository and run it using your favorite http server. From af83980a52787bfbeedf6fd32583d210b66037f8 Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 5 Jan 2016 15:30:25 +0200 Subject: [PATCH 3/8] Added mgs= to the html file as well --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index e8c22d9..22b3b77 100644 --- a/index.html +++ b/index.html @@ -14,10 +14,10 @@ curl --include \ --request POST \ - --data-binary 'Buy cheese and bread for breakfast.' \ + --data-binary 'msg=Buy cheese and bread for breakfast.' \ https://api2.scaledrone.com/dIVCxD01G4x1sDtC/notifications/publish - \ No newline at end of file + From b1067e673f9a83f58b875c0e3f4396254ff6b874 Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 9 Jan 2018 09:21:25 +0200 Subject: [PATCH 4/8] Update JS and start using Push.js --- bower_components/push.js/.bower.json | 32 + bower_components/push.js/CONTRIBUTING.md | 26 + bower_components/push.js/LICENSE.md | 21 + bower_components/push.js/README.md | 47 ++ bower_components/push.js/bin/push.js | 645 ++++++++++++++++++ bower_components/push.js/bin/push.min.js | 37 + bower_components/push.js/bin/push.min.js.map | 1 + bower_components/push.js/bin/serviceWorker.js | 75 ++ .../push.js/bin/serviceWorker.min.js | 1 + bower_components/push.js/bower.json | 21 + bower_components/push.js/browserstack.png | Bin 0 -> 15799 bytes bower_components/push.js/logo.png | Bin 0 -> 25484 bytes index.html | 15 +- logo.png | Bin 0 -> 120596 bytes main.js | 84 ++- package.json | 7 + 16 files changed, 963 insertions(+), 49 deletions(-) create mode 100644 bower_components/push.js/.bower.json create mode 100644 bower_components/push.js/CONTRIBUTING.md create mode 100644 bower_components/push.js/LICENSE.md create mode 100644 bower_components/push.js/README.md create mode 100644 bower_components/push.js/bin/push.js create mode 100644 bower_components/push.js/bin/push.min.js create mode 100644 bower_components/push.js/bin/push.min.js.map create mode 100644 bower_components/push.js/bin/serviceWorker.js create mode 100644 bower_components/push.js/bin/serviceWorker.min.js create mode 100644 bower_components/push.js/bower.json create mode 100644 bower_components/push.js/browserstack.png create mode 100644 bower_components/push.js/logo.png create mode 100644 logo.png create mode 100644 package.json diff --git a/bower_components/push.js/.bower.json b/bower_components/push.js/.bower.json new file mode 100644 index 0000000..b7b46e9 --- /dev/null +++ b/bower_components/push.js/.bower.json @@ -0,0 +1,32 @@ +{ + "name": "push.js", + "description": "A compact, cross-browser solution for the Javascript Notifications API", + "main": "bin/push.js", + "authors": [ + "Tyler Nickerson" + ], + "license": "MIT", + "homepage": "https://pushjs.org", + "ignore": [ + "**/.*", + "coverage", + "node_modules", + "bower_components", + "tests", + "src", + "build", + "*.lock", + "*.json" + ], + "version": "1.0.5", + "_release": "1.0.5", + "_resolution": { + "type": "version", + "tag": "v1.0.5", + "commit": "a139b5acb041a914127794823a66084ead0ad017" + }, + "_source": "https://github.com/Nickersoft/push.js.git", + "_target": "^1.0.5", + "_originalSource": "push.js", + "_direct": true +} \ No newline at end of file diff --git a/bower_components/push.js/CONTRIBUTING.md b/bower_components/push.js/CONTRIBUTING.md new file mode 100644 index 0000000..f7aa96b --- /dev/null +++ b/bower_components/push.js/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing Guidelines +So you want to contribute to Push, huh? Well lucky for you, it's really easy to do so, because you're just dealing with like, a few hundred lines of JavaScript. It's not hard. + +Alright. Now calm down and take a few deep breaths. Here we go. All you have to remember is two commands... think you can do that? + +To BUILD Push, just run: + +``` +npm run build +``` + +To TEST Push, run: + +``` +npm run test +``` + +See? Not hard at all. Unfortunately the Notifications API doesn't always play nicely with local sites, so don't get discouraged if you try running Push in a local HTML file and it doesn't work. + +### Testing & Travis ### +Push uses the [Karma](https://karma-runner.github.io/1.0/index.html) JavaScript test runner, so read up on that if you want to make changes to any of the tests that are run. These tests are run post-push by [Travis CI](https://travis-ci.org), so look into that if you want to make any Travis configuration changes. Although, at this point I'd say Travis is all set. The tests might want to be expanded though. + +### REAL IMPORTANT STUFF ### +**THERE IS ONLY ONE RULE TO PUSH CLUB** (and no, it's not that you can't talk about it). **WHENEVER** you make changes to `Push.js`, **RECOMPILE** and commit `push.min.js` as well. Until this build process can be wrapped into a sexy git hook of some sort, this is how changes to the library need to occur. **YOUR PR WILL NOT BE APPROVED UNLESS THIS HAPPENS**. That said, I did let it slide once because I wasn't thinking, but that's why I wrote this file to make sure it will never happen again. + +Outside of that, contributing should not be at all scary and should be a fun and positive process. Now go out and write some killer JS! Wait... is there even such a thing? diff --git a/bower_components/push.js/LICENSE.md b/bower_components/push.js/LICENSE.md new file mode 100644 index 0000000..d4ec93f --- /dev/null +++ b/bower_components/push.js/LICENSE.md @@ -0,0 +1,21 @@ +# The MIT License (MIT) + +Copyright (c) 2016 Tyler Nickerson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/bower_components/push.js/README.md b/bower_components/push.js/README.md new file mode 100644 index 0000000..4fa87bb --- /dev/null +++ b/bower_components/push.js/README.md @@ -0,0 +1,47 @@ +# [](http://pushjs.org) + +[![Build Status](https://img.shields.io/travis/Nickersoft/push.js.svg)](https://travis-ci.org/Nickersoft/push.js) +[![npm version](https://img.shields.io/npm/v/push.js.svg)](https://npmjs.com/package/push.js) +[![npm](https://img.shields.io/npm/dm/push.js.svg)](https://npmjs.com/package/push.js) +[![Coverage Status](https://img.shields.io/coveralls/Nickersoft/push.js.svg)](https://coveralls.io/github/Nickersoft/push.js?branch=master) +[![Known Vulnerabilities](https://snyk.io/test/github/nickersoft/push.js/badge.svg)](https://snyk.io/test/github/nickersoft/push.js) +![David Dev Dependencies](https://img.shields.io/david/dev/nickersoft/push.js.svg) +[![Code Climate](https://img.shields.io/codeclimate/github/Nickersoft/push.js.svg)](https://codeclimate.com/github/Nickersoft/push.js) + +*Now a proud user of* + +[](https://browserstack.com) + +### What is Push? ### + +Push is the fastest way to get up and running with Javascript desktop notifications. A fairly new addition to the +official specification, the Notification API allows modern browsers such as Chrome, Safari, Firefox, and IE 9+ to push +notifications to a user's desktop. Push acts as a cross-browser solution to this API, falling back to use older +implementations if the user's browser does not support the new API. + +You can quickly install Push via [npm](http://npmjs.com): + +``` +npm install push.js --save +``` + +Or, if you want something a little more lightweight, you can give [Bower](http://bower.io) a try: + +``` +bower install push.js --save +``` + +### Full Documentation ### +Full documentation for Push can be found at the project's new homepage [https://pushjs.org](https://pushjs.org). +See you there! + +### Development ### + +If you feel like this library is your jam and you want to contribute (or you think I'm an idiot who missed something), +check out Push's neat [contributing guidelines](CONTRIBUTING.md) on how you can make your mark. + +### Credits ### +Push is based off work the following work: + +1. [HTML5-Desktop-Notifications](https://github.com/ttsvetko/HTML5-Desktop-Notifications) by [Tsvetan Tsvetkov](https://github.com/ttsvetko) +2. [notify.js](https://github.com/alexgibson/notify.js) by [Alex Gibson](https://github.com/alexgibson) diff --git a/bower_components/push.js/bin/push.js b/bower_components/push.js/bin/push.js new file mode 100644 index 0000000..4a62cc3 --- /dev/null +++ b/bower_components/push.js/bin/push.js @@ -0,0 +1,645 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Push = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 ? this._requestWithCallback.apply(this, arguments) : this._requestAsPromise(); + } + }, { + key: "_requestWithCallback", + value: function _requestWithCallback(i, t) { + var _this = this; + + var s = this.get();var e = function e() { + var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this._win.Notification.permission; + void 0 === s && _this._win.webkitNotifications && (s = _this._win.webkitNotifications.checkPermission()), s === _this.GRANTED || 0 === s ? i && i() : t && t(); + };s !== this.DEFAULT ? e(s) : this._win.webkitNotifications && this._win.webkitNotifications.checkPermission ? this._win.webkitNotifications.requestPermission(e) : this._win.Notification && this._win.Notification.requestPermission ? this._win.Notification.requestPermission().then(e).catch(function () { + t && t(); + }) : i && i(); + } + }, { + key: "_requestAsPromise", + value: function _requestAsPromise() { + var _this2 = this; + + var i = this.get();var t = function t(i) { + return i === _this2.GRANTED || 0 === i; + };var s = i !== this.DEFAULT, + e = this._win.Notification && this._win.Notification.requestPermission, + n = this._win.webkitNotifications && this._win.webkitNotifications.checkPermission;return new Promise(function (o, h) { + var r = function r(i) { + return t(i) ? o() : h(); + };s ? r(i) : n ? _this2._win.webkitNotifications.requestPermission(function (i) { + r(i); + }) : e ? _this2._win.Notification.requestPermission().then(function (i) { + r(i); + }).catch(h) : o(); + }); + } + }, { + key: "has", + value: function has() { + return this.get() === this.GRANTED; + } + }, { + key: "get", + value: function get() { + var i = void 0;return i = this._win.Notification && this._win.Notification.permission ? this._win.Notification.permission : this._win.webkitNotifications && this._win.webkitNotifications.checkPermission ? this._permissions[this._win.webkitNotifications.checkPermission()] : navigator.mozNotification ? this.GRANTED : this._win.external && this._win.external.msIsSiteMode ? this._win.external.msIsSiteMode() ? this.GRANTED : this.DEFAULT : this.GRANTED; + } + }]); + + return Permission; +}(); + +exports.default = Permission; +; + +},{}],3:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _Messages = require("./Messages"); + +var _Messages2 = _interopRequireDefault(_Messages); + +var _Permission = require("./Permission"); + +var _Permission2 = _interopRequireDefault(_Permission); + +var _Util = require("./Util"); + +var _Util2 = _interopRequireDefault(_Util); + +var _DesktopAgent = require("./agents/DesktopAgent"); + +var _DesktopAgent2 = _interopRequireDefault(_DesktopAgent); + +var _MobileChromeAgent = require("./agents/MobileChromeAgent"); + +var _MobileChromeAgent2 = _interopRequireDefault(_MobileChromeAgent); + +var _MobileFirefoxAgent = require("./agents/MobileFirefoxAgent"); + +var _MobileFirefoxAgent2 = _interopRequireDefault(_MobileFirefoxAgent); + +var _MSAgent = require("./agents/MSAgent"); + +var _MSAgent2 = _interopRequireDefault(_MSAgent); + +var _WebKitAgent = require("./agents/WebKitAgent"); + +var _WebKitAgent2 = _interopRequireDefault(_WebKitAgent); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Push = function () { + function Push(t) { + _classCallCheck(this, Push); + + this._currentId = 0, this._notifications = {}, this._win = t, this.Permission = new _Permission2.default(t), this._agents = { desktop: new _DesktopAgent2.default(t), chrome: new _MobileChromeAgent2.default(t), firefox: new _MobileFirefoxAgent2.default(t), ms: new _MSAgent2.default(t), webkit: new _WebKitAgent2.default(t) }, this._configuration = { serviceWorker: "/serviceWorker.min.js", fallback: function fallback(t) {} }; + } + + _createClass(Push, [{ + key: "_closeNotification", + value: function _closeNotification(t) { + var i = !0;var e = this._notifications[t];if (void 0 !== e) { + if (i = this._removeNotification(t), this._agents.desktop.isSupported()) this._agents.desktop.close(e);else if (this._agents.webkit.isSupported()) this._agents.webkit.close(e);else { + if (!this._agents.ms.isSupported()) throw i = !1, new Error(_Messages2.default.errors.unknown_interface);this._agents.ms.close(); + }return i; + }return !1; + } + }, { + key: "_addNotification", + value: function _addNotification(t) { + var i = this._currentId;return this._notifications[i] = t, this._currentId++, i; + } + }, { + key: "_removeNotification", + value: function _removeNotification(t) { + var i = !1;return this._notifications.hasOwnProperty(t) && (delete this._notifications[t], i = !0), i; + } + }, { + key: "_prepareNotification", + value: function _prepareNotification(t, i) { + var _this = this; + + var e = void 0;return e = { get: function get() { + return _this._notifications[t]; + }, close: function close() { + _this._closeNotification(t); + } }, i.timeout && setTimeout(function () { + e.close(); + }, i.timeout), e; + } + }, { + key: "_serviceWorkerCallback", + value: function _serviceWorkerCallback(t, i, e) { + var _this2 = this; + + var s = this._addNotification(t[t.length - 1]);navigator.serviceWorker.addEventListener("message", function (t) { + var i = JSON.parse(t.data);"close" === i.action && Number.isInteger(i.id) && _this2._removeNotification(i.id); + }), e(this._prepareNotification(s, i)); + } + }, { + key: "_createCallback", + value: function _createCallback(t, i, e) { + var _this3 = this; + + var s = void 0, + o = null;if (i = i || {}, s = function s(t) { + _this3._removeNotification(t), _Util2.default.isFunction(i.onClose) && i.onClose.call(_this3, o); + }, this._agents.desktop.isSupported()) try { + o = this._agents.desktop.create(t, i); + } catch (s) { + var _o = this._currentId, + n = this.config().serviceWorker, + r = function r(t) { + return _this3._serviceWorkerCallback(t, i, e); + };this._agents.chrome.isSupported() && this._agents.chrome.create(_o, t, i, n, r); + } else this._agents.webkit.isSupported() ? o = this._agents.webkit.create(t, i) : this._agents.firefox.isSupported() ? this._agents.firefox.create(t, i) : this._agents.ms.isSupported() ? o = this._agents.ms.create(t, i) : (i.title = t, this.config().fallback(i));if (null !== o) { + var _t = this._addNotification(o), + _n = this._prepareNotification(_t, i);_Util2.default.isFunction(i.onShow) && o.addEventListener("show", i.onShow), _Util2.default.isFunction(i.onError) && o.addEventListener("error", i.onError), _Util2.default.isFunction(i.onClick) && o.addEventListener("click", i.onClick), o.addEventListener("close", function () { + s(_t); + }), o.addEventListener("cancel", function () { + s(_t); + }), e(_n); + }e(null); + } + }, { + key: "create", + value: function create(t, i) { + var _this4 = this; + + var e = void 0;if (!_Util2.default.isString(t)) throw new Error(_Messages2.default.errors.invalid_title);return e = this.Permission.has() ? function (e, s) { + try { + _this4._createCallback(t, i, e); + } catch (t) { + s(t); + } + } : function (e, s) { + _this4.Permission.request().then(function () { + _this4._createCallback(t, i, e); + }).catch(function () { + s(_Messages2.default.errors.permission_denied); + }); + }, new Promise(e); + } + }, { + key: "count", + value: function count() { + var t = void 0, + i = 0;for (t in this._notifications) { + this._notifications.hasOwnProperty(t) && i++; + }return i; + } + }, { + key: "close", + value: function close(t) { + var i = void 0, + e = void 0;for (i in this._notifications) { + if (this._notifications.hasOwnProperty(i) && (e = this._notifications[i]).tag === t) return this._closeNotification(i); + } + } + }, { + key: "clear", + value: function clear() { + var t = void 0, + i = !0;for (t in this._notifications) { + this._notifications.hasOwnProperty(t) && (i = i && this._closeNotification(t)); + }return i; + } + }, { + key: "supported", + value: function supported() { + var t = !1;for (var i in this._agents) { + this._agents.hasOwnProperty(i) && (t = t || this._agents[i].isSupported()); + }return t; + } + }, { + key: "config", + value: function config(t) { + return (void 0 !== t || null !== t && _Util2.default.isObject(t)) && _Util2.default.objectMerge(this._configuration, t), this._configuration; + } + }, { + key: "extend", + value: function extend(t) { + var i, + e = {}.hasOwnProperty;if (!e.call(t, "plugin")) throw new Error(_Messages2.default.errors.invalid_plugin);e.call(t, "config") && _Util2.default.isObject(t.config) && null !== t.config && this.config(t.config), i = new (0, t.plugin)(this.config());for (var s in i) { + e.call(i, s) && _Util2.default.isFunction(i[s]) && (this[s] = i[s]); + } + } + }]); + + return Push; +}(); + +exports.default = Push; +; + +},{"./Messages":1,"./Permission":2,"./Util":4,"./agents/DesktopAgent":6,"./agents/MSAgent":7,"./agents/MobileChromeAgent":8,"./agents/MobileFirefoxAgent":9,"./agents/WebKitAgent":10}],4:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Util = function () { + function Util() { + _classCallCheck(this, Util); + } + + _createClass(Util, null, [{ + key: "isUndefined", + value: function isUndefined(t) { + return void 0 === t; + } + }, { + key: "isString", + value: function isString(t) { + return "string" == typeof t; + } + }, { + key: "isFunction", + value: function isFunction(t) { + return t && "[object Function]" === {}.toString.call(t); + } + }, { + key: "isObject", + value: function isObject(t) { + return "object" == (typeof t === "undefined" ? "undefined" : _typeof(t)); + } + }, { + key: "objectMerge", + value: function objectMerge(t, i) { + for (var e in i) { + t.hasOwnProperty(e) && this.isObject(t[e]) && this.isObject(i[e]) ? this.objectMerge(t[e], i[e]) : t[e] = i[e]; + } + } + }]); + + return Util; +}(); + +exports.default = Util; +; + +},{}],5:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AbstractAgent = function AbstractAgent(t) { + _classCallCheck(this, AbstractAgent); + + this._win = t; +}; + +exports.default = AbstractAgent; +; + +},{}],6:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _AbstractAgent2 = require("./AbstractAgent"); + +var _AbstractAgent3 = _interopRequireDefault(_AbstractAgent2); + +var _Util = require("../Util"); + +var _Util2 = _interopRequireDefault(_Util); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var DesktopAgent = function (_AbstractAgent) { + _inherits(DesktopAgent, _AbstractAgent); + + function DesktopAgent() { + _classCallCheck(this, DesktopAgent); + + return _possibleConstructorReturn(this, (DesktopAgent.__proto__ || Object.getPrototypeOf(DesktopAgent)).apply(this, arguments)); + } + + _createClass(DesktopAgent, [{ + key: "isSupported", + value: function isSupported() { + return void 0 !== this._win.Notification; + } + }, { + key: "create", + value: function create(t, i) { + return new this._win.Notification(t, { icon: _Util2.default.isString(i.icon) || _Util2.default.isUndefined(i.icon) ? i.icon : i.icon.x32, body: i.body, tag: i.tag, requireInteraction: i.requireInteraction }); + } + }, { + key: "close", + value: function close(t) { + t.close(); + } + }]); + + return DesktopAgent; +}(_AbstractAgent3.default); + +exports.default = DesktopAgent; +; + +},{"../Util":4,"./AbstractAgent":5}],7:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _AbstractAgent2 = require("./AbstractAgent"); + +var _AbstractAgent3 = _interopRequireDefault(_AbstractAgent2); + +var _Util = require("../Util"); + +var _Util2 = _interopRequireDefault(_Util); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var MSAgent = function (_AbstractAgent) { + _inherits(MSAgent, _AbstractAgent); + + function MSAgent() { + _classCallCheck(this, MSAgent); + + return _possibleConstructorReturn(this, (MSAgent.__proto__ || Object.getPrototypeOf(MSAgent)).apply(this, arguments)); + } + + _createClass(MSAgent, [{ + key: "isSupported", + value: function isSupported() { + return void 0 !== this._win.external && void 0 !== this._win.external.msIsSiteMode; + } + }, { + key: "create", + value: function create(e, t) { + return this._win.external.msSiteModeClearIconOverlay(), this._win.external.msSiteModeSetIconOverlay(_Util2.default.isString(t.icon) || _Util2.default.isUndefined(t.icon) ? t.icon : t.icon.x16, e), this._win.external.msSiteModeActivate(), null; + } + }, { + key: "close", + value: function close() { + this._win.external.msSiteModeClearIconOverlay(); + } + }]); + + return MSAgent; +}(_AbstractAgent3.default); + +exports.default = MSAgent; +; + +},{"../Util":4,"./AbstractAgent":5}],8:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _AbstractAgent2 = require("./AbstractAgent"); + +var _AbstractAgent3 = _interopRequireDefault(_AbstractAgent2); + +var _Util = require("../Util"); + +var _Util2 = _interopRequireDefault(_Util); + +var _Messages = require("../Messages"); + +var _Messages2 = _interopRequireDefault(_Messages); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var MobileChromeAgent = function (_AbstractAgent) { + _inherits(MobileChromeAgent, _AbstractAgent); + + function MobileChromeAgent() { + _classCallCheck(this, MobileChromeAgent); + + return _possibleConstructorReturn(this, (MobileChromeAgent.__proto__ || Object.getPrototypeOf(MobileChromeAgent)).apply(this, arguments)); + } + + _createClass(MobileChromeAgent, [{ + key: "isSupported", + value: function isSupported() { + return void 0 !== this._win.navigator && void 0 !== this._win.navigator.serviceWorker; + } + }, { + key: "getFunctionBody", + value: function getFunctionBody(t) { + return t.toString().match(/function[^{]+{([\s\S]*)}$/)[1]; + } + }, { + key: "create", + value: function create(t, e, i, o, r) { + var _this2 = this; + + this._win.navigator.serviceWorker.register(o), this._win.navigator.serviceWorker.ready.then(function (o) { + var n = { id: t, link: i.link, origin: document.location.href, onClick: _Util2.default.isFunction(i.onClick) ? _this2.getFunctionBody(i.onClick) : "", onClose: _Util2.default.isFunction(i.onClose) ? _this2.getFunctionBody(i.onClose) : "" };void 0 !== i.data && null !== i.data && (n = Object.assign(n, i.data)), o.showNotification(e, { icon: i.icon, body: i.body, vibrate: i.vibrate, tag: i.tag, data: n, requireInteraction: i.requireInteraction, silent: i.silent }).then(function () { + o.getNotifications().then(function (t) { + o.active.postMessage(""), r(t); + }); + }).catch(function (t) { + throw new Error(_Messages2.default.errors.sw_notification_error + t.message); + }); + }).catch(function (t) { + throw new Error(_Messages2.default.errors.sw_registration_error + t.message); + }); + } + }, { + key: "close", + value: function close() {} + }]); + + return MobileChromeAgent; +}(_AbstractAgent3.default); + +exports.default = MobileChromeAgent; +; + +},{"../Messages":1,"../Util":4,"./AbstractAgent":5}],9:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _AbstractAgent2 = require("./AbstractAgent"); + +var _AbstractAgent3 = _interopRequireDefault(_AbstractAgent2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var MobileFirefoxAgent = function (_AbstractAgent) { + _inherits(MobileFirefoxAgent, _AbstractAgent); + + function MobileFirefoxAgent() { + _classCallCheck(this, MobileFirefoxAgent); + + return _possibleConstructorReturn(this, (MobileFirefoxAgent.__proto__ || Object.getPrototypeOf(MobileFirefoxAgent)).apply(this, arguments)); + } + + _createClass(MobileFirefoxAgent, [{ + key: "isSupported", + value: function isSupported() { + return void 0 !== this._win.navigator.mozNotification; + } + }, { + key: "create", + value: function create(t, i) { + var o = this._win.navigator.mozNotification.createNotification(t, i.body, i.icon);return o.show(), o; + } + }]); + + return MobileFirefoxAgent; +}(_AbstractAgent3.default); + +exports.default = MobileFirefoxAgent; +; + +},{"./AbstractAgent":5}],10:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _AbstractAgent2 = require("./AbstractAgent"); + +var _AbstractAgent3 = _interopRequireDefault(_AbstractAgent2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var WebKitAgent = function (_AbstractAgent) { + _inherits(WebKitAgent, _AbstractAgent); + + function WebKitAgent() { + _classCallCheck(this, WebKitAgent); + + return _possibleConstructorReturn(this, (WebKitAgent.__proto__ || Object.getPrototypeOf(WebKitAgent)).apply(this, arguments)); + } + + _createClass(WebKitAgent, [{ + key: "isSupported", + value: function isSupported() { + return void 0 !== this._win.webkitNotifications; + } + }, { + key: "create", + value: function create(t, e) { + var i = this._win.webkitNotifications.createNotification(e.icon, t, e.body);return i.show(), i; + } + }, { + key: "close", + value: function close(t) { + t.cancel(); + } + }]); + + return WebKitAgent; +}(_AbstractAgent3.default); + +exports.default = WebKitAgent; +; + +},{"./AbstractAgent":5}],11:[function(require,module,exports){ +"use strict"; + +var _Push = require("./classes/Push"); + +var _Push2 = _interopRequireDefault(_Push); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = new _Push2.default("undefined" != typeof window ? window : undefined); + +},{"./classes/Push":3}]},{},[11])(11) +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY2xhc3Nlcy9NZXNzYWdlcy5qcyIsInNyYy9jbGFzc2VzL1Blcm1pc3Npb24uanMiLCJzcmMvY2xhc3Nlcy9QdXNoLmpzIiwic3JjL2NsYXNzZXMvVXRpbC5qcyIsInNyYy9jbGFzc2VzL2FnZW50cy9BYnN0cmFjdEFnZW50LmpzIiwic3JjL2NsYXNzZXMvYWdlbnRzL0Rlc2t0b3BBZ2VudC5qcyIsInNyYy9jbGFzc2VzL2FnZW50cy9NU0FnZW50LmpzIiwic3JjL2NsYXNzZXMvYWdlbnRzL01vYmlsZUNocm9tZUFnZW50LmpzIiwic3JjL2NsYXNzZXMvYWdlbnRzL01vYmlsZUZpcmVmb3hBZ2VudC5qcyIsInNyYy9jbGFzc2VzL2FnZW50cy9XZWJLaXRBZ2VudC5qcyIsInNyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0FDQUEsSUFBTSxjQUFjLGlDQUdsQixVQUNFLGtFQUNBLDBIQUNBLG9FQUNBLDZEQUNBLCtHQUNBLHdHQUNBOzs7Ozs7Ozs7Ozs7O0lDVmlCO0FBRW5CLHNCQUFZOzs7QUFDVixTQUFLLE9BQU8sR0FDWixLQUFLLFVBQVUsV0FDZixLQUFLLFVBQVUsV0FDZixLQUFLLFNBQVMsVUFDZCxLQUFLLGdCQUNILEtBQUssU0FDTCxLQUFLLFNBQ0wsS0FBSztBQVVUOzs7OzRCQUFRLEdBQVc7QUFDakIsYUFBUSxVQUFVLFNBQVMsSUFBSyxLQUFLLGlDQUF3QixhQUFhLEtBQUs7QUFVakY7Ozt5Q0FBcUIsR0FBVzs7O0FBQzlCLFVBQU0sSUFBVyxLQUFLLFVBRWpCLElBQVU7WUFBQyx3RUFBUyxNQUFLLEtBQUssYUFBYTthQUN6QixNQUFYLEtBQTBCLE1BQUssS0FBSyx3QkFDNUMsSUFBUyxNQUFLLEtBQUssb0JBQW9CLG9CQUNyQyxNQUFXLE1BQUssV0FBc0IsTUFBWCxJQUN6QixLQUFXLE1BQ04sS0FBVTtPQUx0QixDQVNHLE1B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TyxHQUFPO0FBQ1osVUFBSSxJQUFlLEtBQUssS0FBSyxvQkFBb0IsbUJBQy9DLEVBQVEsTUFDUixHQUNBLEVBQVEsTUFLVixPQUZBLEVBQWEsUUFFTjtBQU9UOzs7MEJBQU07QUFDSixRQUFhOzs7Ozs7Ozs7Ozs7O0FDdENWLEFBQVU7Ozs7OztBQUVqQixPQUFPLFVBQVUsQUFBSSxtQkFBdUIsc0JBQVgsU0FBeUIsQUFBUyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJjb25zdCBlcnJvclByZWZpeCA9ICdQdXNoRXJyb3I6JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlcnJvcnM6IHtcbiAgICBpbmNvbXBhdGlibGU6IGAke2Vycm9yUHJlZml4fSBQdXNoLmpzIGlzIGluY29tcGF0aWJsZSB3aXRoIGJyb3dzZXIuYCxcbiAgICBpbnZhbGlkX3BsdWdpbjogYCR7ZXJyb3JQcmVmaXh9IHBsdWdpbiBjbGFzcyBtaXNzaW5nIGZyb20gcGx1Z2luIG1hbmlmZXN0IChpbnZhbGlkIHBsdWdpbikuIFBsZWFzZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbi5gLFxuICAgIGludmFsaWRfdGl0bGU6IGAke2Vycm9yUHJlZml4fSB0aXRsZSBvZiBub3RpZmljYXRpb24gbXVzdCBiZSBhIHN0cmluZ2AsXG4gICAgcGVybWlzc2lvbl9kZW5pZWQ6IGAke2Vycm9yUHJlZml4fSBwZXJtaXNzaW9uIHJlcXVlc3QgZGVjbGluZWRgLFxuICAgIHN3X25vdGlmaWNhdGlvbl9lcnJvcjogYCR7ZXJyb3JQcmVmaXh9IGNvdWxkIG5vdCBzaG93IGEgU2VydmljZVdvcmtlciBub3RpZmljYXRpb24gZHVlIHRvIHRoZSBmb2xsb3dpbmcgcmVhc29uOiBgLFxuICAgIHN3X3JlZ2lzdHJhdGlvbl9lcnJvcjogYCR7ZXJyb3JQcmVmaXh9IGNvdWxkIG5vdCByZWdpc3RlciB0aGUgU2VydmljZVdvcmtlciBkdWUgdG8gdGhlIGZvbGxvd2luZyByZWFzb246IGAsXG4gICAgdW5rbm93bl9pbnRlcmZhY2U6IGAke2Vycm9yUHJlZml4fSB1bmFibGUgdG8gY3JlYXRlIG5vdGlmaWNhdGlvbjogdW5rbm93biBpbnRlcmZhY2VgLFxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uIHtcblxuICBjb25zdHJ1Y3Rvcih3aW4pIHtcbiAgICB0aGlzLl93aW4gPSB3aW47XG4gICAgdGhpcy5HUkFOVEVEID0gJ2dyYW50ZWQnO1xuICAgIHRoaXMuREVGQVVMVCA9ICdkZWZhdWx0JztcbiAgICB0aGlzLkRFTklFRCA9ICdkZW5pZWQnO1xuICAgIHRoaXMuX3Blcm1pc3Npb25zID0gW1xuICAgICAgdGhpcy5HUkFOVEVELFxuICAgICAgdGhpcy5ERUZBVUxULFxuICAgICAgdGhpcy5ERU5JRURcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIHBlcm1pc3Npb24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9uc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkdyYW50ZWQgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgcGVybWlzc2lvbiBpcyBncmFudGVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGVuaWVkIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHBlcm1pc3Npb24gaXMgZGVuaWVkXG4gICAqIEByZXR1cm4ge3ZvaWQsIFByb21pc2V9XG4gICAqL1xuICByZXF1ZXN0KG9uR3JhbnRlZCwgb25EZW5pZWQpIHtcbiAgICByZXR1cm4gKGFyZ3VtZW50cy5sZW5ndGggPiAwKSA/IHRoaXMuX3JlcXVlc3RXaXRoQ2FsbGJhY2soLi4uYXJndW1lbnRzKSA6IHRoaXMuX3JlcXVlc3RBc1Byb21pc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbGQgcGVybWlzc2lvbnMgaW1wbGVtZW50YXRpb24gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBhIHByb21pc2UgYmFzZWQgb25lXG4gICAqIEBkZXByZWNhdGVkIFNpbmNlIFYxLjAuNFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkdyYW50ZWQgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgcGVybWlzc2lvbiBpcyBncmFudGVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRGVuaWVkIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHBlcm1pc3Npb24gaXMgZGVuaWVkXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBfcmVxdWVzdFdpdGhDYWxsYmFjayhvbkdyYW50ZWQsIG9uRGVuaWVkKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmdldCgpO1xuXG4gICAgIHZhciByZXNvbHZlID0gKHJlc3VsdCA9IHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucGVybWlzc2lvbikgPT4ge1xuICAgICAgaWYgKHR5cGVvZihyZXN1bHQpPT09J3VuZGVmaW5lZCcgJiYgdGhpcy5fd2luLndlYmtpdE5vdGlmaWNhdGlvbnMpXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX3dpbi53ZWJraXROb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbigpO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdGhpcy5HUkFOVEVEIHx8IHJlc3VsdCA9PT0gMCkge1xuICAgICAgICBpZiAob25HcmFudGVkKSBvbkdyYW50ZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAob25EZW5pZWQpIG9uRGVuaWVkKCk7XG4gICAgfVxuXG4gICAgLyogUGVybWlzc2lvbnMgYWxyZWFkeSBzZXQgKi9cbiAgICBpZiAoZXhpc3RpbmcgIT09IHRoaXMuREVGQVVMVCkge1xuICAgICAgcmVzb2x2ZShleGlzdGluZyk7XG4gICAgfVxuICAgIC8qIFNhZmFyaSA2KywgTGVnYWN5IHdlYmtpdCBicm93c2VycyAqL1xuICAgIGVsc2UgaWYgKHRoaXMuX3dpbi53ZWJraXROb3RpZmljYXRpb25zICYmIHRoaXMuX3dpbi53ZWJraXROb3RpZmljYXRpb25zLmNoZWNrUGVybWlzc2lvbikge1xuICAgICAgdGhpcy5fd2luLndlYmtpdE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb24ocmVzb2x2ZSk7XG4gICAgfVxuICAgIC8qIENocm9tZSAyMysgKi9cbiAgICBlbHNlIGlmICh0aGlzLl93aW4uTm90aWZpY2F0aW9uICYmIHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24pIHtcbiAgICAgIHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG9uRGVuaWVkKSBvbkRlbmllZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8qIExldCB0aGUgdXNlciBjb250aW51ZSBieSBkZWZhdWx0ICovXG4gICAgZWxzZSBpZiAob25HcmFudGVkKSB7XG4gICAgICBvbkdyYW50ZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgcGVybWlzc2lvbiBmb3IgZGVza3RvcCBub3RpZmljYXRpb25zIGluIGEgcHJvbWlzZSBiYXNlZCB3YXlcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIF9yZXF1ZXN0QXNQcm9taXNlKCkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nZXQoKTtcblxuICAgIGxldCBpc0dyYW50ZWQgPSByZXN1bHQgPT4gKHJlc3VsdCA9PT0gdGhpcy5HUkFOVEVEIHx8IHJlc3VsdCA9PT0gMCk7XG5cbiAgICAvKiBQZXJtaXNzaW9ucyBhbHJlYWR5IHNldCAqL1xuICAgIHZhciBoYXNQZXJtaXNzaW9ucyA9IChleGlzdGluZyAhPT0gdGhpcy5ERUZBVUxUKTtcblxuICAgIC8qIFNhZmFyaSA2KywgQ2hyb21lIDIzKyAqL1xuICAgIHZhciBpc01vZGVybkFQSSA9ICh0aGlzLl93aW4uTm90aWZpY2F0aW9uICYmIHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24pO1xuXG4gICAgLyogTGVnYWN5IHdlYmtpdCBicm93c2VycyAqL1xuICAgIHZhciBpc1dlYmtpdEFQSSA9ICh0aGlzLl93aW4ud2Via2l0Tm90aWZpY2F0aW9ucyAmJiB0aGlzLl93aW4ud2Via2l0Tm90aWZpY2F0aW9ucy5jaGVja1Blcm1pc3Npb24pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlUHJvbWlzZSwgcmVqZWN0UHJvbWlzZSkgPT4ge1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSByZXN1bHQgPT4gKGlzR3JhbnRlZChyZXN1bHQpKSA/IHJlc29sdmVQcm9taXNlKCkgOiByZWplY3RQcm9taXNlKCk7XG5cbiAgICAgIGlmIChoYXNQZXJtaXNzaW9ucykge1xuICAgICAgIHJlc29sdmVyKGV4aXN0aW5nKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNXZWJraXRBUEkpIHtcbiAgICAgICAgdGhpcy5fd2luLndlYmtpdE5vdGlmaWNhdGlvbnMucmVxdWVzdFBlcm1pc3Npb24ocmVzdWx0ID0+IHsgcmVzb2x2ZXIocmVzdWx0KSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzTW9kZXJuQVBJKSB7XG4gICAgICAgIHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucmVxdWVzdFBlcm1pc3Npb24oKS50aGVuKHJlc3VsdCA9PiB7IHJlc29sdmVyKHJlc3VsdCkgfSkuY2F0Y2gocmVqZWN0UHJvbWlzZSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmVzb2x2ZVByb21pc2UoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIFB1c2ggaGFzIGJlZW4gZ3JhbnRlZCBwZXJtaXNzaW9uIHRvIHJ1blxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgaGFzKCkge1xuICAgIHJldHVybiB0aGlzLmdldCgpID09PSB0aGlzLkdSQU5URUQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbiBsZXZlbFxuICAgKiBAcmV0dXJuIHtQZXJtaXNzaW9ufSBUaGUgcGVybWlzc2lvbiBsZXZlbFxuICAgKi9cbiAgZ2V0KCkge1xuICAgIGxldCBwZXJtaXNzaW9uO1xuXG4gICAgLyogU2FmYXJpIDYrLCBDaHJvbWUgMjMrICovXG4gICAgaWYgKHRoaXMuX3dpbi5Ob3RpZmljYXRpb24gJiYgdGhpcy5fd2luLk5vdGlmaWNhdGlvbi5wZXJtaXNzaW9uKVxuICAgICAgcGVybWlzc2lvbiA9IHRoaXMuX3dpbi5Ob3RpZmljYXRpb24ucGVybWlzc2lvbjtcblxuICAgIC8qIExlZ2FjeSB3ZWJraXQgYnJvd3NlcnMgKi9cbiAgICBlbHNlIGlmICh0aGlzLl93aW4ud2Via2l0Tm90aWZpY2F0aW9ucyAmJiB0aGlzLl93aW4ud2Via2l0Tm90aWZpY2F0aW9ucy5jaGVja1Blcm1pc3Npb24pXG4gICAgICBwZXJtaXNzaW9uID0gdGhpcy5fcGVybWlzc2lvbnNbdGhpcy5fd2luLndlYmtpdE5vdGlmaWNhdGlvbnMuY2hlY2tQZXJtaXNzaW9uKCldO1xuXG4gICAgLyogRmlyZWZveCBNb2JpbGUgKi9cbiAgICBlbHNlIGlmIChuYXZpZ2F0b3IubW96Tm90aWZpY2F0aW9uKVxuICAgICAgcGVybWlzc2lvbiA9IHRoaXMuR1JBTlRFRDtcblxuICAgIC8qIElFOSsgKi9cbiAgICBlbHNlIGlmICh0aGlzLl93aW4uZXh0ZXJuYWwgJiYgdGhpcy5fd2luLmV4dGVybmFsLm1zSXNTaXRlTW9kZSlcbiAgICAgIHBlcm1pc3Npb24gPSB0aGlzLl93aW4uZXh0ZXJuYWwubXNJc1NpdGVNb2RlKCkgPyB0aGlzLkdSQU5URUQgOiB0aGlzLkRFRkFVTFQ7XG5cbiAgICBlbHNlXG4gICAgICBwZXJtaXNzaW9uID0gdGhpcy5HUkFOVEVEO1xuXG4gICAgcmV0dXJuIHBlcm1pc3Npb247XG4gIH1cbn1cbiIsImltcG9ydCBNZXNzYWdlcyBmcm9tIFwiLi9NZXNzYWdlc1wiO1xuaW1wb3J0IFBlcm1pc3Npb24gZnJvbSBcIi4vUGVybWlzc2lvblwiO1xuaW1wb3J0IFV0aWwgZnJvbSBcIi4vVXRpbFwiO1xuLyogSW1wb3J0IG5vdGlmaWNhdGlvbiBhZ2VudHMgKi9cbmltcG9ydCBEZXNrdG9wQWdlbnQgZnJvbSBcIi4vYWdlbnRzL0Rlc2t0b3BBZ2VudFwiO1xuaW1wb3J0IE1vYmlsZUNocm9tZUFnZW50IGZyb20gXCIuL2FnZW50cy9Nb2JpbGVDaHJvbWVBZ2VudFwiO1xuaW1wb3J0IE1vYmlsZUZpcmVmb3hBZ2VudCBmcm9tIFwiLi9hZ2VudHMvTW9iaWxlRmlyZWZveEFnZW50XCI7XG5pbXBvcnQgTVNBZ2VudCBmcm9tIFwiLi9hZ2VudHMvTVNBZ2VudFwiO1xuaW1wb3J0IFdlYktpdEFnZW50IGZyb20gXCIuL2FnZW50cy9XZWJLaXRBZ2VudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQdXNoIHtcblxuICBjb25zdHJ1Y3Rvcih3aW4pIHtcbiAgICAvKiBQcml2YXRlIHZhcmlhYmxlcyAqL1xuXG4gICAgLyogSUQgdG8gdXNlIGZvciBuZXcgbm90aWZpY2F0aW9ucyAqL1xuICAgIHRoaXMuX2N1cnJlbnRJZCA9IDA7XG5cbiAgICAvKiBNYXAgb2Ygb3BlbiBub3RpZmljYXRpb25zICovXG4gICAgdGhpcy5fbm90aWZpY2F0aW9ucyA9IHt9O1xuXG4gICAgLyogV2luZG93IG9iamVjdCAqL1xuICAgIHRoaXMuX3dpbiA9IHdpbjtcblxuICAgIC8qIFB1YmxpYyB2YXJpYWJsZXMgKi9cbiAgICB0aGlzLlBlcm1pc3Npb24gPSBuZXcgUGVybWlzc2lvbih3aW4pO1xuXG4gICAgLyogQWdlbnRzICovXG4gICAgdGhpcy5fYWdlbnRzID0ge1xuICAgICAgZGVza3RvcDogbmV3IERlc2t0b3BBZ2VudCh3aW4pLFxuICAgICAgY2hyb21lOiBuZXcgTW9iaWxlQ2hyb21lQWdlbnQod2luKSxcbiAgICAgIGZpcmVmb3g6IG5ldyBNb2JpbGVGaXJlZm94QWdlbnQod2luKSxcbiAgICAgIG1zOiBuZXcgTVNBZ2VudCh3aW4pLFxuICAgICAgd2Via2l0OiBuZXcgV2ViS2l0QWdlbnQod2luKVxuICAgIH07XG5cbiAgICB0aGlzLl9jb25maWd1cmF0aW9uID0ge1xuICAgICAgc2VydmljZVdvcmtlcjogJy9zZXJ2aWNlV29ya2VyLm1pbi5qcycsXG4gICAgICBmYWxsYmFjazogZnVuY3Rpb24ocGF5bG9hZCkge31cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGEgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb25cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gYm9vbGVhbiBkZW5vdGluZyB3aGV0aGVyIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbG9zZU5vdGlmaWNhdGlvbihpZCkge1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLl9ub3RpZmljYXRpb25zW2lkXTtcblxuICAgIGlmIChub3RpZmljYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3VjY2VzcyA9IHRoaXMuX3JlbW92ZU5vdGlmaWNhdGlvbihpZCk7XG5cbiAgICAgIC8qIFNhZmFyaSA2KywgRmlyZWZveCAyMissIENocm9tZSAyMissIE9wZXJhIDI1KyAqL1xuICAgICAgaWYgKHRoaXMuX2FnZW50cy5kZXNrdG9wLmlzU3VwcG9ydGVkKCkpXG4gICAgICAgIHRoaXMuX2FnZW50cy5kZXNrdG9wLmNsb3NlKG5vdGlmaWNhdGlvbik7XG5cbiAgICAgIC8qIExlZ2FjeSBXZWJLaXQgYnJvd3NlcnMgKi9cbiAgICAgIGVsc2UgaWYgKHRoaXMuX2FnZW50cy53ZWJraXQuaXNTdXBwb3J0ZWQoKSlcbiAgICAgICAgdGhpcy5fYWdlbnRzLndlYmtpdC5jbG9zZShub3RpZmljYXRpb24pO1xuXG4gICAgICAvKiBJRTkgKi9cbiAgICAgIGVsc2UgaWYgKHRoaXMuX2FnZW50cy5tcy5pc1N1cHBvcnRlZCgpKVxuICAgICAgICB0aGlzLl9hZ2VudHMubXMuY2xvc2UoKTtcblxuICAgICAgZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKE1lc3NhZ2VzLmVycm9ycy51bmtub3duX2ludGVyZmFjZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbm90aWZpY2F0aW9uIHRvIHRoZSBnbG9iYWwgZGljdGlvbmFyeSBvZiBub3RpZmljYXRpb25zXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb25cbiAgICogQHJldHVybiB7SW50ZWdlcn0gRGljdGlvbmFyeSBrZXkgb2YgdGhlIG5vdGlmaWNhdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuX2N1cnJlbnRJZDtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25zW2lkXSA9IG5vdGlmaWNhdGlvbjtcbiAgICB0aGlzLl9jdXJyZW50SWQrKztcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJRFxuICAgKiBAcGFyYW0gIHtJbnRlZ2VyfSBpZCAtIERpY3Rpb25hcnkga2V5L0lEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gcmVtb3ZlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGJvb2xlYW4gZGVub3Rpbmcgc3VjY2Vzc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZU5vdGlmaWNhdGlvbihpZCkge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fbm90aWZpY2F0aW9ucy5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICAgIC8qIFdlJ3JlIHN1Y2Nlc3NmdWwgaWYgd2Ugb21pdCB0aGUgZ2l2ZW4gSUQgZnJvbSB0aGUgbmV3IGFycmF5ICovXG4gICAgICBkZWxldGUgdGhpcy5fbm90aWZpY2F0aW9uc1tpZF07XG4gICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSB3cmFwcGVyIGZvciBhIGdpdmVuIG5vdGlmaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IGlkIC0gRGljdGlvbmFyeSBrZXkvSUQgb2YgdGhlIG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0ge01hcH0gb3B0aW9ucyAtIE9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlIG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7TWFwfSB3cmFwcGVyIGhhc2htYXAgb2JqZWN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJlcGFyZU5vdGlmaWNhdGlvbihpZCwgb3B0aW9ucykge1xuICAgIGxldCB3cmFwcGVyO1xuXG4gICAgLyogV3JhcHBlciB1c2VkIHRvIGdldC9jbG9zZSBub3RpZmljYXRpb24gbGF0ZXIgb24gKi9cbiAgICB3cmFwcGVyID0ge1xuICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25zW2lkXTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2Nsb3NlTm90aWZpY2F0aW9uKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogQXV0b2Nsb3NlIHRpbWVvdXQgKi9cbiAgICBpZiAob3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd3JhcHBlci5jbG9zZSgpO1xuICAgICAgfSwgb3B0aW9ucy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBtb3N0IHJlY2VudCBub3RpZmljYXRpb24gZnJvbSBhIFNlcnZpY2VXb3JrZXIgYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGFycmF5XG4gICAqIEBwYXJhbSBub3RpZmljYXRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2VydmljZVdvcmtlckNhbGxiYWNrKG5vdGlmaWNhdGlvbnMsIG9wdGlvbnMsIHJlc29sdmUpIHtcbiAgICBsZXQgaWQgPSB0aGlzLl9hZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uc1tub3RpZmljYXRpb25zLmxlbmd0aCAtIDFdKTtcblxuICAgIC8qIExpc3RlbiBmb3IgY2xvc2UgcmVxdWVzdHMgZnJvbSB0aGUgU2VydmljZVdvcmtlciAqL1xuICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblxuICAgICAgaWYgKGRhdGEuYWN0aW9uID09PSAnY2xvc2UnICYmIE51bWJlci5pc0ludGVnZXIoZGF0YS5pZCkpXG4gICAgICAgIHRoaXMuX3JlbW92ZU5vdGlmaWNhdGlvbihkYXRhLmlkKTtcbiAgICB9KTtcblxuICAgIHJlc29sdmUodGhpcy5fcHJlcGFyZU5vdGlmaWNhdGlvbihpZCwgb3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgJ2NyZWF0ZScgbWV0aG9kXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQ2FsbGJhY2sodGl0bGUsIG9wdGlvbnMsIHJlc29sdmUpIHtcbiAgICBsZXQgbm90aWZpY2F0aW9uID0gbnVsbDtcbiAgICBsZXQgb25DbG9zZTtcblxuICAgIC8qIFNldCBlbXB0eSBzZXR0aW5ncyBpZiBub25lIGFyZSBzcGVjaWZpZWQgKi9cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8qIG9uQ2xvc2UgZXZlbnQgaGFuZGxlciAqL1xuICAgIG9uQ2xvc2UgPSAoaWQpID0+IHtcbiAgICAgIC8qIEEgYml0IHJlZHVuZGFudCwgYnV0IGNvdmVycyB0aGUgY2FzZXMgd2hlbiBjbG9zZSgpIGlzbid0IGV4cGxpY2l0bHkgY2FsbGVkICovXG4gICAgICB0aGlzLl9yZW1vdmVOb3RpZmljYXRpb24oaWQpO1xuICAgICAgaWYgKFV0aWwuaXNGdW5jdGlvbihvcHRpb25zLm9uQ2xvc2UpKSB7XG4gICAgICAgIG9wdGlvbnMub25DbG9zZS5jYWxsKHRoaXMsIG5vdGlmaWNhdGlvbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIFNhZmFyaSA2KywgRmlyZWZveCAyMissIENocm9tZSAyMissIE9wZXJhIDI1KyAqL1xuICAgIGlmICh0aGlzLl9hZ2VudHMuZGVza3RvcC5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvKiBDcmVhdGUgYSBub3RpZmljYXRpb24gdXNpbmcgdGhlIEFQSSBpZiBwb3NzaWJsZSAqL1xuICAgICAgICBub3RpZmljYXRpb24gPSB0aGlzLl9hZ2VudHMuZGVza3RvcC5jcmVhdGUodGl0bGUsIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2N1cnJlbnRJZDtcbiAgICAgICAgY29uc3Qgc3cgPSB0aGlzLmNvbmZpZygpLnNlcnZpY2VXb3JrZXI7XG4gICAgICAgIGNvbnN0IGNiID0gKG5vdGlmaWNhdGlvbnMpID0+IHRoaXMuX3NlcnZpY2VXb3JrZXJDYWxsYmFjayhub3RpZmljYXRpb25zLCBvcHRpb25zLCByZXNvbHZlKTtcbiAgICAgICAgLyogQ3JlYXRlIGEgQ2hyb21lIFNlcnZpY2VXb3JrZXIgbm90aWZpY2F0aW9uIGlmIGl0IGlzbid0IHN1cHBvcnRlZCAqL1xuICAgICAgICBpZiAodGhpcy5fYWdlbnRzLmNocm9tZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5fYWdlbnRzLmNocm9tZS5jcmVhdGUoaWQsIHRpdGxlLCBvcHRpb25zLCBzdywgY2IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBMZWdhY3kgV2ViS2l0IGJyb3dzZXJzICovXG4gICAgfSBlbHNlIGlmICh0aGlzLl9hZ2VudHMud2Via2l0LmlzU3VwcG9ydGVkKCkpXG4gICAgICBub3RpZmljYXRpb24gPSB0aGlzLl9hZ2VudHMud2Via2l0LmNyZWF0ZSh0aXRsZSwgb3B0aW9ucyk7XG5cbiAgICAvKiBGaXJlZm94IE1vYmlsZSAqL1xuICAgIGVsc2UgaWYgKHRoaXMuX2FnZW50cy5maXJlZm94LmlzU3VwcG9ydGVkKCkpXG4gICAgICB0aGlzLl9hZ2VudHMuZmlyZWZveC5jcmVhdGUodGl0bGUsIG9wdGlvbnMpO1xuXG4gICAgLyogSUU5ICovXG4gICAgZWxzZSBpZiAodGhpcy5fYWdlbnRzLm1zLmlzU3VwcG9ydGVkKCkpXG4gICAgICBub3RpZmljYXRpb24gPSB0aGlzLl9hZ2VudHMubXMuY3JlYXRlKHRpdGxlLCBvcHRpb25zKTtcblxuICAgIC8qIERlZmF1bHQgZmFsbGJhY2sgKi9cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMudGl0bGUgPSB0aXRsZTtcbiAgICAgIHRoaXMuY29uZmlnKCkuZmFsbGJhY2sob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmaWNhdGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLl9hZGROb3RpZmljYXRpb24obm90aWZpY2F0aW9uKTtcbiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLl9wcmVwYXJlTm90aWZpY2F0aW9uKGlkLCBvcHRpb25zKTtcblxuICAgICAgLyogTm90aWZpY2F0aW9uIGNhbGxiYWNrcyAqL1xuICAgICAgaWYgKFV0aWwuaXNGdW5jdGlvbihvcHRpb25zLm9uU2hvdykpXG4gICAgICAgIG5vdGlmaWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKCdzaG93Jywgb3B0aW9ucy5vblNob3cpO1xuXG4gICAgICBpZiAoVXRpbC5pc0Z1bmN0aW9uKG9wdGlvbnMub25FcnJvcikpXG4gICAgICAgIG5vdGlmaWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9wdGlvbnMub25FcnJvcik7XG5cbiAgICAgIGlmIChVdGlsLmlzRnVuY3Rpb24ob3B0aW9ucy5vbkNsaWNrKSlcbiAgICAgICAgbm90aWZpY2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb3B0aW9ucy5vbkNsaWNrKTtcblxuICAgICAgbm90aWZpY2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBvbkNsb3NlKGlkKTtcbiAgICAgIH0pO1xuXG4gICAgICBub3RpZmljYXRpb24uYWRkRXZlbnRMaXN0ZW5lcignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICBvbkNsb3NlKGlkKTtcbiAgICAgIH0pO1xuXG4gICAgICAvKiBSZXR1cm4gdGhlIHdyYXBwZXIgc28gdGhlIHVzZXIgY2FuIGNhbGwgY2xvc2UoKSAqL1xuICAgICAgcmVzb2x2ZSh3cmFwcGVyKTtcbiAgICB9XG5cbiAgICAvKiBCeSBkZWZhdWx0LCBwYXNzIGFuIGVtcHR5IHdyYXBwZXIgKi9cbiAgICByZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGRpc3BsYXlzIGEgbmV3IG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBjcmVhdGUodGl0bGUsIG9wdGlvbnMpIHtcbiAgICBsZXQgcHJvbWlzZUNhbGxiYWNrO1xuXG4gICAgLyogRmFpbCBpZiBubyBvciBhbiBpbnZhbGlkIHRpdGxlIGlzIHByb3ZpZGVkICovXG4gICAgaWYgKCFVdGlsLmlzU3RyaW5nKHRpdGxlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKE1lc3NhZ2VzLmVycm9ycy5pbnZhbGlkX3RpdGxlKTtcbiAgICB9XG5cbiAgICAvKiBSZXF1ZXN0IHBlcm1pc3Npb24gaWYgaXQgaXNuJ3QgZ3JhbnRlZCAqL1xuICAgIGlmICghdGhpcy5QZXJtaXNzaW9uLmhhcygpKSB7XG4gICAgICBwcm9taXNlQ2FsbGJhY2sgPSAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuUGVybWlzc2lvbi5yZXF1ZXN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlQ2FsbGJhY2sodGl0bGUsIG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KE1lc3NhZ2VzLmVycm9ycy5wZXJtaXNzaW9uX2RlbmllZCk7XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlQ2FsbGJhY2sgPSAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlQ2FsbGJhY2sodGl0bGUsIG9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShwcm9taXNlQ2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5vdGlmaWNhdGlvbiBjb3VudFxuICAgKiBAcmV0dXJuIHtJbnRlZ2VyfSBUaGUgbm90aWZpY2F0aW9uIGNvdW50XG4gICAqL1xuICBjb3VudCgpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ub3RpZmljYXRpb25zKVxuICAgICAgaWYgKHRoaXMuX25vdGlmaWNhdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkgY291bnQrKztcblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgYSBub3RpZmljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gdGFnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0YWcgLSBUYWcgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBjbG9zZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSBib29sZWFuIGRlbm90aW5nIHN1Y2Nlc3NcbiAgICovXG4gIGNsb3NlKHRhZykge1xuICAgIGxldCBrZXksIG5vdGlmaWNhdGlvbjtcblxuICAgIGZvciAoa2V5IGluIHRoaXMuX25vdGlmaWNhdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9ub3RpZmljYXRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbm90aWZpY2F0aW9uID0gdGhpcy5fbm90aWZpY2F0aW9uc1trZXldO1xuXG4gICAgICAgIC8qIFJ1biBvbmx5IGlmIHRoZSB0YWdzIG1hdGNoICovXG4gICAgICAgIGlmIChub3RpZmljYXRpb24udGFnID09PSB0YWcpIHtcblxuICAgICAgICAgIC8qIENhbGwgdGhlIG5vdGlmaWNhdGlvbidzIGNsb3NlKCkgbWV0aG9kICovXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlTm90aWZpY2F0aW9uKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBub3RpZmljYXRpb25zXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGJvb2xlYW4gZGVub3Rpbmcgd2hldGhlciB0aGUgY2xlYXIgd2FzIHN1Y2Nlc3NmdWwgaW4gY2xvc2luZyBhbGwgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgbGV0IGtleSwgc3VjY2VzcyA9IHRydWU7XG5cbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ub3RpZmljYXRpb25zKVxuICAgICAgaWYgKHRoaXMuX25vdGlmaWNhdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgdGhpcy5fY2xvc2VOb3RpZmljYXRpb24oa2V5KTtcblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbm90ZXMgd2hldGhlciBQdXNoIGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBicm93c2VyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3VwcG9ydGVkKCkge1xuICAgIGxldCBzdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgIGZvciAodmFyIGFnZW50IGluIHRoaXMuX2FnZW50cylcbiAgICAgIGlmICh0aGlzLl9hZ2VudHMuaGFzT3duUHJvcGVydHkoYWdlbnQpKVxuICAgICAgICBzdXBwb3J0ZWQgPSBzdXBwb3J0ZWQgfHwgdGhpcy5fYWdlbnRzW2FnZW50XS5pc1N1cHBvcnRlZCgpXG5cbiAgICByZXR1cm4gc3VwcG9ydGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHNldHRpbmdzIG9yIHJldHVybnMgYWxsIHNldHRpbmdzIGlmIG5vIHBhcmFtZXRlciBwYXNzZWRcbiAgICogQHBhcmFtIHNldHRpbmdzXG4gICAqL1xuICBjb25maWcoc2V0dGluZ3MpIHtcbiAgICBpZiAodHlwZW9mIHNldHRpbmdzICE9PSAndW5kZWZpbmVkJyB8fCBzZXR0aW5ncyAhPT0gbnVsbCAmJiBVdGlsLmlzT2JqZWN0KHNldHRpbmdzKSlcbiAgICAgIFV0aWwub2JqZWN0TWVyZ2UodGhpcy5fY29uZmlndXJhdGlvbiwgc2V0dGluZ3MpO1xuICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgZnVuY3Rpb25zIGZyb20gYSBwbHVnaW4gdG8gdGhlIG1haW4gbGlicmFyeVxuICAgKiBAcGFyYW0gcGx1Z2luXG4gICAqL1xuICBleHRlbmQobWFuaWZlc3QpIHtcbiAgICB2YXIgcGx1Z2luLCBQbHVnaW4sXG4gICAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgICBpZiAoIWhhc1Byb3AuY2FsbChtYW5pZmVzdCwgJ3BsdWdpbicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTWVzc2FnZXMuZXJyb3JzLmludmFsaWRfcGx1Z2luKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc1Byb3AuY2FsbChtYW5pZmVzdCwgJ2NvbmZpZycpICYmIFV0aWwuaXNPYmplY3QobWFuaWZlc3QuY29uZmlnKSAmJiBtYW5pZmVzdC5jb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb25maWcobWFuaWZlc3QuY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgUGx1Z2luID0gbWFuaWZlc3QucGx1Z2luO1xuICAgICAgcGx1Z2luID0gbmV3IFBsdWdpbih0aGlzLmNvbmZpZygpKVxuXG4gICAgICBmb3IgKHZhciBtZW1iZXIgaW4gcGx1Z2luKSB7XG4gICAgICAgIGlmIChoYXNQcm9wLmNhbGwocGx1Z2luLCBtZW1iZXIpICYmIFV0aWwuaXNGdW5jdGlvbihwbHVnaW5bbWVtYmVyXSkpXG4gICAgICAgICAgdGhpc1ttZW1iZXJdID0gcGx1Z2luW21lbWJlcl07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsIHtcbiAgc3RhdGljIGlzVW5kZWZpbmVkKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBpc1N0cmluZyhvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzdGF0aWMgaXNGdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIHt9LnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfVxuXG4gIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgfVxuXG4gIHN0YXRpYyBvYmplY3RNZXJnZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmICh0YXJnZXQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB0aGlzLmlzT2JqZWN0KHRhcmdldFtrZXldKSAmJiB0aGlzLmlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuICAgICAgICB0aGlzLm9iamVjdE1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBBYnN0cmFjdEFnZW50IHtcbiAgY29uc3RydWN0b3Iod2luKSB7XG4gICAgdGhpcy5fd2luID0gd2luO1xuICB9XG59XG4iLCJpbXBvcnQgQWJzdHJhY3RBZ2VudCBmcm9tICcuL0Fic3RyYWN0QWdlbnQnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi4vVXRpbCc7XG5cbi8qKlxuICogTm90aWZpY2F0aW9uIGFnZW50IGZvciBtb2Rlcm4gZGVza3RvcCBicm93c2VyczpcbiAqIFNhZmFyaSA2KywgRmlyZWZveCAyMissIENocm9tZSAyMissIE9wZXJhIDI1K1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZXNrdG9wQWdlbnQgZXh0ZW5kcyBBYnN0cmFjdEFnZW50IHtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gZGVub3Rpbmcgc3VwcG9ydFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYm9vbGVhbiBkZW5vdGluZyB3aGV0aGVyIHdlYmtpdCBub3RpZmljYXRpb25zIGFyZSBzdXBwb3J0ZWRcbiAgICovXG4gIGlzU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl93aW4uTm90aWZpY2F0aW9uICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHRpdGxlIC0gbm90aWZpY2F0aW9uIHRpdGxlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gbm90aWZpY2F0aW9uIG9wdGlvbnMgYXJyYXlcbiAgICogQHJldHVybnMge05vdGlmaWNhdGlvbn1cbiAgICovXG4gIGNyZWF0ZSh0aXRsZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgdGhpcy5fd2luLk5vdGlmaWNhdGlvbihcbiAgICAgIHRpdGxlLFxuICAgICAge1xuICAgICAgICBpY29uOiAoVXRpbC5pc1N0cmluZyhvcHRpb25zLmljb24pIHx8IFV0aWwuaXNVbmRlZmluZWQob3B0aW9ucy5pY29uKSkgPyBvcHRpb25zLmljb24gOiBvcHRpb25zLmljb24ueDMyLFxuICAgICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgIHJlcXVpcmVJbnRlcmFjdGlvbjogb3B0aW9ucy5yZXF1aXJlSW50ZXJhY3Rpb25cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGEgZ2l2ZW4gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBub3RpZmljYXRpb24gdG8gY2xvc2VcbiAgICovXG4gIGNsb3NlKG5vdGlmaWNhdGlvbikge1xuICAgIG5vdGlmaWNhdGlvbi5jbG9zZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgQWJzdHJhY3RBZ2VudCBmcm9tICcuL0Fic3RyYWN0QWdlbnQnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi4vVXRpbCc7XG5cbi8qKlxuICogTm90aWZpY2F0aW9uIGFnZW50IGZvciBJRTlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTVNBZ2VudCBleHRlbmRzIEFic3RyYWN0QWdlbnQge1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBkZW5vdGluZyBzdXBwb3J0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBib29sZWFuIGRlbm90aW5nIHdoZXRoZXIgd2Via2l0IG5vdGlmaWNhdGlvbnMgYXJlIHN1cHBvcnRlZFxuICAgKi9cbiAgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLl93aW4uZXh0ZXJuYWwgIT09IHVuZGVmaW5lZCkgJiYgKHRoaXMuX3dpbi5leHRlcm5hbC5tc0lzU2l0ZU1vZGUgIT09IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHRpdGxlIC0gbm90aWZpY2F0aW9uIHRpdGxlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gbm90aWZpY2F0aW9uIG9wdGlvbnMgYXJyYXlcbiAgICogQHJldHVybnMge05vdGlmaWNhdGlvbn1cbiAgICovXG4gIGNyZWF0ZSh0aXRsZSwgb3B0aW9ucykge1xuICAgIC8qIENsZWFyIGFueSBwcmV2aW91cyBub3RpZmljYXRpb25zICovXG4gICAgdGhpcy5fd2luLmV4dGVybmFsLm1zU2l0ZU1vZGVDbGVhckljb25PdmVybGF5KCk7XG5cbiAgICB0aGlzLl93aW4uZXh0ZXJuYWwubXNTaXRlTW9kZVNldEljb25PdmVybGF5KFxuICAgICAgKChVdGlsLmlzU3RyaW5nKG9wdGlvbnMuaWNvbikgfHwgVXRpbC5pc1VuZGVmaW5lZChvcHRpb25zLmljb24pKVxuICAgICAgICA/IG9wdGlvbnMuaWNvblxuICAgICAgICA6IG9wdGlvbnMuaWNvbi54MTYpLCB0aXRsZVxuICAgICk7XG5cbiAgICB0aGlzLl93aW4uZXh0ZXJuYWwubXNTaXRlTW9kZUFjdGl2YXRlKCk7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhIGdpdmVuIG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gbm90aWZpY2F0aW9uIHRvIGNsb3NlXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aGlzLl93aW4uZXh0ZXJuYWwubXNTaXRlTW9kZUNsZWFySWNvbk92ZXJsYXkoKVxuICB9XG59XG4iLCJpbXBvcnQgQWJzdHJhY3RBZ2VudCBmcm9tICcuL0Fic3RyYWN0QWdlbnQnO1xuaW1wb3J0IFV0aWwgZnJvbSAnLi4vVXRpbCc7XG5pbXBvcnQgTWVzc2FnZXMgZnJvbSAnLi4vTWVzc2FnZXMnO1xuXG4vKipcbiAqIE5vdGlmaWNhdGlvbiBhZ2VudCBmb3IgbW9kZXJuIGRlc2t0b3AgYnJvd3NlcnM6XG4gKiBTYWZhcmkgNissIEZpcmVmb3ggMjIrLCBDaHJvbWUgMjIrLCBPcGVyYSAyNStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlQ2hyb21lQWdlbnQgZXh0ZW5kcyBBYnN0cmFjdEFnZW50IHtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gZGVub3Rpbmcgc3VwcG9ydFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYm9vbGVhbiBkZW5vdGluZyB3aGV0aGVyIHdlYmtpdCBub3RpZmljYXRpb25zIGFyZSBzdXBwb3J0ZWRcbiAgICovXG4gIGlzU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl93aW4ubmF2aWdhdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuX3dpbi5uYXZpZ2F0b3Iuc2VydmljZVdvcmtlciAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIGJvZHkgYXMgYSBzdHJpbmdcbiAgICogQHBhcmFtIGZ1bmNcbiAgICovXG4gIGdldEZ1bmN0aW9uQm9keShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmMudG9TdHJpbmcoKS5tYXRjaCgvZnVuY3Rpb25bXntdK3soW1xcc1xcU10qKX0kLylbMV07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHRpdGxlIC0gbm90aWZpY2F0aW9uIHRpdGxlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gbm90aWZpY2F0aW9uIG9wdGlvbnMgYXJyYXlcbiAgICogQHJldHVybnMge05vdGlmaWNhdGlvbn1cbiAgICovXG4gIGNyZWF0ZShpZCwgdGl0bGUsIG9wdGlvbnMsIHNlcnZpY2VXb3JrZXIsIGNhbGxiYWNrKSB7XG4gICAgLyogUmVnaXN0ZXIgU2VydmljZVdvcmtlciAqL1xuICAgIHRoaXMuX3dpbi5uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcihzZXJ2aWNlV29ya2VyKTtcblxuICAgIHRoaXMuX3dpbi5uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeS50aGVuKHJlZ2lzdHJhdGlvbiA9PiB7XG4gICAgICAvKiBMb2NhbCBkYXRhIHRoZSBzZXJ2aWNlIHdvcmtlciB3aWxsIHVzZSAqL1xuICAgICAgbGV0IGxvY2FsRGF0YSA9IHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBsaW5rOiBvcHRpb25zLmxpbmssXG4gICAgICAgIG9yaWdpbjogZG9jdW1lbnQubG9jYXRpb24uaHJlZixcbiAgICAgICAgb25DbGljazogKFV0aWwuaXNGdW5jdGlvbihvcHRpb25zLm9uQ2xpY2spKSA/IHRoaXMuZ2V0RnVuY3Rpb25Cb2R5KG9wdGlvbnMub25DbGljaykgOiAnJyxcbiAgICAgICAgb25DbG9zZTogKFV0aWwuaXNGdW5jdGlvbihvcHRpb25zLm9uQ2xvc2UpKSA/IHRoaXMuZ2V0RnVuY3Rpb25Cb2R5KG9wdGlvbnMub25DbG9zZSkgOiAnJ1xuICAgICAgfTtcblxuICAgICAgLyogTWVyZ2UgdGhlIGxvY2FsIGRhdGEgd2l0aCB1c2VyLXByb3ZpZGVkIGRhdGEgKi9cbiAgICAgIGlmIChvcHRpb25zLmRhdGEgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmRhdGEgIT09IG51bGwpXG4gICAgICAgIGxvY2FsRGF0YSA9IE9iamVjdC5hc3NpZ24obG9jYWxEYXRhLCBvcHRpb25zLmRhdGEpO1xuXG4gICAgICAvKiBTaG93IHRoZSBub3RpZmljYXRpb24gKi9cbiAgICAgIHJlZ2lzdHJhdGlvbi5zaG93Tm90aWZpY2F0aW9uKFxuICAgICAgICB0aXRsZSxcbiAgICAgICAge1xuICAgICAgICAgIGljb246IG9wdGlvbnMuaWNvbixcbiAgICAgICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICAgICAgdmlicmF0ZTogb3B0aW9ucy52aWJyYXRlLFxuICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgZGF0YTogbG9jYWxEYXRhLFxuICAgICAgICAgIHJlcXVpcmVJbnRlcmFjdGlvbjogb3B0aW9ucy5yZXF1aXJlSW50ZXJhY3Rpb24sXG4gICAgICAgICAgc2lsZW50OiBvcHRpb25zLnNpbGVudFxuICAgICAgICB9XG4gICAgICApLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgIHJlZ2lzdHJhdGlvbi5nZXROb3RpZmljYXRpb25zKCkudGhlbihub3RpZmljYXRpb25zID0+IHtcbiAgICAgICAgICAvKiBTZW5kIGFuIGVtcHR5IG1lc3NhZ2Ugc28gdGhlIFNlcnZpY2VXb3JrZXIga25vd3Mgd2hvIHRoZSBjbGllbnQgaXMgKi9cbiAgICAgICAgICByZWdpc3RyYXRpb24uYWN0aXZlLnBvc3RNZXNzYWdlKCcnKTtcblxuICAgICAgICAgIC8qIFRyaWdnZXIgY2FsbGJhY2sgKi9cbiAgICAgICAgICBjYWxsYmFjayhub3RpZmljYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoTWVzc2FnZXMuZXJyb3JzLnN3X25vdGlmaWNhdGlvbl9lcnJvciArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihNZXNzYWdlcy5lcnJvcnMuc3dfcmVnaXN0cmF0aW9uX2Vycm9yICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYWxsIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgLy8gQ2FuJ3QgZG8gdGhpcyB3aXRoIHNlcnZpY2Ugd29ya2Vyc1xuICB9XG59XG4iLCJpbXBvcnQgQWJzdHJhY3RBZ2VudCBmcm9tICcuL0Fic3RyYWN0QWdlbnQnO1xuXG4vKipcbiAqIE5vdGlmaWNhdGlvbiBhZ2VudCBmb3IgbW9kZXJuIGRlc2t0b3AgYnJvd3NlcnM6XG4gKiBTYWZhcmkgNissIEZpcmVmb3ggMjIrLCBDaHJvbWUgMjIrLCBPcGVyYSAyNStcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlRmlyZWZveEFnZW50IGV4dGVuZHMgQWJzdHJhY3RBZ2VudCB7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBib29sZWFuIGRlbm90aW5nIHN1cHBvcnRcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGJvb2xlYW4gZGVub3Rpbmcgd2hldGhlciB3ZWJraXQgbm90aWZpY2F0aW9ucyBhcmUgc3VwcG9ydGVkXG4gICAqL1xuICBpc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2luLm5hdmlnYXRvci5tb3pOb3RpZmljYXRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0gdGl0bGUgLSBub3RpZmljYXRpb24gdGl0bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBub3RpZmljYXRpb24gb3B0aW9ucyBhcnJheVxuICAgKiBAcmV0dXJucyB7Tm90aWZpY2F0aW9ufVxuICAgKi9cbiAgY3JlYXRlKHRpdGxlLCBvcHRpb25zKSB7XG4gICAgbGV0IG5vdGlmaWNhdGlvbiA9IHRoaXMuX3dpbi5uYXZpZ2F0b3IubW96Tm90aWZpY2F0aW9uLmNyZWF0ZU5vdGlmaWNhdGlvbihcbiAgICAgIHRpdGxlLFxuICAgICAgb3B0aW9ucy5ib2R5LFxuICAgICAgb3B0aW9ucy5pY29uXG4gICAgKTtcblxuICAgIG5vdGlmaWNhdGlvbi5zaG93KCk7XG5cbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQgQWJzdHJhY3RBZ2VudCBmcm9tICcuL0Fic3RyYWN0QWdlbnQnO1xuXG4vKipcbiAqIE5vdGlmaWNhdGlvbiBhZ2VudCBmb3Igb2xkIENocm9tZSB2ZXJzaW9ucyAoYW5kIHNvbWUpIEZpcmVmb3hcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViS2l0QWdlbnQgZXh0ZW5kcyBBYnN0cmFjdEFnZW50IHtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gZGVub3Rpbmcgc3VwcG9ydFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYm9vbGVhbiBkZW5vdGluZyB3aGV0aGVyIHdlYmtpdCBub3RpZmljYXRpb25zIGFyZSBzdXBwb3J0ZWRcbiAgICovXG4gIGlzU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl93aW4ud2Via2l0Tm90aWZpY2F0aW9ucyAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB0aXRsZSAtIG5vdGlmaWNhdGlvbiB0aXRsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIG5vdGlmaWNhdGlvbiBvcHRpb25zIGFycmF5XG4gICAqIEByZXR1cm5zIHtOb3RpZmljYXRpb259XG4gICAqL1xuICBjcmVhdGUodGl0bGUsIG9wdGlvbnMpIHtcbiAgICBsZXQgbm90aWZpY2F0aW9uID0gdGhpcy5fd2luLndlYmtpdE5vdGlmaWNhdGlvbnMuY3JlYXRlTm90aWZpY2F0aW9uKFxuICAgICAgb3B0aW9ucy5pY29uLFxuICAgICAgdGl0bGUsXG4gICAgICBvcHRpb25zLmJvZHlcbiAgICApO1xuXG4gICAgbm90aWZpY2F0aW9uLnNob3coKTtcblxuICAgIHJldHVybiBub3RpZmljYXRpb247XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYSBnaXZlbiBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIG5vdGlmaWNhdGlvbiB0byBjbG9zZVxuICAgKi9cbiAgY2xvc2Uobm90aWZpY2F0aW9uKSB7XG4gICAgbm90aWZpY2F0aW9uLmNhbmNlbCgpO1xuICB9XG59XG4iLCJpbXBvcnQgUHVzaCBmcm9tICcuL2NsYXNzZXMvUHVzaCc7XG5cbm1vZHVsZS5leHBvcnRzID0gbmV3IFB1c2godHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0aGlzKTtcbiJdfQ== diff --git a/bower_components/push.js/bin/push.min.js b/bower_components/push.js/bin/push.min.js new file mode 100644 index 0000000..ffc5f41 --- /dev/null +++ b/bower_components/push.js/bin/push.min.js @@ -0,0 +1,37 @@ +/** + * Push v1.0-beta + * ============== + * A compact, cross-browser solution for the JavaScript Notifications API + * + * Credits + * ------- + * Tsvetan Tsvetkov (ttsvetko) + * Alex Gibson (alexgibson) + * + * License + * ------- + * + * The MIT License (MIT) + * + * Copyright (c) 2015-2017 Tyler Nickerson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Push=t()}}(function(){return function t(e,n,i){function o(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(r)return r(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n||t)},f,f.exports,t,e,n,i)}return n[s].exports}for(var r="function"==typeof require&&require,s=0;s0?this._requestWithCallback.apply(this,arguments):this._requestAsPromise()}},{key:"_requestWithCallback",value:function(t,e){var n=this,i=this.get(),o=function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n._win.Notification.permission;void 0===i&&n._win.webkitNotifications&&(i=n._win.webkitNotifications.checkPermission()),i===n.GRANTED||0===i?t&&t():e&&e()};i!==this.DEFAULT?o(i):this._win.webkitNotifications&&this._win.webkitNotifications.checkPermission?this._win.webkitNotifications.requestPermission(o):this._win.Notification&&this._win.Notification.requestPermission?this._win.Notification.requestPermission().then(o).catch(function(){e&&e()}):t&&t()}},{key:"_requestAsPromise",value:function(){var t=this,e=this.get(),n=function(e){return e===t.GRANTED||0===e},i=e!==this.DEFAULT,o=this._win.Notification&&this._win.Notification.requestPermission,r=this._win.webkitNotifications&&this._win.webkitNotifications.checkPermission;return new Promise(function(s,a){var u=function(t){return n(t)?s():a()};i?u(e):r?t._win.webkitNotifications.requestPermission(function(t){u(t)}):o?t._win.Notification.requestPermission().then(function(t){u(t)}).catch(a):s()})}},{key:"has",value:function(){return this.get()===this.GRANTED}},{key:"get",value:function(){return this._win.Notification&&this._win.Notification.permission?this._win.Notification.permission:this._win.webkitNotifications&&this._win.webkitNotifications.checkPermission?this._permissions[this._win.webkitNotifications.checkPermission()]:navigator.mozNotification?this.GRANTED:this._win.external&&this._win.external.msIsSiteMode?this._win.external.msIsSiteMode()?this.GRANTED:this.DEFAULT:this.GRANTED}}]),t}();n.default=r},{}],3:[function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n 0) ? this._requestWithCallback(...arguments) : this._requestAsPromise();\n }\n\n /**\n * Old permissions implementation deprecated in favor of a promise based one\n * @deprecated Since V1.0.4\n * @param {Function} onGranted - Function to execute once permission is granted\n * @param {Function} onDenied - Function to execute once permission is denied\n * @return {void}\n */\n _requestWithCallback(onGranted, onDenied) {\n const existing = this.get();\n\n var resolve = (result = this._win.Notification.permission) => {\n if (typeof(result)==='undefined' && this._win.webkitNotifications)\n result = this._win.webkitNotifications.checkPermission();\n if (result === this.GRANTED || result === 0) {\n if (onGranted) onGranted();\n } else if (onDenied) onDenied();\n }\n\n /* Permissions already set */\n if (existing !== this.DEFAULT) {\n resolve(existing);\n }\n /* Safari 6+, Legacy webkit browsers */\n else if (this._win.webkitNotifications && this._win.webkitNotifications.checkPermission) {\n this._win.webkitNotifications.requestPermission(resolve);\n }\n /* Chrome 23+ */\n else if (this._win.Notification && this._win.Notification.requestPermission) {\n this._win.Notification.requestPermission().then(resolve).catch(function () {\n if (onDenied) onDenied();\n });\n }\n /* Let the user continue by default */\n else if (onGranted) {\n onGranted();\n }\n }\n\n /**\n * Requests permission for desktop notifications in a promise based way\n * @return {Promise}\n */\n _requestAsPromise() {\n const existing = this.get();\n\n let isGranted = result => (result === this.GRANTED || result === 0);\n\n /* Permissions already set */\n var hasPermissions = (existing !== this.DEFAULT);\n\n /* Safari 6+, Chrome 23+ */\n var isModernAPI = (this._win.Notification && this._win.Notification.requestPermission);\n\n /* Legacy webkit browsers */\n var isWebkitAPI = (this._win.webkitNotifications && this._win.webkitNotifications.checkPermission);\n\n return new Promise((resolvePromise, rejectPromise) => {\n\n var resolver = result => (isGranted(result)) ? resolvePromise() : rejectPromise();\n\n if (hasPermissions) {\n resolver(existing)\n }\n else if (isWebkitAPI) {\n this._win.webkitNotifications.requestPermission(result => { resolver(result) });\n }\n else if (isModernAPI) {\n this._win.Notification.requestPermission().then(result => { resolver(result) }).catch(rejectPromise)\n }\n else resolvePromise()\n })\n }\n\n /**\n * Returns whether Push has been granted permission to run\n * @return {Boolean}\n */\n has() {\n return this.get() === this.GRANTED;\n }\n\n /**\n * Gets the permission level\n * @return {Permission} The permission level\n */\n get() {\n let permission;\n\n /* Safari 6+, Chrome 23+ */\n if (this._win.Notification && this._win.Notification.permission)\n permission = this._win.Notification.permission;\n\n /* Legacy webkit browsers */\n else if (this._win.webkitNotifications && this._win.webkitNotifications.checkPermission)\n permission = this._permissions[this._win.webkitNotifications.checkPermission()];\n\n /* Firefox Mobile */\n else if (navigator.mozNotification)\n permission = this.GRANTED;\n\n /* IE9+ */\n else if (this._win.external && this._win.external.msIsSiteMode)\n permission = this._win.external.msIsSiteMode() ? this.GRANTED : this.DEFAULT;\n\n else\n permission = this.GRANTED;\n\n return permission;\n }\n}\n","import Messages from \"./Messages\";\nimport Permission from \"./Permission\";\nimport Util from \"./Util\";\n/* Import notification agents */\nimport DesktopAgent from \"./agents/DesktopAgent\";\nimport MobileChromeAgent from \"./agents/MobileChromeAgent\";\nimport MobileFirefoxAgent from \"./agents/MobileFirefoxAgent\";\nimport MSAgent from \"./agents/MSAgent\";\nimport WebKitAgent from \"./agents/WebKitAgent\";\n\nexport default class Push {\n\n constructor(win) {\n /* Private variables */\n\n /* ID to use for new notifications */\n this._currentId = 0;\n\n /* Map of open notifications */\n this._notifications = {};\n\n /* Window object */\n this._win = win;\n\n /* Public variables */\n this.Permission = new Permission(win);\n\n /* Agents */\n this._agents = {\n desktop: new DesktopAgent(win),\n chrome: new MobileChromeAgent(win),\n firefox: new MobileFirefoxAgent(win),\n ms: new MSAgent(win),\n webkit: new WebKitAgent(win)\n };\n\n this._configuration = {\n serviceWorker: '/serviceWorker.min.js',\n fallback: function(payload) {}\n }\n }\n\n /**\n * Closes a notification\n * @param {Notification} notification\n * @return {Boolean} boolean denoting whether the operation was successful\n * @private\n */\n _closeNotification(id) {\n let success = true;\n const notification = this._notifications[id];\n\n if (notification !== undefined) {\n success = this._removeNotification(id);\n\n /* Safari 6+, Firefox 22+, Chrome 22+, Opera 25+ */\n if (this._agents.desktop.isSupported())\n this._agents.desktop.close(notification);\n\n /* Legacy WebKit browsers */\n else if (this._agents.webkit.isSupported())\n this._agents.webkit.close(notification);\n\n /* IE9 */\n else if (this._agents.ms.isSupported())\n this._agents.ms.close();\n\n else {\n success = false;\n throw new Error(Messages.errors.unknown_interface);\n }\n\n return success;\n }\n\n return false;\n }\n\n /**\n * Adds a notification to the global dictionary of notifications\n * @param {Notification} notification\n * @return {Integer} Dictionary key of the notification\n * @private\n */\n _addNotification(notification) {\n const id = this._currentId;\n this._notifications[id] = notification;\n this._currentId++;\n return id;\n }\n\n /**\n * Removes a notification with the given ID\n * @param {Integer} id - Dictionary key/ID of the notification to remove\n * @return {Boolean} boolean denoting success\n * @private\n */\n _removeNotification(id) {\n let success = false;\n\n if (this._notifications.hasOwnProperty(id)) {\n /* We're successful if we omit the given ID from the new array */\n delete this._notifications[id];\n success = true;\n }\n\n return success;\n }\n\n /**\n * Creates the wrapper for a given notification\n *\n * @param {Integer} id - Dictionary key/ID of the notification\n * @param {Map} options - Options used to create the notification\n * @returns {Map} wrapper hashmap object\n * @private\n */\n _prepareNotification(id, options) {\n let wrapper;\n\n /* Wrapper used to get/close notification later on */\n wrapper = {\n get: () => {\n return this._notifications[id];\n },\n\n close: () => {\n this._closeNotification(id);\n }\n };\n\n /* Autoclose timeout */\n if (options.timeout) {\n setTimeout(() => {\n wrapper.close();\n }, options.timeout);\n }\n\n return wrapper;\n }\n\n /**\n * Find the most recent notification from a ServiceWorker and add it to the global array\n * @param notifications\n * @private\n */\n _serviceWorkerCallback(notifications, options, resolve) {\n let id = this._addNotification(notifications[notifications.length - 1]);\n\n /* Listen for close requests from the ServiceWorker */\n navigator.serviceWorker.addEventListener('message', event => {\n const data = JSON.parse(event.data);\n\n if (data.action === 'close' && Number.isInteger(data.id))\n this._removeNotification(data.id);\n });\n\n resolve(this._prepareNotification(id, options));\n }\n\n /**\n * Callback function for the 'create' method\n * @return {void}\n * @private\n */\n _createCallback(title, options, resolve) {\n let notification = null;\n let onClose;\n\n /* Set empty settings if none are specified */\n options = options || {};\n\n /* onClose event handler */\n onClose = (id) => {\n /* A bit redundant, but covers the cases when close() isn't explicitly called */\n this._removeNotification(id);\n if (Util.isFunction(options.onClose)) {\n options.onClose.call(this, notification);\n }\n };\n\n /* Safari 6+, Firefox 22+, Chrome 22+, Opera 25+ */\n if (this._agents.desktop.isSupported()) {\n try {\n /* Create a notification using the API if possible */\n notification = this._agents.desktop.create(title, options);\n } catch (e) {\n const id = this._currentId;\n const sw = this.config().serviceWorker;\n const cb = (notifications) => this._serviceWorkerCallback(notifications, options, resolve);\n /* Create a Chrome ServiceWorker notification if it isn't supported */\n if (this._agents.chrome.isSupported()) {\n this._agents.chrome.create(id, title, options, sw, cb);\n }\n }\n /* Legacy WebKit browsers */\n } else if (this._agents.webkit.isSupported())\n notification = this._agents.webkit.create(title, options);\n\n /* Firefox Mobile */\n else if (this._agents.firefox.isSupported())\n this._agents.firefox.create(title, options);\n\n /* IE9 */\n else if (this._agents.ms.isSupported())\n notification = this._agents.ms.create(title, options);\n\n /* Default fallback */\n else {\n options.title = title;\n this.config().fallback(options);\n }\n\n if (notification !== null) {\n const id = this._addNotification(notification);\n const wrapper = this._prepareNotification(id, options);\n\n /* Notification callbacks */\n if (Util.isFunction(options.onShow))\n notification.addEventListener('show', options.onShow);\n\n if (Util.isFunction(options.onError))\n notification.addEventListener('error', options.onError);\n\n if (Util.isFunction(options.onClick))\n notification.addEventListener('click', options.onClick);\n\n notification.addEventListener('close', () => {\n onClose(id);\n });\n\n notification.addEventListener('cancel', () => {\n onClose(id);\n });\n\n /* Return the wrapper so the user can call close() */\n resolve(wrapper);\n }\n\n /* By default, pass an empty wrapper */\n resolve(null);\n }\n\n /**\n * Creates and displays a new notification\n * @param {Array} options\n * @return {Promise}\n */\n create(title, options) {\n let promiseCallback;\n\n /* Fail if no or an invalid title is provided */\n if (!Util.isString(title)) {\n throw new Error(Messages.errors.invalid_title);\n }\n\n /* Request permission if it isn't granted */\n if (!this.Permission.has()) {\n promiseCallback = (resolve, reject) => {\n this.Permission.request().then(() => {\n this._createCallback(title, options, resolve);\n }).catch(() => {\n reject(Messages.errors.permission_denied);\n })\n };\n } else {\n promiseCallback = (resolve, reject) => {\n try {\n this._createCallback(title, options, resolve);\n } catch (e) {\n reject(e);\n }\n };\n }\n\n return new Promise(promiseCallback);\n }\n\n /**\n * Returns the notification count\n * @return {Integer} The notification count\n */\n count() {\n let count = 0;\n let key;\n\n for (key in this._notifications)\n if (this._notifications.hasOwnProperty(key)) count++;\n\n return count;\n }\n\n /**\n * Closes a notification with the given tag\n * @param {String} tag - Tag of the notification to close\n * @return {Boolean} boolean denoting success\n */\n close(tag) {\n let key, notification;\n\n for (key in this._notifications) {\n if (this._notifications.hasOwnProperty(key)) {\n notification = this._notifications[key];\n\n /* Run only if the tags match */\n if (notification.tag === tag) {\n\n /* Call the notification's close() method */\n return this._closeNotification(key);\n }\n }\n }\n }\n\n /**\n * Clears all notifications\n * @return {Boolean} boolean denoting whether the clear was successful in closing all notifications\n */\n clear() {\n let key, success = true;\n\n for (key in this._notifications)\n if (this._notifications.hasOwnProperty(key))\n success = success && this._closeNotification(key);\n\n return success;\n }\n\n /**\n * Denotes whether Push is supported in the current browser\n * @returns {boolean}\n */\n supported() {\n let supported = false;\n\n for (var agent in this._agents)\n if (this._agents.hasOwnProperty(agent))\n supported = supported || this._agents[agent].isSupported()\n\n return supported;\n }\n\n /**\n * Modifies settings or returns all settings if no parameter passed\n * @param settings\n */\n config(settings) {\n if (typeof settings !== 'undefined' || settings !== null && Util.isObject(settings))\n Util.objectMerge(this._configuration, settings);\n return this._configuration;\n }\n\n /**\n * Copies the functions from a plugin to the main library\n * @param plugin\n */\n extend(manifest) {\n var plugin, Plugin,\n hasProp = {}.hasOwnProperty;\n\n if (!hasProp.call(manifest, 'plugin')) {\n throw new Error(Messages.errors.invalid_plugin);\n } else {\n if (hasProp.call(manifest, 'config') && Util.isObject(manifest.config) && manifest.config !== null) {\n this.config(manifest.config);\n }\n\n Plugin = manifest.plugin;\n plugin = new Plugin(this.config())\n\n for (var member in plugin) {\n if (hasProp.call(plugin, member) && Util.isFunction(plugin[member]))\n this[member] = plugin[member];\n }\n }\n }\n}\n","export default class Util {\n static isUndefined(obj) {\n return obj === undefined;\n }\n\n static isString(obj) {\n return typeof obj === 'string';\n }\n\n static isFunction(obj) {\n return obj && {}.toString.call(obj) === '[object Function]';\n }\n\n static isObject(obj) {\n return typeof obj === 'object'\n }\n\n static objectMerge(target, source) {\n for (var key in source) {\n if (target.hasOwnProperty(key) && this.isObject(target[key]) && this.isObject(source[key])) {\n this.objectMerge(target[key], source[key]);\n } else {\n target[key] = source[key]\n }\n }\n }\n}\n","export default class AbstractAgent {\n constructor(win) {\n this._win = win;\n }\n}\n","import AbstractAgent from './AbstractAgent';\nimport Util from '../Util';\n\n/**\n * Notification agent for modern desktop browsers:\n * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+\n */\nexport default class DesktopAgent extends AbstractAgent {\n\n /**\n * Returns a boolean denoting support\n * @returns {Boolean} boolean denoting whether webkit notifications are supported\n */\n isSupported() {\n return this._win.Notification !== undefined;\n }\n\n /**\n * Creates a new notification\n * @param title - notification title\n * @param options - notification options array\n * @returns {Notification}\n */\n create(title, options) {\n return new this._win.Notification(\n title,\n {\n icon: (Util.isString(options.icon) || Util.isUndefined(options.icon)) ? options.icon : options.icon.x32,\n body: options.body,\n tag: options.tag,\n requireInteraction: options.requireInteraction\n }\n );\n }\n\n /**\n * Close a given notification\n * @param notification - notification to close\n */\n close(notification) {\n notification.close();\n }\n}\n","import AbstractAgent from './AbstractAgent';\nimport Util from '../Util';\n\n/**\n * Notification agent for IE9\n */\nexport default class MSAgent extends AbstractAgent {\n\n /**\n * Returns a boolean denoting support\n * @returns {Boolean} boolean denoting whether webkit notifications are supported\n */\n isSupported() {\n return (this._win.external !== undefined) && (this._win.external.msIsSiteMode !== undefined);\n }\n\n /**\n * Creates a new notification\n * @param title - notification title\n * @param options - notification options array\n * @returns {Notification}\n */\n create(title, options) {\n /* Clear any previous notifications */\n this._win.external.msSiteModeClearIconOverlay();\n\n this._win.external.msSiteModeSetIconOverlay(\n ((Util.isString(options.icon) || Util.isUndefined(options.icon))\n ? options.icon\n : options.icon.x16), title\n );\n\n this._win.external.msSiteModeActivate();\n\n return null;\n }\n\n /**\n * Close a given notification\n * @param notification - notification to close\n */\n close() {\n this._win.external.msSiteModeClearIconOverlay()\n }\n}\n","import AbstractAgent from './AbstractAgent';\nimport Util from '../Util';\nimport Messages from '../Messages';\n\n/**\n * Notification agent for modern desktop browsers:\n * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+\n */\nexport default class MobileChromeAgent extends AbstractAgent {\n\n /**\n * Returns a boolean denoting support\n * @returns {Boolean} boolean denoting whether webkit notifications are supported\n */\n isSupported() {\n return this._win.navigator !== undefined &&\n this._win.navigator.serviceWorker !== undefined;\n }\n\n /**\n * Returns the function body as a string\n * @param func\n */\n getFunctionBody(func) {\n return func.toString().match(/function[^{]+{([\\s\\S]*)}$/)[1];\n }\n\n /**\n * Creates a new notification\n * @param title - notification title\n * @param options - notification options array\n * @returns {Notification}\n */\n create(id, title, options, serviceWorker, callback) {\n /* Register ServiceWorker */\n this._win.navigator.serviceWorker.register(serviceWorker);\n\n this._win.navigator.serviceWorker.ready.then(registration => {\n /* Local data the service worker will use */\n let localData = {\n id: id,\n link: options.link,\n origin: document.location.href,\n onClick: (Util.isFunction(options.onClick)) ? this.getFunctionBody(options.onClick) : '',\n onClose: (Util.isFunction(options.onClose)) ? this.getFunctionBody(options.onClose) : ''\n };\n\n /* Merge the local data with user-provided data */\n if (options.data !== undefined && options.data !== null)\n localData = Object.assign(localData, options.data);\n\n /* Show the notification */\n registration.showNotification(\n title,\n {\n icon: options.icon,\n body: options.body,\n vibrate: options.vibrate,\n tag: options.tag,\n data: localData,\n requireInteraction: options.requireInteraction,\n silent: options.silent\n }\n ).then(() => {\n\n registration.getNotifications().then(notifications => {\n /* Send an empty message so the ServiceWorker knows who the client is */\n registration.active.postMessage('');\n\n /* Trigger callback */\n callback(notifications);\n });\n }).catch(function(error) {\n throw new Error(Messages.errors.sw_notification_error + error.message);\n });\n }).catch(function(error) {\n throw new Error(Messages.errors.sw_registration_error + error.message);\n });\n }\n\n /**\n * Close all notification\n */\n close() {\n // Can't do this with service workers\n }\n}\n","import AbstractAgent from './AbstractAgent';\n\n/**\n * Notification agent for modern desktop browsers:\n * Safari 6+, Firefox 22+, Chrome 22+, Opera 25+\n */\nexport default class MobileFirefoxAgent extends AbstractAgent {\n\n /**\n * Returns a boolean denoting support\n * @returns {Boolean} boolean denoting whether webkit notifications are supported\n */\n isSupported() {\n return this._win.navigator.mozNotification !== undefined;\n }\n\n /**\n * Creates a new notification\n * @param title - notification title\n * @param options - notification options array\n * @returns {Notification}\n */\n create(title, options) {\n let notification = this._win.navigator.mozNotification.createNotification(\n title,\n options.body,\n options.icon\n );\n\n notification.show();\n\n return notification;\n }\n}\n","import AbstractAgent from './AbstractAgent';\n\n/**\n * Notification agent for old Chrome versions (and some) Firefox\n */\nexport default class WebKitAgent extends AbstractAgent {\n\n /**\n * Returns a boolean denoting support\n * @returns {Boolean} boolean denoting whether webkit notifications are supported\n */\n isSupported() {\n return this._win.webkitNotifications !== undefined;\n }\n\n /**\n * Creates a new notification\n * @param title - notification title\n * @param options - notification options array\n * @returns {Notification}\n */\n create(title, options) {\n let notification = this._win.webkitNotifications.createNotification(\n options.icon,\n title,\n options.body\n );\n\n notification.show();\n\n return notification;\n }\n\n /**\n * Close a given notification\n * @param notification - notification to close\n */\n close(notification) {\n notification.cancel();\n }\n}\n","import Push from './classes/Push';\n\nmodule.exports = new Push(typeof window !== 'undefined' ? window : this);\n"]} \ No newline at end of file diff --git a/bower_components/push.js/bin/serviceWorker.js b/bower_components/push.js/bin/serviceWorker.js new file mode 100644 index 0000000..1d6ee88 --- /dev/null +++ b/bower_components/push.js/bin/serviceWorker.js @@ -0,0 +1,75 @@ +/* eslint eqeqeq: "off", curly: "error" */ +'use strict'; + +function isFunction(obj) { + return obj && {}.toString.call(obj) === '[object Function]'; +} + +function runFunctionString(funcStr) { + if (funcStr.trim().length > 0) { + var func = new Function(funcStr); + if (isFunction(func)) { + func(); + } + } +} + +self.addEventListener('message', function (event) { + self.client = event.source; +}); + +self.onnotificationclose = function (event) { + runFunctionString(event.notification.data.onClose); + + /* Tell Push to execute close callback */ + self.client.postMessage(JSON.stringify({ + id: event.notification.data.id, + action: 'close' + })); +} + +self.onnotificationclick = function (event) { + var link, origin, href; + + if (typeof event.notification.data.link !== 'undefined' && event.notification.data.link !== null) { + origin = event.notification.data.origin; + link = event.notification.data.link; + href = origin.substring(0, origin.indexOf('/', 8)) + '/'; + + /* Removes prepending slash, as we don't need it */ + if (link[0] === '/') { + link = (link.length > 1) ? link.substring(1, link.length) : ''; + } + + event.notification.close(); + + /* This looks to see if the current is already open and focuses if it is */ + event.waitUntil(clients.matchAll({ + type: "window" + }).then(function (clientList) { + var client, full_url; + + for (var i = 0; i < clientList.length; i++) { + client = clientList[i]; + full_url = href + link; + + /* Covers case where full_url might be http://example.com/john and the client URL is http://example.com/john/ */ + if (full_url[full_url.length - 1] !== '/' && client.url[client.url.length - 1] === '/') { + full_url += '/'; + } + + if (client.url === full_url && 'focus' in client){ + return client.focus(); + } + } + + if (clients.openWindow) { + return clients.openWindow('/' + link); + } + }).catch(function (error) { + throw new Error("A ServiceWorker error occurred: " + error.message); + })); + } + + runFunctionString(event.notification.data.onClick); +} diff --git a/bower_components/push.js/bin/serviceWorker.min.js b/bower_components/push.js/bin/serviceWorker.min.js new file mode 100644 index 0000000..46f5be5 --- /dev/null +++ b/bower_components/push.js/bin/serviceWorker.min.js @@ -0,0 +1 @@ +"use strict";function isFunction(n){return n&&"[object Function]"==={}.toString.call(n)}function runFunctionString(n){if(n.trim().length>0){var i=new Function(n);isFunction(i)&&i()}}self.addEventListener("message",function(n){self.client=n.source}),self.onnotificationclose=function(n){runFunctionString(n.notification.data.onClose),self.client.postMessage(JSON.stringify({id:n.notification.data.id,action:"close"}))},self.onnotificationclick=function(n){var i,t,o;void 0!==n.notification.data.link&&null!==n.notification.data.link&&(t=n.notification.data.origin,i=n.notification.data.link,o=t.substring(0,t.indexOf("/",8))+"/","/"===i[0]&&(i=i.length>1?i.substring(1,i.length):""),n.notification.close(),n.waitUntil(clients.matchAll({type:"window"}).then(function(n){for(var t,c,e=0;e~CH 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 l?O58RpFAoh=rN>3b_>s1VWsA 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 22b3b77..ce537d1 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,10 @@ - ScaleDrone HTML5 JavaScript push notifications - + + + Scaledrone HTML5 JavaScript push notifications + @@ -12,12 +14,13 @@
         
-            curl --include \
-                 --request POST \
-                 --data-binary 'msg=Buy cheese and bread for breakfast.' \
-                 https://api2.scaledrone.com/dIVCxD01G4x1sDtC/notifications/publish
+curl -H "Content-Type: application/json" \
+     -X POST \
+     -d '{"title":"Important!", "body":"Dogecoin is going to the moon!", "icon":"logo.png"}' \
+     https://api2.scaledrone.com/KtJ2qzn3CF3svSFe/notifications/publish
          
     
+ diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c75ee6f25618a0f01f0e197345859f3fc92f8f GIT binary patch literal 120596 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 b=vxeUQxkvLf3jciNGd0-ELACC`r-cp=aW{5 literal 0 HcmV?d00001 diff --git a/main.js b/main.js index 00cfc80..aacb4b5 100644 --- a/main.js +++ b/main.js @@ -1,50 +1,48 @@ -if (!Notification) { - alert('Your browser does not support notifications'); -} else { - getPermission(function () { - // Connect to ScaleDrone at channel dIVCxD01G4x1sDtC - var drone = new ScaleDrone('dIVCxD01G4x1sDtC'); +getPermission(function() { + var drone = new ScaleDrone('KtJ2qzn3CF3svSFe'); - drone.on('open', function (error) { - if (error) return console.error(error); - // Join a room called notifications - var room = drone.subscribe('notifications'); - room.on('open', function (error) { - if (error) console.error(error); - }); - room.on('data', function (data) { - // Create a new notification from incoming data - var notification = new Notification(data.msg); - // Hide it after 4 seconds - setTimeout(function () { - notification.close(); - }, 4000); - }); - }); + drone.on('open', function(error) { + if (error) return console.error(error); + // Join a room called notifications + var room = drone.subscribe('notifications'); + room.on('open', function(error) { + if (error) { + console.error(error); + } + }); + room.on('data', function(data) { + Push.create(data.title, { + body: data.body, + icon: data.icon, + timeout: 4000, + onClick: function() { + this.close(); + } + }); + }); + }); - drone.on('close', function (event) { - console.log('Connection was closed', event); - }); + drone.on('close', function(event) { + console.log('Connection was closed', event); + }); - drone.on('error', function (error) { - console.error(error); - }); - }); -} + drone.on('error', function(error) { + console.error(error); + }); +}); /** * Ask the user for desktop notification permissions (if needed) */ -function getPermission(callback) { - if (Notification.permission === 'granted') { - callback(); - } else { - Notification.requestPermission(function (permission) { - if (permission === 'granted') { - callback(); - } else { - alert('Unable to get permission'); - } - }); - } -} \ No newline at end of file +function getPermission(onGranted) { + if (!Notification) { + alert('Notifications are not supported'); + } + if (Push.Permission.has()) { + onGranted(); + } else { + Push.Permission.request(onGranted, function() { + alert('Permission denied'); + }); + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d5ff442 --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "bower": "^1.8.2", + "global": "^4.3.2", + "http-server": "^0.10.0" + } +} From e28894fcd125ebe0bdcdb46759ad6ef3d68d938d Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 9 Jan 2018 09:24:20 +0200 Subject: [PATCH 5/8] Update readme --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index af03317..8b2c90f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -## ScaleDrone's cURL JavaScript Desktop Notifications +## Scaledrone's cURL JavaScript Desktop Notifications This is a very simple example of how to use the HTML5 Desktop Notifications API to send notifications from your server. Beware that HTML5 Notifications are not supported by all browsers yet, you can get the latest list of supported browsers from [here](http://caniuse.com/#feat=notifications). -Create a new free channel at [ScaleDrone.com](https://www.scaledrone.com/) or use the one from the example for testing. +To send your own notifications create a new free account at [scaledrone.com](https://www.scaledrone.com/). ### Example -[http://scaledrone.github.io/html5-javascript-push-notifications/](http://scaledrone.github.io/html5-javascript-push-notifications/) +[https://scaledrone.github.io/html5-javascript-push-notifications/](https://scaledrone.github.io/html5-javascript-push-notifications/) ### Running @@ -15,8 +15,8 @@ Clone this repository and run it using your favorite http server. You can push a notification from Terminal using `cURL`: ``` -curl --include \ - --request POST \ - --data-binary 'msg=Buy cheese and bread for breakfast.' \ - https://api2.scaledrone.com/dIVCxD01G4x1sDtC/notifications/publish +curl -H "Content-Type: application/json" \ + -X POST \ + -d '{"title":"Important!", "body":"Dogecoin is going to the moon!", "icon":"logo.png"}' \ + https://api2.scaledrone.com/KtJ2qzn3CF3svSFe/notifications/publish ``` From cbb9a77f531271e3588f013d5356f0ecb6012da5 Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 9 Jan 2018 09:29:03 +0200 Subject: [PATCH 6/8] Add SW --- main.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main.js b/main.js index aacb4b5..7452dff 100644 --- a/main.js +++ b/main.js @@ -1,3 +1,7 @@ +Push.config({ + serviceWorker: 'bower_components/push.js/bin/serviceWorker.min.js', +}); + getPermission(function() { var drone = new ScaleDrone('KtJ2qzn3CF3svSFe'); From c692766bc41e4e57c5bab5411c846c1637add9a8 Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 9 Jan 2018 09:35:10 +0200 Subject: [PATCH 7/8] Fix SW url --- main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.js b/main.js index 7452dff..10c54a2 100644 --- a/main.js +++ b/main.js @@ -1,5 +1,5 @@ Push.config({ - serviceWorker: 'bower_components/push.js/bin/serviceWorker.min.js', + serviceWorker: './bower_components/push.js/bin/serviceWorker.min.js', }); getPermission(function() { From 191ed155c06c1e6784236e157adb24bacc377221 Mon Sep 17 00:00:00 2001 From: herkyl Date: Tue, 9 Jan 2018 09:47:22 +0200 Subject: [PATCH 8/8] Try new SW approach1 --- index.html | 2 +- main.js | 4 ---- bower_components/push.js/bin/push.min.js => push.min.js | 0 .../push.js/bin/serviceWorker.min.js => serviceWorker.min.js | 0 4 files changed, 1 insertion(+), 5 deletions(-) rename bower_components/push.js/bin/push.min.js => push.min.js (100%) rename bower_components/push.js/bin/serviceWorker.min.js => serviceWorker.min.js (100%) diff --git a/index.html b/index.html index ce537d1..4758bc8 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@ https://api2.scaledrone.com/KtJ2qzn3CF3svSFe/notifications/publish - + diff --git a/main.js b/main.js index 10c54a2..aacb4b5 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,3 @@ -Push.config({ - serviceWorker: './bower_components/push.js/bin/serviceWorker.min.js', -}); - getPermission(function() { var drone = new ScaleDrone('KtJ2qzn3CF3svSFe'); diff --git a/bower_components/push.js/bin/push.min.js b/push.min.js similarity index 100% rename from bower_components/push.js/bin/push.min.js rename to push.min.js diff --git a/bower_components/push.js/bin/serviceWorker.min.js b/serviceWorker.min.js similarity index 100% rename from bower_components/push.js/bin/serviceWorker.min.js rename to serviceWorker.min.js