diff --git a/index.html b/index.html index 27c58cc412f8ce515ab5bcd329905d3a45895a5c..67b097035a54a020f409262ab90deb30d8fe7b4d 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.d86369b459dd48770fe4.js"></script><script src="app/ecolyo.554a8422165fe8f24237.js"></script></div></body></html> \ No newline at end of file +<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.dc6b8a0769b4f8b2dde1.js"></script><script src="app/ecolyo.554a8422165fe8f24237.js"></script></div></body></html> \ No newline at end of file diff --git a/public/ecolyo.47c206fb4d4a21695e3a.js b/public/ecolyo.95412cfda8c99ee414e9.js similarity index 99% rename from public/ecolyo.47c206fb4d4a21695e3a.js rename to public/ecolyo.95412cfda8c99ee414e9.js index 2193decee714707f0b55165145eb4d064a53bde9..7bd68347c168e92091f81d7fd18fd8e56837aef9 100644 --- a/public/ecolyo.47c206fb4d4a21695e3a.js +++ b/public/ecolyo.95412cfda8c99ee414e9.js @@ -22936,6 +22936,68 @@ module.exports = {"name":"Ecolyo","slug":"ecolyo","icon":"public/icon.svg","cate /***/ }), +/***/ "6/w4": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Minilog = __webpack_require__("aY/w"); + +var oldEnable = Minilog.enable, + oldDisable = Minilog.disable, + isChrome = typeof navigator != 'undefined' && /chrome/i.test(navigator.userAgent), + isReactNative = typeof navigator != 'undefined' && navigator.product === 'ReactNative', + console = __webpack_require__("FRkB"); // Use a more capable logging backend if on Chrome + + +Minilog.defaultBackend = isChrome || isReactNative ? console.minilog : console; // apply enable inputs from localStorage and from the URL + +if (typeof window != 'undefined') { + try { + Minilog.enable(JSON.parse(window.localStorage['minilogSettings'])); + } catch (e) {// ignore + } + + if (window.location && window.location.search) { + var match = RegExp('[?&]minilog=([^&]*)').exec(window.location.search); + match && Minilog.enable(decodeURIComponent(match[1])); + } +} // Make enable also add to localStorage + + +Minilog.enable = function () { + oldEnable.call(Minilog, true); + + try { + window.localStorage['minilogSettings'] = JSON.stringify(true); + } catch (e) {// ignore + } + + return this; +}; + +Minilog.disable = function () { + oldDisable.call(Minilog); + + try { + delete window.localStorage.minilogSettings; + } catch (e) {// ignore + } + + return this; +}; + +exports = module.exports = Minilog; +exports.backends = { + array: __webpack_require__("It/H"), + browser: Minilog.defaultBackend, + localStorage: __webpack_require__("dBgm"), + jQuery: __webpack_require__("Uc0E") +}; + +/***/ }), + /***/ "67e+": /***/ (function(module, exports, __webpack_require__) { @@ -32433,6 +32495,19 @@ Object.keys(_useWebviewIntent).forEach(function (key) { }); }); +var _useIsAvailable = __webpack_require__("w0CX"); + +Object.keys(_useIsAvailable).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _useIsAvailable[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useIsAvailable[key]; + } + }); +}); + /***/ }), /***/ "7zid": @@ -51599,6 +51674,52 @@ module.exports = function isPrimitive(value) { }; +/***/ }), + +/***/ "FRkB": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"); + +var newlines = /\n+$/, + logger = new Transform(); + +logger.write = function (name, level, args) { + var i = args.length - 1; + + if (typeof console === 'undefined' || !console.log) { + return; + } + + if (console.log.apply) { + return console.log.apply(console, [name, level].concat(args)); + } else if (JSON && JSON.stringify) { + // console.log.apply is undefined in IE8 and IE9 + // for IE8/9: make console.log at least a bit less awful + if (args[i] && typeof args[i] == 'string') { + args[i] = args[i].replace(newlines, ''); + } + + try { + for (i = 0; i < args.length; i++) { + args[i] = JSON.stringify(args[i]); + } + } catch (e) {// ignore + } + + console.log(args.join(' ')); + } +}; + +logger.formatters = ['color', 'minilog']; +logger.color = __webpack_require__("IPbC"); +logger.minilog = __webpack_require__("U0A+"); +module.exports = logger; + /***/ }), /***/ "FSf8": @@ -57344,6 +57465,24 @@ module.exports = realNames; "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isFlagshipUI = void 0; + +/** App's description resulting of its manifest.webapp file */ + +/** App's mobile information. Used to describe the app scheme and its store urls */ + +/** + * All the different colors are optional + */ +var isFlagshipUI = function isFlagshipUI(item) { + return typeof item === 'object' && item !== null && ('bottomBackground' in item || 'bottomOverlay' in item || 'bottomTheme' in item || 'topBackground' in item || 'topOverlay' in item || 'topTheme' in item); +}; + +exports.isFlagshipUI = isFlagshipUI; + /***/ }), /***/ "GsEq": @@ -64545,6 +64684,40 @@ function jssNested() { /* harmony default export */ __webpack_exports__["default"] = (jssNested); +/***/ }), + +/***/ "IPbC": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"), + color = __webpack_require__("OmjS"); + +var colors = { + debug: ['cyan'], + info: ['purple'], + warn: ['yellow', true], + error: ['red', true] +}, + logger = new Transform(); + +logger.write = function (name, level, args) { + var fn = console.log; + + if (console[level] && console[level].apply) { + fn = console[level]; + fn.apply(console, ['%c' + name + ' %c' + level, color('gray'), color.apply(color, colors[level])].concat(args)); + } +}; // NOP, because piping the formatted logs can only cause trouble. + + +logger.pipe = function () {}; + +module.exports = logger; + /***/ }), /***/ "IQ1l": @@ -64946,6 +65119,34 @@ __webpack_require__.r(__webpack_exports__); +/***/ }), + +/***/ "It/H": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + cache = []; + +var logger = new Transform(); + +logger.write = function (name, level, args) { + cache.push([name, level, args]); +}; // utility functions + + +logger.get = function () { + return cache; +}; + +logger.empty = function () { + cache = []; +}; + +module.exports = logger; + /***/ }), /***/ "Itbq": @@ -72629,10 +72830,12 @@ var _interopRequireDefault = __webpack_require__("jm00"); Object.defineProperty(exports, "__esModule", { value: true }); -exports.isWebDevMode = exports.isNativeDevMode = exports.interpolate = exports.getErrorMessage = void 0; +exports.isWebDevMode = exports.isThemeArg = exports.isNativeDevMode = exports.isFlagshipUiArgsArray = exports.interpolate = exports.getErrorMessage = void 0; var _construct2 = _interopRequireDefault(__webpack_require__("GZTL")); +var _api = __webpack_require__("VXXh"); + var interpolate = function interpolate(str, params) { if (!params) return str; var names = Object.keys(params); @@ -72678,6 +72881,18 @@ var getErrorMessage = function getErrorMessage(error) { exports.getErrorMessage = getErrorMessage; +var isFlagshipUiArgsArray = function isFlagshipUiArgsArray(item) { + return Array.isArray(item) && (0, _api.isFlagshipUI)(item[0]); +}; + +exports.isFlagshipUiArgsArray = isFlagshipUiArgsArray; + +var isThemeArg = function isThemeArg(item) { + return typeof item === 'string'; +}; + +exports.isThemeArg = isThemeArg; + /***/ }), /***/ "M+cw": @@ -75768,6 +75983,36 @@ var AppBar = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__["forwardRef"](funct /***/ }), +/***/ "OmjS": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var hex = { + black: '#000', + red: '#c23621', + green: '#25bc26', + yellow: '#bbbb00', + blue: '#492ee1', + magenta: '#d338d3', + cyan: '#33bbc8', + gray: '#808080', + purple: '#708' +}; + +function color(fg, isInverse) { + if (isInverse) { + return 'color: #fff; background: ' + hex[fg] + ';'; + } else { + return 'color: ' + hex[fg] + ';'; + } +} + +module.exports = color; + +/***/ }), + /***/ "OqZc": /***/ (function(module, exports, __webpack_require__) { @@ -76174,6 +76419,87 @@ function persistReducer(config, baseReducer) { /***/ }), +/***/ "Oxkl": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// default filter +var Transform = __webpack_require__("UJNO"); + +var levelMap = { + debug: 1, + info: 2, + warn: 3, + error: 4 +}; + +function Filter() { + this.enabled = true; + this.defaultResult = true; + this.clear(); +} + +Transform.mixin(Filter); // allow all matching, with level >= given level + +Filter.prototype.allow = function (name, level) { + this._white.push({ + n: name, + l: levelMap[level] + }); + + return this; +}; // deny all matching, with level <= given level + + +Filter.prototype.deny = function (name, level) { + this._black.push({ + n: name, + l: levelMap[level] + }); + + return this; +}; + +Filter.prototype.clear = function () { + this._white = []; + this._black = []; + return this; +}; + +function test(rule, name) { + // use .test for RegExps + return rule.n.test ? rule.n.test(name) : rule.n == name; +} + +Filter.prototype.test = function (name, level) { + var i, + len = Math.max(this._white.length, this._black.length); + + for (i = 0; i < len; i++) { + if (this._white[i] && test(this._white[i], name) && levelMap[level] >= this._white[i].l) { + return true; + } + + if (this._black[i] && test(this._black[i], name) && levelMap[level] <= this._black[i].l) { + return false; + } + } + + return this.defaultResult; +}; + +Filter.prototype.write = function (name, level, args) { + if (!this.enabled || this.test(name, level)) { + return this.emit('item', name, level, args); + } +}; + +module.exports = Filter; + +/***/ }), + /***/ "P3Kl": /***/ (function(module, exports, __webpack_require__) { @@ -84290,7 +84616,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va var log = (0, _postMe.debug)('NativeService'); var NativeService = /*#__PURE__*/function () { - function NativeService(localMethods) { + function NativeService(_localMethods) { var _this = this; var messengerService = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _api.NativeMessenger; @@ -84298,6 +84624,9 @@ var NativeService = /*#__PURE__*/function () { (0, _defineProperty2.default)(this, "messengerService", void 0); (0, _defineProperty2.default)(this, "localMethods", void 0); (0, _defineProperty2.default)(this, "messengerRegister", {}); + (0, _defineProperty2.default)(this, "updateLocalMethods", function (localMethods) { + _this.localMethods = localMethods; + }); (0, _defineProperty2.default)(this, "getUri", function (source) { return new URL(source.nativeEvent.url).hostname.toLowerCase(); }); @@ -84311,14 +84640,15 @@ var NativeService = /*#__PURE__*/function () { (0, _defineProperty2.default)(this, "isInitMessage", function (message) { return message.message === _api.strings.webviewIsRendered; }); - (0, _defineProperty2.default)(this, "registerWebview", function (uri, ref) { + (0, _defineProperty2.default)(this, "registerWebview", function (uri, slug, ref) { log(_api.strings.logging.registering(uri)); if (_this.messengerRegister[uri]) return log((0, _utils.interpolate)(_api.strings.errorRegisterWebview, { uri: uri })); var messenger = new _this.messengerService(ref); _this.messengerRegister = _objectSpread(_objectSpread({}, _this.messengerRegister), {}, (0, _defineProperty2.default)({}, uri, { - messenger: (0, _utils.isNativeDevMode)() ? (0, _api.DebugNativeMessenger)(messenger) : messenger + messenger: (0, _utils.isNativeDevMode)() ? (0, _api.DebugNativeMessenger)(messenger) : messenger, + slug: slug })); log(_api.strings.logging.registered(uri)); }); @@ -84355,7 +84685,7 @@ var NativeService = /*#__PURE__*/function () { }; }()); (0, _defineProperty2.default)(this, "tryEmit", /*#__PURE__*/function () { - var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event) { + var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event, componentId) { var parsedEvent; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { @@ -84371,21 +84701,32 @@ var NativeService = /*#__PURE__*/function () { case 2: parsedEvent = _this.parseNativeEvent(event); + if (parsedEvent.methodName === 'setFlagshipUI' && (0, _utils.isFlagshipUiArgsArray)(parsedEvent.args)) { + parsedEvent.args[0].componentId = componentId; + } + + if (parsedEvent.methodName === 'setTheme' && Array.isArray(parsedEvent.args) && (0, _utils.isThemeArg)(parsedEvent.args[0])) { + parsedEvent.args[0] = { + homeTheme: parsedEvent.args[0], + componentId: componentId + }; + } + if (!_this.isInitMessage(parsedEvent)) { - _context2.next = 7; + _context2.next = 9; break; } - _context2.next = 6; + _context2.next = 8; return _this.tryInit(event); - case 6: + case 8: return _context2.abrupt("return", _context2.sent); - case 7: + case 9: if (_this.isPostMeMessage(parsedEvent)) _this.tryOnMessage(event, parsedEvent); - case 8: + case 10: case "end": return _context2.stop(); } @@ -84393,7 +84734,7 @@ var NativeService = /*#__PURE__*/function () { }, _callee2); })); - return function (_x2) { + return function (_x2, _x3) { return _ref3.apply(this, arguments); }; }()); @@ -84442,11 +84783,13 @@ var NativeService = /*#__PURE__*/function () { }, _callee3, null, [[2, 10]]); })); - return function (_x3) { + return function (_x4) { return _ref4.apply(this, arguments); }; }()); (0, _defineProperty2.default)(this, "tryOnMessage", function (event, message) { + var _message$args; + var webviewUri = _this.getUri(event); var registeredWebview = _this.messengerRegister[webviewUri]; @@ -84457,6 +84800,9 @@ var NativeService = /*#__PURE__*/function () { })); } + (_message$args = message.args) === null || _message$args === void 0 ? void 0 : _message$args.unshift({ + slug: registeredWebview.slug + }); registeredWebview.messenger.onMessage(message); }); (0, _defineProperty2.default)(this, "getHostname", function (uri) { @@ -84476,15 +84822,13 @@ var NativeService = /*#__PURE__*/function () { return (_this$messengerRegist = _this.messengerRegister[_this.getHostname(uri)]) === null || _this$messengerRegist === void 0 ? void 0 : (_this$messengerRegist2 = _this$messengerRegist.connection) === null || _this$messengerRegist2 === void 0 ? void 0 : (_this$messengerRegist3 = _this$messengerRegist2.remoteHandle()).call.apply(_this$messengerRegist3, [methodName].concat(args)); }); this.messengerService = messengerService; - this.localMethods = localMethods; + this.localMethods = _localMethods; } (0, _createClass2.default)(NativeService, [{ key: "isNativeEvent", value: function isNativeEvent(object) { - var _nativeEvent; - - return ((_nativeEvent = object.nativeEvent) === null || _nativeEvent === void 0 ? void 0 : _nativeEvent.data) !== undefined; + return object.nativeEvent.data !== undefined; } }]); return NativeService; @@ -87333,6 +87677,52 @@ class BrowserClient extends _sentry_core__WEBPACK_IMPORTED_MODULE_0__["BaseClien //# sourceMappingURL=client.js.map +/***/ }), + +/***/ "U0A+": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"), + color = __webpack_require__("OmjS"), + colors = { + debug: ['gray'], + info: ['purple'], + warn: ['yellow', true], + error: ['red', true] +}, + logger = new Transform(); + +logger.write = function (name, level, args) { + var fn = console.log; + + if (level != 'debug' && console[level]) { + fn = console[level]; + } // eslint-disable-next-line no-unused-vars + + + var subset = [], + i = 0; + + if (level != 'info') { + for (; i < args.length; i++) { + if (typeof args[i] != 'string') break; + } + + fn.apply(console, ['%c' + name + ' ' + args.slice(0, i).join(' '), color.apply(color, colors[level])].concat(args.slice(i))); + } else { + fn.apply(console, ['%c' + name, color.apply(color, colors[level])].concat(args)); + } +}; // NOP, because piping the formatted logs can only cause trouble. + + +logger.pipe = function () {}; + +module.exports = logger; + /***/ }), /***/ "U9vJ": @@ -87793,6 +88183,87 @@ exports.default = _default; /***/ }), +/***/ "UJNO": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var microee = __webpack_require__("GIvT"); // Implements a subset of Node's stream.Transform - in a cross-platform manner. + + +function Transform() {} + +microee.mixin(Transform); // The write() signature is different from Node's +// --> makes it much easier to work with objects in logs. +// One of the lessons from v1 was that it's better to target +// a good browser rather than the lowest common denominator +// internally. +// If you want to use external streams, pipe() to ./stringify.js first. + +Transform.prototype.write = function (name, level, args) { + this.emit('item', name, level, args); +}; + +Transform.prototype.end = function () { + this.emit('end'); + this.removeAllListeners(); +}; + +Transform.prototype.pipe = function (dest) { + var s = this; // prevent double piping + + s.emit('unpipe', dest); // tell the dest that it's being piped to + + dest.emit('pipe', s); + + function onItem() { + dest.write.apply(dest, Array.prototype.slice.call(arguments)); + } + + function onEnd() { + !dest._isStdio && dest.end(); + } + + s.on('item', onItem); + s.on('end', onEnd); + s.when('unpipe', function (from) { + var match = from === dest || typeof from == 'undefined'; + + if (match) { + s.removeListener('item', onItem); + s.removeListener('end', onEnd); + dest.emit('unpipe'); + } + + return match; + }); + return dest; +}; + +Transform.prototype.unpipe = function (from) { + this.emit('unpipe', from); + return this; +}; + +Transform.prototype.format = function () { + throw new Error(['Warning: .format() is deprecated in Minilog v2! Use .pipe() instead. For example:', "var Minilog = require('minilog');", 'Minilog', ' .pipe(Minilog.backends.console.formatClean)', ' .pipe(Minilog.backends.console);'].join('\n')); +}; + +Transform.mixin = function (dest) { + var o = Transform.prototype, + k; + + for (k in o) { + // eslint-disable-next-line no-prototype-builtins + o.hasOwnProperty(k) && (dest.prototype[k] = o[k]); + } +}; + +module.exports = Transform; + +/***/ }), + /***/ "UMYs": /***/ (function(module, exports, __webpack_require__) { @@ -88355,6 +88826,103 @@ if (__webpack_require__("WXXH") && (!CORRECT_NEW || __webpack_require__("enc5")( __webpack_require__("iaIa")('RegExp'); +/***/ }), + +/***/ "Uc0E": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"); + +var cid = new Date().valueOf().toString(36); + +function AjaxLogger(options) { + this.url = options.url || ''; + this.cache = []; + this.timer = null; + this.interval = options.interval || 30 * 1000; + this.enabled = true; + this.jQuery = window.jQuery; + this.extras = {}; +} + +Transform.mixin(AjaxLogger); + +AjaxLogger.prototype.write = function (name, level, args) { + if (!this.timer) { + this.init(); + } + + this.cache.push([name, level].concat(args)); +}; + +AjaxLogger.prototype.init = function () { + if (!this.enabled || !this.jQuery) return; + var self = this; + this.timer = setTimeout(function () { + var i, + logs = [], + ajaxData, + url = self.url; + if (self.cache.length == 0) return self.init(); // Test each log line and only log the ones that are valid (e.g. don't have circular references). + // Slight performance hit but benefit is we log all valid lines. + + for (i = 0; i < self.cache.length; i++) { + try { + JSON.stringify(self.cache[i]); + logs.push(self.cache[i]); + } catch (e) {// ignore + } + } + + if (self.jQuery.isEmptyObject(self.extras)) { + ajaxData = JSON.stringify({ + logs: logs + }); + url = self.url + '?client_id=' + cid; + } else { + ajaxData = JSON.stringify(self.jQuery.extend({ + logs: logs + }, self.extras)); + } + + self.jQuery.ajax(url, { + type: 'POST', + cache: false, + processData: false, + data: ajaxData, + contentType: 'application/json', + timeout: 10000 + }).success(function (data) { + if (data.interval) { + self.interval = Math.max(1000, data.interval); + } + }).error(function () { + self.interval = 30000; + }).always(function () { + self.init(); + }); + self.cache = []; + }, this.interval); +}; + +AjaxLogger.prototype.end = function () {}; // wait until jQuery is defined. Useful if you don't control the load order. + + +AjaxLogger.jQueryWait = function (onDone) { + if (typeof window !== 'undefined' && (window.jQuery || window.$)) { + return onDone(window.jQuery || window.$); + } else if (typeof window !== 'undefined') { + setTimeout(function () { + AjaxLogger.jQueryWait(onDone); + }, 200); + } +}; + +module.exports = AjaxLogger; + /***/ }), /***/ "Ud+c": @@ -93278,7 +93846,7 @@ var _interopRequireDefault = __webpack_require__("jm00"); Object.defineProperty(exports, "__esModule", { value: true }); -exports.NativeMessenger = exports.DebugNativeMessenger = void 0; +exports.logger = exports.NativeMessenger = exports.DebugNativeMessenger = void 0; var _createClass2 = _interopRequireDefault(__webpack_require__("Zvb3")); @@ -93288,16 +93856,28 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("J58c")); var _postMe = __webpack_require__("L5KM"); +var _cozyMinilog = _interopRequireDefault(__webpack_require__("6/w4")); + var _api = __webpack_require__("VXXh"); +var logger = (0, _cozyMinilog.default)('cozy-intent'); +exports.logger = logger; var log = (0, _postMe.debug)('NativeMessenger'); var NativeMessenger = /*#__PURE__*/(0, _createClass2.default)(function NativeMessenger(webviewRef) { - var _this = this; + var _this = this, + _webviewRef$props$sou; (0, _classCallCheck2.default)(this, NativeMessenger); (0, _defineProperty2.default)(this, "injectJavaScript", void 0); (0, _defineProperty2.default)(this, "listener", void 0); + (0, _defineProperty2.default)(this, "webviewUri", void 0); (0, _defineProperty2.default)(this, "postMessage", function (message) { + if (message.error) { + var _this$webviewUri; + + logger.warn("Error during intent to ".concat((_this$webviewUri = _this.webviewUri) !== null && _this$webviewUri !== void 0 ? _this$webviewUri : 'undefined webview', " : "), JSON.stringify(message.error)); + } + try { var _this$injectJavaScrip; @@ -93324,6 +93904,7 @@ var NativeMessenger = /*#__PURE__*/(0, _createClass2.default)(function NativeMes }); }); this.injectJavaScript = webviewRef.injectJavaScript; + this.webviewUri = (_webviewRef$props$sou = webviewRef.props.source.uri) !== null && _webviewRef$props$sou !== void 0 ? _webviewRef$props$sou : webviewRef.props.source.baseUrl; }); exports.NativeMessenger = NativeMessenger; @@ -99918,6 +100499,91 @@ exports.default = _default; /***/ }), +/***/ "aY/w": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + Filter = __webpack_require__("Oxkl"); + +var log = new Transform(), + slice = Array.prototype.slice; + +exports = module.exports = function create(name) { + var o = function o() { + log.write(name, undefined, slice.call(arguments)); + return o; + }; + + o.debug = function () { + log.write(name, 'debug', slice.call(arguments)); + return o; + }; + + o.info = function () { + log.write(name, 'info', slice.call(arguments)); + return o; + }; + + o.warn = function () { + log.write(name, 'warn', slice.call(arguments)); + return o; + }; + + o.error = function () { + log.write(name, 'error', slice.call(arguments)); + return o; + }; + + o.group = function () { + log.write(name, 'group', slice.call(arguments)); + return o; + }; + + o.groupEnd = function () { + log.write(name, 'groupEnd', slice.call(arguments)); + return o; + }; + + o.log = o.debug; // for interface compliance with Node and browser consoles + + o.suggest = exports.suggest; + o.format = log.format; + return o; +}; // filled in separately + + +exports.defaultBackend = exports.defaultFormatter = null; + +exports.pipe = function (dest) { + return log.pipe(dest); +}; + +exports.end = exports.unpipe = exports.disable = function (from) { + return log.unpipe(from); +}; + +exports.Transform = Transform; +exports.Filter = Filter; // this is the default filter that's applied when .enable() is called normally +// you can bypass it completely and set up your own pipes + +exports.suggest = new Filter(); + +exports.enable = function () { + if (exports.defaultFormatter) { + return log.pipe(exports.suggest) // filter + .pipe(exports.defaultFormatter) // formatter + .pipe(exports.defaultBackend); // backend + } + + return log.pipe(exports.suggest) // filter + .pipe(exports.defaultBackend); // formatter +}; + +/***/ }), + /***/ "aY11": /***/ (function(module, exports) { @@ -106734,6 +107400,35 @@ Icon.muiName = 'Icon'; /***/ }), +/***/ "dBgm": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + cache = false; + +var logger = new Transform(); + +logger.write = function (name, level, args) { + if (typeof window == 'undefined' || typeof JSON == 'undefined' || !JSON.stringify || !JSON.parse) return; + + try { + if (!cache) { + cache = window.localStorage.minilog ? JSON.parse(window.localStorage.minilog) : []; + } + + cache.push([new Date().toString(), name, level, args]); + window.localStorage.minilog = JSON.stringify(cache); + } catch (e) {// ignore + } +}; + +module.exports = logger; + +/***/ }), + /***/ "dCuL": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -158076,24 +158771,60 @@ module.exports = __webpack_require__("WXXH") ? Object.defineProperties : functio "use strict"; -var _interopRequireDefault = __webpack_require__("jm00"); - Object.defineProperty(exports, "__esModule", { value: true }); -exports.NativeIntentProvider = void 0; +exports.getNativeIntentService = exports.NativeIntentProvider = void 0; -var _react = _interopRequireDefault(__webpack_require__("ivGQ")); +var _postMe = __webpack_require__("L5KM"); -var _view = __webpack_require__("7zRI"); +var _react = _interopRequireWildcard(__webpack_require__("ivGQ")); var _api = __webpack_require__("VXXh"); +var _view = __webpack_require__("7zRI"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +var log = (0, _postMe.debug)('NativeIntentProvider'); +var nativeIntentService; + +var getNativeIntentService = function getNativeIntentService() { + if (!nativeIntentService) { + throw new Error('nativeIntentService has not been instantiated in a NativeIntentProvider'); + } + + return nativeIntentService; +}; + +exports.getNativeIntentService = getNativeIntentService; + +var setNativeIntentService = function setNativeIntentService(service) { + nativeIntentService = service; +}; + var NativeIntentProvider = function NativeIntentProvider(_ref) { var children = _ref.children, localMethods = _ref.localMethods; + // Use useRef to hold the service instance in a way that does not trigger re-renders + var serviceRef = (0, _react.useRef)(null); + + if (serviceRef.current === null) { + serviceRef.current = new _api.NativeService(localMethods); + setNativeIntentService(serviceRef.current); + } + + (0, _react.useEffect)(function () { + var _serviceRef$current; + + // Always update methods since either they've changed, or this is the first run + log('Updating localMethods on nativeIntentService'); + (_serviceRef$current = serviceRef.current) === null || _serviceRef$current === void 0 ? void 0 : _serviceRef$current.updateLocalMethods(localMethods); + }, [localMethods]); return /*#__PURE__*/_react.default.createElement(_view.NativeContext.Provider, { - value: new _api.NativeService(localMethods) + value: serviceRef.current }, children); }; @@ -172960,6 +173691,105 @@ function insertIntentIframe(intent, element, url, onload) { /***/ }), +/***/ "w0CX": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__("jm00"); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useIsAvailable = void 0; + +var _regenerator = _interopRequireDefault(__webpack_require__("hJxD")); + +var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("HZZ/")); + +var _slicedToArray2 = _interopRequireDefault(__webpack_require__("XkwL")); + +var _react = __webpack_require__("ivGQ"); + +var _useWebviewIntent = __webpack_require__("dMYP"); + +var _utils = __webpack_require__("Lv97"); + +var useIsAvailable = function useIsAvailable(methodName) { + var webviewIntent = (0, _useWebviewIntent.useWebviewIntent)(); + + var _useState = (0, _react.useState)(null), + _useState2 = (0, _slicedToArray2.default)(_useState, 2), + isAvailable = _useState2[0], + setIsAvailable = _useState2[1]; + + var _useState3 = (0, _react.useState)(undefined), + _useState4 = (0, _slicedToArray2.default)(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + (0, _react.useEffect)(function () { + if (!webviewIntent) return; + + var checkIsAvailable = /*#__PURE__*/function () { + var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { + var result; + return _regenerator.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.prev = 0; + _context.next = 3; + return webviewIntent.call('isAvailable', methodName); + + case 3: + result = _context.sent; + + if (!(typeof result !== 'boolean')) { + _context.next = 6; + break; + } + + throw new Error("Invalid result from isAvailable method: ".concat(result)); + + case 6: + setError(undefined); + setIsAvailable(result); + _context.next = 14; + break; + + case 10: + _context.prev = 10; + _context.t0 = _context["catch"](0); + setError((0, _utils.getErrorMessage)(_context.t0)); + setIsAvailable(false); + + case 14: + case "end": + return _context.stop(); + } + } + }, _callee, null, [[0, 10]]); + })); + + return function checkIsAvailable() { + return _ref.apply(this, arguments); + }; + }(); + + void checkIsAvailable(); + }, [webviewIntent, methodName]); + return { + isAvailable: isAvailable, + error: error + }; +}; + +exports.useIsAvailable = useIsAvailable; + +/***/ }), + /***/ "w7+A": /***/ (function(module, exports) { diff --git a/public/index.html b/public/index.html index 827b21b3e28e3066506291a2982665d643794899..f028da791b203a686aef2effc8b659a7ee5fb592 100644 --- a/public/index.html +++ b/public/index.html @@ -1 +1 @@ -<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo | Désabonnement</title><link rel="icon" type="image/png" href="public/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="public/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="public/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="../public/ecolyo.47c206fb4d4a21695e3a.js"></script></div></body></html> \ No newline at end of file +<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo | Désabonnement</title><link rel="icon" type="image/png" href="public/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="public/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="mask-icon" href="public/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="public/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="public/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="../public/ecolyo.95412cfda8c99ee414e9.js"></script></div></body></html> \ No newline at end of file diff --git a/vendors/ecolyo.d86369b459dd48770fe4.js b/vendors/ecolyo.dc6b8a0769b4f8b2dde1.js similarity index 99% rename from vendors/ecolyo.d86369b459dd48770fe4.js rename to vendors/ecolyo.dc6b8a0769b4f8b2dde1.js index 4e5aacaddfe318618e8f7b5876df120b46464ff7..c7531c956c1f766a83d26cc402e1b8404ddbe38a 100644 --- a/vendors/ecolyo.d86369b459dd48770fe4.js +++ b/vendors/ecolyo.dc6b8a0769b4f8b2dde1.js @@ -48757,6 +48757,68 @@ function get(target, propertyKey /* , receiver */) { $export($export.S, 'Reflect', { get: get }); +/***/ }), + +/***/ "6/w4": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Minilog = __webpack_require__("aY/w"); + +var oldEnable = Minilog.enable, + oldDisable = Minilog.disable, + isChrome = typeof navigator != 'undefined' && /chrome/i.test(navigator.userAgent), + isReactNative = typeof navigator != 'undefined' && navigator.product === 'ReactNative', + console = __webpack_require__("FRkB"); // Use a more capable logging backend if on Chrome + + +Minilog.defaultBackend = isChrome || isReactNative ? console.minilog : console; // apply enable inputs from localStorage and from the URL + +if (typeof window != 'undefined') { + try { + Minilog.enable(JSON.parse(window.localStorage['minilogSettings'])); + } catch (e) {// ignore + } + + if (window.location && window.location.search) { + var match = RegExp('[?&]minilog=([^&]*)').exec(window.location.search); + match && Minilog.enable(decodeURIComponent(match[1])); + } +} // Make enable also add to localStorage + + +Minilog.enable = function () { + oldEnable.call(Minilog, true); + + try { + window.localStorage['minilogSettings'] = JSON.stringify(true); + } catch (e) {// ignore + } + + return this; +}; + +Minilog.disable = function () { + oldDisable.call(Minilog); + + try { + delete window.localStorage.minilogSettings; + } catch (e) {// ignore + } + + return this; +}; + +exports = module.exports = Minilog; +exports.backends = { + array: __webpack_require__("It/H"), + browser: Minilog.defaultBackend, + localStorage: __webpack_require__("dBgm"), + jQuery: __webpack_require__("Uc0E") +}; + /***/ }), /***/ "60+6": @@ -65882,6 +65944,19 @@ Object.keys(_useWebviewIntent).forEach(function (key) { }); }); +var _useIsAvailable = __webpack_require__("w0CX"); + +Object.keys(_useIsAvailable).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _useIsAvailable[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function get() { + return _useIsAvailable[key]; + } + }); +}); + /***/ }), /***/ "7zid": @@ -113670,6 +113745,52 @@ p7v.recipientInfoValidator = { }; +/***/ }), + +/***/ "FRkB": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"); + +var newlines = /\n+$/, + logger = new Transform(); + +logger.write = function (name, level, args) { + var i = args.length - 1; + + if (typeof console === 'undefined' || !console.log) { + return; + } + + if (console.log.apply) { + return console.log.apply(console, [name, level].concat(args)); + } else if (JSON && JSON.stringify) { + // console.log.apply is undefined in IE8 and IE9 + // for IE8/9: make console.log at least a bit less awful + if (args[i] && typeof args[i] == 'string') { + args[i] = args[i].replace(newlines, ''); + } + + try { + for (i = 0; i < args.length; i++) { + args[i] = JSON.stringify(args[i]); + } + } catch (e) {// ignore + } + + console.log(args.join(' ')); + } +}; + +logger.formatters = ['color', 'minilog']; +logger.color = __webpack_require__("IPbC"); +logger.minilog = __webpack_require__("U0A+"); +module.exports = logger; + /***/ }), /***/ "FSf8": @@ -123939,6 +124060,24 @@ module.exports = realNames; "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isFlagshipUI = void 0; + +/** App's description resulting of its manifest.webapp file */ + +/** App's mobile information. Used to describe the app scheme and its store urls */ + +/** + * All the different colors are optional + */ +var isFlagshipUI = function isFlagshipUI(item) { + return typeof item === 'object' && item !== null && ('bottomBackground' in item || 'bottomOverlay' in item || 'bottomTheme' in item || 'topBackground' in item || 'topOverlay' in item || 'topTheme' in item); +}; + +exports.isFlagshipUI = isFlagshipUI; + /***/ }), /***/ "Gq/X": @@ -135559,6 +135698,40 @@ __webpack_require__.r(__webpack_exports__); const linear = t => +t; +/***/ }), + +/***/ "IPbC": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"), + color = __webpack_require__("OmjS"); + +var colors = { + debug: ['cyan'], + info: ['purple'], + warn: ['yellow', true], + error: ['red', true] +}, + logger = new Transform(); + +logger.write = function (name, level, args) { + var fn = console.log; + + if (console[level] && console[level].apply) { + fn = console[level]; + fn.apply(console, ['%c' + name + ' %c' + level, color('gray'), color.apply(color, colors[level])].concat(args)); + } +}; // NOP, because piping the formatted logs can only cause trouble. + + +logger.pipe = function () {}; + +module.exports = logger; + /***/ }), /***/ "IQ1l": @@ -136961,6 +137134,34 @@ __webpack_require__.r(__webpack_exports__); }); +/***/ }), + +/***/ "It/H": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + cache = []; + +var logger = new Transform(); + +logger.write = function (name, level, args) { + cache.push([name, level, args]); +}; // utility functions + + +logger.get = function () { + return cache; +}; + +logger.empty = function () { + cache = []; +}; + +module.exports = logger; + /***/ }), /***/ "Itbq": @@ -155660,10 +155861,12 @@ var _interopRequireDefault = __webpack_require__("jm00"); Object.defineProperty(exports, "__esModule", { value: true }); -exports.isWebDevMode = exports.isNativeDevMode = exports.interpolate = exports.getErrorMessage = void 0; +exports.isWebDevMode = exports.isThemeArg = exports.isNativeDevMode = exports.isFlagshipUiArgsArray = exports.interpolate = exports.getErrorMessage = void 0; var _construct2 = _interopRequireDefault(__webpack_require__("GZTL")); +var _api = __webpack_require__("VXXh"); + var interpolate = function interpolate(str, params) { if (!params) return str; var names = Object.keys(params); @@ -155709,6 +155912,18 @@ var getErrorMessage = function getErrorMessage(error) { exports.getErrorMessage = getErrorMessage; +var isFlagshipUiArgsArray = function isFlagshipUiArgsArray(item) { + return Array.isArray(item) && (0, _api.isFlagshipUI)(item[0]); +}; + +exports.isFlagshipUiArgsArray = isFlagshipUiArgsArray; + +var isThemeArg = function isThemeArg(item) { + return typeof item === 'string'; +}; + +exports.isThemeArg = isThemeArg; + /***/ }), /***/ "LvT5": @@ -171999,6 +172214,36 @@ mgf1.create = function(md) { }; +/***/ }), + +/***/ "OmjS": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var hex = { + black: '#000', + red: '#c23621', + green: '#25bc26', + yellow: '#bbbb00', + blue: '#492ee1', + magenta: '#d338d3', + cyan: '#33bbc8', + gray: '#808080', + purple: '#708' +}; + +function color(fg, isInverse) { + if (isInverse) { + return 'color: #fff; background: ' + hex[fg] + ';'; + } else { + return 'color: ' + hex[fg] + ';'; + } +} + +module.exports = color; + /***/ }), /***/ "OqB0": @@ -172881,6 +173126,87 @@ function persistReducer(config, baseReducer) { /***/ }), +/***/ "Oxkl": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// default filter +var Transform = __webpack_require__("UJNO"); + +var levelMap = { + debug: 1, + info: 2, + warn: 3, + error: 4 +}; + +function Filter() { + this.enabled = true; + this.defaultResult = true; + this.clear(); +} + +Transform.mixin(Filter); // allow all matching, with level >= given level + +Filter.prototype.allow = function (name, level) { + this._white.push({ + n: name, + l: levelMap[level] + }); + + return this; +}; // deny all matching, with level <= given level + + +Filter.prototype.deny = function (name, level) { + this._black.push({ + n: name, + l: levelMap[level] + }); + + return this; +}; + +Filter.prototype.clear = function () { + this._white = []; + this._black = []; + return this; +}; + +function test(rule, name) { + // use .test for RegExps + return rule.n.test ? rule.n.test(name) : rule.n == name; +} + +Filter.prototype.test = function (name, level) { + var i, + len = Math.max(this._white.length, this._black.length); + + for (i = 0; i < len; i++) { + if (this._white[i] && test(this._white[i], name) && levelMap[level] >= this._white[i].l) { + return true; + } + + if (this._black[i] && test(this._black[i], name) && levelMap[level] <= this._black[i].l) { + return false; + } + } + + return this.defaultResult; +}; + +Filter.prototype.write = function (name, level, args) { + if (!this.enabled || this.test(name, level)) { + return this.emit('item', name, level, args); + } +}; + +module.exports = Filter; + +/***/ }), + /***/ "OyUe": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -191405,7 +191731,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va var log = (0, _postMe.debug)('NativeService'); var NativeService = /*#__PURE__*/function () { - function NativeService(localMethods) { + function NativeService(_localMethods) { var _this = this; var messengerService = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _api.NativeMessenger; @@ -191413,6 +191739,9 @@ var NativeService = /*#__PURE__*/function () { (0, _defineProperty2.default)(this, "messengerService", void 0); (0, _defineProperty2.default)(this, "localMethods", void 0); (0, _defineProperty2.default)(this, "messengerRegister", {}); + (0, _defineProperty2.default)(this, "updateLocalMethods", function (localMethods) { + _this.localMethods = localMethods; + }); (0, _defineProperty2.default)(this, "getUri", function (source) { return new URL(source.nativeEvent.url).hostname.toLowerCase(); }); @@ -191426,14 +191755,15 @@ var NativeService = /*#__PURE__*/function () { (0, _defineProperty2.default)(this, "isInitMessage", function (message) { return message.message === _api.strings.webviewIsRendered; }); - (0, _defineProperty2.default)(this, "registerWebview", function (uri, ref) { + (0, _defineProperty2.default)(this, "registerWebview", function (uri, slug, ref) { log(_api.strings.logging.registering(uri)); if (_this.messengerRegister[uri]) return log((0, _utils.interpolate)(_api.strings.errorRegisterWebview, { uri: uri })); var messenger = new _this.messengerService(ref); _this.messengerRegister = _objectSpread(_objectSpread({}, _this.messengerRegister), {}, (0, _defineProperty2.default)({}, uri, { - messenger: (0, _utils.isNativeDevMode)() ? (0, _api.DebugNativeMessenger)(messenger) : messenger + messenger: (0, _utils.isNativeDevMode)() ? (0, _api.DebugNativeMessenger)(messenger) : messenger, + slug: slug })); log(_api.strings.logging.registered(uri)); }); @@ -191470,7 +191800,7 @@ var NativeService = /*#__PURE__*/function () { }; }()); (0, _defineProperty2.default)(this, "tryEmit", /*#__PURE__*/function () { - var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event) { + var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(event, componentId) { var parsedEvent; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { @@ -191486,21 +191816,32 @@ var NativeService = /*#__PURE__*/function () { case 2: parsedEvent = _this.parseNativeEvent(event); + if (parsedEvent.methodName === 'setFlagshipUI' && (0, _utils.isFlagshipUiArgsArray)(parsedEvent.args)) { + parsedEvent.args[0].componentId = componentId; + } + + if (parsedEvent.methodName === 'setTheme' && Array.isArray(parsedEvent.args) && (0, _utils.isThemeArg)(parsedEvent.args[0])) { + parsedEvent.args[0] = { + homeTheme: parsedEvent.args[0], + componentId: componentId + }; + } + if (!_this.isInitMessage(parsedEvent)) { - _context2.next = 7; + _context2.next = 9; break; } - _context2.next = 6; + _context2.next = 8; return _this.tryInit(event); - case 6: + case 8: return _context2.abrupt("return", _context2.sent); - case 7: + case 9: if (_this.isPostMeMessage(parsedEvent)) _this.tryOnMessage(event, parsedEvent); - case 8: + case 10: case "end": return _context2.stop(); } @@ -191508,7 +191849,7 @@ var NativeService = /*#__PURE__*/function () { }, _callee2); })); - return function (_x2) { + return function (_x2, _x3) { return _ref3.apply(this, arguments); }; }()); @@ -191557,11 +191898,13 @@ var NativeService = /*#__PURE__*/function () { }, _callee3, null, [[2, 10]]); })); - return function (_x3) { + return function (_x4) { return _ref4.apply(this, arguments); }; }()); (0, _defineProperty2.default)(this, "tryOnMessage", function (event, message) { + var _message$args; + var webviewUri = _this.getUri(event); var registeredWebview = _this.messengerRegister[webviewUri]; @@ -191572,6 +191915,9 @@ var NativeService = /*#__PURE__*/function () { })); } + (_message$args = message.args) === null || _message$args === void 0 ? void 0 : _message$args.unshift({ + slug: registeredWebview.slug + }); registeredWebview.messenger.onMessage(message); }); (0, _defineProperty2.default)(this, "getHostname", function (uri) { @@ -191591,15 +191937,13 @@ var NativeService = /*#__PURE__*/function () { return (_this$messengerRegist = _this.messengerRegister[_this.getHostname(uri)]) === null || _this$messengerRegist === void 0 ? void 0 : (_this$messengerRegist2 = _this$messengerRegist.connection) === null || _this$messengerRegist2 === void 0 ? void 0 : (_this$messengerRegist3 = _this$messengerRegist2.remoteHandle()).call.apply(_this$messengerRegist3, [methodName].concat(args)); }); this.messengerService = messengerService; - this.localMethods = localMethods; + this.localMethods = _localMethods; } (0, _createClass2.default)(NativeService, [{ key: "isNativeEvent", value: function isNativeEvent(object) { - var _nativeEvent; - - return ((_nativeEvent = object.nativeEvent) === null || _nativeEvent === void 0 ? void 0 : _nativeEvent.data) !== undefined; + return object.nativeEvent.data !== undefined; } }]); return NativeService; @@ -197730,6 +198074,52 @@ class BrowserClient extends _sentry_core__WEBPACK_IMPORTED_MODULE_0__["BaseClien //# sourceMappingURL=client.js.map +/***/ }), + +/***/ "U0A+": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* eslint-disable no-console */ +var Transform = __webpack_require__("UJNO"), + color = __webpack_require__("OmjS"), + colors = { + debug: ['gray'], + info: ['purple'], + warn: ['yellow', true], + error: ['red', true] +}, + logger = new Transform(); + +logger.write = function (name, level, args) { + var fn = console.log; + + if (level != 'debug' && console[level]) { + fn = console[level]; + } // eslint-disable-next-line no-unused-vars + + + var subset = [], + i = 0; + + if (level != 'info') { + for (; i < args.length; i++) { + if (typeof args[i] != 'string') break; + } + + fn.apply(console, ['%c' + name + ' ' + args.slice(0, i).join(' '), color.apply(color, colors[level])].concat(args.slice(i))); + } else { + fn.apply(console, ['%c' + name, color.apply(color, colors[level])].concat(args)); + } +}; // NOP, because piping the formatted logs can only cause trouble. + + +logger.pipe = function () {}; + +module.exports = logger; + /***/ }), /***/ "U2Bz": @@ -199100,6 +199490,87 @@ exports.default = _default; /***/ }), +/***/ "UJNO": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var microee = __webpack_require__("GIvT"); // Implements a subset of Node's stream.Transform - in a cross-platform manner. + + +function Transform() {} + +microee.mixin(Transform); // The write() signature is different from Node's +// --> makes it much easier to work with objects in logs. +// One of the lessons from v1 was that it's better to target +// a good browser rather than the lowest common denominator +// internally. +// If you want to use external streams, pipe() to ./stringify.js first. + +Transform.prototype.write = function (name, level, args) { + this.emit('item', name, level, args); +}; + +Transform.prototype.end = function () { + this.emit('end'); + this.removeAllListeners(); +}; + +Transform.prototype.pipe = function (dest) { + var s = this; // prevent double piping + + s.emit('unpipe', dest); // tell the dest that it's being piped to + + dest.emit('pipe', s); + + function onItem() { + dest.write.apply(dest, Array.prototype.slice.call(arguments)); + } + + function onEnd() { + !dest._isStdio && dest.end(); + } + + s.on('item', onItem); + s.on('end', onEnd); + s.when('unpipe', function (from) { + var match = from === dest || typeof from == 'undefined'; + + if (match) { + s.removeListener('item', onItem); + s.removeListener('end', onEnd); + dest.emit('unpipe'); + } + + return match; + }); + return dest; +}; + +Transform.prototype.unpipe = function (from) { + this.emit('unpipe', from); + return this; +}; + +Transform.prototype.format = function () { + throw new Error(['Warning: .format() is deprecated in Minilog v2! Use .pipe() instead. For example:', "var Minilog = require('minilog');", 'Minilog', ' .pipe(Minilog.backends.console.formatClean)', ' .pipe(Minilog.backends.console);'].join('\n')); +}; + +Transform.mixin = function (dest) { + var o = Transform.prototype, + k; + + for (k in o) { + // eslint-disable-next-line no-prototype-builtins + o.hasOwnProperty(k) && (dest.prototype[k] = o[k]); + } +}; + +module.exports = Transform; + +/***/ }), + /***/ "UJYq": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -200608,6 +201079,103 @@ __webpack_require__.r(__webpack_exports__); /***/ }), +/***/ "Uc0E": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"); + +var cid = new Date().valueOf().toString(36); + +function AjaxLogger(options) { + this.url = options.url || ''; + this.cache = []; + this.timer = null; + this.interval = options.interval || 30 * 1000; + this.enabled = true; + this.jQuery = window.jQuery; + this.extras = {}; +} + +Transform.mixin(AjaxLogger); + +AjaxLogger.prototype.write = function (name, level, args) { + if (!this.timer) { + this.init(); + } + + this.cache.push([name, level].concat(args)); +}; + +AjaxLogger.prototype.init = function () { + if (!this.enabled || !this.jQuery) return; + var self = this; + this.timer = setTimeout(function () { + var i, + logs = [], + ajaxData, + url = self.url; + if (self.cache.length == 0) return self.init(); // Test each log line and only log the ones that are valid (e.g. don't have circular references). + // Slight performance hit but benefit is we log all valid lines. + + for (i = 0; i < self.cache.length; i++) { + try { + JSON.stringify(self.cache[i]); + logs.push(self.cache[i]); + } catch (e) {// ignore + } + } + + if (self.jQuery.isEmptyObject(self.extras)) { + ajaxData = JSON.stringify({ + logs: logs + }); + url = self.url + '?client_id=' + cid; + } else { + ajaxData = JSON.stringify(self.jQuery.extend({ + logs: logs + }, self.extras)); + } + + self.jQuery.ajax(url, { + type: 'POST', + cache: false, + processData: false, + data: ajaxData, + contentType: 'application/json', + timeout: 10000 + }).success(function (data) { + if (data.interval) { + self.interval = Math.max(1000, data.interval); + } + }).error(function () { + self.interval = 30000; + }).always(function () { + self.init(); + }); + self.cache = []; + }, this.interval); +}; + +AjaxLogger.prototype.end = function () {}; // wait until jQuery is defined. Useful if you don't control the load order. + + +AjaxLogger.jQueryWait = function (onDone) { + if (typeof window !== 'undefined' && (window.jQuery || window.$)) { + return onDone(window.jQuery || window.$); + } else if (typeof window !== 'undefined') { + setTimeout(function () { + AjaxLogger.jQueryWait(onDone); + }, 200); + } +}; + +module.exports = AjaxLogger; + +/***/ }), + /***/ "Ud+c": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -216893,7 +217461,7 @@ var _interopRequireDefault = __webpack_require__("jm00"); Object.defineProperty(exports, "__esModule", { value: true }); -exports.NativeMessenger = exports.DebugNativeMessenger = void 0; +exports.logger = exports.NativeMessenger = exports.DebugNativeMessenger = void 0; var _createClass2 = _interopRequireDefault(__webpack_require__("Zvb3")); @@ -216903,16 +217471,28 @@ var _defineProperty2 = _interopRequireDefault(__webpack_require__("J58c")); var _postMe = __webpack_require__("L5KM"); +var _cozyMinilog = _interopRequireDefault(__webpack_require__("6/w4")); + var _api = __webpack_require__("VXXh"); +var logger = (0, _cozyMinilog.default)('cozy-intent'); +exports.logger = logger; var log = (0, _postMe.debug)('NativeMessenger'); var NativeMessenger = /*#__PURE__*/(0, _createClass2.default)(function NativeMessenger(webviewRef) { - var _this = this; + var _this = this, + _webviewRef$props$sou; (0, _classCallCheck2.default)(this, NativeMessenger); (0, _defineProperty2.default)(this, "injectJavaScript", void 0); (0, _defineProperty2.default)(this, "listener", void 0); + (0, _defineProperty2.default)(this, "webviewUri", void 0); (0, _defineProperty2.default)(this, "postMessage", function (message) { + if (message.error) { + var _this$webviewUri; + + logger.warn("Error during intent to ".concat((_this$webviewUri = _this.webviewUri) !== null && _this$webviewUri !== void 0 ? _this$webviewUri : 'undefined webview', " : "), JSON.stringify(message.error)); + } + try { var _this$injectJavaScrip; @@ -216939,6 +217519,7 @@ var NativeMessenger = /*#__PURE__*/(0, _createClass2.default)(function NativeMes }); }); this.injectJavaScript = webviewRef.injectJavaScript; + this.webviewUri = (_webviewRef$props$sou = webviewRef.props.source.uri) !== null && _webviewRef$props$sou !== void 0 ? _webviewRef$props$sou : webviewRef.props.source.baseUrl; }); exports.NativeMessenger = NativeMessenger; @@ -234686,6 +235267,91 @@ exports.default = _default; /***/ }), +/***/ "aY/w": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + Filter = __webpack_require__("Oxkl"); + +var log = new Transform(), + slice = Array.prototype.slice; + +exports = module.exports = function create(name) { + var o = function o() { + log.write(name, undefined, slice.call(arguments)); + return o; + }; + + o.debug = function () { + log.write(name, 'debug', slice.call(arguments)); + return o; + }; + + o.info = function () { + log.write(name, 'info', slice.call(arguments)); + return o; + }; + + o.warn = function () { + log.write(name, 'warn', slice.call(arguments)); + return o; + }; + + o.error = function () { + log.write(name, 'error', slice.call(arguments)); + return o; + }; + + o.group = function () { + log.write(name, 'group', slice.call(arguments)); + return o; + }; + + o.groupEnd = function () { + log.write(name, 'groupEnd', slice.call(arguments)); + return o; + }; + + o.log = o.debug; // for interface compliance with Node and browser consoles + + o.suggest = exports.suggest; + o.format = log.format; + return o; +}; // filled in separately + + +exports.defaultBackend = exports.defaultFormatter = null; + +exports.pipe = function (dest) { + return log.pipe(dest); +}; + +exports.end = exports.unpipe = exports.disable = function (from) { + return log.unpipe(from); +}; + +exports.Transform = Transform; +exports.Filter = Filter; // this is the default filter that's applied when .enable() is called normally +// you can bypass it completely and set up your own pipes + +exports.suggest = new Filter(); + +exports.enable = function () { + if (exports.defaultFormatter) { + return log.pipe(exports.suggest) // filter + .pipe(exports.defaultFormatter) // formatter + .pipe(exports.defaultBackend); // backend + } + + return log.pipe(exports.suggest) // filter + .pipe(exports.defaultBackend); // formatter +}; + +/***/ }), + /***/ "aY11": /***/ (function(module, exports) { @@ -255760,6 +256426,35 @@ Icon.muiName = 'Icon'; /***/ }), +/***/ "dBgm": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Transform = __webpack_require__("UJNO"), + cache = false; + +var logger = new Transform(); + +logger.write = function (name, level, args) { + if (typeof window == 'undefined' || typeof JSON == 'undefined' || !JSON.stringify || !JSON.parse) return; + + try { + if (!cache) { + cache = window.localStorage.minilog ? JSON.parse(window.localStorage.minilog) : []; + } + + cache.push([new Date().toString(), name, level, args]); + window.localStorage.minilog = JSON.stringify(cache); + } catch (e) {// ignore + } +}; + +module.exports = logger; + +/***/ }), + /***/ "dCuL": /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -365523,24 +366218,60 @@ module.exports = __webpack_require__("WXXH") ? Object.defineProperties : functio "use strict"; -var _interopRequireDefault = __webpack_require__("jm00"); - Object.defineProperty(exports, "__esModule", { value: true }); -exports.NativeIntentProvider = void 0; +exports.getNativeIntentService = exports.NativeIntentProvider = void 0; -var _react = _interopRequireDefault(__webpack_require__("ivGQ")); +var _postMe = __webpack_require__("L5KM"); -var _view = __webpack_require__("7zRI"); +var _react = _interopRequireWildcard(__webpack_require__("ivGQ")); var _api = __webpack_require__("VXXh"); +var _view = __webpack_require__("7zRI"); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +var log = (0, _postMe.debug)('NativeIntentProvider'); +var nativeIntentService; + +var getNativeIntentService = function getNativeIntentService() { + if (!nativeIntentService) { + throw new Error('nativeIntentService has not been instantiated in a NativeIntentProvider'); + } + + return nativeIntentService; +}; + +exports.getNativeIntentService = getNativeIntentService; + +var setNativeIntentService = function setNativeIntentService(service) { + nativeIntentService = service; +}; + var NativeIntentProvider = function NativeIntentProvider(_ref) { var children = _ref.children, localMethods = _ref.localMethods; + // Use useRef to hold the service instance in a way that does not trigger re-renders + var serviceRef = (0, _react.useRef)(null); + + if (serviceRef.current === null) { + serviceRef.current = new _api.NativeService(localMethods); + setNativeIntentService(serviceRef.current); + } + + (0, _react.useEffect)(function () { + var _serviceRef$current; + + // Always update methods since either they've changed, or this is the first run + log('Updating localMethods on nativeIntentService'); + (_serviceRef$current = serviceRef.current) === null || _serviceRef$current === void 0 ? void 0 : _serviceRef$current.updateLocalMethods(localMethods); + }, [localMethods]); return /*#__PURE__*/_react.default.createElement(_view.NativeContext.Provider, { - value: new _api.NativeService(localMethods) + value: serviceRef.current }, children); }; @@ -409952,6 +410683,105 @@ var CardData = function CardData(data) { /***/ }), +/***/ "w0CX": +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__("jm00"); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useIsAvailable = void 0; + +var _regenerator = _interopRequireDefault(__webpack_require__("hJxD")); + +var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("HZZ/")); + +var _slicedToArray2 = _interopRequireDefault(__webpack_require__("XkwL")); + +var _react = __webpack_require__("ivGQ"); + +var _useWebviewIntent = __webpack_require__("dMYP"); + +var _utils = __webpack_require__("Lv97"); + +var useIsAvailable = function useIsAvailable(methodName) { + var webviewIntent = (0, _useWebviewIntent.useWebviewIntent)(); + + var _useState = (0, _react.useState)(null), + _useState2 = (0, _slicedToArray2.default)(_useState, 2), + isAvailable = _useState2[0], + setIsAvailable = _useState2[1]; + + var _useState3 = (0, _react.useState)(undefined), + _useState4 = (0, _slicedToArray2.default)(_useState3, 2), + error = _useState4[0], + setError = _useState4[1]; + + (0, _react.useEffect)(function () { + if (!webviewIntent) return; + + var checkIsAvailable = /*#__PURE__*/function () { + var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { + var result; + return _regenerator.default.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.prev = 0; + _context.next = 3; + return webviewIntent.call('isAvailable', methodName); + + case 3: + result = _context.sent; + + if (!(typeof result !== 'boolean')) { + _context.next = 6; + break; + } + + throw new Error("Invalid result from isAvailable method: ".concat(result)); + + case 6: + setError(undefined); + setIsAvailable(result); + _context.next = 14; + break; + + case 10: + _context.prev = 10; + _context.t0 = _context["catch"](0); + setError((0, _utils.getErrorMessage)(_context.t0)); + setIsAvailable(false); + + case 14: + case "end": + return _context.stop(); + } + } + }, _callee, null, [[0, 10]]); + })); + + return function checkIsAvailable() { + return _ref.apply(this, arguments); + }; + }(); + + void checkIsAvailable(); + }, [webviewIntent, methodName]); + return { + isAvailable: isAvailable, + error: error + }; +}; + +exports.useIsAvailable = useIsAvailable; + +/***/ }), + /***/ "w0OA": /***/ (function(module, __webpack_exports__, __webpack_require__) {