From eb85ba45ec5ea5b40aecac6b3557151337f3bd60 Mon Sep 17 00:00:00 2001 From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:08:41 +0200 Subject: [PATCH] Update Add Fix Updated dependencies Added GET_DAY_SUMMARY Fixed Qortal Lottery enter amount --- package-lock.json | 443 +++--- package.json | 26 +- .../core/components/qdn-action-types.js | 5 +- .../plugins/core/qdn/browser/browser.src.js | 1262 +++++++++-------- .../core/qortal-lottery/qortal-lottery.src.js | 1 + 5 files changed, 891 insertions(+), 846 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b777009..b8f83b51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@hapi/hapi": "21.3.2", "@hapi/inert": "7.1.0", - "@lit-labs/motion": "1.0.4", + "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", "@tiptap/core": "2.0.4", "@tiptap/extension-highlight": "2.0.4", @@ -25,9 +25,9 @@ "bcryptjs": "2.4.3", "buffer": "6.0.3", "compressorjs": "1.2.1", - "crypto-js": "4.1.1", + "crypto-js": "4.2.0", "electron-dl": "3.5.1", - "electron-log": "4.4.8", + "electron-log": "5.0.0", "electron-store": "8.1.0", "electron-updater": "6.1.4", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -45,8 +45,8 @@ "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.32.1", - "sass": "1.69.4", + "prosemirror-view": "1.32.2", + "sass": "1.69.5", "short-unique-id": "5.0.3" }, "devDependencies": { @@ -93,20 +93,20 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.4", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.0", - "@vaadin/button": "24.2.0", - "@vaadin/grid": "24.2.0", - "@vaadin/icons": "24.2.0", - "@vaadin/password-field": "24.2.0", - "@vaadin/tooltip": "24.2.0", + "@vaadin/avatar": "24.2.1", + "@vaadin/button": "24.2.1", + "@vaadin/grid": "24.2.1", + "@vaadin/icons": "24.2.1", + "@vaadin/password-field": "24.2.1", + "@vaadin/tooltip": "24.2.1", "@zip.js/zip.js": "2.7.30", - "axios": "1.5.1", + "axios": "1.6.0", "electron": "27.0.2", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", "eslint": "8.52.0", - "eslint-plugin-lit": "1.9.1", + "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", "highcharts": "11.1.0", @@ -757,9 +757,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1313,11 +1313,11 @@ } }, "node_modules/@lit-labs/motion": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@lit-labs/motion/-/motion-1.0.4.tgz", - "integrity": "sha512-cZrA6u/qR71ZIqk0PGINBLWPDxT8oHB706QzWHJKo7nCOi3KCsd7CSuR5H09I0t6E+bd2nVB+zJPGd2wVjNSsA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lit-labs/motion/-/motion-1.0.6.tgz", + "integrity": "sha512-7d4d89CjdEMsU7lNG0gFMZOUowq00CgcJL1ifab0IVFc/fTCcfZyQuRb5vAhetkwPQFmiyP54tvHQ9GuHsLtuQ==", "dependencies": { - "lit": "^2.8.0" + "lit": "^2.0.0 || ^3.0.0" } }, "node_modules/@lit-labs/ssr-dom-shim": { @@ -3612,10 +3612,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", - "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==", - "devOptional": true + "version": "18.18.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.7.tgz", + "integrity": "sha512-bw+lEsxis6eqJYW8Ql6+yTqkE6RuFtsQPSe5JxXbqYRFQEER5aJA9a5UH9igqDWm3X4iLHIKOHlnAXLM4mi7uQ==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/object.omit": { "version": "3.0.2", @@ -3686,72 +3689,72 @@ "dev": true }, "node_modules/@vaadin/a11y-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.0.tgz", - "integrity": "sha512-cnppkRPiVjSDPLPzdnZ14yQZYRdWFjNiUh6jmUTCXiGsXrkgoUfmALxhhc9iodd1WxbrXwtD4OsMcJi/uMIjAg==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.1.tgz", + "integrity": "sha512-S4PG7xRfn/vUxuDtBEwsktjhLGSa70U02++l42Zqct8nT5xSZPjl7k9n+77bcDU/Ofpcwb9pZUPNeyi1lTKbzw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", + "@vaadin/component-base": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/avatar": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.0.tgz", - "integrity": "sha512-Xy+yxj9fxMLEjhLCsTmsYV3kVOamIurPgnPGK0/CGn4PQphdhqqiRd0b9cHxPJl/Ei6CDu033lj1ovT19CjmbA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.1.tgz", + "integrity": "sha512-HIxznBjaveGVypaFI3Wjed4D/I8hfW+Bg++PbyNUP/QuI+dQYvDskhS+qo8BzjuyB6s1ka+Rh5ROOk/SKL0XyQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/item": "~24.2.0", - "@vaadin/list-box": "~24.2.0", - "@vaadin/overlay": "~24.2.0", - "@vaadin/tooltip": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/item": "~24.2.1", + "@vaadin/list-box": "~24.2.1", + "@vaadin/overlay": "~24.2.1", + "@vaadin/tooltip": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/button": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.0.tgz", - "integrity": "sha512-gHO9jiPGRV4AwzsLJ2A2OkIDIdeOJ7iZ2JwPSdj/O4pzwwqPe+VOd4s2mrLKGWD9TNW/gsX4cRFVzwfbvOOKyg==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.1.tgz", + "integrity": "sha512-8DwoHxvQVZGXV63elsoYcbMe7tZnecijEQOrgSZ34Nn4e6VAv/1rPuW1QscewIOQSXYCbYeESPqAjOhWrHd+iw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/checkbox": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.0.tgz", - "integrity": "sha512-sy2NzW6ESF5t0TSuGrBGkLnELFEQM01UQf4rkSyo2d4qo8tDADW2XcItj810qIGcsMxxCyUiywM2J2tMyukrIA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.1.tgz", + "integrity": "sha512-ptkBqIk4v7NjVmw5OPIvUo1symP9EbOeIdgtWnIW0aXFKbgyl41ghOg5jT9XPY4fhLzcRp+ephgdzZYJG4S1fQ==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/field-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/field-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/component-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.0.tgz", - "integrity": "sha512-n0iIg6Oj6+Ei2L2BaEdZn1gXdvX7ZNgDnC28TGQ7o2Ld7K0GomEEyG20/nTra8zxgZRm57CZKoR+PEcxkzTexQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.1.tgz", + "integrity": "sha512-DQOImwyKirm82g1XAXCzIEuQ+RW3P2qm4Qk4s7z6yhxErsseCXzsVXKKGAB6oya+XeuByoC1p6ja+cDcTjlVVA==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -3762,173 +3765,173 @@ } }, "node_modules/@vaadin/field-base": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.0.tgz", - "integrity": "sha512-AN3NNgvFx8K2fa7RZQ1iWeqDA+wQ0joa1RCP58Qo9u+JtU9c75XHJKiPiQvFVGH0EmRjOXwhE0KqyMYmKFfOaw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.1.tgz", + "integrity": "sha512-Me5XjVFQQTA6pn+7dn6oe/Nf0hlu030CXgt5B7VAnJNNAB0ZkLMNc3Ll5QY1YhTv44Uss5ZvTxUo2DCAsL0NCw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/grid": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.0.tgz", - "integrity": "sha512-jCkTb3I8ljdkJDlxSOr0ORlxqZphhdfbfaxHWFSc8/i1TlUo4Uof2VugZRsSDVh2UGB1DyHOGUtHn80ZPEqzaw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.1.tgz", + "integrity": "sha512-uzKiDG1Jw+rE/rQ9ZinI5Sj/57tJCsZhxdkvXGbXZtXAkfUJO3tqaiH/EJvFWkHUvOGuUACif5q6tKBFhOpjYg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/checkbox": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/lit-renderer": "~24.2.0", - "@vaadin/text-field": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/checkbox": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/lit-renderer": "~24.2.1", + "@vaadin/text-field": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/icon": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.0.tgz", - "integrity": "sha512-0Ame9r0eb+kz+ryaxnH/CzzNefT8VERL3YFNlLo0YhJPK9vhcT9qxOfbCqWvT52R0DorIux80WS8ZtMAKTsjOQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.1.tgz", + "integrity": "sha512-jWow97z8bVgrts/0Cjkvqm9P5fxm5ooCRcLcr0vwf+FIqgY9U5j+zXIL06DbDnXCz25a8lLcnqnIjtDJLwr25Q==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/icons": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.0.tgz", - "integrity": "sha512-ekiGe5JscULbr0LvMdotCkBWfKDewiGf+VJTG0mjEthcTCvxH5snTmoTlUrUMLJjmIKR6rwNLZ5dx3yPrdcMDQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.1.tgz", + "integrity": "sha512-lbR851SeFaInR2lGa+2OeVSz7k/NTGEpTnRtWtytUEQnBm/3O2/OQo+BwQ6grCA5lxiYL+qq4G7Fd2qBwLhYEA==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/icon": "~24.2.0" + "@vaadin/icon": "~24.2.1" } }, "node_modules/@vaadin/input-container": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.0.tgz", - "integrity": "sha512-Netv/fN+SFAZIvoZb8Dqwv0SLT4gGRtCwD+xstdF5CrgYuFcnrdAg8Gku7xSDhWy3Pq7sCXrbUV+YjCOHinSFA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.1.tgz", + "integrity": "sha512-P6GMXyjWC9EizJJhDMKzhQweTwdRQAmfY/oa+PuY/JRqYLQKy5DH8XmpNOUVxbFiVBaciFGtN8wJonLoBtCsJg==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/item": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.0.tgz", - "integrity": "sha512-kI+qOMkY7np2gmo88zc/z4OVBfNgBFjTDYhF7bnVTqD3aZIa39pjcNBm6vxJKPglOtZ/US3iJTh3HvyCv/EVjw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.1.tgz", + "integrity": "sha512-UX3LREC6ANSqFNYa+N/X1vd0K7XpfhmygfAkCTCQ0MVz4GJCA2Isr9Qo3o14vY+aEoZoNRRqNMEa7PP9yNDXJg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/list-box": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.0.tgz", - "integrity": "sha512-F/5XEpnSYB1Rdl6Z1n1HN3k111B7VAD+9d5MCQCadfE4Q3bxqQ16QOqKON1LBoSguINwNRkm3M9Warpk8dUABQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.1.tgz", + "integrity": "sha512-Lt9joa45tHi7CWuwulumXhchCtiRq9BcnbANd7rIJCqGIHlW+bZFspqJ+X12zObNTp9BDohFH5EJk6qPpqjSkg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/item": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/item": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/lit-renderer": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.0.tgz", - "integrity": "sha512-fkj6aetCgq3kp6tUqkvL+E9LwLd6oH/a8Pg93sPuBx4D2dQ85IVIgJCpYFlBjdaDp548/frPRkfpRmziZ1netw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.1.tgz", + "integrity": "sha512-eit1MD84gFh0FBkO8YGZI9Zi2uy6iMJNb4B9iq5VGkHpcj4bFsJCy/t+eDR23MdqVpEn725AXOdHu9NA9hupRg==", "dev": true, "dependencies": { "lit": "^2.0.0" } }, "node_modules/@vaadin/overlay": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.0.tgz", - "integrity": "sha512-suNbMshKy52jhm2CDc4g974JU8hXsr5KIzopyR9A1pT3syiPx+75HqucZvqDJbiGMf/Fe04UjLrlhem6+tIuXw==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.1.tgz", + "integrity": "sha512-f/gzh25yWI/7lfjrtvu7Sqhn5HaNA/SItCS5D94LIo7DbGK4qepjlYrO7YS6pr/Jv5bznQ27+nGskMxN6WLEAQ==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/password-field": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.0.tgz", - "integrity": "sha512-EGael4z/WBBpXHs6TQgKPUGCdHDT9OB+mmpKqfi8vlYr5FV7c6jxaouFH4mND4fiPwymCE8R1LbxVQ+wLcByeQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.1.tgz", + "integrity": "sha512-6QRacwzeSChxbTPWBTzO8tkzMHQS2iTx7NoLA2C6JmaaZKXFcGRvsDXiuWJJa2yyYVcWegR/PW9VPfI2dvnwbQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/button": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/text-field": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/button": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/text-field": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/text-field": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.0.tgz", - "integrity": "sha512-JJDYZ/HjUnQtFh2ylYDoTmrj4OxXc5aeDUyhgAzH7BpDkRR2+pOWupKUlgwwc1RUhz5sC14Pw0xgt68ZaMo/MA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.1.tgz", + "integrity": "sha512-g/AAzpLS/ogPILPP+vpB36ttStAtmaX34iMuZNgDhCdDePHt0j4akKmoM025XrQ1xJ4oRtmff09AbjGizIt+vg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/field-base": "~24.2.0", - "@vaadin/input-container": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0", + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/field-base": "~24.2.1", + "@vaadin/input-container": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1", "lit": "^2.0.0" } }, "node_modules/@vaadin/tooltip": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.0.tgz", - "integrity": "sha512-I9ItRzk1Xw5JE6L/8V+FIDs+T7pAcd7vnVq3nTb81SYQ2Op2QUPTYG1jd9hz7QuZgVURtqO5Kbr9NtDbqUJYNA==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.1.tgz", + "integrity": "sha512-Rw75Ck1lBWgd2DIGj+rL9ynN4f+XH8VuGSFd/r+l0O0yRI6JUL57MDsx9DRyqA3lMnqf3aWvIU77hQspAHz6Bg==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/overlay": "~24.2.0", - "@vaadin/vaadin-lumo-styles": "~24.2.0", - "@vaadin/vaadin-material-styles": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/a11y-base": "~24.2.1", + "@vaadin/component-base": "~24.2.1", + "@vaadin/overlay": "~24.2.1", + "@vaadin/vaadin-lumo-styles": "~24.2.1", + "@vaadin/vaadin-material-styles": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-development-mode-detector": { @@ -3938,32 +3941,32 @@ "dev": true }, "node_modules/@vaadin/vaadin-lumo-styles": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.0.tgz", - "integrity": "sha512-rXW6GUe7Q0p5mKClVeVsMTOSZG8yN+snEDfZumD41/Vdfo/UAuVsl/k+J43pr1ArWzHQG0sqIRqHYMGqI8X+8g==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.1.tgz", + "integrity": "sha512-hEMHyCp0S1Au3xVV0xXSL3U9kqSYt6yjroUEgU/RpRiDxH+/1pbkUbF/VonZX9KTambcRVUtZNwdlihSU9JYpQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/icon": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/icon": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-material-styles": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.0.tgz", - "integrity": "sha512-wHo3JlbheGpetme65ucSVCgjYwbvRNvfndHsig0n+l8EuvuVDsIoTrNdK7jz2gYMQpco36HOoSDPuqJXXt2nGQ==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.1.tgz", + "integrity": "sha512-Ux2tbblv/h3vM28NdSn9enCgtlLOyOqBdnbq73Z1kd0BBd9CfFBcJah5ijW/NxYrAaYXIdO2kWknwyRf4Kgrww==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.0", - "@vaadin/vaadin-themable-mixin": "~24.2.0" + "@vaadin/component-base": "~24.2.1", + "@vaadin/vaadin-themable-mixin": "~24.2.1" } }, "node_modules/@vaadin/vaadin-themable-mixin": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.0.tgz", - "integrity": "sha512-5Y2KwOlVUad9adTLondWQi7MGyvCmldWHFf5QiBIm22yQY/AxLVhzbPXcwPRR7yw+usVCJCDKmOMJa5YrwyQ1g==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.1.tgz", + "integrity": "sha512-W1QW4KnMER0KdervGOIetF9DnYEgnURW4MJ4IecAlw5H14MN92lTXcsz8R5CT9ANerABqCGPCF+F+t0L8qrfxw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -4016,9 +4019,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4333,9 +4336,9 @@ } }, "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -4711,9 +4714,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001551", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", - "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", + "version": "1.0.30001555", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001555.tgz", + "integrity": "sha512-NzbUFKUnJ3DTcq6YyZB6+qqhfD112uR3uoEnkmfzm2wVzUNsFkU7AwBjKQ654Sp5cau0JxhFyRSn/tQZ+XfygA==", "dev": true, "funding": [ { @@ -5147,9 +5150,9 @@ } }, "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, "node_modules/css-what": { "version": "6.1.0", @@ -5628,9 +5631,13 @@ } }, "node_modules/electron-log": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", - "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.0.tgz", + "integrity": "sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==", + "engines": { + "electron": ">= 13", + "node": ">= 14" + } }, "node_modules/electron-packager": { "version": "17.1.2", @@ -5897,9 +5904,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.563", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.563.tgz", - "integrity": "sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==", + "version": "1.4.569", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz", + "integrity": "sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==", "dev": true }, "node_modules/electron-updater": { @@ -6138,9 +6145,9 @@ } }, "node_modules/eslint-plugin-lit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.9.1.tgz", - "integrity": "sha512-XFFVufVxYJwqRB9sLkDXB7SvV1xi9hrC4HRFEdX1h9+iZ3dm4x9uS7EuT9uaXs6zR3DEgcojia1F7pmvWbc4Gg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.10.1.tgz", + "integrity": "sha512-3eH++xFpe6efd+TN6B9kW1coULdPyK+3fMNws378nbYQ/HiWIz0+jVcsaGVs9BbLt6kVkDxZmUGF4Ivx3BatkA==", "dev": true, "dependencies": { "parse5": "^6.0.1", @@ -6756,7 +6763,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6834,16 +6840,16 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "optional": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7052,15 +7058,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7071,13 +7068,13 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "optional": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7109,6 +7106,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/highcharts": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.1.0.tgz", @@ -7389,12 +7398,12 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8871,9 +8880,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.1.tgz", - "integrity": "sha512-9SnB4HBgRczzTyIMZLPE1iszegL04hNfUyS8uPtP1RPxNM2NTCiIs8KwNsJU4nbZO9rxJTwVTv7Jm3zU4CR78A==", + "version": "1.32.2", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.2.tgz", + "integrity": "sha512-l2RQUGaiDI8SG8ZjWIkjT8yjGmNwdzMFMzQmxv/Kh8Vx+ICnz5R+K0mrOS16rhfjX7n2t4emU0goh7TerQC3mw==", "dependencies": { "prosemirror-model": "^1.16.0", "prosemirror-state": "^1.0.0", @@ -9461,9 +9470,9 @@ } }, "node_modules/sass": { - "version": "1.69.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", - "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -10208,6 +10217,12 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", diff --git a/package.json b/package.json index 9b85a313..f62863ba 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "dependencies": { "@hapi/hapi": "21.3.2", "@hapi/inert": "7.1.0", - "@lit-labs/motion": "1.0.4", + "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", "@tiptap/core": "2.0.4", "@tiptap/extension-highlight": "2.0.4", @@ -47,9 +47,9 @@ "bcryptjs": "2.4.3", "buffer": "6.0.3", "compressorjs": "1.2.1", - "crypto-js": "4.1.1", + "crypto-js": "4.2.0", "electron-dl": "3.5.1", - "electron-log": "4.4.8", + "electron-log": "5.0.0", "electron-store": "8.1.0", "electron-updater": "6.1.4", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -67,8 +67,8 @@ "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.32.1", - "sass": "1.69.4", + "prosemirror-view": "1.32.2", + "sass": "1.69.5", "short-unique-id": "5.0.3" }, "devDependencies": { @@ -115,20 +115,20 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.4", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.0", - "@vaadin/button": "24.2.0", - "@vaadin/grid": "24.2.0", - "@vaadin/icons": "24.2.0", - "@vaadin/password-field": "24.2.0", - "@vaadin/tooltip": "24.2.0", + "@vaadin/avatar": "24.2.1", + "@vaadin/button": "24.2.1", + "@vaadin/grid": "24.2.1", + "@vaadin/icons": "24.2.1", + "@vaadin/password-field": "24.2.1", + "@vaadin/tooltip": "24.2.1", "@zip.js/zip.js": "2.7.30", - "axios": "1.5.1", + "axios": "1.6.0", "electron": "27.0.2", "electron-builder": "24.6.4", "electron-packager": "17.1.2", "epml": "0.3.3", "eslint": "8.52.0", - "eslint-plugin-lit": "1.9.1", + "eslint-plugin-lit": "1.10.1", "eslint-plugin-wc": "2.0.4", "file-saver": "2.0.5", "highcharts": "11.1.0", diff --git a/plugins/plugins/core/components/qdn-action-types.js b/plugins/plugins/core/components/qdn-action-types.js index 496aba42..dd354da0 100644 --- a/plugins/plugins/core/components/qdn-action-types.js +++ b/plugins/plugins/core/components/qdn-action-types.js @@ -65,4 +65,7 @@ export const SEND_LOCAL_NOTIFICATION = 'SEND_LOCAL_NOTIFICATION' export const VOTE_ON_POLL= 'VOTE_ON_POLL' //CREATE_POLL -export const CREATE_POLL= 'CREATE_POLL' \ No newline at end of file +export const CREATE_POLL= 'CREATE_POLL' + +//GET_DAY_SUMMARY +export const GET_DAY_SUMMARY = 'GET_DAY_SUMMARY' diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 3225f33e..50da5978 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -130,8 +130,8 @@ class WebBrowser extends LitElement { } constructor() { - super(); - this.url = 'about:blank'; + super() + this.url = 'about:blank' this.uid = new ShortUniqueId() this.myAddress = window.parent.reduxStore.getState().app.selectedAddress this._publicKey = { key: '', hasPubKey: false } @@ -141,13 +141,13 @@ class WebBrowser extends LitElement { this.identifier = urlParams.get('identifier') != null ? urlParams.get('identifier') - : null; + : null this.path = urlParams.get('path') != null ? (urlParams.get('path').startsWith('/') ? '' : '/') + urlParams.get('path') - : ''; - this.preview = urlParams.get('preview'); + : '' + this.preview = urlParams.get('preview') this.link = urlParams.get('link') this.dev = urlParams.get('dev') this.followedNames = [] @@ -189,7 +189,7 @@ class WebBrowser extends LitElement { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, }) - this.blockedNames = blockedNames; + this.blockedNames = blockedNames setTimeout( getBlockedNames, this.config.user.nodeSettings.pingInterval @@ -226,7 +226,7 @@ class WebBrowser extends LitElement { this.rvnFeePerByte = 0.00001125 this.arrrWalletAddress = '' - let configLoaded = false; + let configLoaded = false parentEpml.ready().then(() => { parentEpml.subscribe('selected_address', async (selectedAddress) => { @@ -242,12 +242,12 @@ class WebBrowser extends LitElement { this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet }) parentEpml.subscribe('config', (c) => { - this.config = JSON.parse(c); + this.config = JSON.parse(c) if (!configLoaded) { - render(); - setTimeout(getFollowedNames, 1); - setTimeout(getBlockedNames, 1); - configLoaded = true; + render() + setTimeout(getFollowedNames, 1) + setTimeout(getBlockedNames, 1) + configLoaded = true } }) }) @@ -255,20 +255,20 @@ class WebBrowser extends LitElement { async extractComponents(url) { if (!url.startsWith("qortal://")) { - return null; + return null } - url = url.replace(/^(qortal\:\/\/)/, ""); + url = url.replace(/^(qortal\:\/\/)/, "") if (url.includes("/")) { - let parts = url.split("/"); - const service = parts[0].toUpperCase(); - parts.shift(); - const name = parts[0]; - parts.shift(); - let identifier; + let parts = url.split("/") + const service = parts[0].toUpperCase() + parts.shift() + const name = parts[0] + parts.shift() + let identifier if (parts.length > 0) { - identifier = parts[0]; // Do not shift yet + identifier = parts[0] // Do not shift yet // Check if a resource exists with this service, name and identifier combination let responseObj = await parentEpml.request('apiCall', { url: `/arbitrary/resource/status/${service}/${name}/${identifier}?apiKey=${this.getApiKey()}` @@ -276,29 +276,29 @@ class WebBrowser extends LitElement { if (responseObj.totalChunkCount > 0) { // Identifier exists, so don't include it in the path - parts.shift(); + parts.shift() } else { - identifier = null; + identifier = null } }extractComponents - const components = {}; - components["service"] = service; - components["name"] = name; - components["identifier"] = identifier; - components["path"] = path; - return components; + const components = {} + components["service"] = service + components["name"] = name + components["identifier"] = identifier + components["path"] = path + return components } - return null; + return null } async _handleKeyDown(e) { if (e.key === 'Enter') { const value = e.target.value - let newQuery = value; + let newQuery = value if (newQuery.endsWith('/')) { - newQuery = newQuery.slice(0, -1); + newQuery = newQuery.slice(0, -1) } const res = await this.extractComponents(newQuery) if (!res) return @@ -320,9 +320,9 @@ class WebBrowser extends LitElement { async linkOpenNewTab(link) { const value = link - let newQuery = value; + let newQuery = value if (newQuery.endsWith('/')) { - newQuery = newQuery.slice(0, -1); + newQuery = newQuery.slice(0, -1) } const res = await this.extractComponents(newQuery) if (!res) return @@ -441,7 +441,7 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=JOIN_GROUP` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() @@ -455,21 +455,22 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=DEPLOY_AT` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() const joinFee = (Number(data) / 1e8).toFixed(8) return joinFee } - async getArbitraryFee (){ + + async getArbitraryFee (){ const timestamp = Date.now() const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=ARBITRARY×tamp=${timestamp}` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching arbitrary fee'); + throw new Error('Error when fetching arbitrary fee') } const data = await response.json() const arbitraryFee = (Number(data) / 1e8).toFixed(8) @@ -478,14 +479,15 @@ class WebBrowser extends LitElement { fee : Number(data), feeToShow: arbitraryFee } - } + } + async sendQortFee() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=PAYMENT` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching join fee'); + throw new Error('Error when fetching join fee') } const data = await response.json() @@ -499,20 +501,21 @@ class WebBrowser extends LitElement { const url = `${nodeUrl}/transactions/unitfee?txType=VOTE_ON_POLL` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching vote fee'); + throw new Error('Error when fetching vote fee') } const data = await response.json() const joinFee = (Number(data) / 1e8).toFixed(8) return joinFee } + async unitCreatePollFee() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const url = `${nodeUrl}/transactions/unitfee?txType=CREATE_POLL` const response = await fetch(url) if (!response.ok) { - throw new Error('Error when fetching vote fee'); + throw new Error('Error when fetching vote fee') } const data = await response.json() @@ -528,10 +531,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -581,10 +584,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -642,10 +645,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -689,6 +692,7 @@ class WebBrowser extends LitElement { return voteRes } + async _createPoll(pollName, pollDescription, options, pollOwnerAddress) { const voteFeeInput = await this.unitCreatePollFee() const getLastRef = async () => { @@ -697,10 +701,10 @@ class WebBrowser extends LitElement { url: `/addresses/lastreference/${this.selectedAddress.address}` }) return myRef - }; + } const validateReceiver = async () => { - let lastRef = await getLastRef(); + let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) const res = getTxnRequestResponse(myTransaction) return res @@ -751,8 +755,8 @@ class WebBrowser extends LitElement { } firstUpdated() { - this.changeTheme(); - this.changeLanguage(); + this.changeTheme() + this.changeLanguage() this.btcWallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet this.ltcWallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet @@ -762,18 +766,18 @@ class WebBrowser extends LitElement { this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet window.addEventListener('storage', () => { - const checkLanguage = localStorage.getItem('qortalLanguage'); - const checkTheme = localStorage.getItem('qortalTheme'); + const checkLanguage = localStorage.getItem('qortalLanguage') + const checkTheme = localStorage.getItem('qortalTheme') - use(checkLanguage); + use(checkLanguage) if (checkTheme === 'dark') { - this.theme = 'dark'; + this.theme = 'dark' } else { - this.theme = 'light'; + this.theme = 'light' } - document.querySelector('html').setAttribute('theme', this.theme); - }); + document.querySelector('html').setAttribute('theme', this.theme) + }) if (!isElectron()) { } else { @@ -790,20 +794,20 @@ class WebBrowser extends LitElement { event.data.length == 0 || event.data.action == null ) { - return; + return } - let response = '{"error": "Request could not be fulfilled"}'; - let data = event.data; + let response = '{"error": "Request could not be fulfilled"}' + let data = event.data switch (data.action) { case actions.GET_USER_ACCOUNT: { - let skip = false; + let skip = false if (window.parent.reduxStore.getState().app.qAPPAutoAuth) { - skip = true; + skip = true } - let res1; + let res1 if (!skip) { res1 = await showModalAndWait( actions.GET_USER_ACCOUNT, @@ -811,21 +815,21 @@ class WebBrowser extends LitElement { service: this.service, name: this.name } - ); - }; + ) + } if ((res1 && res1.action === 'accept') || skip) { - let account = {}; - account['address'] = this.selectedAddress.address; + let account = {} + account['address'] = this.selectedAddress.address account['publicKey'] = - this.selectedAddress.base58PublicKey; - response = JSON.stringify(account); - break; + this.selectedAddress.base58PublicKey + response = JSON.stringify(account) + break } else { - const data = {}; + const data = {} const errorMsg = "User declined to share account details" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } } @@ -834,89 +838,89 @@ class WebBrowser extends LitElement { const { encryptedData, publicKey } = data try { - let data = {}; + let data = {} if (!encryptedData) { const errorMsg = `Missing fields: encryptedData` - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } const uint8Array = base64ToUint8Array(encryptedData) - const startsWithQortalEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalEncryptedData"); + const startsWithQortalEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalEncryptedData") if (startsWithQortalEncryptedData) { if (!publicKey) { const errorMsg = `Missing fields: publicKey` - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } const decryptedDataToBase64 = decryptDeprecatedSingle(uint8Array, publicKey) - response = JSON.stringify(decryptedDataToBase64); - break; + response = JSON.stringify(decryptedDataToBase64) + break } - const startsWithQortalGroupEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalGroupEncryptedData"); + const startsWithQortalGroupEncryptedData = uint8ArrayStartsWith(uint8Array, "qortalGroupEncryptedData") if (startsWithQortalGroupEncryptedData) { const decryptedData = decryptGroupData(encryptedData) const decryptedDataToBase64 = uint8ArrayToBase64(decryptedData) - response = JSON.stringify(decryptedDataToBase64); - break; + response = JSON.stringify(decryptedDataToBase64) + break } const errorMsg = "Unable to decrypt" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } catch (error) { - const data = {}; + const data = {} const errorMsg = error.message || "Error in decrypting data" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) break } } case actions.GET_LIST_ITEMS: { - const requiredFields = ['list_name']; - const missingFields = []; + const requiredFields = ['list_name'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - let skip = false; + let skip = false if (window.parent.reduxStore.getState().app.qAPPAutoLists) { - skip = true; + skip = true } - let res1; + let res1 if (!skip) { res1 = await showModalAndWait( actions.GET_LIST_ITEMS, { list_name: data.list_name } - ); - }; + ) + } if (res1 && res1.action === 'accept' || skip) { @@ -925,42 +929,43 @@ class WebBrowser extends LitElement { const list = await parentEpml.request('apiCall', { type: 'api', url: `/lists/${data.list_name}?apiKey=${this.getApiKey()}`, - }); - response = JSON.stringify(list); + }) + response = JSON.stringify(list) } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in retrieving list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined to share list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; + } + case actions.ADD_LIST_ITEMS: { - const requiredFields = ['list_name', 'items']; - const missingFields = []; + const requiredFields = ['list_name', 'items'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const items = data.items @@ -971,16 +976,16 @@ class WebBrowser extends LitElement { list_name: list_name, items: items } - ); + ) if (res && res.action === 'accept') { try { const body = { items: items, - }; + } - const bodyToString = JSON.stringify(body); + const bodyToString = JSON.stringify(body) const data = await parentEpml.request('apiCall', { type: 'api', method: 'POST', @@ -989,41 +994,42 @@ class WebBrowser extends LitElement { headers: { 'Content-Type': 'application/json', }, - }); + }) response = data } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in adding to list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined add to list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; + } + case actions.DELETE_LIST_ITEM: { - const requiredFields = ['list_name', 'item']; - const missingFields = []; + const requiredFields = ['list_name', 'item'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const item = data.item @@ -1034,16 +1040,16 @@ class WebBrowser extends LitElement { list_name: list_name, item: item } - ); + ) if (res && res.action === 'accept') { try { const body = { items: [item], - }; + } - const bodyToString = JSON.stringify(body); + const bodyToString = JSON.stringify(body) const data = await parentEpml.request('apiCall', { type: 'api', @@ -1053,53 +1059,52 @@ class WebBrowser extends LitElement { headers: { 'Content-Type': 'application/json', }, - }); + }) response = data } catch (error) { - const data = {}; + const data = {} const errorMsg = "Error in adding to list" - data['error'] = errorMsg; - response = JSON.stringify(data); + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - break; + break } } else { - const data = {}; + const data = {} const errorMsg = "User declined add to list" - data['error'] = errorMsg; - response = JSON.stringify(data); - break; + data['error'] = errorMsg + response = JSON.stringify(data) + break } - }; - + } case actions.LINK_TO_QDN_RESOURCE: case actions.QDN_RESOURCE_DISPLAYED: // Links are handled by the core, but the UI also listens for these actions in order to update the address bar. // Note: don't update this.url here, as we don't want to force reload the iframe each time. if (this.preview != null && this.preview.length > 0) { - this.displayUrl = translate("appspage.schange40"); - return; + this.displayUrl = translate("appspage.schange40") + return } - let url = 'qortal://' + data.service + '/' + data.name; + let url = 'qortal://' + data.service + '/' + data.name this.path = data.path != null ? (data.path.startsWith('/') ? '' : '/') + data.path - : null; + : null if ( data.identifier != null && data.identifier != '' && data.identifier != 'default' ) - url = url.concat('/' + data.identifier); + url = url.concat('/' + data.identifier) if (this.path != null && this.path != '/') - url = url.concat(this.path); - this.name = data.name; - this.service = data.service; - this.identifier = data.identifier; - this.displayUrl = url; + url = url.concat(this.path) + this.name = data.name + this.service = data.service + this.identifier = data.identifier + this.displayUrl = url const frame = window.frameElement let tabId = "" @@ -1116,7 +1121,8 @@ class WebBrowser extends LitElement { service: data.service, id: tabId ? tabId : "" })) - return; + return + case actions.SET_TAB_NOTIFICATIONS: { const { count } = data if (isNaN(count)) { @@ -1139,58 +1145,58 @@ class WebBrowser extends LitElement { case actions.PUBLISH_QDN_RESOURCE: { // optional fields: encrypt:boolean recipientPublicKey:string - const requiredFields = ['service', 'name']; - const missingFields = []; + const requiredFields = ['service', 'name'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } if (!data.file && !data.data64) { - let data = {}; - data['error'] = "No data or file was submitted"; - response = JSON.stringify(data); + let data = {} + data['error'] = "No data or file was submitted" + response = JSON.stringify(data) break } // Use "default" if user hasn't specified an identifer - const service = data.service; - const name = data.name; - let identifier = data.identifier; - let data64 = data.data64; - const filename = data.filename; - const title = data.title; - const description = data.description; - const category = data.category; - const tag1 = data.tag1; - const tag2 = data.tag2; - const tag3 = data.tag3; - const tag4 = data.tag4; - const tag5 = data.tag5; + const service = data.service + const name = data.name + let identifier = data.identifier + let data64 = data.data64 + const filename = data.filename + const title = data.title + const description = data.description + const category = data.category + const tag1 = data.tag1 + const tag2 = data.tag2 + const tag3 = data.tag3 + const tag4 = data.tag4 + const tag5 = data.tag5 let feeAmount = null if (data.identifier == null) { - identifier = 'default'; + identifier = 'default' } if (data.encrypt && (!data.publicKeys || (Array.isArray(data.publicKeys) && data.publicKeys.length === 0))) { - let data = {}; - data['error'] = "Encrypting data requires public keys"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Encrypting data requires public keys" + response = JSON.stringify(data) break } if (!data.encrypt && data.service.endsWith("_PRIVATE")) { - let data = {}; - data['error'] = "Only encrypted data can go into private services"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Only encrypted data can go into private services" + response = JSON.stringify(data) break } if (data.file) { @@ -1209,18 +1215,15 @@ class WebBrowser extends LitElement { } } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Upload failed due to failed encryption'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Upload failed due to failed encryption' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } } - - - const res2 = await showModalAndWait( actions.PUBLISH_QDN_RESOURCE, { @@ -1230,14 +1233,14 @@ class WebBrowser extends LitElement { encrypt: data.encrypt, feeAmount: getArbitraryFee.feeToShow } - ); + ) if (res2.action === 'accept') { if (data.file && !data.encrypt) { data64 = await fileToBase64(data.file) } - const worker = new WebWorker(); + const worker = new WebWorker() try { - this.loader.show(); + this.loader.show() const resPublish = await publishData({ registeredName: encodeURIComponent(name), file: data64, @@ -1260,65 +1263,66 @@ class WebBrowser extends LitElement { apiVersion: 2, withFee: res2.userData.isWithFee === true ? true : false, feeAmount: feeAmount - }); + }) - response = JSON.stringify(resPublish); - worker.terminate(); + response = JSON.stringify(resPublish) + worker.terminate() } catch (error) { - worker.terminate(); - const obj = {}; - const errorMsg = error.message || 'Upload failed'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - console.error(error); - break; + worker.terminate() + const obj = {} + const errorMsg = error.message || 'Upload failed' + obj['error'] = errorMsg + response = JSON.stringify(obj) + console.error(error) + break } finally { - this.loader.hide(); + this.loader.hide() } } else if (res2.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } // Params: data.service, data.name, data.identifier, data.data64, // TODO: prompt user for publish. If they confirm, call `POST /arbitrary/{service}/{name}/{identifier}/base64` and sign+process transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.PUBLISH_MULTIPLE_QDN_RESOURCES: { - const requiredFields = ['resources']; - const missingFields = []; + const requiredFields = ['resources'] + const missingFields = [] let feeAmount = null requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } const resources = data.resources if (!Array.isArray(resources)) { - let data = {}; + let data = {} data['error'] = "Invalid data" - response = JSON.stringify(data); + response = JSON.stringify(data) break } if (resources.length === 0) { - let data = {}; + let data = {} data['error'] = "No resources to publish" - response = JSON.stringify(data); + response = JSON.stringify(data) break } if (data.encrypt && (!data.publicKeys || (Array.isArray(data.publicKeys) && data.publicKeys.length === 0))) { - let data = {}; - data['error'] = "Encrypting data requires public keys"; - response = JSON.stringify(data); + let data = {} + data['error'] = "Encrypting data requires public keys" + response = JSON.stringify(data) break } const getArbitraryFee = await this.getArbitraryFee() @@ -1330,25 +1334,25 @@ class WebBrowser extends LitElement { encrypt: data.encrypt, feeAmount: getArbitraryFee.feeToShow } - ); + ) if (res2.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' break } const resourcesMap = resources.map(async (resource) => { - const requiredFields = ['service', 'name']; - const missingFields = []; + const requiredFields = ['service', 'name'] + const missingFields = [] requiredFields.forEach((field) => { if (!resource[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` throw new Error(errorMsg) } @@ -1358,21 +1362,21 @@ class WebBrowser extends LitElement { throw new Error('No data or file was submitted') } - const service = resource.service; - const name = resource.name; - let identifier = resource.identifier; - let data64 = resource.data64; - const filename = resource.filename; - const title = resource.title; - const description = resource.description; - const category = resource.category; - const tag1 = resource.tag1; - const tag2 = resource.tag2; - const tag3 = resource.tag3; - const tag4 = resource.tag4; - const tag5 = resource.tag5; + const service = resource.service + const name = resource.name + let identifier = resource.identifier + let data64 = resource.data64 + const filename = resource.filename + const title = resource.title + const description = resource.description + const category = resource.category + const tag1 = resource.tag1 + const tag2 = resource.tag2 + const tag3 = resource.tag3 + const tag4 = resource.tag4 + const tag5 = resource.tag5 if (resource.identifier == null) { - identifier = 'default'; + identifier = 'default' } if (!data.encrypt && service.endsWith("_PRIVATE")) { @@ -1403,8 +1407,7 @@ class WebBrowser extends LitElement { data64 = await fileToBase64(resource.file) } - - const worker = new WebWorker(); + const worker = new WebWorker() try { const resPublish = await publishData({ @@ -1429,13 +1432,13 @@ class WebBrowser extends LitElement { apiVersion: 2, withFee: res2.userData.isWithFee === true ? true : false, feeAmount: feeAmount - }); + }) - worker.terminate(); + worker.terminate() return resPublish } catch (error) { - worker.terminate(); - const errorMsg = error.message || 'Upload failed'; + worker.terminate() + const errorMsg = error.message || 'Upload failed' throw new Error(errorMsg) } @@ -1443,147 +1446,152 @@ class WebBrowser extends LitElement { }) try { - this.loader.show(); - const results = await Promise.all(resourcesMap); - response = JSON.stringify(results); - this.loader.hide(); + this.loader.show() + const results = await Promise.all(resourcesMap) + response = JSON.stringify(results) + this.loader.hide() break // handle successful results } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Upload failed'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - this.loader.hide(); - break; + const obj = {} + const errorMsg = error.message || 'Upload failed' + obj['error'] = errorMsg + response = JSON.stringify(obj) + this.loader.hide() + break } // Params: data.service, data.name, data.identifier, data.data64, // TODO: prompt user for publish. If they confirm, call `POST /arbitrary/{service}/{name}/{identifier}/base64` and sign+process transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.VOTE_ON_POLL: { - const requiredFields = ['pollName', 'optionIndex']; - const missingFields = []; + const requiredFields = ['pollName', 'optionIndex'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const pollName = data.pollName; - const optionIndex = data.optionIndex; - + + const pollName = data.pollName + const optionIndex = data.optionIndex let pollInfo = null try { pollInfo = await parentEpml.request("apiCall", { type: "api", url: `/polls/${pollName}`, - }); + }) } catch (error) { - const errorMsg = (error && error.message) || 'Poll not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (error && error.message) || 'Poll not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!pollInfo || pollInfo.error) { - const errorMsg = (pollInfo && pollInfo.message) || 'Poll not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (pollInfo && pollInfo.message) || 'Poll not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { - this.loader.show(); + this.loader.show() const resVoteOnPoll = await this._voteOnPoll(pollName, optionIndex) - response = JSON.stringify(resVoteOnPoll); + response = JSON.stringify(resVoteOnPoll) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to vote on the poll.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to vote on the poll.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } + case actions.CREATE_POLL: { - const requiredFields = ['pollName', 'pollDescription', 'pollOptions', 'pollOwnerAddress']; - const missingFields = []; + const requiredFields = ['pollName', 'pollDescription', 'pollOptions', 'pollOwnerAddress'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const pollName = data.pollName; + + const pollName = data.pollName const pollDescription = data.pollDescription const pollOptions = data.pollOptions const pollOwnerAddress = data.pollOwnerAddress try { - this.loader.show(); + this.loader.show() const resCreatePoll = await this._createPoll(pollName, pollDescription, pollOptions, pollOwnerAddress) - response = JSON.stringify(resCreatePoll); + response = JSON.stringify(resCreatePoll) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to created poll.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to created poll.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } + case actions.OPEN_NEW_TAB: { if(!data.qortalLink){ - const obj = {}; - const errorMsg = 'Please enter a qortal link - qortal://...'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'Please enter a qortal link - qortal://...' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { await this.linkOpenNewTab(data.qortalLink) response = true - break; + break } catch (error) { console.log('error', error) - const obj = {}; - const errorMsg = "Invalid qortal link"; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - break; + const obj = {} + const errorMsg = "Invalid qortal link" + obj['error'] = errorMsg + response = JSON.stringify(obj) + break } } + case actions.NOTIFICATIONS_PERMISSION: { try { @@ -1592,32 +1600,33 @@ class WebBrowser extends LitElement { { name: this.name } - ); + ) if (res.action === 'accept'){ this.addAppToNotificationList(this.name) response = true - break; + break } else { response = false - break; + break } } catch (error) { - break; + break } } + case actions.SEND_LOCAL_NOTIFICATION: { const {title, url, icon, message} = data try { const id = `appNotificationList-${this.selectedAddress.address}` - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if(!checkData || !checkData[this.name]) throw new Error('App not on permission list') const appInfo = checkData[this.name] const lastNotification = appInfo.lastNotification const interval = appInfo.interval if (lastNotification && interval) { - const timeDifference = Date.now() - lastNotification; + const timeDifference = Date.now() - lastNotification if (timeDifference > interval) { parentEpml.request('showNotification', { @@ -1625,7 +1634,7 @@ class WebBrowser extends LitElement { }) response = true this.updateLastNotification(id, this.name) - break; + break } else { throw new Error(`duration until another notification can be sent: ${interval - timeDifference}`) } @@ -1635,31 +1644,31 @@ class WebBrowser extends LitElement { }) response = true this.updateLastNotification(id) - break; + break } else { throw new Error(`invalid data`) } } catch (error) { - const obj = {}; - const errorMsg = error.message || "error in pushing notification"; - obj['error'] = errorMsg; - response = JSON.stringify(obj); - break; + const obj = {} + const errorMsg = error.message || "error in pushing notification" + obj['error'] = errorMsg + response = JSON.stringify(obj) + break } } case actions.SEND_CHAT_MESSAGE: { - const message = data.message; - const recipient = data.destinationAddress; - const groupId = data.groupId; + const message = data.message + const recipient = data.destinationAddress + const groupId = data.groupId const isRecipient = groupId ? false : true const sendMessage = async (messageText, chatReference) => { - let _reference = new Uint8Array(64); - window.crypto.getRandomValues(_reference); - let reference = window.parent.Base58.encode(_reference); + let _reference = new Uint8Array(64) + window.crypto.getRandomValues(_reference) + let reference = window.parent.Base58.encode(_reference) const sendMessageRequest = async () => { let chatResponse @@ -1679,7 +1688,7 @@ class WebBrowser extends LitElement { isEncrypted: 1, isText: 1 } - }); + }) } @@ -1700,85 +1709,85 @@ class WebBrowser extends LitElement { isEncrypted: 0, isText: 1 } - }); + }) } const msgResponse = await _computePow(chatResponse) - return msgResponse; - }; + return msgResponse + } const _computePow = async (chatBytes) => { - const difficulty = 8; + const difficulty = 8 const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' - const worker = new WebWorkerChat(); - let nonce = null; - let chatBytesArray = null; + const worker = new WebWorkerChat() + let nonce = null + let chatBytesArray = null await new Promise((res) => { - worker.postMessage({ chatBytes, path, difficulty }); + worker.postMessage({ chatBytes, path, difficulty }) worker.onmessage = e => { - chatBytesArray = e.data.chatBytesArray; - nonce = e.data.nonce; - res(); + chatBytesArray = e.data.chatBytesArray + nonce = e.data.nonce + res() } - }); + }) let _response = await parentEpml.request('sign_chat', { nonce: this.selectedAddress.nonce, chatBytesArray: chatBytesArray, chatNonce: nonce, apiVersion: 2 - }); + }) - const chatResponse = getSendChatResponse(_response); - return chatResponse; - }; + const chatResponse = getSendChatResponse(_response) + return chatResponse + } const getSendChatResponse = (res) => { if (res.signature) { return res } else if (res.error) { - throw new Error(res.message); + throw new Error(res.message) } else { - throw new Error('ERROR: Could not send message'); + throw new Error('ERROR: Could not send message') } - }; + } - const chatResponse = await sendMessageRequest(); - return chatResponse; + const chatResponse = await sendMessageRequest() + return chatResponse } const result = await showModalAndWait( actions.SEND_CHAT_MESSAGE - ); + ) if (result.action === "accept") { - let hasPublicKey = true; + let hasPublicKey = true if (isRecipient) { const res = await parentEpml.request('apiCall', { type: 'api', url: `/addresses/publickey/${recipient}` - }); + }) if (res.error === 102) { this._publicKey.key = '' this._publicKey.hasPubKey = false - hasPublicKey = false; + hasPublicKey = false } else if (res !== false) { this._publicKey.key = res this._publicKey.hasPubKey = true } else { this._publicKey.key = '' this._publicKey.hasPubKey = false - hasPublicKey = false; + hasPublicKey = false } } if (!hasPublicKey && isRecipient) { - response = '{"error": "Cannot send an encrypted message to this user since they do not have their publickey on chain."}'; + response = '{"error": "Cannot send an encrypted message to this user since they do not have their publickey on chain."}' break } @@ -1805,64 +1814,64 @@ class WebBrowser extends LitElement { images: [''], repliedTo: '', version: 3 - }; + } - const stringifyMessageObject = JSON.stringify(messageObject); + const stringifyMessageObject = JSON.stringify(messageObject) // if (this.balance < 4) { // this.myTrimmedMeassage = '' // this.myTrimmedMeassage = stringifyMessageObject // this.shadowRoot.getElementById('confirmDialog').open() // } else { - // this.sendMessage(stringifyMessageObject, typeMessage); + // this.sendMessage(stringifyMessageObject, typeMessage) // } try { - this.loader.show(); - const msgResponse = await sendMessage(stringifyMessageObject); - response = msgResponse; + this.loader.show() + const msgResponse = await sendMessage(stringifyMessageObject) + response = msgResponse } catch (error) { - console.error(error); + console.error(error) if (error.message) { - let data = {}; - data['error'] = error.message; - response = JSON.stringify(data); + let data = {} + data['error'] = error.message + response = JSON.stringify(data) break } - response = '{"error": "Request could not be fulfilled"}'; + response = '{"error": "Request could not be fulfilled"}' } finally { - this.loader.hide(); + this.loader.hide() } } else { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } - // this.loader.show(); + // this.loader.show() // Params: data.groupId, data.destinationAddress, data.message // TODO: prompt user to send chat message. If they confirm, sign+process a CHAT transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } case actions.JOIN_GROUP: { - const requiredFields = ['groupId']; - const missingFields = []; + const requiredFields = ['groupId'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } - const groupId = data.groupId; + const groupId = data.groupId let groupInfo = null @@ -1870,60 +1879,61 @@ class WebBrowser extends LitElement { groupInfo = await parentEpml.request("apiCall", { type: "api", url: `/groups/${groupId}`, - }); + }) } catch (error) { - const errorMsg = (error && error.message) || 'Group not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (error && error.message) || 'Group not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!groupInfo || groupInfo.error) { - const errorMsg = (groupInfo && groupInfo.message) || 'Group not found'; - let obj = {}; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const errorMsg = (groupInfo && groupInfo.message) || 'Group not found' + let obj = {} + obj['error'] = errorMsg + response = JSON.stringify(obj) break } try { - this.loader.show(); + this.loader.show() const resJoinGroup = await this._joinGroup(groupId, groupInfo.groupName) - response = JSON.stringify(resJoinGroup); + response = JSON.stringify(resJoinGroup) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to join the group.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to join the group.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } // Params: data.groupId // TODO: prompt user to join group. If they confirm, sign+process a JOIN_GROUP transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` - break; + break } + case actions.SAVE_FILE: { try { - const requiredFields = ['filename', 'blob']; - const missingFields = []; + const requiredFields = ['filename', 'blob'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } @@ -1937,10 +1947,10 @@ class WebBrowser extends LitElement { { filename } - ); + ) if (res.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' break } @@ -1953,17 +1963,17 @@ class WebBrowser extends LitElement { const fileExtension = mimeToExtensionMap[mimeType] || backupExention let fileHandleOptions = {} if (!mimeType) { - const obj = {}; - const errorMsg = 'A mimeType could not be derived'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'A mimeType could not be derived' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (!fileExtension) { - const obj = {}; - const errorMsg = 'A file extension could not be derived'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'A file extension could not be derived' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } if (fileExtension && mimeType) { @@ -1994,78 +2004,77 @@ class WebBrowser extends LitElement { writeFile(fileHandle, blob).then(() => console.log("FILE SAVED")) } catch (error) { if (error.name === 'AbortError') { - const obj = {}; - const errorMsg = 'User declined the download'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = 'User declined the download' + obj['error'] = errorMsg + response = JSON.stringify(obj) break } FileSaver.saveAs(blob, filename) } - response = JSON.stringify(true); + response = JSON.stringify(true) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to initiate download'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to initiate download' + obj['error'] = errorMsg + response = JSON.stringify(obj) } - break; + break } case 'DEPLOY_AT': { - const requiredFields = ['name', 'description', 'tags', 'creationBytes', 'amount', 'assetId', 'type']; - const missingFields = []; + const requiredFields = ['name', 'description', 'tags', 'creationBytes', 'amount', 'assetId', 'type'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field] && data[field] !== 0) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } try { - this.loader.show(); + this.loader.show() const resDeployAt = await this._deployAt(data.name, data.description, data.tags, data.creationBytes, data.amount, data.assetId, data.type) - response = JSON.stringify(resDeployAt); + response = JSON.stringify(resDeployAt) } catch (error) { - const obj = {}; - const errorMsg = error.message || 'Failed to join the group.'; - obj['error'] = errorMsg; - response = JSON.stringify(obj); + const obj = {} + const errorMsg = error.message || 'Failed to join the group.' + obj['error'] = errorMsg + response = JSON.stringify(obj) } finally { - this.loader.hide(); + this.loader.hide() } - break; + break } - case actions.GET_WALLET_BALANCE: { - const requiredFields = ['coin']; - const missingFields = []; + const requiredFields = ['coin'] + const missingFields = [] requiredFields.forEach((field) => { if (!data[field]) { - missingFields.push(field); + missingFields.push(field) } - }); + }) if (missingFields.length > 0) { - const missingFieldsString = missingFields.join(', '); + const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - let data = {}; - data['error'] = errorMsg; - response = JSON.stringify(data); + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) break } // Params: data.coin (QORT / BTC / LTC / DOGE / DGB / RVN / ARRR) @@ -2074,14 +2083,14 @@ class WebBrowser extends LitElement { // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` const res3 = await showModalAndWait( actions.GET_WALLET_BALANCE - ); + ) if (res3.action === 'accept') { - let coin = data.coin; + let coin = data.coin if (coin === "QORT") { let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address try { - this.loader.show(); + this.loader.show() const QORTBalance = await parentEpml.request('apiCall', { url: `/addresses/balance/${qortAddress}?apiKey=${this.getApiKey()}`, }) @@ -2089,14 +2098,14 @@ class WebBrowser extends LitElement { } catch (error) { - console.error(error); - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); + console.error(error) + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) } finally { - this.loader.hide(); + this.loader.hide() } } else { let _url = `` @@ -2131,39 +2140,55 @@ class WebBrowser extends LitElement { break } try { - this.loader.show(); + this.loader.show() const res = await parentEpml.request('apiCall', { url: _url, method: 'POST', body: _body, }) if (isNaN(Number(res))) { - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); - return; + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) + return } else { - response = (Number(res) / 1e8).toFixed(8); + response = (Number(res) / 1e8).toFixed(8) } } catch (error) { - console.error(error); - const data = {}; - const errorMsg = error.message || get("browserpage.bchange21"); - data['error'] = errorMsg; - response = JSON.stringify(data); - return; + console.error(error) + const data = {} + const errorMsg = error.message || get("browserpage.bchange21") + data['error'] = errorMsg + response = JSON.stringify(data) + return } finally { this.loader.hide() } } } else if (res3.action === 'reject') { - response = '{"error": "User declined request"}'; + response = '{"error": "User declined request"}' } - break; + break } + case actions.GET_DAY_SUMMARY: { + try { + const summary = await parentEpml.request('apiCall', { + type: 'api', + url: `/admin/summary?apiKey=${this.getApiKey()}`, + }) + response = summary + } catch (error) { + const data = {} + const errorMsg = "Error in retrieving summary" + data['error'] = errorMsg + response = JSON.stringify(data) + } finally { + break + } + } case actions.SEND_COIN: { const requiredFields = ['coin', 'destinationAddress', 'amount'] @@ -3048,26 +3073,26 @@ class WebBrowser extends LitElement { } // Parse response - let responseObj; + let responseObj try { - responseObj = JSON.parse(response); + responseObj = JSON.parse(response) } catch (e) { // Not all responses will be JSON - responseObj = response; + responseObj = response } // Respond to app if (responseObj.error != null) { event.ports[0].postMessage({ result: null, error: responseObj, - }); + }) } else { event.ports[0].postMessage({ result: responseObj, error: null, - }); + }) } - }); + }) this.clearConsole() setInterval(() => { this.clearConsole() @@ -3083,29 +3108,30 @@ class WebBrowser extends LitElement { } changeTheme() { - const checkTheme = localStorage.getItem('qortalTheme'); + const checkTheme = localStorage.getItem('qortalTheme') if (checkTheme === 'dark') { - this.theme = 'dark'; + this.theme = 'dark' } else { - this.theme = 'light'; + this.theme = 'light' } - document.querySelector('html').setAttribute('theme', this.theme); + document.querySelector('html').setAttribute('theme', this.theme) } changeLanguage() { - const checkLanguage = localStorage.getItem('qortalLanguage'); + const checkLanguage = localStorage.getItem('qortalLanguage') if (checkLanguage === null || checkLanguage.length === 0) { - localStorage.setItem('qortalLanguage', 'us'); - use('us'); + localStorage.setItem('qortalLanguage', 'us') + use('us') } else { - use(checkLanguage); + use(checkLanguage) } } + addAppToNotificationList(appName) { if(!appName) throw new Error('unknown app name') - const id = `appNotificationList-${this.selectedAddress.address}`; - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const id = `appNotificationList-${this.selectedAddress.address}` + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if (!checkData) { const newData = { @@ -3113,32 +3139,32 @@ class WebBrowser extends LitElement { interval: 900000, // 15mins in milliseconds lastNotification: null, }, - }; - localStorage.setItem(id, JSON.stringify(newData)); + } + localStorage.setItem(id, JSON.stringify(newData)) } else { - const copyData = { ...checkData }; + const copyData = { ...checkData } copyData[appName] = { interval: 900000, // 15mins in milliseconds lastNotification: null, - }; - localStorage.setItem(id, JSON.stringify(copyData)); + } + localStorage.setItem(id, JSON.stringify(copyData)) } } updateLastNotification(id, appName) { - const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null; + const checkData = localStorage.getItem(id) ? JSON.parse(localStorage.getItem(id)) : null if (checkData) { - const copyData = { ...checkData }; + const copyData = { ...checkData } if (copyData[appName]) { - copyData[appName].lastNotification = Date.now(); // Make sure to use Date.now(), not date.now() + copyData[appName].lastNotification = Date.now() // Make sure to use Date.now(), not date.now() } else { copyData[appName] = { interval: 900000, // 15mins in milliseconds lastNotification: Date.now(), - }; + } } - localStorage.setItem(id, JSON.stringify(copyData)); + localStorage.setItem(id, JSON.stringify(copyData)) } } @@ -3146,7 +3172,7 @@ class WebBrowser extends LitElement { renderFollowUnfollowButton() { // Only show the follow/unfollow button if we have permission to modify the list on this node if (this.followedNames == null || !Array.isArray(this.followedNames)) { - return html``; + return html`` } if (this.followedNames.indexOf(this.name) === -1) { @@ -3156,7 +3182,7 @@ class WebBrowser extends LitElement { title="${translate('browserpage.bchange7')} ${this.name}" class="address-bar-button float-right" >add_to_queue`; + >` } else { // render unfollow button return html`remove_from_queue`; + >` } } renderBlockUnblockButton() { // Only show the block/unblock button if we have permission to modify the list on this node if (this.blockedNames == null || !Array.isArray(this.blockedNames)) { - return html``; + return html`` } if (this.blockedNames.indexOf(this.name) === -1) { @@ -3181,7 +3207,7 @@ class WebBrowser extends LitElement { title="${translate('browserpage.bchange9')} ${this.name}" class="address-bar-button float-right" >block`; + >` } else { // render unblock button return html`radio_button_unchecked`; + >` } } // Navigation goBack() { - window.history.back(); + window.history.back() } goForward() { - window.history.forward(); + window.history.forward() } refresh() { @@ -3218,37 +3244,37 @@ class WebBrowser extends LitElement { goBackToList() { if (this.service == "APP") { this.exitFullScreen() - window.location = '../../q-app/index.html'; + window.location = '../../q-app/index.html' } else { // Default to websites list this.exitFullScreen() - window.location = '../index.html'; + window.location = '../index.html' } } follow() { - this.followName(this.name); + this.followName(this.name) } unfollow() { - this.unfollowName(this.name); + this.unfollowName(this.name) } block() { - this.blockName(this.name); + this.blockName(this.name) } unblock() { - this.unblockName(this.name); + this.unblockName(this.name) } delete() { - this.deleteCurrentResource(); + this.deleteCurrentResource() } async followName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, @@ -3257,7 +3283,7 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully followed - add to local list @@ -3265,19 +3291,19 @@ class WebBrowser extends LitElement { // immediately, as apposed to only adding if it doesn't already exist this.followedNames = this.followedNames.filter( (item) => item != name - ); - this.followedNames.push(name); + ) + this.followedNames.push(name) } else { - let err1string = get('browserpage.bchange11'); - parentEpml.request('showSnackBar', `${err1string}`); + let err1string = get('browserpage.bchange11') + parentEpml.request('showSnackBar', `${err1string}`) } - return ret; + return ret } async unfollowName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, @@ -3286,24 +3312,24 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully unfollowed - remove from local list this.followedNames = this.followedNames.filter( (item) => item != name - ); + ) } else { - let err2string = get('browserpage.bchange12'); - parentEpml.request('showSnackBar', `${err2string}`); + let err2string = get('browserpage.bchange12') + parentEpml.request('showSnackBar', `${err2string}`) } - return ret; + return ret } async blockName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, @@ -3312,7 +3338,7 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully blocked - add to local list @@ -3320,19 +3346,19 @@ class WebBrowser extends LitElement { // immediately, as apposed to only adding if it doesn't already exist this.blockedNames = this.blockedNames.filter( (item) => item != name - ); - this.blockedNames.push(name); + ) + this.blockedNames.push(name) } else { - let err3string = get('browserpage.bchange13'); - parentEpml.request('showSnackBar', `${err3string}`); + let err3string = get('browserpage.bchange13') + parentEpml.request('showSnackBar', `${err3string}`) } - return ret; + return ret } async unblockName(name) { - let items = [name]; - let namesJsonString = JSON.stringify({ items: items }); + let items = [name] + let namesJsonString = JSON.stringify({ items: items }) let ret = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, @@ -3341,66 +3367,66 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, body: `${namesJsonString}`, - }); + }) if (ret === true) { // Successfully unblocked - remove from local list this.blockedNames = this.blockedNames.filter( (item) => item != name - ); + ) } else { - let err4string = get('browserpage.bchange14'); - parentEpml.request('showSnackBar', `${err4string}`); + let err4string = get('browserpage.bchange14') + parentEpml.request('showSnackBar', `${err4string}`) } - return ret; + return ret } async deleteCurrentResource() { if (this.followedNames.indexOf(this.name) != -1) { // Following name - so deleting won't work - let err5string = get('browserpage.bchange15'); - parentEpml.request('showSnackBar', `${err5string}`); - return; + let err5string = get('browserpage.bchange15') + parentEpml.request('showSnackBar', `${err5string}`) + return } - let identifier = (this.identifier == null || this.identifier.length == 0) ? 'default' : this.identifier; + let identifier = (this.identifier == null || this.identifier.length == 0) ? 'default' : this.identifier let ret = await parentEpml.request('apiCall', { url: `/arbitrary/resource/${this.service}/${this.name }/${identifier}?apiKey=${this.getApiKey()}`, method: 'DELETE', - }); + }) if (ret === true) { - this.goBackToList(); + this.goBackToList() } else { - let err6string = get('browserpage.bchange16'); - parentEpml.request('showSnackBar', `${err6string}`); + let err6string = get('browserpage.bchange16') + parentEpml.request('showSnackBar', `${err6string}`) } - return ret; + return ret } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; - let apiKey = myNode.apiKey; - return apiKey; + ] + let apiKey = myNode.apiKey + return apiKey } } -window.customElements.define('web-browser', WebBrowser); +window.customElements.define('web-browser', WebBrowser) async function showModalAndWait(type, data) { // Create a new Promise that resolves with user data and an action when the user clicks a button return new Promise((resolve) => { // Create the modal and add it to the DOM - const modal = document.createElement('div'); + const modal = document.createElement('div') modal.id = "backdrop" - modal.classList.add("backdrop"); + modal.classList.add("backdrop") modal.innerHTML = ` - `; - document.body.appendChild(modal); + ` + document.body.appendChild(modal) // Add click event listeners to the buttons - const okButton = modal.querySelector('#ok-button'); + const okButton = modal.querySelector('#ok-button') okButton.addEventListener('click', () => { - const userData = {}; + const userData = {} if (type === actions.PUBLISH_QDN_RESOURCE || type === actions.PUBLISH_MULTIPLE_QDN_RESOURCES) { - const isWithFeeCheckbox = modal.querySelector('#isWithFee'); - // userData.isWithFee = isWithFeeCheckbox.checked; + const isWithFeeCheckbox = modal.querySelector('#isWithFee') + // userData.isWithFee = isWithFeeCheckbox.checked userData.isWithFee = true } if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'accept', userData }); - }); - const modalContent = modal.querySelector('.modal-content'); + resolve({ action: 'accept', userData }) + }) + const modalContent = modal.querySelector('.modal-content') modalContent.addEventListener('click', (e) => { - e.stopPropagation(); - return; - }); - const backdropClick = document.getElementById('backdrop'); + e.stopPropagation() + return + }) + const backdropClick = document.getElementById('backdrop') backdropClick.addEventListener('click', () => { if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'reject' }); - }); - const cancelButton = modal.querySelector('#cancel-button'); + resolve({ action: 'reject' }) + }) + const cancelButton = modal.querySelector('#cancel-button') cancelButton.addEventListener('click', () => { if (modal.parentNode === document.body) { - document.body.removeChild(modal); + document.body.removeChild(modal) } - resolve({ action: 'reject' }); - }); - const labelButton = modal.querySelector('#authButtonLabel'); + resolve({ action: 'reject' }) + }) + const labelButton = modal.querySelector('#authButtonLabel') if (labelButton) { labelButton.addEventListener('click', () => { - this.shadowRoot.getElementById('authButton').click(); + this.shadowRoot.getElementById('authButton').click() }) } - const checkbox = modal.querySelector('#authButton'); + const checkbox = modal.querySelector('#authButton') if (checkbox) { checkbox.addEventListener('click', (e) => { if (e.target.checked) { @@ -3568,13 +3594,13 @@ async function showModalAndWait(type, data) { window.parent.reduxStore.dispatch(window.parent.reduxAction.allowQAPPAutoAuth(true)) }) } - const labelButton2 = modal.querySelector('#listsButtonLabel'); + const labelButton2 = modal.querySelector('#listsButtonLabel') if (labelButton2) { labelButton2.addEventListener('click', () => { - this.shadowRoot.getElementById('listsButton').click(); + this.shadowRoot.getElementById('listsButton').click() }) } - const checkbox2 = modal.querySelector('#listsButton'); + const checkbox2 = modal.querySelector('#listsButton') if (checkbox2) { checkbox2.addEventListener('click', (e) => { if (e.target.checked) { @@ -3584,15 +3610,15 @@ async function showModalAndWait(type, data) { window.parent.reduxStore.dispatch(window.parent.reduxAction.allowQAPPAutoLists(true)) }) } - }); + }) } async function showErrorAndWait(type, data, data1) { // Create the modal and add it to the DOM const modalDelay = ms => new Promise(res => setTimeout(res, ms)) - const error = document.createElement('div'); + const error = document.createElement('div') error.id = "backdrop" - error.classList.add("backdrop"); + error.classList.add("backdrop") error.innerHTML = ` - `; + ` document.body.appendChild(error) await modalDelay(3000) @@ -3830,9 +3856,9 @@ const styles = ` #cancel-button:hover { background-color: #d32f2f; } -`; +` -const styleSheet = new CSSStyleSheet(); -styleSheet.replaceSync(styles); +const styleSheet = new CSSStyleSheet() +styleSheet.replaceSync(styles) -document.adoptedStyleSheets = [styleSheet]; +document.adoptedStyleSheets = [styleSheet] diff --git a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js index 7b762fed..67320c0e 100644 --- a/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js +++ b/plugins/plugins/core/qortal-lottery/qortal-lottery.src.js @@ -619,6 +619,7 @@ class QortalLottery extends LitElement { this.successMessage = '' this.sendQortLoading = false this.lotteryAtAddress = dataObj.aTAddress + this.lotteryEnterAmount = dataObj.enter if (!isNaN(this.lotteryEnterAmount) && !isNaN(parseFloat(this.lotteryEnterAmount))) { this.lotteryEnterAmount = parseFloat(dataObj.enter)