diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 30bc1627..00000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 3737f840..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "plugins": ["lit", "wc"], - "extends": ["eslint:recommended", "plugin:lit/recommended", "plugin:wc/recommended"], - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" - }, - "rules": { - "no-mixed-spaces-and-tabs": 0 - } -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a02331c0..00000000 --- a/.travis.yml +++ /dev/null @@ -1,71 +0,0 @@ - -branches: - except: - - master - -language: node_js -node_js: "14.17.0" - -cache: - yarn: true - directories: - - node_modules - # - qortal-ui-core/node_modules - # - qortal-ui-plugins/node_modules - # - qortal-ui-crypto/node_modules - - $HOME/.cache/electron - - $HOME/.cache/electron-builder - -install: - - sh install-dependencies.sh - -env: - global: - - ELECTRON_CACHE=$HOME/.cache/electron - - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder - - ELECTRON_ENABLE_LOGGING=true - -jobs: - include: - - stage: Deploy Linux - if: tag IS present - os: linux - dist: bionic - sudo: required - addons: - apt: - packages: - # default Electron dependencies - - build-essential - - gconf2 - - gconf-service - - libgtk-3-0 - - libnotify4 - - libxss-dev - - libxss1 - - xdg-utils - - libatspi2.0-0 - - libappindicator1 - - libxext-dev - - libxtst6 - - libxtst-dev - - libnss3 - script: - - newVersion=$(git describe --abbrev=0) - - yarn version --new-version $newVersion - - sh set-up-snap.sh - - yarn run release - - stage: Deploy Windows & Mac - if: tag IS present - os: osx - osx_image: xcode12.5.1 - script: - - newVersion=$(git describe --abbrev=0) - - yarn version --new-version $newVersion - - yarn run release -- --mac --win - before_cache: - - rm -rf $HOME/.cache/electron-builder/wine - # - stage: Update GitHub with Builds - # if: tag IS present - # script: - # - sh push-updates-with-travis-build.sh diff --git a/README.md b/README.md index 2449f9cf..6af149dc 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Easiest way to install the lastest required packages on Linux is via nvm. ``` source ~/.profile ``` (For Debian based distro)
``` source ~/.bashrc ``` (For Fedora / CentOS)
``` nvm ls-remote ``` (Fetch list of available versions)
-``` nvm install v20.9.0 ``` (LTS: Iron supported by Electron)
+``` nvm install v18.17.1 ``` (LTS: Hydrogen supported by Electron V27)
``` npm --location=global install npm@10.5.0 ```
Adding via binary package mirror will only work if you have set the package path. You can do a node or java build via ports instead by downloading ports with portsnap fetch method. diff --git a/blog-test.json b/blog-test.json deleted file mode 100644 index 04dd800a..00000000 --- a/blog-test.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "Q-Blog", - "defaultFeedIndex": 0, - "feed": [ - { - "id": "post-creation", - "version": 1, - "updated": 1696646223261, - "title": "Q-Blog Post creations", - "description": "Get your friends Q-Blog posts on your feed", - "search": { - "query": "-post-", - "identifier": "q-blog-", - "service": "BLOG_POST", - "exactmatchnames": true - }, - "click": "qortal://APP/Q-Blog/$${resource.name}$$/blog/$${resource.identifier}$$", - "display": { - "title": "$${rawdata.title}$$" - } - } - ] -} diff --git a/core/.eslintignore b/core/.eslintignore deleted file mode 100644 index 30bc1627..00000000 --- a/core/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules \ No newline at end of file diff --git a/core/.eslintrc.json b/core/.eslintrc.json deleted file mode 100644 index f7ac8a1b..00000000 --- a/core/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends" : "standard", - "rules": { - "indent": [ - "error", - 4, - { - "SwitchCase": 1 - } - ] - }, - "env": { - "es6": true, - "browser": true, - "worker": true - }, - "parser": "babel-eslint", - "parserOptions": { - "sourceType": "module", - "allowImportExportEverywhere": true - } -} \ No newline at end of file diff --git a/core/font/switch-theme.css b/core/font/switch-theme.css index 3b3a468e..e7e27c5b 100644 --- a/core/font/switch-theme.css +++ b/core/font/switch-theme.css @@ -70,7 +70,7 @@ html { --login-border-50pct: rgba(0, 167, 245, 0.5); --login-border-10pct: rgba(0, 167, 245, 0.1); --login-button: rgb(3, 169, 244); - --accent-color: #03a9f4; + --general-color-blue: #03a9f4; --qchat-name: #03a9f4; --qchat-my-name: #05be0e; } @@ -147,7 +147,7 @@ html[theme="dark"] { --login-border-50pct: rgba(0, 167, 245, 0.5); --login-border-10pct: rgba(0, 167, 245, 0.1); --login-button: rgb(3, 169, 244); - --accent-color: #03a9f4; + --general-color-blue: #03a9f4; --qchat-name: #03a9f4; --qchat-my-name: #05be0e; } \ No newline at end of file diff --git a/core/language/de.json b/core/language/de.json index c5426351..22ed7bf3 100644 --- a/core/language/de.json +++ b/core/language/de.json @@ -213,7 +213,8 @@ "arrr1": "ARRR-Wallet nicht initialisiert!", "arrr2": "Bitte gehen Sie zur Registerkarte „Wallet“ und initialisieren Sie zuerst Ihre arrr-Wallet.", "arrr3": "Core-Update erforderlich!", - "arrr4": "Um den privaten Schlüssel Ihrer arrr-Wallet zu speichern, benötigen Sie zuerst ein Core-Update!" + "arrr4": "Um den privaten Schlüssel Ihrer arrr-Wallet zu speichern, benötigen Sie zuerst ein Core-Update!", + "sync_indicator": "Synchronisierungsanzeige-Popup deaktivieren" }, "appinfo": { "blockheight": "Blockhöhe", diff --git a/core/language/es.json b/core/language/es.json index 37fb33fb..37197694 100644 --- a/core/language/es.json +++ b/core/language/es.json @@ -213,7 +213,8 @@ "arrr1": "¡Cartera ARRR no inicializada!", "arrr2": "Por favor, vaya a la pestaña de billetera e inicialice su billetera arrr primero.", "arrr3": "¡Necesita actualización principal!", - "arrr4": "¡Para guardar la clave privada de tu billetera arrr, primero necesitas una actualización básica!" + "arrr4": "¡Para guardar la clave privada de tu billetera arrr, primero necesitas una actualización básica!", + "sync_indicator": "Desactivar la ventana emergente del indicador de sincronización" }, "appinfo": { "blockheight": "Altura del Bloque", diff --git a/core/language/et.json b/core/language/et.json index 77b636ce..6afb005c 100644 --- a/core/language/et.json +++ b/core/language/et.json @@ -213,7 +213,8 @@ "arrr1": "ARRR rahakott pole initsialiseeritud!", "arrr2": "Minge rahakoti vahekaardile ja lähtestage esmalt oma arrr rahakott.", "arrr3": "Vaja põhivärskendust!", - "arrr4": "Oma arrr rahakoti privaatvõtme salvestamiseks vajate esmalt põhivärskendust!" + "arrr4": "Oma arrr rahakoti privaatvõtme salvestamiseks vajate esmalt põhivärskendust!", + "sync_indicator": "Keela sünkroonimisindikaatori hüpikaken" }, "appinfo": { "blockheight": "Ploki kõrgus", diff --git a/core/language/fi.json b/core/language/fi.json index 6269964a..9174235f 100644 --- a/core/language/fi.json +++ b/core/language/fi.json @@ -213,7 +213,8 @@ "arrr1": "ARRR-lompakkoa ei ole alustettu!", "arrr2": "Siirry lompakko-välilehdelle ja nollaa ensin ARRR-lompakkosi.", "arrr3": "Tarvitaan iso päivitys!", - "arrr4": "Jotta voit tallentaa ARRR-lompakkosi yksityisen avaimesi, tarvitset ensin pääpäivityksen!" + "arrr4": "Jotta voit tallentaa ARRR-lompakkosi yksityisen avaimesi, tarvitset ensin pääpäivityksen!", + "sync_indicator": "Poista synkronoinnin ilmaisimen ponnahdusikkuna" }, "appinfo": { "blockheight": "Lohkon korkeus", diff --git a/core/language/fr.json b/core/language/fr.json index d546e9c6..76cae9b7 100644 --- a/core/language/fr.json +++ b/core/language/fr.json @@ -213,7 +213,8 @@ "arrr1": "Portefeuille ARRR non initialisé !", "arrr2": "Veuillez aller dans l'onglet Portefeuille et initialiser d'abord votre portefeuille arrr.", "arrr3": "Besoin d'une mise à jour principale !", - "arrr4": "Pour sauvegarder la clé privée de votre portefeuille arrr, vous avez d'abord besoin d'une mise à jour principale !" + "arrr4": "Pour sauvegarder la clé privée de votre portefeuille arrr, vous avez d'abord besoin d'une mise à jour principale !", + "sync_indicator": "Désactiver la fenêtre contextuelle de l'indicateur de synchronisation" }, "appinfo": { "blockheight": "Hauteur de bloc", diff --git a/core/language/hindi.json b/core/language/hindi.json index 5b1aab67..1b9c2082 100644 --- a/core/language/hindi.json +++ b/core/language/hindi.json @@ -213,7 +213,8 @@ "arrr1": "ARRR वॉलेट प्रारंभ नहीं हुआ!", "arrr2": "कृपया वॉलेट टैब पर जाएं और पहले अपना Arrr वॉलेट प्रारंभ करें।", "arrr3": "मुख्य अद्यतन की आवश्यकता है!", - "arrr4": "अपने Arrr वॉलेट की निजी कुंजी को सहेजने के लिए आपको पहले एक कोर अपडेट की आवश्यकता है!" + "arrr4": "अपने Arrr वॉलेट की निजी कुंजी को सहेजने के लिए आपको पहले एक कोर अपडेट की आवश्यकता है!", + "sync_indicator": "सिंक संकेतक पॉपअप अक्षम करें" }, "appinfo": { "blockheight": "ब्लॉक ऊँचाई", diff --git a/core/language/hr.json b/core/language/hr.json index b5f49335..c25b6f60 100644 --- a/core/language/hr.json +++ b/core/language/hr.json @@ -213,7 +213,8 @@ "arrr1": "Novčanik ARRR nije inicijaliziran!", "arrr2": "Idite na karticu novčanika i prvo inicijalizirajte svoj arrr novčanik.", "arrr3": "Potrebno je ažuriranje jezgre!", - "arrr4": "Da biste spremili privatni ključ vašeg arrr novčanika, prvo trebate ažurirati jezgru!" + "arrr4": "Da biste spremili privatni ključ vašeg arrr novčanika, prvo trebate ažurirati jezgru!", + "sync_indicator": "Onemogući skočni prozor indikatora sinkronizacije" }, "appinfo": { "blockheight": "Visina bloka", diff --git a/core/language/hu.json b/core/language/hu.json index 45a88eef..627080f8 100644 --- a/core/language/hu.json +++ b/core/language/hu.json @@ -213,7 +213,8 @@ "arrr1": "ARRR Wallet nincs inicializálva!", "arrr2": "Kérjük, lépjen a Wallet fülre, és először inicializálja arrr pénztárcáját.", "arrr3": "Alapfrissítésre van szükség!", - "arrr4": "Az arrr pénztárca privát kulcsának mentéséhez először egy alapvető frissítésre van szükség!" + "arrr4": "Az arrr pénztárca privát kulcsának mentéséhez először egy alapvető frissítésre van szükség!", + "sync_indicator": "Szinkronizálásjelző előugró ablak letiltása" }, "appinfo": { "blockheight": "Blokk Magassága", diff --git a/core/language/it.json b/core/language/it.json index a93c5538..1b5bbf7d 100644 --- a/core/language/it.json +++ b/core/language/it.json @@ -213,7 +213,8 @@ "arrr1": "Portafoglio ARRR non inizializzato!", "arrr2": "Vai alla scheda Portafoglio e inizializza prima il tuo portafoglio arrr.", "arrr3": "È necessario l'aggiornamento del core!", - "arrr4": "Per salvare la chiave privata del tuo portafoglio arrr devi prima aggiornare il core!" + "arrr4": "Per salvare la chiave privata del tuo portafoglio arrr devi prima aggiornare il core!", + "sync_indicator": "Disabilita il popup dell'indicatore di sincronizzazione" }, "appinfo": { "blockheight": "Altezza blocco", diff --git a/core/language/jp.json b/core/language/jp.json index 6873c561..86e398bf 100644 --- a/core/language/jp.json +++ b/core/language/jp.json @@ -213,7 +213,8 @@ "arrr1": "ARRR ウォレットが初期化されていません!", "arrr2": "ウォレットタブに移動して、まずarrrウォレットを初期化してください。", "arrr3": "コアのアップデートが必要です!", - "arrr4": "arrr ウォレットの秘密キーを保存するには、まずコアのアップデートが必要です!" + "arrr4": "arrr ウォレットの秘密キーを保存するには、まずコアのアップデートが必要です!", + "sync_indicator": "同期インジケーターのポップアップを無効にする" }, "appinfo": { "blockheight": "ブロック高", diff --git a/core/language/ko.json b/core/language/ko.json index a60cb6a9..e9a070f5 100644 --- a/core/language/ko.json +++ b/core/language/ko.json @@ -213,7 +213,8 @@ "arrr1": "ARRR 지갑이 초기화되지 않았습니다!", "arrr2": "지갑 탭으로 이동하여 먼저 arrr 지갑을 초기화하세요.", "arrr3": "핵심 업데이트가 필요합니다!", - "arrr4": "arrr 지갑의 개인 키를 저장하려면 먼저 핵심 업데이트가 필요합니다!" + "arrr4": "arrr 지갑의 개인 키를 저장하려면 먼저 핵심 업데이트가 필요합니다!", + "sync_indicator": "동기화 표시 팝업 비활성화" }, "appinfo": { "blockheight": "블록 높이", diff --git a/core/language/nl.json b/core/language/nl.json index b7a6fda6..6d24f0f2 100644 --- a/core/language/nl.json +++ b/core/language/nl.json @@ -213,7 +213,8 @@ "arrr1": "ARRR portefeuille is niet geïnitialiseerd!", "arrr2": "Ga naar de portefeuille-tab en initialiseer eerst jouw ARRR portefeuille.", "arrr3": "De 'core' heeft een update nodig!", - "arrr4": "Om de privé-sleutel van jouw ARRR portefeuille te kunnen bewaren, moet je voor de 'core' eerst een update installeren!" + "arrr4": "Om de privé-sleutel van jouw ARRR portefeuille te kunnen bewaren, moet je voor de 'core' eerst een update installeren!", + "sync_indicator": "Synchronisatie-indicator pop-up uitschakelen" }, "appinfo": { "blockheight": "Blokhoogte", diff --git a/core/language/no.json b/core/language/no.json index 5c00f3ac..742abc02 100644 --- a/core/language/no.json +++ b/core/language/no.json @@ -213,7 +213,8 @@ "arrr1": "ARRR-lommebok ikke initialisert !", "arrr2": "Vennligst gå til lommebok-fanen og initialiser arrr-lommeboken først.", "arrr3": "Trenger kjerneoppdatering!", - "arrr4": "For å lagre den private nøkkelen til arrr-lommeboken din trenger du en kjerneoppdatering først!" + "arrr4": "For å lagre den private nøkkelen til arrr-lommeboken din trenger du en kjerneoppdatering først!", + "sync_indicator": "Deaktiver popup for synkroniseringsindikator" }, "appinfo": { "blockheight": "Blokkhøyde", diff --git a/core/language/pl.json b/core/language/pl.json index 3ccc4545..0446c70a 100644 --- a/core/language/pl.json +++ b/core/language/pl.json @@ -213,7 +213,8 @@ "arrr1": "Portfel ARRR nie został zainicjowany!", "arrr2": "Przejdź do zakładki portfela i najpierw zainicjalizuj swój portfel arrr.", "arrr3": "Potrzebujesz aktualizacji rdzenia!", - "arrr4": "Aby zapisać klucz prywatny swojego portfela arrr, potrzebujesz najpierw aktualizacji rdzenia!" + "arrr4": "Aby zapisać klucz prywatny swojego portfela arrr, potrzebujesz najpierw aktualizacji rdzenia!", + "sync_indicator": "Wyłącz wyskakujące okienko wskaźnika synchronizacji" }, "appinfo": { "blockheight": "Wysokość bloku", diff --git a/core/language/pt.json b/core/language/pt.json index 7c91edd3..fa6da6c8 100644 --- a/core/language/pt.json +++ b/core/language/pt.json @@ -213,7 +213,8 @@ "arrr1": "Carteira ARRR não inicializada!", "arrr2": "Por favor, vá para a aba carteira e inicialize sua carteira arrr primeiro.", "arrr3": "Precisa de atualização principal!", - "arrr4": "Para salvar a chave privada da sua carteira arrr você precisa primeiro de uma atualização principal!" + "arrr4": "Para salvar a chave privada da sua carteira arrr você precisa primeiro de uma atualização principal!", + "sync_indicator": "Desativar pop-up do indicador de sincronização" }, "appinfo": { "blockheight": "Altura do Bloco", diff --git a/core/language/ro.json b/core/language/ro.json index f34e3065..d085487f 100644 --- a/core/language/ro.json +++ b/core/language/ro.json @@ -213,7 +213,8 @@ "arrr1": "Portoletul ARRR nu este inițializat !", "arrr2": "Vă rugăm să accesați fila Portofel și să inițializați mai întâi portofelul arrr.", "arrr3": "Am nevoie de actualizare de bază !", - "arrr4": "Pentru a salva cheia privată a portofelului dvs. arrr, aveți nevoie mai întâi de o actualizare de bază !" + "arrr4": "Pentru a salva cheia privată a portofelului dvs. arrr, aveți nevoie mai întâi de o actualizare de bază !", + "sync_indicator": "Dezactivați fereastra pop-up indicator de sincronizare" }, "appinfo": { "blockheight": "Dimensiunea blocului", diff --git a/core/language/rs.json b/core/language/rs.json index 17e60a77..0ed10053 100644 --- a/core/language/rs.json +++ b/core/language/rs.json @@ -213,7 +213,8 @@ "arrr1": "ARRR novčanik nije inicijalizovan!", "arrr2": "Molim vas idite na karticu Novčanik i prvo inicijalizujte svoj arrr novčanik.", "arrr3": "Potrebno je ažuriranje jezgra!", - "arrr4": "Da biste sačuvali privatni ključ vašeg arrr novčanika, prvo vam je potrebno ažuriranje jezgra!" + "arrr4": "Da biste sačuvali privatni ključ vašeg arrr novčanika, prvo vam je potrebno ažuriranje jezgra!", + "sync_indicator": "Onemogući iskačući prozor indikatora sinhronizacije" }, "appinfo": { "blockheight": "Visina Bloka", diff --git a/core/language/ru.json b/core/language/ru.json index a275bddf..156aee90 100644 --- a/core/language/ru.json +++ b/core/language/ru.json @@ -213,7 +213,8 @@ "arrr1": "Кошелек ARRR не инициализирован!", "arrr2": "Пожалуйста, перейдите на вкладку кошелька и сначала инициализируйте свой кошелек arrr.", "arrr3": "Требуется обновление ядра!", - "arrr4": "Чтобы сохранить закрытый ключ вашего кошелька arrr, вам сначала необходимо обновить ядро!" + "arrr4": "Чтобы сохранить закрытый ключ вашего кошелька arrr, вам сначала необходимо обновить ядро!", + "sync_indicator": "Отключить всплывающее окно индикатора синхронизации" }, "appinfo": { "blockheight": "Высота блока", diff --git a/core/language/us.json b/core/language/us.json index 1cee1066..607dd058 100644 --- a/core/language/us.json +++ b/core/language/us.json @@ -213,7 +213,8 @@ "arrr1": "ARRR Wallet Not Initialized !", "arrr2": "Please go to wallet tab and initialize your arrr wallet first.", "arrr3": "Need Core Update !", - "arrr4": "To save the private key of your arrr wallet you need a core update first !" + "arrr4": "To save the private key of your arrr wallet you need a core update first !", + "sync_indicator": "Disable sync indicator popup" }, "appinfo": { "blockheight": "Block Height", diff --git a/core/language/zhc.json b/core/language/zhc.json index 2ce6dd29..1b2500e6 100644 --- a/core/language/zhc.json +++ b/core/language/zhc.json @@ -213,7 +213,8 @@ "arrr1": "ARRR 钱包未初始化!", "arrr2": "请先进入钱包选项卡并初始化您的arrr钱包。", "arrr3": "需要核心更新!", - "arrr4": "要保存你的 arr 钱包的私钥,你需要先进行核心更新!" + "arrr4": "要保存你的 arr 钱包的私钥,你需要先进行核心更新!", + "sync_indicator": "禁用同步指示器弹出窗口" }, "appinfo": { "blockheight": "区块高度", diff --git a/core/language/zht.json b/core/language/zht.json index fc0d51c2..d84c73de 100644 --- a/core/language/zht.json +++ b/core/language/zht.json @@ -213,7 +213,8 @@ "arrr1": "ARRR 錢包未初始化!", "arrr2": "請先進入錢包標籤並初始化您的arrr錢包。", "arrr3": "需要核心更新!", - "arrr4": "要儲存你的 arr 錢包的私鑰,你需要先進行核心更新!" + "arrr4": "要儲存你的 arr 錢包的私鑰,你需要先進行核心更新!", + "sync_indicator": "停用同步指示器彈出視窗" }, "appinfo": { "blockheight": "區塊高度", diff --git a/core/src/apiKeyUtils.js b/core/src/apiKeyUtils.js index 307ed6cb..e65772b0 100644 --- a/core/src/apiKeyUtils.js +++ b/core/src/apiKeyUtils.js @@ -49,8 +49,6 @@ export const testApiKey = async (apiKey) => { let testRes = await api.request(testUrl, { method: "GET" }); - if (testRes === true) { - return true; - } - return false; + return testRes === true; + } diff --git a/core/src/components/app-info.js b/core/src/components/app-info.js index c3cc86da..46aacbbe 100644 --- a/core/src/components/app-info.js +++ b/core/src/components/app-info.js @@ -1,105 +1,70 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../store.js' -import {doPageUrl} from '../redux/app/app-actions.js' -import {translate} from '../../translate/index.js' -import WebWorker from 'web-worker:./computePowWorker.js'; -import {routes} from '../plugins/routes.js'; - -import '@material/mwc-icon' -import '@material/mwc-button' +import {translate} from '../../translate' class AppInfo extends connect(store)(LitElement) { static get properties() { return { - blockInfo: { type: Object }, - nodeStatus: { type: Object }, nodeInfo: { type: Array }, coreInfo: { type: Array }, nodeConfig: { type: Object }, - pageUrl: { type: String }, - publicizeAddress: { type: String }, theme: { type: String, reflect: true } } } static get styles() { - return [ - css` - * { - --mdc-theme-primary: rgb(3, 169, 244); - --paper-input-container-focus-color: var(--mdc-theme-primary); - } - .normal { - --mdc-theme-primary: rgb(3, 169, 244); - } + return css` + * { + --mdc-theme-primary: rgb(3, 169, 244); + --paper-input-container-focus-color: var(--mdc-theme-primary); + } - .normal-button { - --mdc-theme-primary: rgb(3, 169, 244); - --mdc-theme-on-primary: white; - } + .normal { + --mdc-theme-primary: rgb(3, 169, 244); + } - mwc-button.normal-button { - --mdc-theme-primary: rgb(3, 169, 244); - --mdc-theme-on-primary: white; - } - .test-net { - --mdc-theme-primary: black; - } + #profileInMenu { + flex: 0 0 100px; + padding:12px; + border-top: 1px solid var(--border); + background: var(--sidetopbar); + } - .test-net-button { - --mdc-theme-primary: black; - --mdc-theme-on-primary: white; - } + .info { + margin: 0; + font-size: 14px; + font-weight: 100; + display: inline-block; + width: 100%; + padding-bottom: 8px; + color: var(--black); + } - mwc-button.test-net-button { - --mdc-theme-primary: black; - --mdc-theme-on-primary: white; - } - #profileInMenu { - flex: 0 0 100px; - padding:12px; - border-top: 1px solid var(--border); - background: var(--sidetopbar); - } - .info { - margin: 0; - font-size: 14px; - font-weight:100; - display: inline-block; - width:100%; - padding-bottom:8px; - color: var(--black); - } - .blue { - color: #03a9f4; - margin: 0; - font-size: 14px; - font-weight:200; - display: inline; - } - .black { - color: var(--black); - margin: 0; - font-size: 14px; - font-weight:200; - display: inline; - } - ` - ] + .blue { + color: #03a9f4; + margin: 0; + font-size: 14px; + font-weight: 200; + display: inline; + } + + .black { + color: var(--black); + margin: 0; + font-size: 14px; + font-weight: 200; + display: inline; + } + ` } constructor() { super() - this.blockInfo = {} this.nodeInfo = [] this.coreInfo = [] - this.nodeStatus = {} - this.pageUrl = '' - this.publicizeAddress = '' + this.nodeConfig = {} this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' - this.publicKeyisOnChainConfirmation = false - this.interval } render() { @@ -115,133 +80,25 @@ class AppInfo extends connect(store)(LitElement) { } firstUpdated() { - this.publicizeAddress = store.getState().app.selectedAddress.address + '_publicize' - this.setStorage() this.getNodeInfo() this.getCoreInfo() - // try { - // this.confirmPublicKeyOnChain(store.getState().app.selectedAddress.address) - // } catch (error) { - // console.error(error) - // } setInterval(() => { this.getNodeInfo() this.getCoreInfo() - }, 30000) - } - - setStorage() { - if (localStorage.getItem(this.publicizeAddress) === null) { - localStorage.setItem(this.publicizeAddress, 'false') - } - } - - async confirmPublicKeyOnChain(address) { - const _computePow2 = async (chatBytes) => { - const difficulty = 14 - const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' - const worker = new WebWorker(); - let nonce = null - let chatBytesArray = null - await new Promise((res, rej) => { - worker.postMessage({chatBytes, path, difficulty}) - - worker.onmessage = e => { - worker.terminate() - chatBytesArray = e.data.chatBytesArray - nonce = e.data.nonce - res() - } - }) - - let _response = await routes.sign_chat({ - data: { - nonce: store.getState().app.selectedAddress.nonce, - chatBytesArray: chatBytesArray, - chatNonce: nonce - }, - }) - return _response - } - - let stop = false - const checkPublicKey = async () => { - if (!stop) { - stop = true - try { - if(localStorage.getItem(this.publicizeAddress) === 'true') { - clearInterval(this.interval) - return - } - const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - const url = `${nodeUrl}/addresses/publickey/${address}` - const res = await fetch(url) - let data = '' - try { - data = await res.text() - } catch (error) { - data = { - error: 'error' - } - } - if(data === 'false' && this.nodeInfo.isSynchronizing !== true) { - let _reference = new Uint8Array(64) - window.crypto.getRandomValues(_reference) - let reference = window.parent.Base58.encode(_reference) - const chatRes = await routes.chat({ - data: { - type: 19, - nonce: store.getState().app.selectedAddress.nonce, - params: { - lastReference: reference, - proofOfWorkNonce: 0, - fee: 0, - timestamp: Date.now(), - }, - disableModal: true - }, - disableModal: true, - }); - - try { - const powRes = await _computePow2(chatRes) - if(powRes === true) { - clearInterval(this.interval) - localStorage.removeItem(this.publicizeAddress) - localStorage.setItem(this.publicizeAddress, 'true') - } - } catch (error) { - console.error(error) - } - } - - if (!data.error && data !== 'false' && data) { - clearInterval(this.interval) - localStorage.removeItem(this.publicizeAddress) - localStorage.setItem(this.publicizeAddress, 'true') - } - - } catch (error) { - } - stop = false - } - } - this.interval = setInterval(checkPublicKey, 5000); + }, 60000) } async getNodeInfo() { const appinfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] const appinfoUrl = appinfoNode.protocol + '://' + appinfoNode.domain + ':' + appinfoNode.port const url = `${appinfoUrl}/admin/status` + await fetch(url).then(response => { return response.json() - }) - .then(data => { + }).then(data => { this.nodeInfo = data - }) - .catch(err => { + }).catch(err => { console.error('Request failed', err) }) } @@ -250,13 +107,12 @@ class AppInfo extends connect(store)(LitElement) { const appinfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] const appinfoUrl = appinfoNode.protocol + '://' + appinfoNode.domain + ':' + appinfoNode.port const url = `${appinfoUrl}/admin/info` + await fetch(url).then(response => { return response.json() - }) - .then(data => { + }).then(data => { this.coreInfo = data - }) - .catch(err => { + }).catch(err => { console.error('Request failed', err) }) } @@ -283,21 +139,8 @@ class AppInfo extends connect(store)(LitElement) { return html`${translate("appinfo.coreversion")}: ${this.coreInfo.buildVersion ? this.coreInfo.buildVersion : ''}` } - gotoPage(url) { - const myLink = this.shadowRoot.querySelector('#pageLink') - myLink.href = url - myLink.click() - store.dispatch(doPageUrl('')) - } - stateChanged(state) { - this.blockInfo = state.app.blockInfo - this.nodeStatus = state.app.nodeStatus this.nodeConfig = state.app.nodeConfig - this.pageUrl = state.app.pageUrl - if (this.pageUrl.length > 5) { - this.gotoPage(this.pageUrl) - } } } diff --git a/core/src/components/app-view.js b/core/src/components/app-view.js index afe909cd..612d3a2a 100644 --- a/core/src/components/app-view.js +++ b/core/src/components/app-view.js @@ -1,12 +1,12 @@ -import { css, html, LitElement } from 'lit' -import { connect } from 'pwa-helpers' -import { store } from '../store.js' -import { Epml } from '../epml.js' -import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js' -import { get, translate } from '../../translate/index.js' +import {css, html, LitElement} from 'lit' +import {connect} from 'pwa-helpers' +import {store} from '../store.js' +import {Epml} from '../epml.js' +import {addTradeBotRoutes} from '../tradebot/addTradeBotRoutes.js' +import {get, translate} from '../../translate' import localForage from 'localforage' -import { decryptData, encryptData } from '../lockScreen.js' -import { setChatLastSeen } from '../redux/app/app-actions.js' +import {decryptData, encryptData} from '../lockScreen.js' +import {setChatLastSeen} from '../redux/app/app-actions.js' import isElectron from 'is-electron' import '@material/mwc-button' import '@material/mwc-icon' @@ -35,7 +35,6 @@ import './search-modal.js' import './user-info-view/user-info-view.js' import '../functional-components/side-menu.js' import '../functional-components/side-menu-item.js' -import './start-minting.js' import './notification-view/notification-bell.js' import './notification-view/notification-bell-general.js' import './friends-view/friends-side-panel-parent.js' @@ -147,7 +146,8 @@ class AppView extends connect(store)(LitElement) { lockSet: { type: String }, myLockScreenPass: { type: String }, myLockScreenSet: { type: String }, - helperMessage: { type: String } + helperMessage: { type: String }, + showSyncMessages: { type: Boolean } } } @@ -548,7 +548,6 @@ class AppView extends connect(store)(LitElement) { getTourElements(){ let els = {} - console.log('this.shadowRoot.querySelector("core-sync-status")', this.shadowRoot.querySelector("core-sync-status")) const el1 = this.shadowRoot.querySelector("core-sync-status").shadowRoot.getElementById("core-sync-status-id") const el2 = this.shadowRoot.querySelector("show-plugin").shadowRoot.getElementById("showPluginId") const el3 = this.shadowRoot.querySelector("beginner-checklist").shadowRoot.getElementById("popover-notification") @@ -561,7 +560,7 @@ class AppView extends connect(store)(LitElement) { if(el3) { els['checklist'] = el3 } - + return els } @@ -625,7 +624,7 @@ class AppView extends connect(store)(LitElement) { - + ${!this.showSyncMessages ? html`` : html``} @@ -698,6 +697,8 @@ class AppView extends connect(store)(LitElement) { this.helperMessage = this.renderHelperPass() + this.showSyncMessages = store.getState().app.showSyncIndicator + this.salt = '' this.salt = Base58.encode(store.getState().app.wallet._addresses[0].keyPair.privateKey) @@ -745,7 +746,7 @@ class AppView extends connect(store)(LitElement) { drawerTog.click() }) - this.getNodeType() + await this.getNodeType() const myAppNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] const nodeAppUrl = myAppNode.protocol + '://' + myAppNode.domain + ':' + myAppNode.port @@ -914,7 +915,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferBTC() await appDelay(1000) - filterMyBotPriceTradesBTC() + await filterMyBotPriceTradesBTC() setTimeout(getOpenTradesBTC, 150000) } } @@ -922,11 +923,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesBTC = async () => { const tradeBotBtcUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=BITCOIN&apiKey=${this.getApiKey()}` - const tradeBotBtcAt = await fetch(tradeBotBtcUrl).then(response => { - return response.json() - }) - - this.tradeBotBtcAt = tradeBotBtcAt + this.tradeBotBtcAt = await fetch(tradeBotBtcUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -964,7 +963,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableBtcQortal) === true) { - return + } else { const botbtcprice = this.round(parseFloat(this.tradeBotBtcBook[0].botBtcPrice)) const changebtcamount = parseFloat(this.tradeBotBtcBook[0].botBtcQortAmount) @@ -995,7 +994,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyBtcAction() + await this.buyBtcAction() if (this.isEmptyArray(this.tradeBotBtcBook) === true) { return @@ -1008,7 +1007,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotBtcBook) === true) { - return + } else { const checkBotBtcFunds = this.round(parseFloat(this.tradeBotBtcBook[0].botBtcQortAmount) * parseFloat(this.tradeBotBtcBook[0].botBtcPrice)) const myBotBtcFunds = this.round(parseFloat(this.btcWalletBalance)) @@ -1111,7 +1110,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferLTC() await appDelay(1000) - filterMyBotPriceTradesLTC() + await filterMyBotPriceTradesLTC() setTimeout(getOpenTradesLTC, 150000) } } @@ -1119,11 +1118,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesLTC = async () => { const tradeBotLtcUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=LITECOIN&apiKey=${this.getApiKey()}` - const tradeBotLtcAt = await fetch(tradeBotLtcUrl).then(response => { - return response.json() - }) - - this.tradeBotLtcAt = tradeBotLtcAt + this.tradeBotLtcAt = await fetch(tradeBotLtcUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -1161,7 +1158,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableLtcQortal) === true) { - return + } else { const botltcprice = this.round(parseFloat(this.tradeBotLtcBook[0].botLtcPrice)) const changeltcamount = parseFloat(this.tradeBotLtcBook[0].botLtcQortAmount) @@ -1192,7 +1189,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyLtcAction() + await this.buyLtcAction() if (this.isEmptyArray(this.tradeBotLtcBook) === true) { return @@ -1205,7 +1202,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotLtcBook) === true) { - return + } else { const checkBotLtcFunds = this.round(parseFloat(this.tradeBotLtcBook[0].botLtcQortAmount) * parseFloat(this.tradeBotLtcBook[0].botLtcPrice)) const myBotLtcFunds = this.round(parseFloat(this.ltcWalletBalance)) @@ -1297,7 +1294,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferDOGE() await appDelay(1000) - filterMyBotPriceTradesDOGE() + await filterMyBotPriceTradesDOGE() setTimeout(getOpenTradesDOGE, 150000) } } @@ -1305,11 +1302,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesDOGE = async () => { const tradeBotDogeUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=DOGECOIN&apiKey=${this.getApiKey()}` - const tradeBotDogeAt = await fetch(tradeBotDogeUrl).then(response => { - return response.json() - }) - - this.tradeBotDogeAt = tradeBotDogeAt + this.tradeBotDogeAt = await fetch(tradeBotDogeUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -1347,7 +1342,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableDogeQortal) === true) { - return + } else { const botdogeprice = this.round(parseFloat(this.tradeBotDogeBook[0].botDogePrice)) const changedogeamount = parseFloat(this.tradeBotDogeBook[0].botDogeQortAmount) @@ -1378,7 +1373,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyDogeAction() + await this.buyDogeAction() if (this.isEmptyArray(this.tradeBotDogeBook) === true) { return @@ -1391,7 +1386,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotDogeBook) === true) { - return + } else { const checkBotDogeFunds = this.round(parseFloat(this.tradeBotDogeBook[0].botDogeQortAmount) * parseFloat(this.tradeBotDogeBook[0].botDogePrice)) const myBotDogeFunds = this.round(parseFloat(this.dogeWalletBalance)) @@ -1483,7 +1478,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferDGB() await appDelay(1000) - filterMyBotPriceTradesDGB() + await filterMyBotPriceTradesDGB() setTimeout(getOpenTradesDGB, 150000) } } @@ -1491,11 +1486,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesDGB = async () => { const tradeBotDgbUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=DIGIBYTE&apiKey=${this.getApiKey()}` - const tradeBotDgbAt = await fetch(tradeBotDgbUrl).then(response => { - return response.json() - }) - - this.tradeBotDgbAt = tradeBotDgbAt + this.tradeBotDgbAt = await fetch(tradeBotDgbUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -1533,7 +1526,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableDgbQortal) === true) { - return + } else { const botdgbprice = this.round(parseFloat(this.tradeBotDgbBook[0].botDgbPrice)) const changedgbamount = parseFloat(this.tradeBotDgbBook[0].botDgbQortAmount) @@ -1564,7 +1557,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyDgbAction() + await this.buyDgbAction() if (this.isEmptyArray(this.tradeBotDgbBook) === true) { return @@ -1577,7 +1570,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotDgbBook) === true) { - return + } else { const checkBotDgbFunds = this.round(parseFloat(this.tradeBotDgbBook[0].botDgbQortAmount) * parseFloat(this.tradeBotDgbBook[0].botDgbPrice)) const myBotDgbFunds = this.round(parseFloat(this.dgbWalletBalance)) @@ -1669,7 +1662,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferRVN() await appDelay(1000) - filterMyBotPriceTradesRVN() + await filterMyBotPriceTradesRVN() setTimeout(getOpenTradesRVN, 150000) } } @@ -1677,11 +1670,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesRVN = async () => { const tradeBotRvnUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=RAVENCOIN&apiKey=${this.getApiKey()}` - const tradeBotRvnAt = await fetch(tradeBotRvnUrl).then(response => { - return response.json() - }) - - this.tradeBotRvnAt = tradeBotRvnAt + this.tradeBotRvnAt = await fetch(tradeBotRvnUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -1719,7 +1710,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableRvnQortal) === true) { - return + } else { const botrvnprice = this.round(parseFloat(this.tradeBotRvnBook[0].botRvnPrice)) const changervnamount = parseFloat(this.tradeBotRvnBook[0].botRvnQortAmount) @@ -1750,7 +1741,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyRvnAction() + await this.buyRvnAction() if (this.isEmptyArray(this.tradeBotRvnBook) === true) { return @@ -1763,7 +1754,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotRvnBook) === true) { - return + } else { const checkBotRvnFunds = this.round(parseFloat(this.tradeBotRvnBook[0].botRvnQortAmount) * parseFloat(this.tradeBotRvnBook[0].botRvnPrice)) const myBotRvnFunds = this.round(parseFloat(this.rvnWalletBalance)) @@ -1855,7 +1846,7 @@ class AppView extends connect(store)(LitElement) { await filterOpenOfferARRR() await appDelay(1000) - filterMyBotPriceTradesARRR() + await filterMyBotPriceTradesARRR() setTimeout(getOpenTradesARRR, 150000) } } @@ -1863,11 +1854,9 @@ class AppView extends connect(store)(LitElement) { const filterMyBotPriceTradesARRR = async () => { const tradeBotArrrUrl = `${nodeAppUrl}/crosschain/tradebot?foreignBlockchain=PIRATECHAIN&apiKey=${this.getApiKey()}` - const tradeBotArrrAt = await fetch(tradeBotArrrUrl).then(response => { - return response.json() - }) - - this.tradeBotArrrAt = tradeBotArrrAt + this.tradeBotArrrAt = await fetch(tradeBotArrrUrl).then(response => { + return response.json() + }) await appDelay(1000) @@ -1905,7 +1894,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) if (this.isEmptyArray(this.tradeBotAvailableArrrQortal) === true) { - return + } else { const botarrrprice = this.round(parseFloat(this.tradeBotArrrBook[0].botArrrPrice)) const changearrramount = parseFloat(this.tradeBotArrrBook[0].botArrrQortAmount) @@ -1936,7 +1925,7 @@ class AppView extends connect(store)(LitElement) { await appDelay(1000) - this.buyArrrAction() + await this.buyArrrAction() if (this.isEmptyArray(this.tradeBotArrrBook) === true) { return @@ -1949,7 +1938,7 @@ class AppView extends connect(store)(LitElement) { } if (this.isEmptyArray(this.tradeBotArrrBook) === true) { - return + } else { const checkBotArrrFunds = this.round(parseFloat(this.tradeBotArrrBook[0].botArrrQortAmount) * parseFloat(this.tradeBotArrrBook[0].botArrrPrice)) const myBotArrrFunds = this.round(parseFloat(this.arrrWalletBalance)) @@ -2117,10 +2106,6 @@ class AppView extends connect(store)(LitElement) { ${this.renderNodeManagement()} - -
- -
` } } @@ -2246,7 +2231,7 @@ class AppView extends connect(store)(LitElement) { this.helperMessage = this.renderHelperErr() await errDelay(3000) this.helperMessage = this.renderHelperPass() - return + } } @@ -2454,12 +2439,11 @@ class AppView extends connect(store)(LitElement) { async buyBtcAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botBtcBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.btcWallet.derivedMasterPrivateKey, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botBtcBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.btcWallet.derivedMasterPrivateKey, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2512,12 +2496,11 @@ class AppView extends connect(store)(LitElement) { async buyLtcAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botLtcBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.ltcWallet.derivedMasterPrivateKey, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botLtcBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.ltcWallet.derivedMasterPrivateKey, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2570,12 +2553,11 @@ class AppView extends connect(store)(LitElement) { async buyDogeAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botDogeBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.dogeWallet.derivedMasterPrivateKey, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botDogeBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.dogeWallet.derivedMasterPrivateKey, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2628,12 +2610,11 @@ class AppView extends connect(store)(LitElement) { async buyDgbAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botDgbBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.dgbWallet.derivedMasterPrivateKey, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botDgbBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.dgbWallet.derivedMasterPrivateKey, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2686,12 +2667,11 @@ class AppView extends connect(store)(LitElement) { async buyRvnAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botRvnBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.rvnWallet.derivedMasterPrivateKey, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botRvnBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.rvnWallet.derivedMasterPrivateKey, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2744,12 +2724,11 @@ class AppView extends connect(store)(LitElement) { async buyArrrAction() { const makeRequest = async () => { - const response = await parentEpml.request('tradeBotRespondRequest', { - atAddress: this.botArrrBuyAtAddress, - foreignKey: store.getState().app.selectedAddress.arrrWallet.seed58, - receivingAddress: store.getState().app.selectedAddress.address, - }) - return response + return await parentEpml.request('tradeBotRespondRequest', { + atAddress: this.botArrrBuyAtAddress, + foreignKey: store.getState().app.selectedAddress.arrrWallet.seed58, + receivingAddress: store.getState().app.selectedAddress.address, + }) } const manageResponse = (response) => { @@ -2806,6 +2785,7 @@ class AppView extends connect(store)(LitElement) { this.config = state.config this.urls = state.app.registeredUrls this.addressInfo = state.app.accountInfo.addressInfo + this.showSyncMessages = state.app.showSyncIndicator if (sideurl === "minting") { this.shadowRoot.getElementById('qminter').setAttribute('selected', 'selected') @@ -3350,8 +3330,7 @@ class AppView extends connect(store)(LitElement) { getApiKey() { const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] - let apiKey = apiNode.apiKey - return apiKey + return apiNode.apiKey } isEmptyArray(arr) { @@ -3362,9 +3341,8 @@ class AppView extends connect(store)(LitElement) { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } } -window.customElements.define('app-view', AppView) \ No newline at end of file +window.customElements.define('app-view', AppView) diff --git a/core/src/components/beginner-tour/sync-indicator.js b/core/src/components/beginner-tour/sync-indicator.js index 46804c74..520344b1 100644 --- a/core/src/components/beginner-tour/sync-indicator.js +++ b/core/src/components/beginner-tour/sync-indicator.js @@ -1,30 +1,34 @@ -import { LitElement, html, css } from 'lit'; -import { store } from '../../store'; -import { connect } from 'pwa-helpers'; -import '@material/mwc-icon'; -import { translate } from '../../../translate'; -import { parentEpml } from '../show-plugin'; +import {css, html, LitElement} from 'lit' +import {store} from '../../store' +import {connect} from 'pwa-helpers' +import {translate} from '../../../translate' +import {parentEpml} from '../show-plugin' + +import '@material/mwc-icon' class SyncIndicator extends connect(store)(LitElement) { static get properties() { return { - isBehind: { type: Boolean }, blocksBehind: { type: Number }, + nodeUrl: { type: String }, + address: { type: String }, + isBehind: { type: Boolean }, isSynchronizing: { type: Boolean }, - hasCoreRunning: { type: Boolean }, - }; + hasCoreRunning: { type: Boolean } + } } constructor() { - super(); - this.isBehind = null; - this.blocksBehind = 0; - this.nodeUrl = this.getNodeUrl(); - this.myNode = this.getMyNode(); - this.interval = null; - this.hasCoreRunning = true; - this.seenWelcomeSync = false; - this.numberOfTries = 0; + super() + this.blocksBehind = 0 + this.nodeUrl = '' + this.address = '' + this.isBehind = false + this.isSynchronizing = false + this.hasCoreRunning = true + this.interval = null + this.seenWelcomeSync = false + this.numberOfTries = 0 this.hasOpened = false } @@ -34,13 +38,15 @@ class SyncIndicator extends connect(store)(LitElement) { --mdc-theme-text-primary-on-background: var(--black); box-sizing: border-box; } + :host { box-sizing: border-box; position: fixed; - bottom: 25px; + bottom: 50px; right: 25px; z-index: 50000; } + .parent { width: 360px; padding: 10px; @@ -52,17 +58,20 @@ class SyncIndicator extends connect(store)(LitElement) { user-select: none; background: var(--white); } + .row { display: flex; gap: 10px; width: 100%; } + .column { display: flex; flex-direction: column; gap: 10px; width: 100%; } + .bootstrap-button { font-family: Roboto, sans-serif; font-size: 16px; @@ -78,60 +87,96 @@ class SyncIndicator extends connect(store)(LitElement) { cursor: pointer; background-color: #03a8f475; } - `; + ` } - async firstUpdated() { + + render() { + return html` + ${!this.hasCoreRunning ? html` +
+ + + priority_high + + +

+ ${translate("tour.tour17")} +

+
+ ` : (this.blocksBehind > 1050 && this.isSynchronizing) ? html` +
+
+
+ + + +

+ ${this.blocksBehind} ${translate("tour.tour20")} +

+
+
+ +
+
+
+ ` : this.isSynchronizing ? html` +
+ + + +

+ ${translate("tour.tour19")} ${this.blocksBehind ? this.blocksBehind : ""} ${this.blocksBehind ? translate("tour.tour21"): ""} +

+
+ ` : "" } + ` + } + + firstUpdated() { + this.getNodeUrl() this.address = store.getState().app.selectedAddress.address - const seenWelcomeSync = JSON.parse( + this.seenWelcomeSync = JSON.parse( localStorage.getItem(`welcome-sync-${this.address}`) || 'false' - ); - this.seenWelcomeSync = seenWelcomeSync; + ) + + setInterval(() => { + this.getNodeUrl() + }, 60000) } getNodeUrl() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; - } - getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - return myNode; + const syncInfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + const syncInfoUrl = syncInfoNode.protocol + '://' + syncInfoNode.domain + ':' + syncInfoNode.port + this.nodeUrl = syncInfoUrl } async getDaySummary() { try { this.fetchingSummary = true - - const endpointLastBlock = `${this.nodeUrl}/blocks/last`; - const resLastBlock = await fetch(endpointLastBlock); - const dataLastBlock = await resLastBlock.json(); - const timestampNow = Date.now(); - const currentBlockTimestamp = dataLastBlock.timestamp; + const endpointLastBlock = `${this.nodeUrl}/blocks/last` + const resLastBlock = await fetch(endpointLastBlock) + const dataLastBlock = await resLastBlock.json() + const timestampNow = Date.now() + const currentBlockTimestamp = dataLastBlock.timestamp + if (currentBlockTimestamp < timestampNow) { - const diff = timestampNow - currentBlockTimestamp; - const inSeconds = diff / 1000; // millisecs to secs - const inBlocks = inSeconds / 70; - this.blocksBehind = parseInt(inBlocks); + const diff = timestampNow - currentBlockTimestamp + const inSeconds = diff / 1000 + const inBlocks = inSeconds / 70 + this.blocksBehind = parseInt(inBlocks) if (inBlocks >= 100) { - this.isBehind = true; + this.isBehind = true } else { - this.isBehind = false; - this.blocksBehind = 0; + this.isBehind = false + this.blocksBehind = 0 } } else { - this.blocksBehind = 0; - this.isBehind = false; + this.blocksBehind = 0 + this.isBehind = false } } catch (error) {} finally { this.fetchingSummary = false @@ -140,141 +185,76 @@ class SyncIndicator extends connect(store)(LitElement) { async checkHowManyBlocksBehind() { try { - this.getDaySummary(); + await this.getDaySummary() this.interval = setInterval(() => { if(this.fetchingSummary) return if (this.isBehind === false) { - this.isBehind = null; - clearInterval(this.interval); + this.isBehind = null + clearInterval(this.interval) } - this.getDaySummary(); - }, 20000); - } catch (error) {} + this.getDaySummary() + }, 20000) + } catch (error) { + // ... + } + } + + async bootstrap() { + try { + const endpoint = `${this.nodeUrl}/admin/bootstrap/?apiKey=${this.getApiKey()}` + const res = await fetch(endpoint) + const data = await res.json() + if (data === true) { + parentEpml.request('showSnackBar', get('tour.tour22')) + } + } catch (error) { + // ... + } + } + + getApiKey() { + const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + return apiNode.apiKey } stateChanged(state) { + this.address = store.getState().app.selectedAddress.address - if(!this.seenWelcomeSync && state.app.nodeStatus && state.app.nodeStatus.syncPercent === 100 && this.hasOpened === false){ + if (!this.seenWelcomeSync && state.app.nodeStatus && state.app.nodeStatus.syncPercent === 100 && this.hasOpened === false) { this.hasOpened = true this.dispatchEvent( new CustomEvent('open-welcome-modal-sync', { bubbles: true, composed: true, }) - ); + ) } - if ( - state.app.nodeStatus && - Object.keys(state.app.nodeStatus).length === 0 - ) { + + if (state.app.nodeStatus && Object.keys(state.app.nodeStatus).length === 0) { if (this.numberOfTries > 5) { - this.hasCoreRunning = false; + this.hasCoreRunning = false } else { - this.numberOfTries = this.numberOfTries + 1; + this.numberOfTries = this.numberOfTries + 1 } - } else if(state.app.nodeStatus && state.app.nodeStatus.syncPercent === 100 && state.app.nodeStatus.syncPercent !== this.syncPercentage){ - this.syncPercentage = state.app.nodeStatus.syncPercent; - this.isSynchronizing = false; - - } else if ( - state.app.nodeStatus - ) { + } else if (state.app.nodeStatus && state.app.nodeStatus.syncPercent === 100 && state.app.nodeStatus.syncPercent !== this.syncPercentage) { + this.syncPercentage = state.app.nodeStatus.syncPercent + this.isSynchronizing = false + } else if (state.app.nodeStatus) { this.hasCoreRunning = true this.numberOfTries = 0 - this.syncPercentage = state.app.nodeStatus.syncPercent; + this.syncPercentage = state.app.nodeStatus.syncPercent if (state.app.nodeStatus.syncPercent !== 100) { - this.isSynchronizing = true; - } - - if ( - !this.interval && - this.isBehind === null && - state.app.nodeStatus.isSynchronizing && - state.app.nodeStatus.syncPercent !== 100 - ) { - this.checkHowManyBlocksBehind(); + this.isSynchronizing = true + } + + if (!this.interval && this.isBehind === null && state.app.nodeStatus.isSynchronizing && state.app.nodeStatus.syncPercent !== 100) { + this.checkHowManyBlocksBehind() } } else { - this.hasCoreRunning = true; + this.hasCoreRunning = true } } - - async bootstrap(){ - try { - const endpoint = `${this.nodeUrl}/admin/bootstrap/?apiKey=${this.myNode.apiKey}`; - const res = await fetch(endpoint); - const data = await res.json(); - if(data === true){ - parentEpml.request('showSnackBar', get('tour.tour22')); - } - } catch (error) { - - } - } - - render() { - return html` - ${!this.hasCoreRunning - ? html` -
- priority_high -

- ${translate("tour.tour17")} -

-
- ` - : (this.blocksBehind > 1050 && this.isSynchronizing) - ? html` -
-
-
- -

- ${this.blocksBehind} ${translate("tour.tour20")} -

-
-
- -
-
-
- ` - : this.isSynchronizing - ? html` -
- -

- ${translate("tour.tour19")} ${this.blocksBehind ? this.blocksBehind : ""} ${this.blocksBehind ? translate("tour.tour21"): ""} -

-
- ` - : "" } - `; - } } -customElements.define('sync-indicator', SyncIndicator); + +customElements.define('sync-indicator', SyncIndicator) \ No newline at end of file diff --git a/core/src/components/beginner-tour/tour-component.js b/core/src/components/beginner-tour/tour-component.js index f51ba3d6..26b16276 100644 --- a/core/src/components/beginner-tour/tour-component.js +++ b/core/src/components/beginner-tour/tour-component.js @@ -1,16 +1,17 @@ -import { LitElement, html, css } from 'lit'; -import { driver } from 'driver.js'; +import {css, html, LitElement} from 'lit'; +import {driver} from 'driver.js'; import 'driver.js/dist/driver.css'; import '@material/mwc-icon'; import '@polymer/paper-spinner/paper-spinner-lite.js'; import '@vaadin/tooltip'; import '@material/mwc-button'; -import { get, translate } from '../../../translate/index.js'; +import {get, translate} from '../../../translate'; import '@polymer/paper-dialog/paper-dialog.js'; -import { setNewTab } from '../../redux/app/app-actions.js'; -import { store } from '../../store.js'; -import { connect } from 'pwa-helpers'; +import {setNewTab} from '../../redux/app/app-actions.js'; +import {store} from '../../store.js'; +import {connect} from 'pwa-helpers'; import './tour.css'; + class TourComponent extends connect(store)(LitElement) { static get properties() { return { @@ -116,7 +117,7 @@ class TourComponent extends connect(store)(LitElement) { _controlOpenWelcomeModal() { this.isSynced = true - + const seenWelcomeSync = JSON.parse( localStorage.getItem('welcome-sync') || 'false' ); @@ -175,19 +176,14 @@ class TourComponent extends connect(store)(LitElement) { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - return myNode; + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node + ] } async getName(recipient) { @@ -280,7 +276,7 @@ class TourComponent extends connect(store)(LitElement) {

${get("tour.tour4")}

- + `, }, }); @@ -397,7 +393,7 @@ class TourComponent extends connect(store)(LitElement) { class="close-button" @click=${()=> { this.onClose() - + }} > ${translate("general.close")} diff --git a/core/src/components/check-for-update.js b/core/src/components/check-for-update.js index 10ad8339..26a9a70e 100644 --- a/core/src/components/check-for-update.js +++ b/core/src/components/check-for-update.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit' -import {translate} from '../../translate/index.js' +import {translate} from '../../translate' import isElectron from 'is-electron' import '@polymer/paper-icon-button/paper-icon-button.js' diff --git a/core/src/components/controllers/coin-balances-controller.js b/core/src/components/controllers/coin-balances-controller.js index 3cddd6d8..7bcdabad 100644 --- a/core/src/components/controllers/coin-balances-controller.js +++ b/core/src/components/controllers/coin-balances-controller.js @@ -27,19 +27,14 @@ class CoinBalancesController extends connect(store)(LitElement) { const myNode = store.getState().app.nodeConfig.knownNodes[ store.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - store.getState().app.nodeConfig.knownNodes[ - store.getState().app.nodeConfig.node - ]; - - return myNode; + return store.getState().app.nodeConfig.knownNodes[ + store.getState().app.nodeConfig.node + ] } diff --git a/core/src/components/friends-view/ChatSideNavHeads.js b/core/src/components/friends-view/ChatSideNavHeads.js index 66c006fb..d2f6ebdd 100644 --- a/core/src/components/friends-view/ChatSideNavHeads.js +++ b/core/src/components/friends-view/ChatSideNavHeads.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit' -import {get} from '../../../translate/index.js' +import {get} from '../../../translate' import '@material/mwc-icon' import '@vaadin/tooltip'; @@ -206,11 +206,9 @@ class ChatSideNavHeads extends LitElement { if(changedProperties.has('chatInfo')){ return true } - if(changedProperties.has('isImageLoaded')){ - return true - } + return !!changedProperties.has('isImageLoaded'); + - return false } getUrl(chatUrl) { diff --git a/core/src/components/friends-view/add-friends-modal.js b/core/src/components/friends-view/add-friends-modal.js index c622e4ef..1e6f4ddd 100644 --- a/core/src/components/friends-view/add-friends-modal.js +++ b/core/src/components/friends-view/add-friends-modal.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit'; -import {translate,} from '../../../translate/index.js' +import {translate,} from '../../../translate' import '@material/mwc-button'; import '@material/mwc-dialog'; import '@material/mwc-checkbox'; @@ -202,17 +202,12 @@ class AddFriendsModal extends connect(store)(LitElement) { window.parent.reduxStore.getState().app.nodeConfig.node ]; - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port; } getMyNode() { - const myNode = - store.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node + return store.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node ]; - - return myNode; } clearFields() { @@ -267,7 +262,7 @@ class AddFriendsModal extends connect(store)(LitElement) { changedProperties && changedProperties.has('isOpen') && this.isOpen ) { - this.getAvailableFeedSchemas() + await this.getAvailableFeedSchemas() } } @@ -281,11 +276,9 @@ class AddFriendsModal extends connect(store)(LitElement) { if (data.error === 401) { this.availableFeeedSchemas = []; } else { - const result = data.filter( + this.availableFeeedSchemas = data.filter( (item) => item.identifier === 'ui_schema_feed' ); - - this.availableFeeedSchemas = result; } this.userFoundModalOpen = true; } catch (error) {} finally { diff --git a/core/src/components/friends-view/avatar.js b/core/src/components/friends-view/avatar.js index fdee3967..e0714032 100644 --- a/core/src/components/friends-view/avatar.js +++ b/core/src/components/friends-view/avatar.js @@ -1,13 +1,11 @@ -import { LitElement, html, css } from 'lit'; -import { get, translate } from '../../../translate/index.js' +import {css, html, LitElement} from 'lit'; import axios from 'axios'; import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js'; -import { RequestQueueWithPromise } from '../../../../plugins/plugins/utils/queue'; +import {RequestQueueWithPromise} from '../../../../plugins/plugins/utils/queue'; import '../../../../plugins/plugins/core/components/TimeAgo'; -import { connect } from 'pwa-helpers'; -import { store } from '../../store'; -import { setNewTab } from '../../redux/app/app-actions'; +import {connect} from 'pwa-helpers'; +import {store} from '../../store'; import ShortUniqueId from 'short-unique-id'; const requestQueue = new RequestQueueWithPromise(3); @@ -125,17 +123,12 @@ export class AvatarComponent extends connect(store)(LitElement) { window.parent.reduxStore.getState().app.nodeConfig.node ]; - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port; } getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node ]; - - return myNode; } getApiKey() { @@ -143,8 +136,7 @@ export class AvatarComponent extends connect(store)(LitElement) { window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node ]; - let apiKey = myNode.apiKey; - return apiKey; + return myNode.apiKey; } async fetchResource() { @@ -161,7 +153,7 @@ export class AvatarComponent extends connect(store)(LitElement) { } async fetchVideoUrl() { - this.fetchResource(); + await this.fetchResource(); } async getRawData() { @@ -249,7 +241,7 @@ export class AvatarComponent extends connect(store)(LitElement) { this.status = res; if (this.status.status === 'DOWNLOADED') { - this.fetchResource(); + await this.fetchResource(); } } @@ -264,8 +256,8 @@ export class AvatarComponent extends connect(store)(LitElement) { async _fetchImage() { try { - this.fetchVideoUrl(); - this.fetchStatus(); + await this.fetchVideoUrl(); + await this.fetchStatus(); } catch (error) { /* empty */ } diff --git a/core/src/components/friends-view/beginner-checklist.js b/core/src/components/friends-view/beginner-checklist.js index 3501d112..4a688aed 100644 --- a/core/src/components/friends-view/beginner-checklist.js +++ b/core/src/components/friends-view/beginner-checklist.js @@ -1,15 +1,14 @@ -import { css, html, LitElement } from 'lit'; -import { connect } from 'pwa-helpers'; +import {css, html, LitElement} from 'lit'; +import {connect} from 'pwa-helpers'; import '@vaadin/item'; import '@vaadin/list-box'; import '@polymer/paper-icon-button/paper-icon-button.js'; import '@polymer/iron-icons/iron-icons.js'; -import { store } from '../../store.js'; -import { setNewTab } from '../../redux/app/app-actions.js'; +import {store} from '../../store.js'; +import {setNewTab} from '../../redux/app/app-actions.js'; import '@material/mwc-icon'; -import { get, translate } from '../../../translate/index.js'; -import { repeat } from 'lit/directives/repeat.js'; +import {get} from '../../../translate'; import '../../../../plugins/plugins/core/components/TimeAgo.js'; import '../notification-view/popover.js'; import ShortUniqueId from 'short-unique-id'; @@ -74,17 +73,12 @@ class BeginnerChecklist extends connect(store)(LitElement) { window.parent.reduxStore.getState().app.nodeConfig.node ]; - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port; } getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node ]; - - return myNode; } async getName(recipient) { @@ -94,11 +88,7 @@ class BeginnerChecklist extends connect(store)(LitElement) { const res = await fetch(endpoint); const getNames = await res.json(); - if (Array.isArray(getNames) && getNames.length > 0) { - this.hasName = true; - } else { - this.hasName = false; - } + this.hasName = Array.isArray(getNames) && getNames.length > 0; } catch (error) { return ''; } @@ -132,7 +122,7 @@ class BeginnerChecklist extends connect(store)(LitElement) { state.app.accountInfo.names.length > 0 ) { this.hasName = true; - } + } } handleBlur() { diff --git a/core/src/components/friends-view/core-sync-status.js b/core/src/components/friends-view/core-sync-status.js index 733123aa..a4345671 100644 --- a/core/src/components/friends-view/core-sync-status.js +++ b/core/src/components/friends-view/core-sync-status.js @@ -1,128 +1,150 @@ import {css, html, LitElement} from 'lit' import {store} from '../../store' import {connect} from 'pwa-helpers' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' class CoreSyncStatus extends connect(store)(LitElement) { static get properties() { return { - nodeStatus: {type: Object}, - coreInfos: { type: Array } + nodeInfos: { type: Array }, + coreInfos: { type: Array }, + theme: { type: String, reflect: true } } } constructor() { super() - this.nodeStatus = {} + this.nodeInfos = [] this.coreInfos = [] + this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' } - static styles = css` - .lineHeight { - line-height: 33%; - } + static get styles() { + return css` + .lineHeight { + line-height: 33%; + } - .tooltip { - display: inline-block; - position: relative; - text-align: left; - } + .tooltip { + display: inline-block; + position: relative; + text-align: left; + } - .tooltip .bottom { - min-width: 200px; - max-width: 250px; - top: 35px; - left: 50%; - transform: translate(-50%, 0); - padding: 10px 10px; - color: var(--black); - background-color: var(--white); - font-weight: normal; - font-size: 13px; - border-radius: 8px; - position: absolute; - z-index: 99999999; - box-sizing: border-box; - box-shadow: 0 1px 8px rgba(0,0,0,0.5); - border: 1px solid var(--black); - visibility: hidden; - opacity: 0; - transition: opacity 0.8s; - } + .tooltip .bottom { + min-width: 200px; + max-width: 250px; + top: 35px; + left: 50%; + transform: translate(-50%, 0); + padding: 10px 10px; + color: var(--black); + background-color: var(--white); + font-weight: normal; + font-size: 13px; + border-radius: 8px; + position: absolute; + z-index: 99999999; + box-sizing: border-box; + box-shadow: 0 1px 8px rgba(0,0,0,0.5); + border: 1px solid var(--black); + visibility: hidden; + opacity: 0; + transition: opacity 0.8s; + } - .tooltip:hover .bottom { - visibility: visible; - opacity: 1; - } + .tooltip:hover .bottom { + visibility: visible; + opacity: 1; + } - .tooltip .bottom i { - position: absolute; - bottom: 100%; - left: 50%; - margin-left: -12px; - width: 24px; - height: 12px; - overflow: hidden; - } + .tooltip .bottom i { + position: absolute; + bottom: 100%; + left: 50%; + margin-left: -12px; + width: 24px; + height: 12px; + overflow: hidden; + } - .tooltip .bottom i::after { - content: ''; - position: absolute; - width: 12px; - height: 12px; - left: 50%; - transform: translate(-50%,50%) rotate(45deg); - background-color: var(--white); - border: 1px solid var(--black); - box-shadow: 0 1px 8px rgba(0,0,0,0.5); - } - - ` + .tooltip .bottom i::after { + content: ''; + position: absolute; + width: 12px; + height: 12px; + left: 50%; + transform: translate(-50%,50%) rotate(45deg); + background-color: var(--white); + border: 1px solid var(--black); + box-shadow: 0 1px 8px rgba(0,0,0,0.5); + } + ` + } render() { return html`
- ${this.renderSyncStatusIcon()} + ${this.renderSyncStatusIcon()}
` } firstUpdated() { + this.getNodeInfos() this.getCoreInfos() setInterval(() => { + this.getNodeInfos() this.getCoreInfos() - }, 60000) + }, 30000) } + async getNodeInfos() { + const appInfoNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + const appInfoUrl = appInfoNode.protocol + '://' + appInfoNode.domain + ':' + appInfoNode.port + const nodeInfoUrl = `${appInfoUrl}/admin/status` + + await fetch(nodeInfoUrl).then(response => { + return response.json() + }).then(data => { + this.nodeInfos = data + }).catch(err => { + console.error('Request failed', err) + }) + } + async getCoreInfos() { - const corInfo = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] - const coreInfoUrl = corInfo.protocol + '://' + corInfo.domain + ':' + corInfo.port - const infoUrl = `${coreInfoUrl}/admin/info` - await fetch(infoUrl).then(response => { + const appCoreNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + const appCoreUrl = appCoreNode.protocol + '://' + appCoreNode.domain + ':' + appCoreNode.port + const coreInfoUrl = `${appCoreUrl}/admin/info` + + await fetch(coreInfoUrl).then(response => { return response.json() }).then(data => { this.coreInfos = data + }).catch(err => { + console.error('Request failed', err) }) } renderSyncStatusIcon() { - if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.syncPercent === 99) { + if (this.nodeInfos.isSynchronizing === true && this.nodeInfos.syncPercent === 99) { return html`

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

-

${translate("appinfo.synchronizing")}... ${this.nodeStatus.syncPercent !== undefined ? this.nodeStatus.syncPercent + '%' : ''}

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.synchronizing")}... ${this.nodeInfos.syncPercent !== undefined ? this.nodeInfos.syncPercent + '%' : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

` - } else if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.isMintingPossible === false && this.nodeStatus.syncPercent === 100) { + } else if (this.nodeInfos.isSynchronizing === true && this.nodeInfos.isMintingPossible === false && this.nodeInfos.syncPercent === 100) { return html`
@@ -130,13 +152,13 @@ class CoreSyncStatus extends connect(store)(LitElement) {

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

${translate("walletprofile.wp4")} ${translate("walletprofile.wp2")}

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

` - } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === false && this.nodeStatus.syncPercent === 100) { + } else if (this.nodeInfos.isSynchronizing === false && this.nodeInfos.isMintingPossible === false && this.nodeInfos.syncPercent === 100) { return html`
@@ -144,13 +166,13 @@ class CoreSyncStatus extends connect(store)(LitElement) {

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

${translate("walletprofile.wp4")} ${translate("walletprofile.wp2")}

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

` - } else if (this.nodeStatus.isSynchronizing === true && this.nodeStatus.isMintingPossible === true && this.nodeStatus.syncPercent === 100) { + } else if (this.nodeInfos.isSynchronizing === true && this.nodeInfos.isMintingPossible === true && this.nodeInfos.syncPercent === 100) { return html`
@@ -158,13 +180,13 @@ class CoreSyncStatus extends connect(store)(LitElement) {

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

${translate("walletprofile.wp4")} ( ${translate("walletprofile.wp1")} )

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

` - } else if (this.nodeStatus.isSynchronizing === false && this.nodeStatus.isMintingPossible === true && this.nodeStatus.syncPercent === 100) { + } else if (this.nodeInfos.isSynchronizing === false && this.nodeInfos.isMintingPossible === true && this.nodeInfos.syncPercent === 100) { return html`
@@ -172,8 +194,8 @@ class CoreSyncStatus extends connect(store)(LitElement) {

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

${translate("walletprofile.wp4")} ( ${translate("walletprofile.wp1")} )

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

@@ -185,9 +207,9 @@ class CoreSyncStatus extends connect(store)(LitElement) {

${translate("walletprofile.wp3")}

${translate("appinfo.coreversion")}: ${this.coreInfos.buildVersion ? (this.coreInfos.buildVersion).substring(0,12) : ''}

-

${translate("appinfo.synchronizing")}... ${this.nodeStatus.syncPercent !== undefined ? this.nodeStatus.syncPercent + '%' : ''}

-

${translate("appinfo.blockheight")}: ${this.nodeStatus.height ? this.nodeStatus.height : ''}

-

${translate("appinfo.peers")}: ${this.nodeStatus.numberOfConnections ? this.nodeStatus.numberOfConnections : ''}

+

${translate("appinfo.synchronizing")}... ${this.nodeInfos.syncPercent !== undefined ? this.nodeInfos.syncPercent + '%' : ''}

+

${translate("appinfo.blockheight")}: ${this.nodeInfos.height ? this.nodeInfos.height : ''}

+

${translate("appinfo.peers")}: ${this.nodeInfos.numberOfConnections ? this.nodeInfos.numberOfConnections : ''}

@@ -196,7 +218,7 @@ class CoreSyncStatus extends connect(store)(LitElement) { } stateChanged(state) { - this.nodeStatus = state.app.nodeStatus + // ... } } diff --git a/core/src/components/friends-view/feed-item.js b/core/src/components/friends-view/feed-item.js index 4b344187..2410c5ff 100644 --- a/core/src/components/friends-view/feed-item.js +++ b/core/src/components/friends-view/feed-item.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit'; -import {translate,} from '../../../translate/index.js' +import {translate,} from '../../../translate' import axios from 'axios' import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js' @@ -174,13 +174,10 @@ export class FeedItem extends connect(store)(LitElement) { getNodeUrl(){ const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - return nodeUrl + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode(){ - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - - return myNode + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] } getApiKey() { @@ -188,8 +185,7 @@ getMyNode(){ window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node ]; - let apiKey = myNode.apiKey; - return apiKey; + return myNode.apiKey; } async fetchResource() { @@ -206,7 +202,7 @@ getMyNode(){ async fetchVideoUrl() { - this.fetchResource() + await this.fetchResource() } @@ -311,7 +307,7 @@ getMyNode(){ this.status = res if(this.status.status === 'DOWNLOADED'){ - this.fetchResource() + await this.fetchResource() } } @@ -332,8 +328,8 @@ getMyNode(){ async _fetchImage() { try { - this.fetchVideoUrl() - this.fetchStatus() + await this.fetchVideoUrl() + await this.fetchStatus() } catch (error) { /* empty */ } } diff --git a/core/src/components/friends-view/friend-item-actions.js b/core/src/components/friends-view/friend-item-actions.js index d4a2d2b0..06b1217a 100644 --- a/core/src/components/friends-view/friend-item-actions.js +++ b/core/src/components/friends-view/friend-item-actions.js @@ -1,11 +1,11 @@ // popover-component.js -import { css, html, LitElement } from 'lit'; -import { createPopper } from '@popperjs/core'; +import {css, html, LitElement} from 'lit'; +import {createPopper} from '@popperjs/core'; import '@material/mwc-icon'; -import { translate } from '../../../translate/index.js' -import { store } from '../../store'; -import { connect } from 'pwa-helpers'; -import { setNewTab, setSideEffectAction } from '../../redux/app/app-actions'; +import {translate} from '../../../translate' +import {store} from '../../store'; +import {connect} from 'pwa-helpers'; +import {setNewTab, setSideEffectAction} from '../../redux/app/app-actions'; import ShortUniqueId from 'short-unique-id'; export class FriendItemActions extends connect(store)(LitElement) { @@ -79,11 +79,9 @@ export class FriendItemActions extends connect(store)(LitElement) { const myNode = store.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } firstUpdated() { diff --git a/core/src/components/friends-view/friends-feed.js b/core/src/components/friends-view/friends-feed.js index 6d265d6b..597fa8e1 100644 --- a/core/src/components/friends-view/friends-feed.js +++ b/core/src/components/friends-view/friends-feed.js @@ -5,7 +5,7 @@ import {friendsViewStyles} from './friends-view-css'; import {connect} from 'pwa-helpers'; import {store} from '../../store'; import './feed-item' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' import '@polymer/paper-spinner/paper-spinner-lite.js' @@ -53,24 +53,18 @@ class FriendsFeed extends connect(store)(LitElement) { const myNode = store.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - store.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - return myNode; + return store.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node + ] } _updateFeeds(event) { - const detail = event.detail - this.mySelectedFeeds = detail + this.mySelectedFeeds = event.detail this.reFetchFeedData() this.requestUpdate() } @@ -170,7 +164,7 @@ class FriendsFeed extends connect(store)(LitElement) { if(this.mySelectedFeeds.length === 0){ await this.getEndpoints() -this.loadAndMergeData(); +await this.loadAndMergeData(); } this.getFeedOnInterval() @@ -190,7 +184,7 @@ this.getFeedOnInterval() async refresh(){ try { await this.getEndpoints() - this.reFetchFeedData() + await this.reFetchFeedData() } catch (error) { } @@ -216,7 +210,7 @@ this.getFeedOnInterval() observerHandler(entries) { if (!entries[0].isIntersecting) { - return; + } else { if (this.feedToRender.length < 20) { return; @@ -326,8 +320,7 @@ this.getFeedOnInterval() let clickValue1 = newItem.schema.click; - const resolvedClickValue1 = replacePlaceholders(clickValue1, resource, newItem.schema.customParams); - newItem.link = resolvedClickValue1 + newItem.link = replacePlaceholders(clickValue1, resource, newItem.schema.customParams) newData.push(newItem) } } @@ -375,7 +368,7 @@ this.getFeedOnInterval() return false; }); } - + async loadAndMergeData() { let allData = this.feed diff --git a/core/src/components/friends-view/friends-side-panel-parent.js b/core/src/components/friends-view/friends-side-panel-parent.js index f763c4d1..42984e65 100644 --- a/core/src/components/friends-view/friends-side-panel-parent.js +++ b/core/src/components/friends-view/friends-side-panel-parent.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import '@material/mwc-icon' import './friends-side-panel.js' import '@vaadin/tooltip' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' class FriendsSidePanelParent extends LitElement { static get properties() { diff --git a/core/src/components/friends-view/friends-side-panel.js b/core/src/components/friends-view/friends-side-panel.js index d47cc5e3..3e4a0370 100644 --- a/core/src/components/friends-view/friends-side-panel.js +++ b/core/src/components/friends-view/friends-side-panel.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'; import '@material/mwc-icon'; import './friends-view' import './friends-feed' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' class FriendsSidePanel extends LitElement { static get properties() { diff --git a/core/src/components/friends-view/friends-view.js b/core/src/components/friends-view/friends-view.js index 148422c9..94e4b128 100644 --- a/core/src/components/friends-view/friends-view.js +++ b/core/src/components/friends-view/friends-view.js @@ -13,7 +13,7 @@ import './ChatSideNavHeads'; import '../../../../plugins/plugins/core/components/ChatSearchResults' import './add-friends-modal' -import {translate,} from '../../../translate/index.js' +import {translate,} from '../../../translate' import {store} from '../../store'; import {friendsViewStyles} from './friends-view-css'; import {parentEpml} from '../show-plugin'; @@ -74,19 +74,14 @@ class FriendsView extends connect(store)(LitElement) { const myNode = store.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - store.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - return myNode; + return store.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node + ] } getMoreFriends() {} @@ -105,12 +100,10 @@ class FriendsView extends connect(store)(LitElement) { } _updateFriends(event) { - const detail = event.detail - this.friendList = detail + this.friendList = event.detail } _updateFeed(event) { - const detail = event.detail - this.mySelectedFeeds = detail + this.mySelectedFeeds = event.detail this.requestUpdate() } _addFriend(event){ @@ -125,7 +118,7 @@ class FriendsView extends connect(store)(LitElement) { name }; } - + this.isOpenAddFriendsModal = true this.openSidePanel() } @@ -165,7 +158,7 @@ class FriendsView extends connect(store)(LitElement) { observerHandler(entries) { if (!entries[0].isIntersecting) { - return; + } else { if (this.friendList.length < 20) { return; @@ -201,8 +194,7 @@ class FriendsView extends connect(store)(LitElement) { getApiKey() { const apiNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = apiNode.apiKey - return apiKey + return apiNode.apiKey } async myFollowName(name) { @@ -211,7 +203,7 @@ class FriendsView extends connect(store)(LitElement) { ] let namesJsonString = JSON.stringify({ "items": items }) - let ret = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, method: 'POST', headers: { @@ -219,9 +211,6 @@ class FriendsView extends connect(store)(LitElement) { }, body: `${namesJsonString}` }) - - - return ret } async unFollowName(name) { @@ -230,7 +219,7 @@ class FriendsView extends connect(store)(LitElement) { ] let namesJsonString = JSON.stringify({ "items": items }) - let ret = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, method: 'DELETE', headers: { @@ -238,9 +227,6 @@ class FriendsView extends connect(store)(LitElement) { }, body: `${namesJsonString}` }) - - - return ret } async addToFriendList(val, isRemove){ const copyVal = {...val} @@ -260,9 +246,9 @@ class FriendsView extends connect(store)(LitElement) { this.friendList = [...this.friendList, copyVal] } if(!copyVal.willFollow || isRemove) { - this.unFollowName(copyVal.name) + await this.unFollowName(copyVal.name) } else if(copyVal.willFollow){ - this.myFollowName(copyVal.name) + await this.myFollowName(copyVal.name) } this.setMySelectedFeeds(val.mySelectedFeeds) await new Promise((res)=> { diff --git a/core/src/components/friends-view/profile-modal-update.js b/core/src/components/friends-view/profile-modal-update.js index bdf58755..8e1418bf 100644 --- a/core/src/components/friends-view/profile-modal-update.js +++ b/core/src/components/friends-view/profile-modal-update.js @@ -1,15 +1,14 @@ -import { LitElement, html, css } from 'lit'; -import { render } from 'lit/html.js'; -import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from '../../../translate/index.js' +import {css, html, LitElement} from 'lit'; +import {get, translate} from '../../../translate' import '@material/mwc-button'; import '@material/mwc-icon'; import '@vaadin/tooltip'; import '@material/mwc-dialog'; import '@material/mwc-checkbox'; -import { connect } from 'pwa-helpers'; -import { store } from '../../store'; +import {connect} from 'pwa-helpers'; +import {store} from '../../store'; import '@polymer/paper-spinner/paper-spinner-lite.js'; -import { parentEpml } from '../show-plugin'; +import {parentEpml} from '../show-plugin'; class ProfileModalUpdate extends connect(store)(LitElement) { static get properties() { @@ -274,7 +273,7 @@ class ProfileModalUpdate extends connect(store)(LitElement) { this.requestUpdate(); } - + } async firstUpdated() { @@ -335,19 +334,14 @@ class ProfileModalUpdate extends connect(store)(LitElement) { const myNode = store.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; + ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - store.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node - ]; - - return myNode; + return store.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node + ] } clearFields() { @@ -549,12 +543,12 @@ class ProfileModalUpdate extends connect(store)(LitElement) {
- +

${key} @@ -592,9 +586,9 @@ class ProfileModalUpdate extends connect(store)(LitElement) { > ${translate('general.close')} - +

- + -
- `)} - -
- ${this.renderSetCoreButton()} +
+

${translate("settings.qappNotification1")}

+ ${this.appNotificationList.map((app) => html` +
+ ${app} + +
+ `)} +
+
+ + this.checkForSyncMessages(e)} ?checked=${store.getState().app.showSyncIndicator}> +
+ ${this.renderSetCoreButton()} + ` } getAppsFromStorage() { // Your method to fetch the list of apps from local storage // Example: - const address= store.getState().app.selectedAddress.address - const id = `appNotificationList-${address}`; - const data = localStorage.getItem(id); - return data ? Object.keys(JSON.parse(data)) : []; - } + const address = store.getState().app.selectedAddress.address + const id = `appNotificationList-${address}` + const data = localStorage.getItem(id) + return data ? Object.keys(JSON.parse(data)) : [] + } - removeApp(appName) { + removeApp(appName) { // Remove the app from local storage this.removeAppFromStorage(appName); // Update the apps list in the component this.appNotificationList = this.appNotificationList.filter(app => app !== appName); - } + } - removeAppFromStorage(appName) { + removeAppFromStorage(appName) { // Your method to remove the app from local storage const address= store.getState().app.selectedAddress.address const id = `appNotificationList-${address}`; const data = JSON.parse(localStorage.getItem(id) || '{}'); delete data[appName]; localStorage.setItem(id, JSON.stringify(data)); - } + } renderSetCoreButton() { if (!isElectron()) { @@ -205,6 +224,14 @@ class NotificationsView extends connect(store)(LitElement) { window.electronAPI.setStartCore() } + checkForSyncMessages(e) { + if (e.target.checked) { + store.dispatch(removeShowSyncIndicator(false)) + } else { + store.dispatch(allowShowSyncIndicator(true)) + } + } + stateChanged(state) { this.notificationConfig = state.user.notifications this.q_chatConfig = this.notificationConfig.q_chat @@ -226,8 +253,6 @@ class NotificationsView extends connect(store)(LitElement) { store.dispatch(doSetQChatNotificationConfig(data)) } } - - } window.customElements.define('notifications-view', NotificationsView) diff --git a/core/src/components/settings-view/qr-login-view.js b/core/src/components/settings-view/qr-login-view.js index 1816930e..d4f0bc74 100644 --- a/core/src/components/settings-view/qr-login-view.js +++ b/core/src/components/settings-view/qr-login-view.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../../store.js' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' import '@material/mwc-textfield' import '@material/mwc-icon' diff --git a/core/src/components/settings-view/security-view.js b/core/src/components/settings-view/security-view.js index c1e9c594..e0733c04 100644 --- a/core/src/components/settings-view/security-view.js +++ b/core/src/components/settings-view/security-view.js @@ -10,7 +10,7 @@ import { removeQAPPAutoLists, setIsOpenDevDialog } from '../../redux/app/app-actions.js' -import {get, translate} from '../../../translate/index.js' +import {get, translate} from '../../../translate' import snackbar from '../../functional-components/snackbar.js' import FileSaver from 'file-saver' @@ -145,11 +145,11 @@ class SecurityView extends connect(store)(LitElement) {
-
- - this.checkForAuth(e)} ?checked=${store.getState().app.qAPPAutoAuth}> +
+ + this.checkForAuth(e)} ?checked=${store.getState().app.qAPPAutoAuth}>
- - this.checkForFriends(e)} ?checked=${store.getState().app.qAPPFriendsList}> + + this.checkForFriends(e)} ?checked=${store.getState().app.qAPPFriendsList}>
- +
-
` } @@ -231,7 +232,7 @@ class SecurityView extends connect(store)(LitElement) { const dataString = JSON.stringify(data) const blob = new Blob([dataString], { type: 'text/plain;charset=utf-8' }) backupname = "qortal_backup_" + state.app.selectedAddress.address + ".json" - this.saveFileToDisk(blob, backupname) + await this.saveFileToDisk(blob, backupname) } async saveFileToDisk(blob, fileName) { diff --git a/core/src/components/settings-view/user-settings.js b/core/src/components/settings-view/user-settings.js index 84bec854..fc923660 100644 --- a/core/src/components/settings-view/user-settings.js +++ b/core/src/components/settings-view/user-settings.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../../store.js' -import {translate} from '../../../translate/index.js' +import {translate} from '../../../translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' diff --git a/core/src/components/show-plugin.js b/core/src/components/show-plugin.js index fa9fc125..a750b0a0 100644 --- a/core/src/components/show-plugin.js +++ b/core/src/components/show-plugin.js @@ -8,7 +8,7 @@ import {repeat} from 'lit/directives/repeat.js'; import ShortUniqueId from 'short-unique-id'; import {setIsOpenDevDialog, setNewTab} from '../redux/app/app-actions.js' import FileSaver from 'file-saver' -import {get, registerTranslateConfig, translate, use} from '../../translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../translate' import '@material/mwc-button' import '@material/mwc-dialog' import '@material/mwc-icon' @@ -19,13 +19,12 @@ import '@polymer/paper-dialog/paper-dialog.js' import '@vaadin/grid' import '@vaadin/text-field' import '../custom-elements/frag-file-input.js' -import { defaultQappsTabs } from '../data/defaultQapps.js' +import {defaultQappsTabs} from '../data/defaultQapps.js' registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) }) - export const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class ShowPlugin extends connect(store)(LitElement) { @@ -43,7 +42,7 @@ class ShowPlugin extends connect(store)(LitElement) { chatLastSeen: { type: Array }, chatHeads: { type: Array }, proxyPort: { type: Number }, - isOpenDevDialog: {type: Boolean} + isOpenDevDialog: { type: Boolean } } } @@ -211,7 +210,7 @@ class ShowPlugin extends connect(store)(LitElement) { font-weight: bold; background: none; border: none; - color: var(--accent-color); + color: var(--general-color-blue); font-size: 2em; cursor: pointer; transition: color 0.3s; @@ -229,7 +228,7 @@ class ShowPlugin extends connect(store)(LitElement) { max-height: 28px; padding: 5px 5px; font-size: 14px; - background-color: var(--accent-color); + background-color: var(--general-color-blue); color: white; border: 1px solid transparent; border-radius: 3px; @@ -248,7 +247,7 @@ class ShowPlugin extends connect(store)(LitElement) { .iconActive { position: absolute; top: 5px; - color: var(--accent-color); + color: var(--general-color-blue); --mdc-icon-size: 24px; } @@ -260,7 +259,7 @@ class ShowPlugin extends connect(store)(LitElement) { } .tab:hover .iconInactive { - color: var(--accent-color); + color: var(--general-color-blue); } .count { @@ -843,7 +842,7 @@ class ShowPlugin extends connect(store)(LitElement) { store.dispatch(setNewTab(null)) } else if (!this.tabs.find((tab) => tab.id === newTab.id)) { - this.addTab(newTab) + await this.addTab(newTab) this.currentTab = this.tabs.length - 1 store.dispatch(setNewTab(null)) //clear newTab @@ -1078,7 +1077,7 @@ class NavBar extends connect(store)(LitElement) { } .resetIcon:hover { - color: var(--accent-color); + color: var(--general-color-blue); font-weight: bold; } @@ -1092,7 +1091,7 @@ class NavBar extends connect(store)(LitElement) { } .searchIcon:hover { - color: var(--accent-color); + color: var(--general-color-blue); font-weight: bold; } @@ -1106,7 +1105,7 @@ class NavBar extends connect(store)(LitElement) { } .importIcon:hover { - color: var(--accent-color); + color: var(--general-color-blue); font-weight: bold; } @@ -1120,7 +1119,7 @@ class NavBar extends connect(store)(LitElement) { } .exportIcon:hover { - color: var(--accent-color); + color: var(--general-color-blue); font-weight: bold; } @@ -1141,7 +1140,7 @@ class NavBar extends connect(store)(LitElement) { paper-dialog button { padding: 5px 10px; font-size: 18px; - background-color: var(--accent-color); + background-color: var(--general-color-blue); color: white; border: 1px solid transparent; border-radius: 5px; @@ -1175,7 +1174,7 @@ class NavBar extends connect(store)(LitElement) { } vaadin-text-field[focused]::part(input-field) { - border-color: var(--accent-color); + border-color: var(--general-color-blue); } ` @@ -1474,8 +1473,7 @@ class NavBar extends connect(store)(LitElement) { res() }, 1000); }) - const detail = event.detail - this.myMenuPlugins = detail + this.myMenuPlugins = event.detail const addressInfo = this.addressInfo const isMinter = addressInfo?.error !== 124 && +addressInfo?.level > 0 const isSponsor = +addressInfo?.level >= 5 @@ -1589,11 +1587,9 @@ class NavBar extends connect(store)(LitElement) { } async getMyFollowedNames() { - let myFollowedNames = await parentEpml.request('apiCall', { - url: `/lists/followedNames?apiKey=${this.getApiKey()}` - }) - - this.myFollowedNames = myFollowedNames + this.myFollowedNames = await parentEpml.request('apiCall', { + url: `/lists/followedNames?apiKey=${this.getApiKey()}` + }) } searchNameKeyListener(e) { @@ -1693,7 +1689,7 @@ class NavBar extends connect(store)(LitElement) { let err3string = get("appspage.schange22") parentEpml.request('showSnackBar', `${err3string}`) } - this.getMyFollowedNamesList() + await this.getMyFollowedNamesList() return ret } @@ -1719,7 +1715,7 @@ class NavBar extends connect(store)(LitElement) { let err4string = get("appspage.schange23") parentEpml.request('showSnackBar', `${err4string}`) } - this.getMyFollowedNamesList() + await this.getMyFollowedNamesList() return ret } @@ -1996,11 +1992,7 @@ class NavBar extends connect(store)(LitElement) { this.myPluginNameRes = res }) - if (this.myPluginNameRes === undefined || this.myPluginNameRes.length == 0) { - myPluginName = false - } else { - myPluginName = true - } + myPluginName = !(this.myPluginNameRes === undefined || this.myPluginNameRes.length == 0); return myPluginName } @@ -2061,11 +2053,7 @@ class NavBar extends connect(store)(LitElement) { this.myPluginNameRes = res }) - if (this.myPluginNameRes === undefined || this.myPluginNameRes.length == 0 ) { - myPluginName = false - } else { - myPluginName = true - } + myPluginName = !(this.myPluginNameRes === undefined || this.myPluginNameRes.length == 0); return myPluginName } @@ -2407,7 +2395,7 @@ class NavBar extends connect(store)(LitElement) { async handlePasteLink(e) { try { const value = this.shadowRoot.getElementById('linkInput').value - this.getQuery(value) + await this.getQuery(value) } catch (error) { } } @@ -2416,7 +2404,7 @@ class NavBar extends connect(store)(LitElement) { if (e.key === 'Enter') { try { const value = this.shadowRoot.getElementById('linkInput').value - this.getQuery(value) + await this.getQuery(value) } catch (error) { } } @@ -2424,8 +2412,7 @@ class NavBar extends connect(store)(LitElement) { getApiKey() { const apiNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = apiNode.apiKey - return apiKey + return apiNode.apiKey } isEmptyArray(arr) { diff --git a/core/src/components/start-minting.js b/core/src/components/start-minting.js index 7fa706b1..a9a7c6ec 100644 --- a/core/src/components/start-minting.js +++ b/core/src/components/start-minting.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit'; import {connect} from 'pwa-helpers'; import {store} from '../store.js'; -import {get, translate} from '../../translate/index.js' +import {get, translate} from '../../translate' import {asyncReplace} from 'lit/directives/async-replace.js'; import '../functional-components/my-button.js'; @@ -235,9 +235,7 @@ const nonce = selectedAddress && selectedAddress.nonce; const url = `${nodeUrl}/admin/mintingaccounts`; try { const res = await fetch(url); - const mintingAccountData = await res.json(); - - this.mintingAccountData = mintingAccountData; + this.mintingAccountData = await res.json(); } catch (error) { this.errorMsg = this.renderErrorMsg1(); } @@ -286,14 +284,14 @@ const nonce = selectedAddress && selectedAddress.nonce; try { await addMintingAccount(this.privateRewardShareKey); - routes.showSnackBar({ + await routes.showSnackBar({ data: translate('becomeMinterPage.bchange19'), }); this.status = 5; - this.getMintingAcccounts(); + await this.getMintingAcccounts(); } catch (error) { this.errorMsg = this.renderErrorMsg3(); - return; + } } @@ -311,8 +309,7 @@ const nonce = selectedAddress && selectedAddress.nonce; const rewardShares = async (minterAddr) => { const url = `${nodeUrl}/addresses/rewardshares?minters=${minterAddr}&recipients=${minterAddr}`; const res = await fetch(url); - const data = await res.json(); - return data; + return await res.json(); }; if (!stop) { @@ -352,7 +349,7 @@ const nonce = selectedAddress && selectedAddress.nonce; let rewarddialog3 = get('transactions.rewarddialog3'); let rewarddialog4 = get('transactions.rewarddialog4'); - let myTxnrequest = await routes.transaction({ + return await routes.transaction({ data: { type: 38, nonce: nonce, @@ -368,7 +365,6 @@ const nonce = selectedAddress && selectedAddress.nonce; }, disableModal: true, }); - return myTxnrequest; }; const getTxnRequestResponse = (txnResponse) => { @@ -404,8 +400,7 @@ const nonce = selectedAddress && selectedAddress.nonce; const getLastRef = async () => { const url = `${nodeUrl}/addresses/lastreference/${address}`; const res = await fetch(url); - const data = await res.text(); - return data; + return await res.text(); }; const startMinting = async () => { @@ -422,11 +417,11 @@ const nonce = selectedAddress && selectedAddress.nonce; try { this.privateRewardShareKey = await createSponsorshipKey(); - this.confirmRelationship(publicAddress) + await this.confirmRelationship(publicAddress) } catch (error) { console.log({ error }) this.errorMsg = (error && error.data && error.data.message) ? error.data.message : this.renderErrorMsg4(); - return; + } }; @@ -438,7 +433,7 @@ const nonce = selectedAddress && selectedAddress.nonce; .onClick=${async () => { await startMinting(); if (this.errorMsg) { - routes.showSnackBar({ + await routes.showSnackBar({ data: this.errorMsg, }); } diff --git a/core/src/components/theme-toggle.js b/core/src/components/theme-toggle.js index ab4fc575..5d76cc81 100644 --- a/core/src/components/theme-toggle.js +++ b/core/src/components/theme-toggle.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit' -import {translate} from '../../translate/index.js' +import {translate} from '../../translate' import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/iron-icons/image-icons.js' import '@polymer/iron-icons/iron-icons.js' diff --git a/core/src/components/user-info-view/user-info-view.js b/core/src/components/user-info-view/user-info-view.js index 5c194401..7678d0af 100644 --- a/core/src/components/user-info-view/user-info-view.js +++ b/core/src/components/user-info-view/user-info-view.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {connect} from 'pwa-helpers' import {store} from '../../store.js' -import {get, translate} from '../../../translate/index.js' +import {get, translate} from '../../../translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' @@ -1374,13 +1374,11 @@ class UserInfoView extends connect(store)(LitElement) { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const fromNameUrl = `${nodeUrl}/names/${fromName}` - const qortalNameInfo = await fetch(fromNameUrl).then(response => { - return response.json() - }) - - this.nameAddressResult = qortalNameInfo + this.nameAddressResult = await fetch(fromNameUrl).then(response => { + return response.json() + }) const nameAddress = this.nameAddressResult.owner - this.getAllWithAddress(nameAddress) + await this.getAllWithAddress(nameAddress) } async getAllWithAddress(myAddress) { @@ -1401,11 +1399,9 @@ class UserInfoView extends connect(store)(LitElement) { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const infoAddressUrl = `${nodeUrl}/addresses/${infoAddress}` - const qortalAddressInfo = await fetch(infoAddressUrl).then(response => { - return response.json() - }) - - this.addressResult = qortalAddressInfo + this.addressResult = await fetch(infoAddressUrl).then(response => { + return response.json() + }) } async getAddressUserAvatar(avatarAddress) { @@ -1427,8 +1423,7 @@ class UserInfoView extends connect(store)(LitElement) { } }) - const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.imageUrl = myImageUrl + this.imageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` } async getAddressUserBalance(balanceAddress) { @@ -1451,19 +1446,15 @@ class UserInfoView extends connect(store)(LitElement) { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port if (checkBlocks === 0) { - let noMinterString = get("explorerpage.exp16") - this.startMintTime = noMinterString + this.startMintTime = get("explorerpage.exp16") } else { const rewardshareUrl = `${nodeUrl}/transactions/search?txType=REWARD_SHARE&address=${mintAddress}&confirmationStatus=CONFIRMED&limit=1&reverse=false` - const startMinting = await fetch(rewardshareUrl).then(response => { - return response.json() - }) + this.startMinting = await fetch(rewardshareUrl).then(response => { + return response.json() + }) - this.startMinting = startMinting - - const mintString = new Date(this.startMinting[0].timestamp).toLocaleDateString() - this.startMintTime = mintString + this.startMintTime = new Date(this.startMinting[0].timestamp).toLocaleDateString() } } @@ -1928,9 +1919,8 @@ class UserInfoView extends connect(store)(LitElement) { } getApiKey() { - const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]; - let apiKey = apiNode.apiKey; - return apiKey; + const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + return apiNode.apiKey } isEmptyArray(arr) { @@ -1941,8 +1931,7 @@ class UserInfoView extends connect(store)(LitElement) { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } } diff --git a/core/src/components/wallet-profile.js b/core/src/components/wallet-profile.js index 83e8c01d..a84efa99 100644 --- a/core/src/components/wallet-profile.js +++ b/core/src/components/wallet-profile.js @@ -1,10 +1,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../store.js' -import {translate} from '../../translate/index.js' - -import '@polymer/paper-toast' -import '@material/mwc-icon-button' +import {translate} from '../../translate' class WalletProfile extends connect(store)(LitElement) { static get properties() { @@ -12,82 +9,76 @@ class WalletProfile extends connect(store)(LitElement) { wallet: { type: Object }, nodeConfig: { type: Object }, accountInfo: { type: Object }, - imageUrl: { type: String }, theme: { type: String, reflect: true } } } static get styles() { - return [ - css` - ` - ] + return css` + #profileInMenu { + padding: 12px; + border-top: var(--border); + background: var(--sidetopbar); + color: var(--black); + } + + #accountName { + margin: 0; + font-size: 18px; + font-weight: 500; + width: 100%; + padding-bottom: 8px; + display: flex; + } + + #blocksMinted { + margin:0; + margin-top: 0; + font-size: 12px; + color: #03a9f4; + } + + #address { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin:0; + margin-top: 8px; + font-size: 11px; + } + + .round-fullinfo { + position: relative; + width: 68px; + height: 68px; + border-radius: 50%; + } + + .full-info-logo { + width: 68px; + height: 68px; + border-radius: 50%; + } + + .inline-block-child { + flex: 1; + } + ` } constructor() { super() + this.wallet = {} this.nodeConfig = {} this.accountInfo = { names: [], addressInfo: {} } - this.imageUrl = '' this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' } render() { return html` -
@@ -102,26 +93,10 @@ class WalletProfile extends connect(store)(LitElement) {

${this.wallet.addresses[0].address}

- ` } - firstUpdated() { - - const container = document.body.querySelector('main-app').shadowRoot.querySelector('app-view').shadowRoot; - const toast = this.shadowRoot.getElementById('toast') - const isMobile = window.matchMedia(`(max-width: ${getComputedStyle(document.body).getPropertyValue('--layout-breakpoint-tablet')})`).matches - - if (isMobile) { - toast.verticalAlign = 'bottom' - toast.verticalOffset = 0 - } - this.toast = container.appendChild(toast) - } - - async getAllWithAddress(myAddress) { - await this.getAddressUserAvatar(myAddress) - } + firstUpdated() {} getAvatar() { if (this.accountInfo.names.length === 0) { @@ -135,9 +110,8 @@ class WalletProfile extends connect(store)(LitElement) { } getApiKey() { - const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]; - let apiKey = apiNode.apiKey; - return apiKey; + const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node] + return apiNode.apiKey } stateChanged(state) { diff --git a/core/src/custom-elements/frag-file-input.js b/core/src/custom-elements/frag-file-input.js index 8e2507a4..a8d94534 100644 --- a/core/src/custom-elements/frag-file-input.js +++ b/core/src/custom-elements/frag-file-input.js @@ -3,7 +3,7 @@ import {css, html, LitElement} from 'lit' import '@material/mwc-button' import '@material/mwc-icon' -import {translate} from '../../translate/index.js' +import {translate} from '../../translate' class FragFileInput extends LitElement { static get properties () { diff --git a/core/src/functional-components/confirm-transaction-dialog.js b/core/src/functional-components/confirm-transaction-dialog.js index 7c51c581..20440e0c 100644 --- a/core/src/functional-components/confirm-transaction-dialog.js +++ b/core/src/functional-components/confirm-transaction-dialog.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../store.js' -import {get, translate} from '../../translate/index.js' +import {get, translate} from '../../translate' import {listenForRequest} from '../transactionRequest.js' diff --git a/core/src/functional-components/mykey-page.js b/core/src/functional-components/mykey-page.js index 7098035a..e8bffbee 100644 --- a/core/src/functional-components/mykey-page.js +++ b/core/src/functional-components/mykey-page.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../store.js' import {testApiKey} from '../apiKeyUtils.js' -import {get, translate} from '../../translate/index.js' +import {get, translate} from '../../translate' import '@material/mwc-dialog' import '@material/mwc-button' diff --git a/core/src/functional-components/settings-page.js b/core/src/functional-components/settings-page.js index 587bfc7e..2eec405d 100644 --- a/core/src/functional-components/settings-page.js +++ b/core/src/functional-components/settings-page.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {connect} from 'pwa-helpers' import {store} from '../store.js' import {doAddNode, doEditNode, doLoadNodeConfig, doRemoveNode, doSetNode} from '../redux/app/app-actions.js' -import {get, registerTranslateConfig, translate, use} from '../../translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../translate' import snackbar from './snackbar.js' import '../components/language-selector.js' import '../custom-elements/frag-file-input.js' @@ -70,7 +70,7 @@ class SettingsPage extends connect(store)(LitElement) { display: inline-block; width: 150px; font-weight: 600; - color: var(--accent-color); + color: var(--general-color-blue); border: 1px solid transparent; } @@ -87,7 +87,7 @@ class SettingsPage extends connect(store)(LitElement) { } .buttonBlue { - color: var(--accent-color); + color: var(--general-color-blue); } .floatleft { @@ -211,8 +211,7 @@ class SettingsPage extends connect(store)(LitElement) { // Set the selected value for mwc-select const protocolList = dialog.querySelector('#protocolList') - const desiredProtocol = currentValues.protocol - protocolList.value = desiredProtocol + protocolList.value = currentValues.protocol this.isBeingEdited = true this.isBeingEditedIndex = index this.shadowRoot.querySelector('#addNodeDialog').show() diff --git a/core/src/notifications/notification-actions/new-message.js b/core/src/notifications/notification-actions/new-message.js index 7dff4495..b9ab7ff0 100644 --- a/core/src/notifications/notification-actions/new-message.js +++ b/core/src/notifications/notification-actions/new-message.js @@ -171,9 +171,7 @@ export const newMessageNotificationQappLocal = (data) => { } notify.onclick = async(e) => { - const url = data?.url - const value = url - let newQuery = value; + let newQuery = data?.url; if (newQuery.endsWith('/')) { newQuery = newQuery.slice(0, -1); } @@ -217,9 +215,7 @@ export const newMessageNotificationQappLocal = (data) => { const notify = new Notification(data.title, data.options) notify.onclick = async(e) => { - const url = data?.url - const value = url - let newQuery = value; + let newQuery = data?.url; if (newQuery.endsWith('/')) { newQuery = newQuery.slice(0, -1); } diff --git a/core/src/plugins/routes.js b/core/src/plugins/routes.js index 01f33410..dd213a31 100644 --- a/core/src/plugins/routes.js +++ b/core/src/plugins/routes.js @@ -198,11 +198,8 @@ export const routes = { username: async (req) => { const state = store.getState() - const username = - state.user.storedWallets[state.app.wallet.addresses[0].address] - .name - - return username + return state.user.storedWallets[state.app.wallet.addresses[0].address] + .name }, chat: async (req) => { @@ -343,9 +340,7 @@ export const routes = { tradeBotRespondRequest: async (req) => { let response try { - const res = await tradeBotRespondRequest(req.data) - - response = res + response = await tradeBotRespondRequest(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -385,10 +380,9 @@ export const routes = { cancelAllOffers: async (req) => { let response try { - const res = await cancelAllOffers( + response = await cancelAllOffers( store.getState().app.selectedAddress ) - response = res } catch (e) { console.error(e) console.error(e.message) @@ -400,8 +394,7 @@ export const routes = { sendBtc: async (req) => { let response try { - const res = await sendBtc(req.data) - response = res + response = await sendBtc(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -413,8 +406,7 @@ export const routes = { sendLtc: async (req) => { let response try { - const res = await sendLtc(req.data) - response = res + response = await sendLtc(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -426,8 +418,7 @@ export const routes = { sendDoge: async (req) => { let response try { - const res = await sendDoge(req.data) - response = res + response = await sendDoge(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -439,8 +430,7 @@ export const routes = { sendDgb: async (req) => { let response try { - const res = await sendDgb(req.data) - response = res + response = await sendDgb(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -452,8 +442,7 @@ export const routes = { sendRvn: async (req) => { let response try { - const res = await sendRvn(req.data) - response = res + response = await sendRvn(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -465,8 +454,7 @@ export const routes = { sendArrr: async (req) => { let response try { - const res = await sendArrr(req.data) - response = res + response = await sendArrr(req.data) } catch (e) { console.error(e) console.error(e.message) diff --git a/core/src/redux/app/actions/app-core.js b/core/src/redux/app/actions/app-core.js index 08ede371..63f60ec8 100644 --- a/core/src/redux/app/actions/app-core.js +++ b/core/src/redux/app/actions/app-core.js @@ -20,9 +20,11 @@ import { UPDATE_BLOCK_INFO, UPDATE_NODE_INFO, UPDATE_NODE_STATUS, - SET_PROFILE_DATA, - ALLOW_QAPP_FRIENDS_LIST, - REMOVE_QAPP_FRIENDS_LIST + SET_PROFILE_DATA, + ALLOW_QAPP_FRIENDS_LIST, + REMOVE_QAPP_FRIENDS_LIST, + ALLOW_SHOW_SYNC_INDICATOR, + REMOVE_SHOW_SYNC_INDICATOR } from '../app-action-types.js' export const doUpdateBlockInfo = (blockObj) => { @@ -164,18 +166,21 @@ export const setNewTab = (payload) => { payload } } + export const setNewNotification = (payload) => { return { type: SET_NEW_NOTIFICATION, payload } } -export const setIsOpenDevDialog = (payload)=> { + +export const setIsOpenDevDialog = (payload) => { return { type: IS_OPEN_DEV_DIALOG, payload } } + export const addTabInfo = (payload) => { return { type: ADD_TAB_INFO, @@ -196,16 +201,31 @@ export const setSideEffectAction = (payload)=> { payload } } -export const setProfileData = (payload)=> { + +export const setProfileData = (payload) => { return { type: SET_PROFILE_DATA, payload } } -export const setCoinBalances = (payload)=> { +export const setCoinBalances = (payload) => { return { type: SET_COIN_BALANCES, payload } } + +export const allowShowSyncIndicator = (payload) => { + return { + type: ALLOW_SHOW_SYNC_INDICATOR, + payload + } +} + +export const removeShowSyncIndicator = (payload) => { + return { + type: REMOVE_SHOW_SYNC_INDICATOR, + payload + } +} diff --git a/core/src/redux/app/app-action-types.js b/core/src/redux/app/app-action-types.js index 599ca1e7..212d9148 100644 --- a/core/src/redux/app/app-action-types.js +++ b/core/src/redux/app/app-action-types.js @@ -34,6 +34,8 @@ export const IS_OPEN_DEV_DIALOG = 'IS_OPEN_DEV_DIALOG' export const SET_NEW_NOTIFICATION = 'SET_NEW_NOTIFICATION' export const SET_SIDE_EFFECT= 'SET_SIDE_EFFECT' export const SET_PROFILE_DATA = 'SET_PROFILE_DATA' -export const SET_COIN_BALANCES= 'SET_COIN_BALANCES' -export const ALLOW_QAPP_FRIENDS_LIST= 'ALLOW_QAPP_FRIENDS_LIST' -export const REMOVE_QAPP_FRIENDS_LIST= 'REMOVE_QAPP_FRIENDS_LIST' +export const SET_COIN_BALANCES = 'SET_COIN_BALANCES' +export const ALLOW_QAPP_FRIENDS_LIST = 'ALLOW_QAPP_FRIENDS_LIST' +export const REMOVE_QAPP_FRIENDS_LIST = 'REMOVE_QAPP_FRIENDS_LIST' +export const ALLOW_SHOW_SYNC_INDICATOR = 'ALLOW_SHOW_SYNC_INDICATOR' +export const REMOVE_SHOW_SYNC_INDICATOR = 'REMOVE_SHOW_SYNC_INDICATOR' diff --git a/core/src/redux/app/app-reducer.js b/core/src/redux/app/app-reducer.js index 268b1872..f4d96981 100644 --- a/core/src/redux/app/app-reducer.js +++ b/core/src/redux/app/app-reducer.js @@ -36,9 +36,11 @@ import { UPDATE_BLOCK_INFO, UPDATE_NODE_INFO, UPDATE_NODE_STATUS, - SET_PROFILE_DATA, - ALLOW_QAPP_FRIENDS_LIST, - REMOVE_QAPP_FRIENDS_LIST + SET_PROFILE_DATA, + ALLOW_QAPP_FRIENDS_LIST, + REMOVE_QAPP_FRIENDS_LIST, + ALLOW_SHOW_SYNC_INDICATOR, + REMOVE_SHOW_SYNC_INDICATOR } from './app-action-types.js' import {initWorkersReducer} from './reducers/init-workers.js' import {loginReducer} from './reducers/login-reducer.js' @@ -49,8 +51,6 @@ const chatLastSeen = localForage.createInstance({ name: "chat-last-seen", }); - - const INITIAL_STATE = { loggedIn: false, drawerOpen: false, @@ -88,6 +88,7 @@ const INITIAL_STATE = { qAPPAutoAuth: loadStateFromLocalStorage('qAPPAutoAuth') || false, qAPPAutoLists: loadStateFromLocalStorage('qAPPAutoLists') || false, qAPPFriendsList: loadStateFromLocalStorage('qAPPFriendsList') || false, + showSyncIndicator: loadStateFromLocalStorage('showSyncIndicator') || false, chatLastSeen: [], newTab: null, tabInfo: {}, @@ -228,6 +229,7 @@ export default (state = INITIAL_STATE, action) => { qAPPAutoAuth: action.payload } } + case ALLOW_QAPP_AUTO_LISTS: { saveStateToLocalStorage("qAPPAutoLists", true) return { @@ -266,6 +268,7 @@ export default (state = INITIAL_STATE, action) => { chatLastSeen: action.payload } } + case ADD_CHAT_LAST_SEEN: { const chatId = action.payload.key const timestamp = action.payload.timestamp @@ -299,12 +302,14 @@ export default (state = INITIAL_STATE, action) => { newTab: action.payload } } + case IS_OPEN_DEV_DIALOG: { return { ...state, isOpenDevDialog: action.payload } } + case ADD_TAB_INFO: { const newTabInfo = action.payload if (state.tabInfo[newTabInfo.id] && state.tabInfo[newTabInfo.id].name && newTabInfo.name === state.tabInfo[newTabInfo.id].name) break @@ -319,6 +324,7 @@ export default (state = INITIAL_STATE, action) => { } } } + case SET_TAB_NOTIFICATIONS: { const count = action.payload.count const name = action.payload.name @@ -346,18 +352,21 @@ export default (state = INITIAL_STATE, action) => { newNotification: action.payload } } + case SET_SIDE_EFFECT: { return { ...state, sideEffectAction: action.payload } } + case SET_PROFILE_DATA: { return { ...state, profileData: action.payload } } + case SET_COIN_BALANCES: { const copyBalances = {...state.coinBalances} copyBalances[action.payload.type] = { @@ -370,6 +379,22 @@ export default (state = INITIAL_STATE, action) => { } } + case ALLOW_SHOW_SYNC_INDICATOR: { + saveStateToLocalStorage("showSyncIndicator", true) + return { + ...state, + showSyncIndicator: action.payload + } + } + + case REMOVE_SHOW_SYNC_INDICATOR: { + saveStateToLocalStorage("showSyncIndicator", false) + return { + ...state, + showSyncIndicator: action.payload + } + } + default: return state } diff --git a/core/src/tradebot/trade-bot-routes.js b/core/src/tradebot/trade-bot-routes.js index 4fb72c4c..f20a5f36 100644 --- a/core/src/tradebot/trade-bot-routes.js +++ b/core/src/tradebot/trade-bot-routes.js @@ -114,8 +114,7 @@ export const routes = { store.getState().app.selectedAddress.keyPair ) - const res = await processTransaction(signedTxnBytes) - response = res + response = await processTransaction(signedTxnBytes) } catch (e) { console.error(e) console.error(e.message) @@ -127,8 +126,7 @@ export const routes = { tradeBotRespondRequest: async (req) => { let response try { - const res = await tradeBotRespondRequest(req.data) - response = res + response = await tradeBotRespondRequest(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -147,9 +145,7 @@ export const routes = { store.getState().app.selectedAddress.keyPair ) - const res = await processTransaction(signedTxnBytes) - - response = res + response = await processTransaction(signedTxnBytes) } catch (e) { console.error(e) console.error(e.message) @@ -161,10 +157,9 @@ export const routes = { cancelAllOffers: async (req) => { let response try { - const res = await cancelAllOffers( + response = await cancelAllOffers( store.getState().app.selectedAddress ) - response = res } catch (e) { console.error(e) console.error(e.message) @@ -176,8 +171,7 @@ export const routes = { sendBtc: async (req) => { let response try { - const res = await sendBtc(req.data) - response = res + response = await sendBtc(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -189,8 +183,7 @@ export const routes = { sendLtc: async (req) => { let response try { - const res = await sendLtc(req.data) - response = res + response = await sendLtc(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -202,8 +195,7 @@ export const routes = { sendDoge: async (req) => { let response try { - const res = await sendDoge(req.data) - response = res + response = await sendDoge(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -215,8 +207,7 @@ export const routes = { sendDgb: async (req) => { let response try { - const res = await sendDgb(req.data) - response = res + response = await sendDgb(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -228,8 +219,7 @@ export const routes = { sendRvn: async (req) => { let response try { - const res = await sendRvn(req.data) - response = res + response = await sendRvn(req.data) } catch (e) { console.error(e) console.error(e.message) @@ -241,8 +231,7 @@ export const routes = { sendArrr: async (req) => { let response try { - const res = await sendArrr(req.data) - response = res + response = await sendArrr(req.data) } catch (e) { console.error(e) console.error(e.message) diff --git a/core/ui-core.js b/core/ui-core.js index 4876d417..3cbfaf4b 100644 --- a/core/ui-core.js +++ b/core/ui-core.js @@ -17,20 +17,15 @@ const uiCoreController = (type) => { const { createServer } = require('./server/server.js') return createServer case BUILD: - const build = require('./tooling/build.js') - return build + return require('./tooling/build.js') case WATCH: - const watch = require('./tooling/watch.js') - return watch + return require('./tooling/watch.js') case WATCH_INLINE: - const watchInlines = require('./tooling/watch-inlines.js') - return watchInlines + return require('./tooling/watch-inlines.js') case DEFAULT_CONFIG: - const defaultConfig = require('./config/config.js') - return defaultConfig + return require('./config/config.js') case GENERATE_BUILD_CONFIG: - const generateBuildConfig = require('./tooling/generateBuildConfig.js') - return generateBuildConfig + return require('./tooling/generateBuildConfig.js') default: return } diff --git a/crypto/api/bitcoin/AltcoinHDWallet.js b/crypto/api/bitcoin/AltcoinHDWallet.js index c0131e19..b7391b8a 100644 --- a/crypto/api/bitcoin/AltcoinHDWallet.js +++ b/crypto/api/bitcoin/AltcoinHDWallet.js @@ -309,8 +309,7 @@ export default class AltcoinHDWallet { // PublicKey Hash const publicKeySHA256 = new Sha256().process(new Uint8Array(this.publicKey)).finish().result - const _publicKeyHash = new RIPEMD160().update(Buffer.from(publicKeySHA256)).digest('hex') - this.publicKeyHash = _publicKeyHash + this.publicKeyHash = new RIPEMD160().update(Buffer.from(publicKeySHA256)).digest('hex') } generateMainnetMasterPrivateKey() { @@ -505,8 +504,7 @@ export default class AltcoinHDWallet { // PublicKey Hash const childPublicKeySHA256 = new Sha256().process(new Uint8Array(this.childPublicKey)).finish().result - const _childPublicKeyHash = new RIPEMD160().update(Buffer.from(childPublicKeySHA256)).digest('hex') - this.childPublicKeyHash = _childPublicKeyHash + this.childPublicKeyHash = new RIPEMD160().update(Buffer.from(childPublicKeySHA256)).digest('hex') // Call deriveExtendedPublicChildKey // WIll be hardcoding the values... @@ -658,8 +656,7 @@ export default class AltcoinHDWallet { // PublicKey Hash const grandChildPublicKeySHA256 = new Sha256().process(new Uint8Array(this.grandChildPublicKey)).finish().result - const _grandChildPublicKeyHash = new RIPEMD160().update(Buffer.from(grandChildPublicKeySHA256)).digest('hex') - this.grandChildPublicKeyHash = _grandChildPublicKeyHash + this.grandChildPublicKeyHash = new RIPEMD160().update(Buffer.from(grandChildPublicKeySHA256)).digest('hex') // Call deriveExtendedPublicChildKey // WIll be hardcoding the values... diff --git a/crypto/api/createWallet.js b/crypto/api/createWallet.js index 341a2aeb..1b05c93c 100644 --- a/crypto/api/createWallet.js +++ b/crypto/api/createWallet.js @@ -24,6 +24,5 @@ export const createWallet = async (sourceType, source, statusUpdateFn) => { throw 'sourceType ' + sourceType + ' not recognized' } - const wallet = new PhraseWallet(seed, version) - return wallet + return new PhraseWallet(seed, version) } diff --git a/crypto/api/decryptStoredWallet.js b/crypto/api/decryptStoredWallet.js index a43537ad..ec8c8281 100644 --- a/crypto/api/decryptStoredWallet.js +++ b/crypto/api/decryptStoredWallet.js @@ -1,7 +1,7 @@ import Base58 from './deps/Base58.js' import {kdf} from './kdf.js' import {AES_CBC, HmacSha512} from 'asmcrypto.js' -import {get, registerTranslateConfig} from '../../core/translate/index.js' +import {get, registerTranslateConfig} from '../../core/translate' registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) @@ -27,6 +27,5 @@ export const decryptStoredWallet = async (password, wallet, statusFn = () => { } } const sfn5 = get("login.lp16") statusFn(sfn5) - const decryptedBytes = AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) - return decryptedBytes + return AES_CBC.decrypt(encryptedSeedBytes, encryptionKey, false, iv) } diff --git a/crypto/api/deps/Base64.js b/crypto/api/deps/Base64.js index 82bc5847..1697dd6a 100644 --- a/crypto/api/deps/Base64.js +++ b/crypto/api/deps/Base64.js @@ -14,11 +14,10 @@ Base64.decode = function (string) { } const decoder = new TextDecoder(); - const decodedString = decoder.decode(bytes); - return decodedString; + return decoder.decode(bytes); }; -export default Base64; \ No newline at end of file +export default Base64; diff --git a/crypto/api/deps/bcrypt.js b/crypto/api/deps/bcrypt.js index a50dbeeb..b067a2fa 100644 --- a/crypto/api/deps/bcrypt.js +++ b/crypto/api/deps/bcrypt.js @@ -593,7 +593,7 @@ } dst(c1); } - if (c2 !== null) dst(c2); + if (false) dst(c2); }; /** diff --git a/crypto/api/deps/nacl-fast.js b/crypto/api/deps/nacl-fast.js index 917c6e7c..b2fd186f 100644 --- a/crypto/api/deps/nacl-fast.js +++ b/crypto/api/deps/nacl-fast.js @@ -2378,7 +2378,7 @@ nacl.verify = function(x, y) { // Zero length arguments are considered not equal. if (x.length === 0 || y.length === 0) return false; if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; + return (vn(x, 0, y, 0, x.length) === 0); }; nacl.setPRNG = function(fn) { @@ -2419,4 +2419,4 @@ nacl.setPRNG = function(fn) { // == CHANGE TO ES6 EXPORT == // //})(typeof module !== 'undefined' && module.exports ? module.exports : (window.nacl = window.nacl || {})); -export default nacl \ No newline at end of file +export default nacl diff --git a/crypto/api/fetch-request.js b/crypto/api/fetch-request.js index a1ccee31..3aab5658 100644 --- a/crypto/api/fetch-request.js +++ b/crypto/api/fetch-request.js @@ -21,8 +21,7 @@ export async function request(url, options) { body, }).then(async (response) => { try { - const json = await response.clone().json() - return json + return await response.clone().json() } catch (e) { return await response.text() } diff --git a/crypto/api/kdf.js b/crypto/api/kdf.js index 423eac42..2c64d5d9 100644 --- a/crypto/api/kdf.js +++ b/crypto/api/kdf.js @@ -2,7 +2,7 @@ import {store} from '../api_deps.js' import {stateAwait} from './utils/stateAwait.js' import {Sha512} from 'asmcrypto.js' import utils from '../api/deps/utils.js' -import {get, registerTranslateConfig} from '../../core/translate/index.js' +import {get, registerTranslateConfig} from '../../core/translate' registerTranslateConfig({ loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) diff --git a/crypto/api/transactions/arbitrary/signArbitrary.js b/crypto/api/transactions/arbitrary/signArbitrary.js index 84ed0638..bad7ccae 100644 --- a/crypto/api/transactions/arbitrary/signArbitrary.js +++ b/crypto/api/transactions/arbitrary/signArbitrary.js @@ -30,9 +30,7 @@ const signArbitrary = (arbitraryBytesBase58, arbitraryBytesForSigningBase58, non const signature = nacl.sign.detached(arbitraryBytesForSigningBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature) - - return signedBytes + return utils.appendBuffer(arbitraryBytesBuffer, signature) } export default signArbitrary diff --git a/crypto/api/transactions/arbitrary/signArbitraryWithFee.js b/crypto/api/transactions/arbitrary/signArbitraryWithFee.js index 1a71cc2e..fdab1200 100644 --- a/crypto/api/transactions/arbitrary/signArbitraryWithFee.js +++ b/crypto/api/transactions/arbitrary/signArbitraryWithFee.js @@ -21,13 +21,11 @@ const signArbitraryWithFee = (arbitraryBytesBase58, arbitraryBytesForSigningBase const _arbitraryBytesForSigningBuffer = Object.keys(arbitraryBytesForSigning).map(function (key) { return arbitraryBytesForSigning[key]; }) const arbitraryBytesForSigningBuffer = new Uint8Array(_arbitraryBytesForSigningBuffer) - + const signature = nacl.sign.detached(arbitraryBytesForSigningBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature) - - return signedBytes + return utils.appendBuffer(arbitraryBytesBuffer, signature) } export default signArbitraryWithFee diff --git a/crypto/api/transactions/chat/signChat.js b/crypto/api/transactions/chat/signChat.js index 6760dac5..da2597d0 100644 --- a/crypto/api/transactions/chat/signChat.js +++ b/crypto/api/transactions/chat/signChat.js @@ -25,18 +25,14 @@ const signChat = (chatBytes, nonce, keyPair) => { const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) - - return signedBytes + return utils.appendBuffer(chatBytesBuffer, signature) } else { const chatBytesBuffer = new Uint8Array(chatBytes) chatBytesBuffer.set(_nonce, 112) const signature = nacl.sign.detached(chatBytesBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(chatBytesBuffer, signature) - - return signedBytes + return utils.appendBuffer(chatBytesBuffer, signature) } } diff --git a/crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js b/crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js index bce40ed8..47dcbfb6 100644 --- a/crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js +++ b/crypto/api/transactions/trade-portal/tradebot/signTradeBotTransaction.js @@ -17,14 +17,10 @@ const signTradeBotTransaction = (unsignedTxn, keyPair) => { const _privateKey = Object.keys(keyPair.privateKey).map(function (key) { return keyPair.privateKey[key]; }) const privateKey = new Uint8Array(_privateKey) const signature = nacl.sign.detached(txnBuffer, privateKey) - const signedBytes = utils.appendBuffer(txnBuffer, signature) - - return signedBytes + return utils.appendBuffer(txnBuffer, signature) } else { const signature = nacl.sign.detached(txnBuffer, keyPair.privateKey) - const signedBytes = utils.appendBuffer(txnBuffer, signature) - - return signedBytes + return utils.appendBuffer(txnBuffer, signature) } } diff --git a/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js b/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js index c3a91933..414a28e3 100644 --- a/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js +++ b/crypto/api/transactions/trade-portal/tradeoffer/cancelAllOffers.js @@ -9,8 +9,7 @@ export const cancelAllOffers = async (requestObject) => { const getMyOpenOffers = async () => { const res = await request('/crosschain/tradeoffers') - const myOpenTradeOrders = await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address) - return myOpenTradeOrders + return await res.filter(order => order.mode === "OFFERING" && order.qortalCreator === address) } const myOpenOffers = await getMyOpenOffers() diff --git a/crypto/api/wallet/base58PublicKeyToAddress.js b/crypto/api/wallet/base58PublicKeyToAddress.js index dbbae27d..6ed36383 100644 --- a/crypto/api/wallet/base58PublicKeyToAddress.js +++ b/crypto/api/wallet/base58PublicKeyToAddress.js @@ -3,6 +3,5 @@ import Base58 from '../deps/Base58.js' export const base58PublicKeyToAddress = (base58pubkey, qora = false) => { const decodePubKey = Base58.decode(base58pubkey) - const address = publicKeyToAddress(decodePubKey, qora) - return address + return publicKeyToAddress(decodePubKey, qora) } diff --git a/crypto/api/wallet/validateAddress.js b/crypto/api/wallet/validateAddress.js index e487a55e..59d016cc 100644 --- a/crypto/api/wallet/validateAddress.js +++ b/crypto/api/wallet/validateAddress.js @@ -3,8 +3,6 @@ import Base58 from '../deps/Base58.js' export const validateAddress = (address) => { const decodePubKey = Base58.decode(address) - if (!(decodePubKey instanceof Uint8Array && decodePubKey.length == 25)) { - return false - } - return true + return decodePubKey instanceof Uint8Array && decodePubKey.length == 25; + } diff --git a/electron.js b/electron.js index 01ad0b93..e9365ffa 100644 --- a/electron.js +++ b/electron.js @@ -2,16 +2,12 @@ const { app, BrowserWindow, ipcMain, - ipcRenderer, Menu, Notification, Tray, - nativeImage, dialog, - webContents, nativeTheme, - crashReporter, - webFrame + crashReporter } = require('electron') const { autoUpdater } = require('electron-updater') @@ -42,16 +38,16 @@ crashReporter.start({ }) if (myMemory > 16000000000) { - app.commandLine.appendSwitch('js-flags', '--max-executable-size=192', '--max-old-space-size=8192', '--max-semi-space-size=2') + app.commandLine.appendSwitch('js-flags', '--max-executable-size=192 --max-old-space-size=8192 --max-semi-space-size=2') log.info("Memory Size Is 16GB Using JS Memory Heap Size 8GB") } else if (myMemory > 12000000000) { - app.commandLine.appendSwitch('js-flags', '--max-executable-size=192', '--max-old-space-size=6144', '--max-semi-space-size=2') + app.commandLine.appendSwitch('js-flags', '--max-executable-size=192 --max-old-space-size=6144 --max-semi-space-size=2') log.info("Memory Size Is 12GB Using JS Memory Heap Size 6GB") } else if (myMemory > 7000000000) { - app.commandLine.appendSwitch('js-flags', '--max-executable-size=192', '--max-old-space-size=4096', '--max-semi-space-size=2') + app.commandLine.appendSwitch('js-flags', '--max-executable-size=192 --max-old-space-size=4096 --max-semi-space-size=2') log.info("Memory Size Is 8GB Using JS Memory Heap Size 4GB") } else { - app.commandLine.appendSwitch('js-flags', '--max-executable-size=192', '--max-old-space-size=2048', '--max-semi-space-size=2') + app.commandLine.appendSwitch('js-flags', '--max-executable-size=192 --max-old-space-size=2048 --max-semi-space-size=2') log.info("Memory Size Is 4GB Using JS Memory Heap Size 2GB") } @@ -168,15 +164,11 @@ const isRunning = (query, cb) => { } function doesFileExist(urlToJavaFile) { - var xhr = new XMLHttpRequest() + const xhr = new XMLHttpRequest(); xhr.open('HEAD', urlToJavaFile, true) xhr.send() - - if (xhr.status == "404") { - return false - } else { - return true - } + + return xhr.status != "404"; } async function checkWin() { @@ -201,7 +193,7 @@ async function checkWin() { store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) } @@ -219,7 +211,7 @@ async function checkWin() { if (returnValue.response === 0) { downloadWindows() } else { - return + } }) } @@ -227,11 +219,11 @@ async function checkWin() { async function checkOsPlatform() { if (process.platform === 'win32') { - startElectronWin() + await startElectronWin() } else if (process.platform === 'linux' || process.platform === 'darwin') { startElectronUnix() } else { - return + } } @@ -256,7 +248,7 @@ async function startElectronWin() { if (returnValue.response === 0) { downloadWindows() } else { - return + } }) } @@ -283,7 +275,7 @@ function startElectronUnix() { if (returnValue.response === 0) { downloadQortal() } else { - return + } }) } @@ -298,7 +290,7 @@ async function downloadWindows() { alwaysOnTop: true, show: false }) - winLoader.loadFile(path.join(__dirname + '/splash/download.html')) + await winLoader.loadFile(path.join(__dirname + '/splash/download.html')) winLoader.show() await electronDl.download(myWindow, winurl, { @@ -329,7 +321,7 @@ async function removeQortalExe() { log.info('renove error', err) } - checkWin() + await checkWin() } async function checkPort() { @@ -344,7 +336,7 @@ async function checkPort() { async function checkResponseStatus(res) { if (res.ok) { - return + } else if (process.platform === 'win32') { await checkWin() } else { @@ -353,7 +345,7 @@ async function checkResponseStatus(res) { } async function javaversion() { - var stderrChunks = [] + let stderrChunks = []; let checkJava = await spawn('java', ['-version'], { shell: true }) if (process.platform === 'linux') { if (process.arch === 'x64') { @@ -386,8 +378,8 @@ async function javaversion() { }) checkJava.stderr.on('end', () => { - datres = Buffer.concat(stderrChunks).toString().split('\n')[0] - var javaVersion = new RegExp('(java|openjdk) version').test(datres) ? datres.split(' ')[2].replace(/"/g, '') : false + let datres = Buffer.concat(stderrChunks).toString().split('\n')[0] + const javaVersion = new RegExp('(java|openjdk) version').test(datres) ? datres.split(' ')[2].replace(/"/g, '') : false; log.info("Java Version", javaVersion) if (javaVersion != false) { checkQortal() @@ -403,7 +395,7 @@ async function javaversion() { if (returnValue.response === 0) { installJava() } else { - return + } }) } @@ -419,7 +411,7 @@ async function installJava() { alwaysOnTop: true, show: false }) - splashLoader.loadFile(path.join(__dirname + '/splash/download.html')) + await splashLoader.loadFile(path.join(__dirname + '/splash/download.html')) if (process.platform === 'linux') { if (process.arch === 'x64') { @@ -435,7 +427,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaX64Linux() + await unzipJavaX64Linux() } else { try { splashLoader.show() @@ -448,7 +440,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaX64Linux() + await unzipJavaX64Linux() } } else if (process.arch === 'arm64') { if (doesFileExist(linjavaarm64url) == true) { @@ -463,7 +455,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaArm64Linux() + await unzipJavaArm64Linux() } else { try { splashLoader.show() @@ -476,7 +468,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaArm64Linux() + await unzipJavaArm64Linux() } } else if (process.arch === 'arm') { if (doesFileExist(linjavaarmurl) == true) { @@ -491,7 +483,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaArmLinux() + await unzipJavaArmLinux() } else { try { splashLoader.show() @@ -504,7 +496,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaArmLinux() + await unzipJavaArmLinux() } } } else if (process.platform === 'darwin') { @@ -521,7 +513,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaX64Mac() + await unzipJavaX64Mac() } else { try { splashLoader.show() @@ -534,7 +526,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaX64Mac() + await unzipJavaX64Mac() } } else { if (doesFileExist(macjavaaarch64url) == true) { @@ -549,7 +541,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaAarch64Mac() + await unzipJavaAarch64Mac() } else { try { splashLoader.show() @@ -562,7 +554,7 @@ async function installJava() { log.info('Download JAVA error', err) } splashLoader.destroy() - unzipJavaAarch64Mac() + await unzipJavaAarch64Mac() } } } @@ -575,7 +567,7 @@ async function unzipJavaX64Linux() { } catch (err) { log.info('Unzip Java error', err) } - chmodJava() + await chmodJava() } async function unzipJavaArm64Linux() { @@ -585,7 +577,7 @@ async function unzipJavaArm64Linux() { } catch (err) { log.info('Unzip Java error', err) } - chmodJava() + await chmodJava() } async function unzipJavaArmLinux() { @@ -595,7 +587,7 @@ async function unzipJavaArmLinux() { } catch (err) { log.info('Unzip Java error', err) } - chmodJava() + await chmodJava() } async function unzipJavaX64Mac() { @@ -605,7 +597,7 @@ async function unzipJavaX64Mac() { } catch (err) { log.info('Unzip Java error', err) } - chmodJava() + await chmodJava() } async function unzipJavaAarch64Mac() { @@ -615,7 +607,7 @@ async function unzipJavaAarch64Mac() { } catch (err) { log.info('Unzip Java error', err) } - chmodJava() + await chmodJava() } async function chmodJava() { @@ -627,7 +619,7 @@ async function chmodJava() { } catch (err) { log.info('chmod error', err) } - removeJavaZip() + await removeJavaZip() } async function removeJavaZip() { @@ -710,7 +702,7 @@ function checkQortal() { store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) } @@ -728,7 +720,7 @@ function checkQortal() { if (returnValue.response === 0) { downloadQortal() } else { - return + } }) } @@ -743,7 +735,7 @@ async function downloadQortal() { alwaysOnTop: true, show: false }) - qortalLoader.loadFile(path.join(__dirname + '/splash/download.html')) + await qortalLoader.loadFile(path.join(__dirname + '/splash/download.html')) try { qortalLoader.show() @@ -756,7 +748,7 @@ async function downloadQortal() { log.info('Download Qortal error', err) } qortalLoader.destroy() - unzipQortal() + await unzipQortal() } async function unzipQortal() { @@ -766,7 +758,7 @@ async function unzipQortal() { } catch (err) { log.info('Unzip Qortal error', err) } - chmodQortal() + await chmodQortal() } async function chmodQortal() { @@ -778,7 +770,7 @@ async function chmodQortal() { } catch (err) { log.info('chmod error', err) } - removeQortalZip() + await removeQortalZip() } async function removeQortalZip() { @@ -790,7 +782,7 @@ async function removeQortalZip() { } catch (err) { log.info('rm error', err) } - checkAndStart() + await checkAndStart() } async function checkAndStart() { @@ -811,7 +803,7 @@ async function checkAndStart() { store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) } @@ -990,7 +982,7 @@ const editMenu = Menu.buildFromTemplate([ store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) } @@ -1147,7 +1139,7 @@ const createTray = () => { store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) }, @@ -1208,8 +1200,10 @@ if (!isLock) { app.whenReady().then(async () => { createWindow() createTray() - await checkAll() - autoUpdater.checkForUpdatesAndNotify() + if (!store.get('askingCore')) { + await checkAll() + } + await autoUpdater.checkForUpdatesAndNotify() setInterval(() => { autoUpdater.checkForUpdatesAndNotify() }, 1000 * 60 * 720) @@ -1245,7 +1239,7 @@ if (!isLock) { store.set('askingCore', returnValue.checkboxChecked) } else { store.set('askingCore', returnValue.checkboxChecked) - return + } }) }) @@ -1331,7 +1325,7 @@ if (!isLock) { }) dl.show() } else { - return + } }) }) @@ -1353,7 +1347,7 @@ if (!isLock) { if (returnValue.response === 0) { autoUpdater.quitAndInstall() } else { - return + } }) }) @@ -1374,4 +1368,4 @@ if (!isLock) { process.on('uncaughtException', function (err) { log.info("*** WHOOPS TIME ***" + err) }) -} \ No newline at end of file +} diff --git a/install-dependencies.sh b/install-dependencies.sh deleted file mode 100644 index 23cdec1d..00000000 --- a/install-dependencies.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh - -# Qortal Blockchain Project - 2021 - -# Travis Script to install dependencies... - -set -ev - -# install every repository needed, install dependencies, clone git repos, do yarn linking and building, and build and run final UI - -install_dependencies() -{ - echo -e '---INSTALLING DEPENDENCIES!---' - echo -e '---INSTALLING ALL UI REPOSITORIES---' - - cd ../ - cd qortal-ui-core - yarn install --pure-lockfile - cd ../ - mkdir qortal-ui/qortal-ui-core - rsync -a qortal-ui-core/ qortal-ui/qortal-ui-core --exclude .git - cd qortal-ui/qortal-ui-core - yarn link - cd ../../ - - cd qortal-ui-plugins - yarn install --pure-lockfile - cd ../ - mkdir qortal-ui/qortal-ui-plugins - rsync -a qortal-ui-plugins/ qortal-ui/qortal-ui-plugins --exclude .git - cd qortal-ui/qortal-ui-plugins - yarn link - cd ../../ - - cd qortal-ui-crypto - yarn install --pure-lockfile - cd ../ - mkdir qortal-ui/qortal-ui-crypto - rsync -a qortal-ui-crypto/ qortal-ui/qortal-ui-crypto --exclude .git - cd qortal-ui/qortal-ui-crypto - yarn link - cd ../ - - echo -e '---INSTALL ALL DEPENDENCIES---' - yarn install --pure-lockfile - - echo -e '---LINKING UI FOLDERS ---' - yarn link qortal-ui-core - yarn link qortal-ui-crypto - yarn link qortal-ui-plugins - - echo -e '---BUILDING UI DEPENDENCIES!---' - yarn build - - echo -e '---UPDATE PACKAGE-JSON UI DEPENDENCIES!---' - yarn update-package-json - - echo -e '---REMOVE MODULES AND UNUSED DEPENDENCIES!---' - cd qortal-ui-core - yarn install --production --ignore-scripts --prefer-offline - cd ../ - cd qortal-ui-plugins - rm -R node_modules - cd ../ - cd qortal-ui-crypto - rm -R node_modules - cd ../ - rm -R qortal-ui-crypto -} - -install_dependencies diff --git a/package-lock.json b/package-lock.json index d44c17c4..60a0cdce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "qortal-ui", - "version": "4.5.0", + "version": "4.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qortal-ui", - "version": "4.5.0", + "version": "4.5.1", "license": "GPL-3.0", "dependencies": { - "@hapi/hapi": "21.3.3", + "@hapi/hapi": "21.3.7", "@hapi/inert": "7.1.0", "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", @@ -28,7 +28,7 @@ "crypto-js": "4.2.0", "driver.js": "1.3.1", "electron-dl": "3.5.2", - "electron-log": "5.1.1", + "electron-log": "5.1.2", "electron-store": "8.2.0", "electron-updater": "6.1.8", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -40,20 +40,20 @@ "prosemirror-commands": "1.5.2", "prosemirror-dropcursor": "1.8.1", "prosemirror-gapcursor": "1.3.2", - "prosemirror-history": "1.3.2", + "prosemirror-history": "1.4.0", "prosemirror-keymap": "1.2.2", "prosemirror-model": "1.19.4", "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.33.1", - "sass": "1.71.1", + "prosemirror-view": "1.33.3", + "sass": "1.72.0", "short-unique-id": "5.0.3", "xhr2": "0.2.1" }, "devDependencies": { - "@babel/core": "7.24.0", - "@electron/packager": "18.1.3", + "@babel/core": "7.24.3", + "@electron/packager": "18.3.2", "@material/mwc-button": "0.27.0", "@material/mwc-checkbox": "0.27.0", "@material/mwc-dialog": "0.27.0", @@ -96,15 +96,15 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.5", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.8", - "@vaadin/button": "24.2.8", - "@vaadin/grid": "24.2.8", - "@vaadin/icons": "24.2.8", - "@vaadin/password-field": "24.2.8", - "@vaadin/tooltip": "24.2.8", - "@zip.js/zip.js": "2.7.40", - "axios": "1.6.7", - "electron": "29.1.1", + "@vaadin/avatar": "24.2.9", + "@vaadin/button": "24.2.9", + "@vaadin/grid": "24.2.9", + "@vaadin/icons": "24.2.9", + "@vaadin/password-field": "24.2.9", + "@vaadin/tooltip": "24.2.9", + "@zip.js/zip.js": "2.7.41", + "axios": "1.6.8", + "electron": "27.3.8", "electron-builder": "24.13.3", "epml": "0.3.3", "eslint": "8.57.0", @@ -119,14 +119,14 @@ "pwa-helpers": "0.9.1", "redux": "5.0.1", "redux-thunk": "3.1.0", - "rollup": "4.12.1", + "rollup": "4.13.2", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", "shelljs": "0.8.5" }, "engines": { - "node": ">=20.9.0" + "node": ">=18.17.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -152,42 +152,42 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -204,14 +204,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -269,12 +269,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -324,9 +324,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -351,13 +351,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", + "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0" }, "engines": { @@ -365,23 +365,24 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -405,18 +406,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", + "@babel/parser": "^7.24.1", "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" @@ -556,9 +557,9 @@ } }, "node_modules/@electron/osx-sign": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", - "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.1.0.tgz", + "integrity": "sha512-9xxNAyTu2YEAfn2TOQXC5fcTZ9hxVT/zAgWOONpOvxivv5rU97RldGbJrxz+OBKXGAiQRJUYOY07mJI++S/iYw==", "dev": true, "dependencies": { "compare-version": "^0.1.2", @@ -591,9 +592,9 @@ } }, "node_modules/@electron/packager": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.1.3.tgz", - "integrity": "sha512-21T5MxUf7DwV07IIes3jO/571mXCjOGVPdmYJFPCVDTimFiHQSW0Oy+OIGQaKBiNIXfnP29KylsCQbmds6O6Iw==", + "version": "18.3.2", + "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.2.tgz", + "integrity": "sha512-orjylavppgIh24qkNpWm2B/LQUpCS/YLOoKoU+eMK/hJgIhShLDsusPIQzgUGVwNCichu8/zPAGfdQZXHG0gtw==", "dev": true, "dependencies": { "@electron/asar": "^3.2.1", @@ -602,7 +603,6 @@ "@electron/osx-sign": "^1.0.5", "@electron/universal": "^2.0.1", "@electron/windows-sign": "^1.0.0", - "cross-spawn-windows-exe": "^1.2.0", "debug": "^4.0.1", "extract-zip": "^2.0.0", "filenamify": "^4.1.0", @@ -612,7 +612,7 @@ "junk": "^3.1.0", "parse-author": "^2.0.0", "plist": "^3.0.0", - "rcedit": "^4.0.0", + "resedit": "^2.0.0", "resolve": "^1.1.6", "semver": "^7.1.3", "yargs-parser": "^21.1.1" @@ -688,9 +688,9 @@ } }, "node_modules/@electron/universal/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -950,9 +950,9 @@ "integrity": "sha512-w+lKW+yRrLhJu620jT3y+5g2mHqnKfepreykvdOcl9/6up8GrQQn+l3FRTsjHTKbkbfQFkuksHpdv2EcpKcJ4Q==" }, "node_modules/@hapi/hapi": { - "version": "21.3.3", - "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-21.3.3.tgz", - "integrity": "sha512-6pgwWVl/aSKSNVn86n+mWa06jRqCAKi2adZp/Hti19A0u5x3/6eiKz8UTBPMzfrdGf9WcrYbFBYzWr/qd2s28g==", + "version": "21.3.7", + "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-21.3.7.tgz", + "integrity": "sha512-33J0nreMfqkhY7wwRAZRy+9J+7J4QOH1JtICMjIUmxfaOYSJL/d8JJCtg57SX60944bhlCeu7isb7qyr2jT2oA==", "dependencies": { "@hapi/accept": "^6.0.1", "@hapi/ammo": "^6.0.1", @@ -1185,9 +1185,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -1319,13 +1319,13 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -3039,9 +3039,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz", - "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", + "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", "cpu": [ "arm" ], @@ -3052,9 +3052,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz", - "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", + "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", "cpu": [ "arm64" ], @@ -3065,9 +3065,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz", - "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", + "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", "cpu": [ "arm64" ], @@ -3078,9 +3078,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz", - "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", + "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", "cpu": [ "x64" ], @@ -3091,9 +3091,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz", - "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", + "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", "cpu": [ "arm" ], @@ -3104,9 +3104,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz", - "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", + "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", "cpu": [ "arm64" ], @@ -3117,9 +3117,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz", - "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", + "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", "cpu": [ "arm64" ], @@ -3129,10 +3129,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", + "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "cpu": [ + "ppc64le" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz", - "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", + "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", "cpu": [ "riscv64" ], @@ -3142,10 +3155,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", + "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz", - "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", + "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", "cpu": [ "x64" ], @@ -3156,9 +3182,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz", - "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", + "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", "cpu": [ "x64" ], @@ -3169,9 +3195,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz", - "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", + "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", "cpu": [ "arm64" ], @@ -3182,9 +3208,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz", - "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", + "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", "cpu": [ "ia32" ], @@ -3195,9 +3221,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz", - "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", + "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", "cpu": [ "x64" ], @@ -3658,9 +3684,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", - "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "version": "18.19.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz", + "integrity": "sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" @@ -3720,72 +3746,72 @@ "dev": true }, "node_modules/@vaadin/a11y-base": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.8.tgz", - "integrity": "sha512-fImkvOP1ctdOJViFX+2af1JgrO5LS5SZTs6+fb6E8PeXC3C0xnoCuP/Q62ANILLTk9OCpxM1x9H2zfPF7Tl2Tw==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/a11y-base/-/a11y-base-24.2.9.tgz", + "integrity": "sha512-8YR6HS+U49UOOinVm60i1SGfWobZWQHhQv+5irvQqCUVCLwYYDAjsgRtXXW83M3MQXJMvBaisGHzCKQdzuKCpw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.8", + "@vaadin/component-base": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/avatar": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.8.tgz", - "integrity": "sha512-GILsjiXsYGxjkRqt1RfT06uOe3OHbb0FtCz2qA44bIASLJc8xFcOcqeb7ibbgQYnI0cxxlrbrhJ+Fjb9kolQyQ==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/avatar/-/avatar-24.2.9.tgz", + "integrity": "sha512-J1JHcEmrUyX2a/VM9Xa702GXC18SoCfzj1dTxxOtWI3XE+A2sEvBp4/3PDnRasjIPTzG4DBtapeXVkjzdaPL1g==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/item": "~24.2.8", - "@vaadin/list-box": "~24.2.8", - "@vaadin/overlay": "~24.2.8", - "@vaadin/tooltip": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/item": "~24.2.9", + "@vaadin/list-box": "~24.2.9", + "@vaadin/overlay": "~24.2.9", + "@vaadin/tooltip": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/button": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.8.tgz", - "integrity": "sha512-LK/hh+AU4lj1BKuTWGhiBgWru0p75fP0iY5od3RAGoe/ds08lEt0kbq45ZWGtBdVdi0ia10I1uRXUQ/pWJoflQ==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/button/-/button-24.2.9.tgz", + "integrity": "sha512-qCWTBXVNklcKO8fY0r9zK4AtMLdyUvkFacfoP6qPVw2hEmM2SZkzZQ7zlMO2S842bqCQuKB9aMgUDbX0rqgcPw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8", + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/checkbox": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.8.tgz", - "integrity": "sha512-APMQHOCqS5eYKCurVCPGEBCPYUX/H56Y+apGInFa6qI2ms6nuetVhwplzRsTi8GDjGphP4Ayd6ibQOZtuM43ig==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/checkbox/-/checkbox-24.2.9.tgz", + "integrity": "sha512-IXwqepF/mVb/x11VPE7dmUe1+yZXYwg+yATkMZl9BUnyeZNmXhkSw5vyj9ueDUq5v9FYJYJF8IhWoP0R2apMvw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/field-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8", + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/field-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/component-base": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.8.tgz", - "integrity": "sha512-j/4wW+GtEtZYSEO+CDhmHqNgsSD1QWOYKaVzvE7pXJ8nflY4eEelaCO45sEo5L2H2YKgZpZePiaPbcG4gcZi5w==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/component-base/-/component-base-24.2.9.tgz", + "integrity": "sha512-REyjFlNa84vNfus/xxq+KtRR6Ijsjx3BknwPXDB9ks4YpSO125TkNluLa/otVtrJkK1YS4Vty1VLwTspcIzYxg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -3796,173 +3822,173 @@ } }, "node_modules/@vaadin/field-base": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.8.tgz", - "integrity": "sha512-/t5VWgfVRkanIFbGrLP1ZJh1z67E/Pdyuiv81byGAdBoqxOQeI5qC9tXyP4svcHd3BJuaQoxS2qChyOTxTv/ww==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/field-base/-/field-base-24.2.9.tgz", + "integrity": "sha512-WPcJaQakjVtTYnGS0jv7FUz60PCqF3HNpp+QzmAoJIe1ezBEX173niU8B0L0pe64IcBs2BD8H5gkO+iIGHzMPA==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/grid": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.8.tgz", - "integrity": "sha512-gRCd6nsvHz8crRjXnxhh9xclH5/CB+kUbfCK+6+vO2j5FQaH9nDugwJLSuixsX98KtlYCo6nuJc7QG19guCKZA==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/grid/-/grid-24.2.9.tgz", + "integrity": "sha512-/OiUgO/GTLDsXxyhlt13mGTBbC9DwJQt1Y6FrJz+M+te5EjHG2X3ZGot2KPpLeesDUuvrw+WGx/siie0Jm0NVg==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/checkbox": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/lit-renderer": "~24.2.8", - "@vaadin/text-field": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/checkbox": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/lit-renderer": "~24.2.9", + "@vaadin/text-field": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/icon": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.8.tgz", - "integrity": "sha512-Lh7V+ZgLOIFBKDo3R9k7C61rP4lWe+pVqfglEbR1pghPyEvsX5WswnOEy7uvCJXDc1XkQ5AU1QTLSpbh2KkE3w==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/icon/-/icon-24.2.9.tgz", + "integrity": "sha512-wuGOB9wAaZrHx15k6pNKszUjiDb+6OJFd6YPLTT5OigkjRU3gfL/RowmV4jdIr4z7bQmsF5/811FMDG+fz1qJA==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8", + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/icons": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.8.tgz", - "integrity": "sha512-aByOEPyJis5HX8Y8dYCAfsGeCBis9RvuAgTu7J3MQY53xJ6S2fLl9aG9+CznEBCn5He8svZcDNR80y3K9T0uaA==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/icons/-/icons-24.2.9.tgz", + "integrity": "sha512-6N0eR5j6uEaPtmS4WajRhFvAqVx8P201mOY1xg7U/GXDI2sH+aGySnW2ivZXLXDbZNbqzZP5G0kQ11oEdbjfxw==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/icon": "~24.2.8" + "@vaadin/icon": "~24.2.9" } }, "node_modules/@vaadin/input-container": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.8.tgz", - "integrity": "sha512-CsmIuztWoUEHUj4GkE3GSu0q3qWYxgOTZ+PtwMi2Ecw4N3Udw9v6hNywANEmxnqXtXlvrKdWKW84KrSEFOgpgQ==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/input-container/-/input-container-24.2.9.tgz", + "integrity": "sha512-eFr6M2ns5YyuErYNX2IHpnUa2SeG8BfM7/79RGcbEQlhZa0VKFJ2UATFN2bRZXZDSCG5WTVnkjxFWxeSo3m0Uw==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/item": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.8.tgz", - "integrity": "sha512-gu2lemQGAuBN/E+NpnuGe2cfKcOnU4Fs3q99Ki5Mq47dF2y7ABu6MHakXrhRixOC5lCH+EoBxoAVyLlHNKem/A==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/item/-/item-24.2.9.tgz", + "integrity": "sha512-xH5okZ4QDdGAeIe9/JUiUvgYF30DXnt2M0ZxhDfgHzmybyAXthcVgauqa42Rgs+jpVF0jI0gQN4eq5vpaUyz2Q==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/list-box": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.8.tgz", - "integrity": "sha512-GVNuXCb92VfuyEDmg0Ee73OFswVCJuizS4MJqWEXhnaPLWcVKmlmftG4fIm4UFWNqVbdk7Wukz3dIN226IH11g==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/list-box/-/list-box-24.2.9.tgz", + "integrity": "sha512-GlxdaNt51iQE445SfoihW/izUVdsFaYS6d0nka81jkCn86BOqjEqfXKlWDliDq72WksQHNAHrU5ipj8CIx3udA==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/item": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/item": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/lit-renderer": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.8.tgz", - "integrity": "sha512-Fvcsl2yYiVrwLwZHCucuP2Kiz1ispOVeydlY97P4Vjs4irtJz5kF9Vl9esdK15spnfDXOdfiggEmjlSqDrRhhg==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/lit-renderer/-/lit-renderer-24.2.9.tgz", + "integrity": "sha512-A5VWnRRwrMHE/e20pIYwYNBeO7/bZUacCCdNLMsAML3Mgz8WXvj9iGK3gCoQc7fMwfMdBKRq8mkOSDUXyEEIWA==", "dev": true, "dependencies": { "lit": "^2.0.0" } }, "node_modules/@vaadin/overlay": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.8.tgz", - "integrity": "sha512-o8+oJuxwBDRN5xo2BYOUi8kcB6ZrAxiR8mkxxXa//ucCPn5IzePvPqDeTpNe0+By5zjfB663aGKPXe0ArTJfFQ==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/overlay/-/overlay-24.2.9.tgz", + "integrity": "sha512-0gF9C2JGrP5neZHvoE6/uc4qF5izbPldEqNIL5t91D+AVKRNwIxUNqlarbA+aV1G4G+EBZaYrpLxj/APd1lcxw==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/password-field": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.8.tgz", - "integrity": "sha512-nxQ9Gd/eRwloVYvvHO9Yc4VeyJ8SJVh0RiGjZetNugyKdYhVy0S4eQYr6GWXhHLJoMUD4xMuH+0uEbJMror4EQ==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/password-field/-/password-field-24.2.9.tgz", + "integrity": "sha512-drXbEbfGBEHzu8qUXVeioYUjvnnSP9wY22Hy5Pz6OS8gi5S66BADCNe4mZxWBTIs4tsiOQqslM90jpsxVcC8ug==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/button": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/text-field": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/button": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/text-field": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/text-field": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.8.tgz", - "integrity": "sha512-7srn01dF9YlCGxcDzcQ4Il4ey2MIsP2icsXdVUn+oJ+scPmU/5hnBMa834nSGXWJmt5DCM2zK4UYkmKsReNBcg==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/text-field/-/text-field-24.2.9.tgz", + "integrity": "sha512-CE/Gk1h+Y+u2bVceF8bhjfCVapTcWWe9kkSbvsdOXdKqFi7+tRq14obWeHbPQ2l2lhwTJygw3GEB6WXZ96NEvA==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/field-base": "~24.2.8", - "@vaadin/input-container": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8", + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/field-base": "~24.2.9", + "@vaadin/input-container": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9", "lit": "^2.0.0" } }, "node_modules/@vaadin/tooltip": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.8.tgz", - "integrity": "sha512-3f0qu4IPyDaaPnaDjK6E9s61sTK2ddzLUc6Fbo4orha+b9KxmCvFy66GzvXgQFGfy3Zy9r+NSUU70cNAAl7T4g==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/tooltip/-/tooltip-24.2.9.tgz", + "integrity": "sha512-yyQ50hR1In5SXkh+uNRwmhFiSQpZ/3sVZZAh3z8VJsLS5PDtrNEAJ2S3IwwDKe5GpawN/LrjzmJTRZBANzTbEQ==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/a11y-base": "~24.2.8", - "@vaadin/component-base": "~24.2.8", - "@vaadin/overlay": "~24.2.8", - "@vaadin/vaadin-lumo-styles": "~24.2.8", - "@vaadin/vaadin-material-styles": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/a11y-base": "~24.2.9", + "@vaadin/component-base": "~24.2.9", + "@vaadin/overlay": "~24.2.9", + "@vaadin/vaadin-lumo-styles": "~24.2.9", + "@vaadin/vaadin-material-styles": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/vaadin-development-mode-detector": { @@ -3972,32 +3998,32 @@ "dev": true }, "node_modules/@vaadin/vaadin-lumo-styles": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.8.tgz", - "integrity": "sha512-Yo2eEGbdUAUO4ZPc5KRjzeh/+/ZdrSuzoedhNKrwYZ6zftDAODZCacoomUHUIKEOpIKwRxtiEHs3l7Im9YKjAg==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-lumo-styles/-/vaadin-lumo-styles-24.2.9.tgz", + "integrity": "sha512-buBnferJEBWolUT1hLPDwcdUI/iMvxzHGxvDy6gpZi6RLEGnsBZJzvB8F6B8LTifmZTuDVfF1BWUOW8HStPH1Q==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.8", - "@vaadin/icon": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/component-base": "~24.2.9", + "@vaadin/icon": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/vaadin-material-styles": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.8.tgz", - "integrity": "sha512-rqHzycAjvU8PwVfYQ1FYP282EIw8tteRA6MljXari3Sd1xrEoJkjk6/nAAvXKbRjJtqSFPuYIKS2esQ35Nju3A==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-material-styles/-/vaadin-material-styles-24.2.9.tgz", + "integrity": "sha512-l8lY05AND39jdnn6d6A7MJJjDg57UAr9nrYLHPymQUm+Q8KO4sg95R14cLR9No3d1o4sCgJCCIrM3JH4xRrW/g==", "dev": true, "dependencies": { "@polymer/polymer": "^3.0.0", - "@vaadin/component-base": "~24.2.8", - "@vaadin/vaadin-themable-mixin": "~24.2.8" + "@vaadin/component-base": "~24.2.9", + "@vaadin/vaadin-themable-mixin": "~24.2.9" } }, "node_modules/@vaadin/vaadin-themable-mixin": { - "version": "24.2.8", - "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.8.tgz", - "integrity": "sha512-3y3CYMglwb/2UoQU7fovI2L53IKG50A2n7Jgc1lsVj6vAOUWi8ra8SifhFRNFjm0yxoD6xbaMo9V+VJwdEiCfw==", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/@vaadin/vaadin-themable-mixin/-/vaadin-themable-mixin-24.2.9.tgz", + "integrity": "sha512-aL89R7Pkg+KKEVL/taEd+1a2tcxDgXNw5r7Govp9MRKwtHZCV8mnGt8wRp2Vwd5CYu7mX5pBFHkPMJwGTuNNyQ==", "dev": true, "dependencies": { "@open-wc/dedupe-mixin": "^1.3.0", @@ -4033,9 +4059,9 @@ } }, "node_modules/@zip.js/zip.js": { - "version": "2.7.40", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.40.tgz", - "integrity": "sha512-kSYwO0Wth6G66QM4CejZqG0nRhBsVVTaR18M/Ta8EcqcvaV0dYrnDDyKAstfy0V5+ejK4b9w5xc1W0ECATJTvA==", + "version": "2.7.41", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.41.tgz", + "integrity": "sha512-EMxPWXlEqqvsK9jxPmNvEShrIXP2LYTdQnEfsBH6OQCnlZRVo/dJIgtzbKvtK9A8PBTDQdxwxulj+QKplmW2Xg==", "dev": true, "engines": { "bun": ">=0.7.0", @@ -4253,6 +4279,39 @@ "node": ">=10" } }, + "node_modules/app-builder-lib/node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/app-builder-lib/node_modules/@electron/universal": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", @@ -4574,12 +4633,12 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -4615,11 +4674,14 @@ "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -4970,9 +5032,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001596", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", - "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", + "version": "1.0.30001605", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", + "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", "dev": true, "funding": [ { @@ -5285,16 +5347,16 @@ } }, "node_modules/config-file-ts/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -5307,9 +5369,9 @@ } }, "node_modules/config-file-ts/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -5321,6 +5383,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -5419,52 +5490,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn-windows-exe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz", - "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-cross-spawn-windows-exe?utm_medium=referral&utm_source=npm_fund" - } - ], - "dependencies": { - "@malept/cross-spawn-promise": "^1.1.0", - "is-wsl": "^2.2.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cross-spawn-windows-exe/node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -5749,14 +5774,14 @@ } }, "node_modules/electron": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-29.1.1.tgz", - "integrity": "sha512-cXN15NgCi7MkzGo5/23ZQbii+0UfhmUiDjACunmzcUofYCjF42XhFbL7JZnwgI0qtBCCeJU8qZNZt9lU91gUFw==", + "version": "27.3.8", + "resolved": "https://registry.npmjs.org/electron/-/electron-27.3.8.tgz", + "integrity": "sha512-CLQ4rhFiXBzfYsEuxDHqQlnw4fI5tJVMA+xqW322LkfcP6iiFjAMh/gYe3a1JqGPNMO2bff2Ev7toAxP1opRnQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", + "@types/node": "^18.11.18", "extract-zip": "^2.0.1" }, "bin": { @@ -5921,9 +5946,9 @@ } }, "node_modules/electron-log": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.1.1.tgz", - "integrity": "sha512-If7HU4Slbh2xfjOXOLxifkbgu6HmWDNJyXPLW+XNTOHMfFKisg0trA3d/7syyu25S+lHosfsd0VMfDSjGn1+Pw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.1.2.tgz", + "integrity": "sha512-Cpg4hAZ27yM9wzE77c4TvgzxzavZ+dVltCczParXN+Vb3jocojCSAuSMCVOI9fhFuuOR+iuu3tZLX1cu0y0kgQ==", "engines": { "node": ">= 14" } @@ -6040,9 +6065,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.699", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", - "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==", + "version": "1.4.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.723.tgz", + "integrity": "sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==", "dev": true }, "node_modules/electron-updater": { @@ -6845,9 +6870,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -7309,9 +7334,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -7611,21 +7636,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-electron": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", @@ -7734,18 +7744,6 @@ "is-potential-custom-element-name": "^1.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -8251,16 +8249,16 @@ } }, "node_modules/markdown-it": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", - "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", "linkify-it": "^5.0.0", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", - "uc.micro": "^2.0.0" + "uc.micro": "^2.1.0" }, "bin": { "markdown-it": "bin/markdown-it.mjs" @@ -8765,12 +8763,12 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -8801,6 +8799,16 @@ "node": ">=4" } }, + "node_modules/pe-library": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-1.0.0.tgz", + "integrity": "sha512-yZ+4d3YHKUjO0BX03oXFfHRKLdYKDO2HmCt1RcApPxme/P5ASPbbKnuQkzFrmT482wi2kfO+sPgqasrz5QeU1w==", + "dev": true, + "engines": { + "node": ">=14", + "npm": ">=7" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -9029,9 +9037,9 @@ } }, "node_modules/prosemirror-history": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.2.tgz", - "integrity": "sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.0.tgz", + "integrity": "sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==", "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", @@ -9159,9 +9167,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.33.1", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.1.tgz", - "integrity": "sha512-62qkYgSJIkwIMMCpuGuPzc52DiK1Iod6TWoIMxP4ja6BTD4yO8kCUL64PZ/WhH/dJ9fW0CDO39FhH1EMyhUFEg==", + "version": "1.33.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.3.tgz", + "integrity": "sha512-P4Ao/bc4OrU/2yLIf8dL4lJaEtjLR3QjIvQHgJYp2jUS7kYM4bSR6okbBjkqzOs/FwUon6UGjTLdKMnPL1MZqw==", "dependencies": { "prosemirror-model": "^1.16.0", "prosemirror-state": "^1.0.0", @@ -9257,18 +9265,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/rcedit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-4.0.1.tgz", - "integrity": "sha512-bZdaQi34krFWhrDn+O53ccBDw0MkAT2Vhu75SqhtvhQu4OPyFM4RoVheyYiVQYdjhUi6EJMVWQ0tR6bCIYVkUg==", - "dev": true, - "dependencies": { - "cross-spawn-windows-exe": "^1.1.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, "node_modules/read-config-file": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", @@ -9492,6 +9488,19 @@ "node": ">=0.10.5" } }, + "node_modules/resedit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-2.0.0.tgz", + "integrity": "sha512-vrrJCabKxAW4MT1QivtAAb0poGp8KT2qhnSzfN9tFIxb2rQu1hRHNn1VgGSZR7nmxGaW5Yz0YeW1bjgvRfNoKA==", + "dev": true, + "dependencies": { + "pe-library": "^1.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -9589,9 +9598,9 @@ } }, "node_modules/rollup": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", - "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", + "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -9604,19 +9613,21 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.12.1", - "@rollup/rollup-android-arm64": "4.12.1", - "@rollup/rollup-darwin-arm64": "4.12.1", - "@rollup/rollup-darwin-x64": "4.12.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.12.1", - "@rollup/rollup-linux-arm64-gnu": "4.12.1", - "@rollup/rollup-linux-arm64-musl": "4.12.1", - "@rollup/rollup-linux-riscv64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-musl": "4.12.1", - "@rollup/rollup-win32-arm64-msvc": "4.12.1", - "@rollup/rollup-win32-ia32-msvc": "4.12.1", - "@rollup/rollup-win32-x64-msvc": "4.12.1", + "@rollup/rollup-android-arm-eabi": "4.13.2", + "@rollup/rollup-android-arm64": "4.13.2", + "@rollup/rollup-darwin-arm64": "4.13.2", + "@rollup/rollup-darwin-x64": "4.13.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", + "@rollup/rollup-linux-arm64-gnu": "4.13.2", + "@rollup/rollup-linux-arm64-musl": "4.13.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", + "@rollup/rollup-linux-riscv64-gnu": "4.13.2", + "@rollup/rollup-linux-s390x-gnu": "4.13.2", + "@rollup/rollup-linux-x64-gnu": "4.13.2", + "@rollup/rollup-linux-x64-musl": "4.13.2", + "@rollup/rollup-win32-arm64-msvc": "4.13.2", + "@rollup/rollup-win32-ia32-msvc": "4.13.2", + "@rollup/rollup-win32-x64-msvc": "4.13.2", "fsevents": "~2.3.2" } }, @@ -9758,9 +9769,9 @@ } }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", + "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -10002,9 +10013,9 @@ } }, "node_modules/smob": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", - "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", "dev": true }, "node_modules/sort-keys": { @@ -10039,9 +10050,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -10251,9 +10262,9 @@ "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -10315,9 +10326,9 @@ } }, "node_modules/terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "version": "5.30.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.2.tgz", + "integrity": "sha512-vTDjRKYKip4dOFL5VizdoxHTYDfEXPdz5t+FbxCC5Rp2s+KbEO8w5wqMDPgj7CtFKZuzq7PXv28fZoXfqqBVuw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -10498,9 +10509,9 @@ } }, "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/package.json b/package.json index ac92569c..ae73f621 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "qortal-ui", - "version": "4.5.0", + "version": "4.5.1", "description": "Qortal Project - decentralize the world - Data storage, communications, web hosting, decentralized trading, complete infrastructure for the future blockchain-based Internet", "keywords": [ "QORT", @@ -31,7 +31,7 @@ "lint": "eslint './**/*.{js,mjs}'" }, "dependencies": { - "@hapi/hapi": "21.3.3", + "@hapi/hapi": "21.3.7", "@hapi/inert": "7.1.0", "@lit-labs/motion": "1.0.6", "@popperjs/core": "2.11.8", @@ -50,7 +50,7 @@ "crypto-js": "4.2.0", "driver.js": "1.3.1", "electron-dl": "3.5.2", - "electron-log": "5.1.1", + "electron-log": "5.1.2", "electron-store": "8.2.0", "electron-updater": "6.1.8", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", @@ -62,20 +62,20 @@ "prosemirror-commands": "1.5.2", "prosemirror-dropcursor": "1.8.1", "prosemirror-gapcursor": "1.3.2", - "prosemirror-history": "1.3.2", + "prosemirror-history": "1.4.0", "prosemirror-keymap": "1.2.2", "prosemirror-model": "1.19.4", "prosemirror-schema-list": "1.3.0", "prosemirror-state": "1.4.3", "prosemirror-transform": "1.8.0", - "prosemirror-view": "1.33.1", - "sass": "1.71.1", + "prosemirror-view": "1.33.3", + "sass": "1.72.0", "short-unique-id": "5.0.3", "xhr2": "0.2.1" }, "devDependencies": { - "@babel/core": "7.24.0", - "@electron/packager": "18.1.3", + "@babel/core": "7.24.3", + "@electron/packager": "18.3.2", "@material/mwc-button": "0.27.0", "@material/mwc-checkbox": "0.27.0", "@material/mwc-dialog": "0.27.0", @@ -118,15 +118,15 @@ "@rollup/plugin-node-resolve": "15.2.3", "@rollup/plugin-replace": "5.0.5", "@rollup/plugin-terser": "0.4.4", - "@vaadin/avatar": "24.2.8", - "@vaadin/button": "24.2.8", - "@vaadin/grid": "24.2.8", - "@vaadin/icons": "24.2.8", - "@vaadin/password-field": "24.2.8", - "@vaadin/tooltip": "24.2.8", - "@zip.js/zip.js": "2.7.40", - "axios": "1.6.7", - "electron": "29.1.1", + "@vaadin/avatar": "24.2.9", + "@vaadin/button": "24.2.9", + "@vaadin/grid": "24.2.9", + "@vaadin/icons": "24.2.9", + "@vaadin/password-field": "24.2.9", + "@vaadin/tooltip": "24.2.9", + "@zip.js/zip.js": "2.7.41", + "axios": "1.6.8", + "electron": "27.3.8", "electron-builder": "24.13.3", "epml": "0.3.3", "eslint": "8.57.0", @@ -141,13 +141,13 @@ "pwa-helpers": "0.9.1", "redux": "5.0.1", "redux-thunk": "3.1.0", - "rollup": "4.12.1", + "rollup": "4.13.2", "rollup-plugin-node-globals": "1.4.0", "rollup-plugin-progress": "1.1.2", "rollup-plugin-scss": "3.0.0", "shelljs": "0.8.5" }, "engines": { - "node": ">=20.9.0" + "node": ">=18.17.1" } -} \ No newline at end of file +} diff --git a/plugins/build-config.js b/plugins/build-config.js index 46cf8d66..2fcbb893 100644 --- a/plugins/build-config.js +++ b/plugins/build-config.js @@ -63,7 +63,7 @@ const generateRollupConfig = (inputFile, outputFile) => { }; const generateForPlugins = () => { - const configs = [ + return [ { in: 'plugins/core/main.src.js', out: 'plugins/core/main.js', @@ -162,7 +162,6 @@ const generateForPlugins = () => { path.join(__dirname, file.out) ); }); - return configs; }; module.exports = generateForPlugins; diff --git a/plugins/default-plugins.js b/plugins/default-plugins.js index 46e9ca4f..e976a97c 100644 --- a/plugins/default-plugins.js +++ b/plugins/default-plugins.js @@ -12,19 +12,16 @@ const pluginsController = (type) => { switch (type) { case PLUGINS: const path = require('path') - const plugins = [ - { - folder: path.join(__dirname, 'plugins/core'), - name: 'core' - } - ] - return plugins + return [ + { + folder: path.join(__dirname, 'plugins/core'), + name: 'core' + } + ] case BUILD: - const build = require('./build.js') - return build + return require('./build.js') case WATCH: - const watch = require('./watch.js') - return watch + return require('./watch.js') default: return } diff --git a/plugins/plugins/core/become-minter/become-minter.src.js b/plugins/plugins/core/become-minter/become-minter.src.js index 3a526e1e..86e73e13 100644 --- a/plugins/plugins/core/become-minter/become-minter.src.js +++ b/plugins/plugins/core/become-minter/become-minter.src.js @@ -1,7 +1,7 @@ import {html, LitElement} from 'lit' import {Epml} from '../../../epml.js' import '../components/ButtonIconCopy.js' -import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {registerTranslateConfig, translate, use} from '../../../../core/translate' import {blocksNeed} from '../../utils/blocks-needed.js' import isElectron from 'is-electron' import '@polymer/paper-spinner/paper-spinner-lite.js' @@ -80,18 +80,15 @@ class BecomeMinter extends LitElement { } async getNodeInfo() { - const nodeInfo = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { url: `/admin/status`, }) - - return nodeInfo } async getMintingAcccounts() { - const mintingAccountData = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { url: `/admin/mintingaccounts`, }) - return mintingAccountData } async atMount() { @@ -148,21 +145,18 @@ class BecomeMinter extends LitElement { } async getRewardShareRelationship(recipientAddress) { - const myRewardShareArray = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/rewardshares?recipients=${recipientAddress}`, }) - - return myRewardShareArray } _levelUpBlocks() { - let countBlocksString = ( + return ( blocksNeed(0) - (this.addressInfo?.blocksMinted + this.addressInfo?.blocksMintedAdjustment) ).toString() - return countBlocksString } render() { diff --git a/plugins/plugins/core/become-minter/components/not-sponsored.js b/plugins/plugins/core/become-minter/components/not-sponsored.js index 37121da2..2d451197 100644 --- a/plugins/plugins/core/become-minter/components/not-sponsored.js +++ b/plugins/plugins/core/become-minter/components/not-sponsored.js @@ -1,7 +1,7 @@ import {html, LitElement} from 'lit' import {Epml} from '../../../../epml.js' import '../../components/ButtonIconCopy.js' -import {translate} from '../../../../../core/translate/index.js' +import {translate} from '../../../../../core/translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-button' @@ -41,9 +41,8 @@ class NotSponsored extends LitElement { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; - let apiKey = myNode.apiKey - return apiKey + ] + return myNode.apiKey } addMintingAccount(e) { diff --git a/plugins/plugins/core/become-minter/components/yes-sponsored.js b/plugins/plugins/core/become-minter/components/yes-sponsored.js index 291c6fe0..13e51f3c 100644 --- a/plugins/plugins/core/become-minter/components/yes-sponsored.js +++ b/plugins/plugins/core/become-minter/components/yes-sponsored.js @@ -1,6 +1,6 @@ import {html, LitElement} from 'lit' import '../../components/ButtonIconCopy.js' -import {translate} from '../../../../../core/translate/index.js' +import {translate} from '../../../../../core/translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-button' @@ -28,12 +28,11 @@ class YesSponsored extends LitElement { static styles = [pageStyles] _levelUpBlocks() { - let countBlocksString = ( + return ( blocksNeed(0) - (this.addressInfo?.blocksMinted + this.addressInfo?.blocksMintedAdjustment) - ).toString(); - return countBlocksString + ).toString() } render() { diff --git a/plugins/plugins/core/components/ChatGifs/ChatGifs.js b/plugins/plugins/core/components/ChatGifs/ChatGifs.js index afb9f608..199d2de3 100644 --- a/plugins/plugins/core/components/ChatGifs/ChatGifs.js +++ b/plugins/plugins/core/components/ChatGifs/ChatGifs.js @@ -9,7 +9,7 @@ import {bytesToMegabytes} from '../../../utils/bytesToMegabytes.js'; import './ChatGifsExplore.js'; import '../ImageComponent.js'; import '@vaadin/tooltip'; -import {get, translate} from '../../../../../core/translate/index.js' +import {get, translate} from '../../../../../core/translate' const parentEpml = new Epml({type: 'WINDOW', source: window.parent}); @@ -150,11 +150,7 @@ setOpenGifModal: { attribute: false } if (changedProperties && changedProperties.has('currentCollection')) { if (this.mode === 'explore') { const subbedCollection = this.mySubscribedCollections.find((collection) => ((collection.name === this.currentCollection.name) && (collection.identifier === this.currentCollection.identifier))); - if (subbedCollection) { - this.isSubscribed = true; - } else { - this.isSubscribed = false; - } + this.isSubscribed = !!subbedCollection; } } } @@ -211,8 +207,7 @@ setOpenGifModal: { attribute: false } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; - let apiKey = myNode.apiKey; - return apiKey; + return myNode.apiKey; } async getMoreExploreGifs() { @@ -285,17 +280,14 @@ setOpenGifModal: { attribute: false } } async getMyGifCollections() { - const userName = await this.getName(this.selectedAddress.address); - this.myAccountName = userName; + this.myAccountName = await this.getName(this.selectedAddress.address); if (this.myAccountName) { const getMyGifCollections = await parentEpml.request('apiCall', { url: `/arbitrary/resources/search?service=GIF_REPOSITORY&query=${this.myAccountName}&apiKey=${this.getApiKey()}`, }); - const gifCollectionWithMetaData = await this.structureCollections( - getMyGifCollections - ); - - return gifCollectionWithMetaData; + return await this.structureCollections( + getMyGifCollections + ); } else { return []; } @@ -343,10 +335,9 @@ setOpenGifModal: { attribute: false } } ); await Promise.all(getSavedGifRepos); - const savedCollectionsWithMetaData = await this.structureCollections( - savedCollections - ); - return savedCollectionsWithMetaData; + return await this.structureCollections( + savedCollections + ); } async getName(recipient) { @@ -440,11 +431,7 @@ setOpenGifModal: { attribute: false } } } - if (invalidGifs.length > 0) { - return false; - } else { - return true; - } + return invalidGifs.length <= 0; } let validatedSize = validateGifSizes(this.gifsToBeAdded); @@ -587,8 +574,7 @@ setOpenGifModal: { attribute: false } ); parentEpml.request('showSnackBar', get('gifs.gchange20')); this.isSubscribed = true; - const savedCollections = await this.getSavedCollections(); - this.mySubscribedCollections = savedCollections; + this.mySubscribedCollections = await this.getSavedCollections(); } async unsubscribeToCollection() { @@ -597,8 +583,7 @@ setOpenGifModal: { attribute: false } ); parentEpml.request('showSnackBar', get('gifs.gchange21')); this.isSubscribed = false; - const savedCollections = await this.getSavedCollections(); - this.mySubscribedCollections = savedCollections; + this.mySubscribedCollections = await this.getSavedCollections(); } render() { diff --git a/plugins/plugins/core/components/ChatGifs/ChatGifsExplore.js b/plugins/plugins/core/components/ChatGifs/ChatGifsExplore.js index 97c014bc..b3f8876a 100644 --- a/plugins/plugins/core/components/ChatGifs/ChatGifsExplore.js +++ b/plugins/plugins/core/components/ChatGifs/ChatGifsExplore.js @@ -1,7 +1,7 @@ import {html, LitElement} from 'lit' import {Epml} from '../../../../epml.js' import {chatGifsExploreStyles} from './ChatGifsExplore-css.js' -import {get, translate} from '../../../../../core/translate/index.js' +import {get, translate} from '../../../../../core/translate' import '@material/mwc-icon' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); @@ -52,7 +52,7 @@ class ChatGifsExplore extends LitElement { observerHandler(entries) { if (!entries[0].isIntersecting) { - return; + } else { if (this.exploreCollections.length < 20) { return; @@ -70,8 +70,7 @@ class ChatGifsExplore extends LitElement { } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } async searchCollections() { @@ -120,8 +119,7 @@ class ChatGifsExplore extends LitElement { class='clear-search-icon' @click=${async () => { if (this.isLoading) return; - const latestCollections = await this.getAllCollections(); - this.exploreCollections = latestCollections; + this.exploreCollections = await this.getAllCollections(); this.searchCollectionName = ''; this.isSearched = false; }} diff --git a/plugins/plugins/core/components/ChatGroupInvites.js b/plugins/plugins/core/components/ChatGroupInvites.js index e3ae490c..aa81717c 100644 --- a/plugins/plugins/core/components/ChatGroupInvites.js +++ b/plugins/plugins/core/components/ChatGroupInvites.js @@ -5,7 +5,7 @@ import "@material/mwc-dialog" import "@polymer/paper-spinner/paper-spinner-lite.js" import "@material/mwc-icon" import "./WrapperModal" -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' const parentEpml = new Epml({ type: "WINDOW", source: window.parent }) @@ -105,11 +105,10 @@ class ChatGroupInvites extends LitElement { } async getLastRef() { - let myRef = await parentEpml.request("apiCall", { + return await parentEpml.request("apiCall", { type: "api", url: `/addresses/lastreference/${this.selectedAddress.address}`, }) - return myRef } getTxnRequestResponse(txnResponse, reference) { @@ -125,13 +124,12 @@ class ChatGroupInvites extends LitElement { } async convertBytesForSigning(transactionBytesBase58) { - let convertedBytes = await parentEpml.request("apiCall", { + return await parentEpml.request("apiCall", { type: "api", method: "POST", url: `/transactions/convert`, body: `${transactionBytesBase58}`, }) - return convertedBytes } async signTx(body){ @@ -204,11 +202,10 @@ class ChatGroupInvites extends LitElement { } const bodyToString2 = JSON.stringify(body2) let signTransaction = await this.signTx(bodyToString2) - let processTransaction = await this.process(signTransaction) - return processTransaction + return await this.process(signTransaction) } - validateReceiver() + await validateReceiver() } async _removeAdmin(groupId) { @@ -261,11 +258,10 @@ class ChatGroupInvites extends LitElement { } const bodyToString2 = JSON.stringify(body2) let signTransaction = await this.signTx(bodyToString2) - let processTransaction = await this.process(signTransaction) - return processTransaction + return await this.process(signTransaction) } - validateReceiver() + await validateReceiver() } render() { diff --git a/plugins/plugins/core/components/ChatGroupManager.js b/plugins/plugins/core/components/ChatGroupManager.js index 49f79de1..701a4fe1 100644 --- a/plugins/plugins/core/components/ChatGroupManager.js +++ b/plugins/plugins/core/components/ChatGroupManager.js @@ -11,7 +11,7 @@ import './TipUser'; import './UserInfo/UserInfo'; import './ChatImage'; import './ReusableImage'; -import {get} from '../../../../core/translate/index.js' +import {get} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); @@ -242,14 +242,10 @@ class ChatGroupsManager extends LitElement { let endpoint = `/groups` - const groups = await parentEpml.request('apiCall', { + this.groups = await parentEpml.request('apiCall', { type: 'api', url: endpoint, - }); - - let list = groups - - this.groups = list + }) } catch (error) { console.log(error); } @@ -284,7 +280,7 @@ class ChatGroupsManager extends LitElement { observerHandler(entries) { if (!entries[0].isIntersecting) { - return; + } else { if (this.images.length < 20) { return; @@ -294,19 +290,11 @@ class ChatGroupsManager extends LitElement { } selectAuto(e) { - if (e.target.checked) { - this.autoView = false - } else { - this.autoView = true - } + this.autoView = !e.target.checked; } selectMyImages(e) { - if (e.target.checked) { - this.onlyMyImages = false - } else { - this.onlyMyImages = true - } + this.onlyMyImages = !e.target.checked; } render() { diff --git a/plugins/plugins/core/components/ChatGroupSettings.js b/plugins/plugins/core/components/ChatGroupSettings.js index d21e7346..3f4568fe 100644 --- a/plugins/plugins/core/components/ChatGroupSettings.js +++ b/plugins/plugins/core/components/ChatGroupSettings.js @@ -5,7 +5,7 @@ import '@material/mwc-dialog' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import './WrapperModal' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -115,11 +115,10 @@ class ChatGroupSettings extends LitElement { // Get Last Ref const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -129,13 +128,12 @@ class ChatGroupSettings extends LitElement { } const convertBytesForSigning = async (transactionBytesBase58) => { - let convertedBytes = await parentEpml.request("apiCall", { - type: "api", - method: "POST", - url: `/transactions/convert`, - body: `${transactionBytesBase58}`, - }) - return convertedBytes + return await parentEpml.request("apiCall", { + type: "api", + method: "POST", + url: `/transactions/convert`, + body: `${transactionBytesBase58}`, + }) } @@ -193,22 +191,21 @@ class ChatGroupSettings extends LitElement { // }) // return processTransaction console.log('this.selectedAddress.nonce', this.selectedAddress.nonce) - let myTxnrequest = await parentEpml.request('transaction', { - type: 23, - nonce: this.selectedAddress.nonce, - params: { - _groupId: groupId, - lastReference: lastRef, - fee: leaveFeeInput, - "newOwner": "QdR4bQ1fJFnSZgswtW27eE8ToXwHqUQyaU", - "newIsOpen": false, - "newDescription": "my group for accounts I like", - "newApprovalThreshold": "NONE", - "newMinimumBlockDelay": 5, - "newMaximumBlockDelay": 60 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 23, + nonce: this.selectedAddress.nonce, + params: { + _groupId: groupId, + lastReference: lastRef, + fee: leaveFeeInput, + "newOwner": "QdR4bQ1fJFnSZgswtW27eE8ToXwHqUQyaU", + "newIsOpen": false, + "newDescription": "my group for accounts I like", + "newApprovalThreshold": "NONE", + "newMinimumBlockDelay": 5, + "newMaximumBlockDelay": 60 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -223,7 +220,7 @@ class ChatGroupSettings extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } render() { diff --git a/plugins/plugins/core/components/ChatGroupsManagement.js b/plugins/plugins/core/components/ChatGroupsManagement.js index 793ce271..3e875bd3 100644 --- a/plugins/plugins/core/components/ChatGroupsManagement.js +++ b/plugins/plugins/core/components/ChatGroupsManagement.js @@ -10,7 +10,7 @@ import '@vaadin/tabs/theme/material/vaadin-tabs.js' import '@vaadin/avatar' import '@vaadin/grid' import '@vaadin/grid/vaadin-grid-filter-column.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -68,17 +68,15 @@ class ChatGroupsManagement extends LitElement { } async getJoinedGroups(){ - let joinedG = await parentEpml.request('apiCall', { - url: `/groups/member/${this.selectedAddress.address}` - }) - return joinedG + return await parentEpml.request('apiCall', { + url: `/groups/member/${this.selectedAddress.address}` + }) } async firstUpdated() { try { - let _joinedGroups = await this.getJoinedGroups() - this.joinedGroups = _joinedGroups + this.joinedGroups = await this.getJoinedGroups() } catch (error) { } @@ -161,11 +159,10 @@ class ChatGroupsManagement extends LitElement { // Get Last Ref const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -179,20 +176,19 @@ class ChatGroupsManagement extends LitElement { const makeTransactionRequest = async (lastRef) => { let groupdialog3 = get("transactions.groupdialog3") let groupdialog4 = get("transactions.groupdialog4") - let myTxnrequest = await parentEpml.request('transaction', { - type: 32, - nonce: this.selectedAddress.nonce, - params: { - fee: leaveFeeInput, - registrantAddress: this.selectedAddress.address, - rGroupName: groupName, - rGroupId: groupId, - lastReference: lastRef, - groupdialog3: groupdialog3, - groupdialog4: groupdialog4, - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 32, + nonce: this.selectedAddress.nonce, + params: { + fee: leaveFeeInput, + registrantAddress: this.selectedAddress.address, + rGroupName: groupName, + rGroupId: groupId, + lastReference: lastRef, + groupdialog3: groupdialog3, + groupdialog4: groupdialog4, + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -211,7 +207,7 @@ class ChatGroupsManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } nameRenderer(person){ diff --git a/plugins/plugins/core/components/ChatGroupsModal.js b/plugins/plugins/core/components/ChatGroupsModal.js index b2a6c03f..ad991d89 100644 --- a/plugins/plugins/core/components/ChatGroupsModal.js +++ b/plugins/plugins/core/components/ChatGroupsModal.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit'; -import {translate,} from '../../../../core/translate/index.js' +import {translate,} from '../../../../core/translate' import '@material/mwc-menu'; import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-dialog' diff --git a/plugins/plugins/core/components/ChatHead.js b/plugins/plugins/core/components/ChatHead.js index abe7e2af..7d69947e 100644 --- a/plugins/plugins/core/components/ChatHead.js +++ b/plugins/plugins/core/components/ChatHead.js @@ -1,7 +1,8 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' import localForage from "localforage" -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' + import '@material/mwc-icon' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -28,15 +29,12 @@ class ChatHead extends LitElement { static get styles() { return css` li { - width: 100%; padding: 10px 5px 10px 5px; cursor: pointer; - width: 100%; box-sizing: border-box; display: flex; align-items: flex-start; - } li:hover { @@ -59,7 +57,7 @@ class ChatHead extends LitElement { align-items: center; justify-content: space-between; width: 100%; - margin: 0px; + margin: 0; } .inner-container { display: flex; @@ -135,7 +133,6 @@ class ChatHead extends LitElement { render() { let avatarImg = '' - let backupAvatarImg = '' let isUnread = false if(this.chatInfo.name){ @@ -160,26 +157,25 @@ class ChatHead extends LitElement { } return html`
  • this.getUrl(this.chatInfo.url)} class="clearfix ${this.activeChatHeadUrl === this.chatInfo.url ? 'active' : ''}"> - ${this.isImageLoaded ? html`${avatarImg}` : html`` } + ${this.isImageLoaded ? html`${avatarImg}` : html`` } ${!this.isImageLoaded && !this.chatInfo.name && !this.chatInfo.groupName ? html`account_circle` : html`` } ${!this.isImageLoaded && this.chatInfo.name ? html`
    ${this.chatInfo.name.charAt(0)}
    `: ''} ${!this.isImageLoaded && this.chatInfo.groupName ? html`
    ${this.chatInfo.groupName.charAt(0)}
    `: ''} -
    -
    -
    ${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} ${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}
    -
    -
    -
    ${this.chatInfo.groupId !== undefined ? 'id: ' + this.chatInfo.groupId : ''} -
    -
    - - ${translate('chatpage.cchange90')} -
    -
    -
    -
    - -
  • +
    +
    +
    ${this.chatInfo.groupName ? this.chatInfo.groupName : this.chatInfo.name !== undefined ? this.chatInfo.name : this.chatInfo.address.substr(0, 15)} ${this.chatInfo.groupId !== undefined ? 'lock_open' : 'lock'}
    +
    +
    +
    ${this.chatInfo.groupId !== undefined ? 'id: ' + this.chatInfo.groupId : ''} +
    +
    + + ${translate('chatpage.cchange90')} +
    +
    +
    +
    + ` } @@ -266,4 +262,4 @@ class ChatHead extends LitElement { } } -window.customElements.define('chat-head', ChatHead) +window.customElements.define('chat-head', ChatHead) \ No newline at end of file diff --git a/plugins/plugins/core/components/ChatImage.js b/plugins/plugins/core/components/ChatImage.js index e8255bc7..2aa11d2d 100644 --- a/plugins/plugins/core/components/ChatImage.js +++ b/plugins/plugins/core/components/ChatImage.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit'; -import {get, translate,} from '../../../../core/translate/index.js' +import {get, translate,} from '../../../../core/translate' import axios from 'axios' import {RequestQueueWithPromise} from '../../utils/queue'; import '@material/mwc-menu'; @@ -116,13 +116,10 @@ export class ChatImage extends LitElement { getNodeUrl(){ const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port - return nodeUrl + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode(){ - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - - return myNode + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] } getApiKey() { @@ -130,8 +127,7 @@ getMyNode(){ window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node ]; - let apiKey = myNode.apiKey; - return apiKey; + return myNode.apiKey; } async fetchResource() { @@ -148,7 +144,7 @@ getMyNode(){ async fetchVideoUrl() { - this.fetchResource() + await this.fetchResource() this.url = `${this.nodeUrl}/arbitrary/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?async=true&apiKey=${this.myNode.apiKey}` } @@ -201,7 +197,7 @@ getMyNode(){ this.status = res if(this.status.status === 'DOWNLOADED'){ - this.fetchResource() + await this.fetchResource() } } @@ -216,12 +212,12 @@ getMyNode(){ async _fetchImage() { try { - this.fetchVideoUrl({ - name: this.resource.name, - service: this.resource.service, - identifier: this.resource.identifier - }) - this.fetchStatus() + await this.fetchVideoUrl({ + name: this.resource.name, + service: this.resource.service, + identifier: this.resource.identifier + }) + await this.fetchStatus() } catch (error) { /* empty */ } } @@ -231,11 +227,9 @@ getMyNode(){ } shouldUpdate(changedProperties) { - if (changedProperties.has('setOpenDialogImage') && changedProperties.size === 1) { - return false; - } + return !(changedProperties.has('setOpenDialogImage') && changedProperties.size === 1); + - return true } diff --git a/plugins/plugins/core/components/ChatLeaveGroup.js b/plugins/plugins/core/components/ChatLeaveGroup.js index d85200ce..ca7658f4 100644 --- a/plugins/plugins/core/components/ChatLeaveGroup.js +++ b/plugins/plugins/core/components/ChatLeaveGroup.js @@ -5,7 +5,7 @@ import '@material/mwc-dialog' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import './WrapperModal' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -134,11 +134,10 @@ class ChatLeaveGroup extends LitElement { // Get Last Ref const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -152,20 +151,19 @@ class ChatLeaveGroup extends LitElement { const makeTransactionRequest = async (lastRef) => { let groupdialog3 = get("transactions.groupdialog3") let groupdialog4 = get("transactions.groupdialog4") - let myTxnrequest = await parentEpml.request('transaction', { - type: 32, - nonce: this.selectedAddress.nonce, - params: { - fee: leaveFeeInput, - registrantAddress: this.selectedAddress.address, - rGroupName: groupName, - rGroupId: groupId, - lastReference: lastRef, - groupdialog3: groupdialog3, - groupdialog4: groupdialog4, - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 32, + nonce: this.selectedAddress.nonce, + params: { + fee: leaveFeeInput, + registrantAddress: this.selectedAddress.address, + rGroupName: groupName, + rGroupId: groupId, + lastReference: lastRef, + groupdialog3: groupdialog3, + groupdialog4: groupdialog4, + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -184,7 +182,7 @@ class ChatLeaveGroup extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } render() { diff --git a/plugins/plugins/core/components/ChatModals.js b/plugins/plugins/core/components/ChatModals.js index 0847fc12..92a24a11 100644 --- a/plugins/plugins/core/components/ChatModals.js +++ b/plugins/plugins/core/components/ChatModals.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml' import snackbar from './snackbar.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import '@material/mwc-button' import '@material/mwc-dialog' @@ -159,11 +159,11 @@ class ChatModals extends LitElement { } else if (addressPublicKey !== false) { isEncrypted = 1 _publicKey = addressPublicKey - sendMessageRequest(isEncrypted, _publicKey) + await sendMessageRequest(isEncrypted, _publicKey) } else { isEncrypted = 0 _publicKey = this.selectedAddress.address - sendMessageRequest(isEncrypted, _publicKey) + await sendMessageRequest(isEncrypted, _publicKey) } }; @@ -190,7 +190,7 @@ class ChatModals extends LitElement { isText: 1 } }) - _computePow(chatResponse) + await _computePow(chatResponse) } const _computePow = async (chatBytes) => { @@ -237,7 +237,7 @@ class ChatModals extends LitElement { } } - getAddressPublicKey() + await getAddressPublicKey() } _textArea(e) { @@ -246,8 +246,7 @@ class ChatModals extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } getChatBlockedList() { @@ -291,10 +290,9 @@ class ChatModals extends LitElement { } async getChatBlockedAdresses() { - const chatBlockedAdresses = await parentEpml.request('apiCall', { - url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` - }) - this.chatBlockedAdresses = chatBlockedAdresses + this.chatBlockedAdresses = await parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` + }) } diff --git a/plugins/plugins/core/components/ChatPage.js b/plugins/plugins/core/components/ChatPage.js index d6b5ee2f..1a5a9db5 100644 --- a/plugins/plugins/core/components/ChatPage.js +++ b/plugins/plugins/core/components/ChatPage.js @@ -1,7 +1,7 @@ import {html, LitElement} from 'lit' import {animate} from '@lit-labs/motion' import {Epml} from '../../../epml.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import {Editor, Extension, generateHTML} from '@tiptap/core' import {unsafeHTML} from 'lit/directives/unsafe-html.js' import {escape} from 'html-escaper' @@ -245,17 +245,12 @@ class ChatPage extends LitElement { window.parent.reduxStore.getState().app.nodeConfig.node ]; - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port; - return nodeUrl; + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port; } getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node ]; - - return myNode; } setOpenGifModal(value) { @@ -263,11 +258,11 @@ class ChatPage extends LitElement { } _toggle(value) { - this.shifted = value === (false || true) ? value : !this.shifted + this.shifted = value === true ? value : !this.shifted this.requestUpdate() } _toggleResources(value) { - this.shiftedResources = value === (false || true) ? value : !this.shiftedResources + this.shiftedResources = value === true ? value : !this.shiftedResources this.requestUpdate() } @@ -362,7 +357,7 @@ class ChatPage extends LitElement { }) } - this.processMessages(getInitialMessages, true, false) + await this.processMessages(getInitialMessages, true, false) } catch (error) { /* empty */ } } @@ -1105,8 +1100,7 @@ class ChatPage extends LitElement { const handleTransferIntoURL = (dataTransfer) => { try { const [firstItem] = dataTransfer.items - const blob = firstItem.getAsFile() - return blob + return firstItem.getAsFile() } catch (error) { /* empty */ } } if (event.clipboardData) { @@ -1114,7 +1108,7 @@ class ChatPage extends LitElement { if (blobFound) { this.insertFile(blobFound) e.preventDefault(); - return + } else { const item_list = await navigator.clipboard.read() let image_type @@ -1140,7 +1134,7 @@ class ChatPage extends LitElement { parentEpml.request('showSnackBar', `${errorMsg}`) } } else { - return + } } } @@ -1267,7 +1261,7 @@ class ChatPage extends LitElement { } delete message.reactions const stringifyMessageObject = JSON.stringify(message) - this.sendMessage({messageText: stringifyMessageObject, chatReference: undefined, isForward: true}) + await this.sendMessage({messageText: stringifyMessageObject, chatReference: undefined, isForward: true}) } catch (error) { /* empty */ } } @@ -1279,16 +1273,16 @@ class ChatPage extends LitElement { if(file.identifier){ this.imageFile = file this.currentEditor = 'newChat' - return + }else if (file.type.includes('image')) { this.imageFile = file this.currentEditor = 'newChat' - return + } else { this.attachment = file this.currentEditor = "newAttachmentChat" - return + } } @@ -1343,13 +1337,12 @@ class ChatPage extends LitElement { setTimeout(() => { - const isRecipient = this.chatId.includes('direct') === true ? true : false + const isRecipient = this.chatId.includes('direct') === true this.chatId.includes('direct') === true ? this.isReceipient = true : this.isReceipient = false this._chatId = this.chatId.split('/')[1] const mstring = get("chatpage.cchange8") - const placeholder = isRecipient === true ? `Message ${this._chatId}` : `${mstring}` - this.chatEditorPlaceholder = placeholder + this.chatEditorPlaceholder = isRecipient === true ? `Message ${this._chatId}` : `${mstring}` isRecipient ? getAddressPublicKey() : this.fetchChatMessages(this._chatId) @@ -1358,7 +1351,7 @@ class ChatPage extends LitElement { }, 100) - const isRecipient = this.chatId.includes('direct') === true ? true : false + const isRecipient = this.chatId.includes('direct') === true const groupId = this.chatId.split('/')[1] if (!isRecipient && groupId.toString() !== '0') { @@ -1438,7 +1431,7 @@ class ChatPage extends LitElement { const isEnabledChatEnter = localStorage.getItem('isEnabledChatEnter') if (isEnabledChatEnter) { - this.isEnabledChatEnter = isEnabledChatEnter === 'false' ? false : true + this.isEnabledChatEnter = isEnabledChatEnter !== 'false' } } @@ -1474,7 +1467,7 @@ class ChatPage extends LitElement { const previousChatId = changedProperties.get('chatId'); this.isLoadingMessages = true - this.initUpdate() + await this.initUpdate() if (previousChatId) { @@ -1494,11 +1487,9 @@ class ChatPage extends LitElement { if (changedProperties.has('setActiveChatHeadUrl')) { return false } - if (changedProperties.has('setOpenPrivateMessage')) { - return false - } + return !changedProperties.has('setOpenPrivateMessage'); + - return true } @@ -1543,8 +1534,7 @@ class ChatPage extends LitElement { userName = await getName(this._chatId) } const mstring = get("chatpage.cchange8") - const placeholder = this.isReceipient === true ? `Message ${userName ? userName : this._chatId}` : `${mstring}` - return placeholder + return this.isReceipient === true ? `Message ${userName ? userName : this._chatId}` : `${mstring}` } renderChatScroller() { @@ -1651,14 +1641,14 @@ class ChatPage extends LitElement { }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); let list = [...decodeMsgs] @@ -1717,14 +1707,14 @@ class ChatPage extends LitElement { } }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); let list = [...decodeMsgs] @@ -1791,14 +1781,14 @@ class ChatPage extends LitElement { } }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); let list = [...decodeMsgs] @@ -1843,14 +1833,14 @@ class ChatPage extends LitElement { }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); let list = [...decodeMsgs] @@ -1902,14 +1892,14 @@ class ChatPage extends LitElement { }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); let list = [ ...decodeMsgs] @@ -1961,14 +1951,14 @@ class ChatPage extends LitElement { }) - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodeMsgs, - parentEpml, - isReceipient: this.isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodeMsgs, + parentEpml, + isReceipient: this.isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); @@ -2074,14 +2064,14 @@ class ChatPage extends LitElement { try { - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodedMessages, - parentEpml, - isReceipient: isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodedMessages, + parentEpml, + isReceipient: isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); } catch (error) { console.log({error}) } @@ -2135,15 +2125,15 @@ class ChatPage extends LitElement { setTimeout(() => this.downElementObserver(), 500) } else { - queue.push(() => replaceMessagesEdited({ - decodedMessages: decodedMessages, - parentEpml, - isReceipient: isReceipient, - decodeMessageFunc: this.decodeMessage, - _publicKey: this._publicKey, - isNotInitial: true, - addToUpdateMessageHashmap: this.addToUpdateMessageHashmap - })); + await queue.push(() => replaceMessagesEdited({ + decodedMessages: decodedMessages, + parentEpml, + isReceipient: isReceipient, + decodeMessageFunc: this.decodeMessage, + _publicKey: this._publicKey, + isNotInitial: true, + addToUpdateMessageHashmap: this.addToUpdateMessageHashmap + })); const renderEachMessage = decodedMessages.map(async (msg) => { await this.renderNewMessage(msg) @@ -2366,14 +2356,14 @@ class ChatPage extends LitElement { - this.processMessages(getInitialMessages, true, isUnread, count) + await this.processMessages(getInitialMessages, true, isUnread, count) initial = initial + 1 } else { try { if (e.data) { - this.processMessages(JSON.parse(e.data), false) + await this.processMessages(JSON.parse(e.data), false) } } catch (error) { /* empty */ } } @@ -2494,13 +2484,13 @@ class ChatPage extends LitElement { - this.processMessages(getInitialMessages, true, isUnread, count) + await this.processMessages(getInitialMessages, true, isUnread, count) initial = initial + 1 } else { try { if (e.data) { - this.processMessages(JSON.parse(e.data), false) + await this.processMessages(JSON.parse(e.data), false) } } catch (error) { /* empty */ } } @@ -2530,7 +2520,7 @@ class ChatPage extends LitElement { if (chatId !== undefined) { if (this.isReceipient) { - initDirect(chatId) + await initDirect(chatId) } else { let groupChatId = Number(chatId) initGroup(groupChatId) @@ -2648,8 +2638,7 @@ class ChatPage extends LitElement { byteArrays.push(byteArray) } - const blob = new Blob(byteArrays, { type: contentType }) - return blob + return new Blob(byteArrays, {type: contentType}) } const blob = b64toBlob(str, 'image/png') await new Promise(resolve => { @@ -2657,11 +2646,9 @@ class ChatPage extends LitElement { quality: 0.6, maxWidth: 500, success(result) { - const file = new File([result], "name", { - type: 'image/png' - }) - - compressedFile = file + compressedFile = new File([result], "name", { + type: 'image/png' + }) resolve() }, error() { @@ -2703,8 +2690,7 @@ class ChatPage extends LitElement { let message = "" try { - const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) - message = parsedMessageObj + message = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) } catch (error) { message = outSideMsg.editedMessageObj.decodedMessage } @@ -2744,8 +2730,7 @@ class ChatPage extends LitElement { byteArrays.push(byteArray) } - const blob = new Blob(byteArrays, { type: contentType }) - return blob + return new Blob(byteArrays, {type: contentType}) } const blob = b64toBlob(str, 'image/png') @@ -2754,11 +2739,9 @@ class ChatPage extends LitElement { quality: 0.6, maxWidth: 500, success(result) { - const file = new File([result], "name", { - type: 'image/png' - }) - - compressedFile = file + compressedFile = new File([result], "name", { + type: 'image/png' + }) resolve() }, error() { @@ -2800,8 +2783,7 @@ class ChatPage extends LitElement { let message = "" try { - const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) - message = parsedMessageObj + message = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) } catch (error) { message = outSideMsg.editedMessageObj.decodedMessage @@ -2864,10 +2846,9 @@ class ChatPage extends LitElement { maxWidth: 1200, mimeType: 'image/webp', success(result) { - const file = new File([result], "name", { - type: 'image/webp' - }) - compressedFile = file + compressedFile = new File([result], "name", { + type: 'image/webp' + }) resolve() }, error() { @@ -3023,8 +3004,7 @@ class ChatPage extends LitElement { let message = "" try { - const parsedMessageObj = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) - message = parsedMessageObj + message = JSON.parse(outSideMsg.editedMessageObj.decodedMessage) } catch (error) { message = outSideMsg.editedMessageObj.decodedMessage } @@ -3092,8 +3072,7 @@ class ChatPage extends LitElement { let message = "" try { - const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage) - message = parsedMessageObj + message = JSON.parse(this.editedMessageObj.decodedMessage) } catch (error) { message = this.editedMessageObj.decodedMessage @@ -3125,7 +3104,7 @@ class ChatPage extends LitElement { } catch (error) { this.isLoading = false this.isUploadingImage = false - return + } } @@ -3288,7 +3267,7 @@ class ChatPage extends LitElement { } catch (error) { /* empty */ } } - const isRecipient = this.forwardActiveChatHeadUrl.url.includes('direct') === true ? true : false + const isRecipient = this.forwardActiveChatHeadUrl.url.includes('direct') === true const recipientAddress = this.forwardActiveChatHeadUrl.url.split('/')[1] this.openForwardOpen = false @@ -3315,7 +3294,7 @@ class ChatPage extends LitElement { isText: 1 } }) - _computePow(chatResponse, true) + await _computePow(chatResponse, true) } else { let groupResponse = await parentEpml.request('chat', { type: 181, @@ -3333,7 +3312,7 @@ class ChatPage extends LitElement { isText: 1 } }) - _computePow(groupResponse, true) + await _computePow(groupResponse, true) } } @@ -3413,7 +3392,7 @@ class ChatPage extends LitElement { } if (isForward) { - sendForwardRequest() + await sendForwardRequest() return } return sendMessageRequest() diff --git a/plugins/plugins/core/components/ChatRightPanel.js b/plugins/plugins/core/components/ChatRightPanel.js index b3fef699..d3b892ac 100644 --- a/plugins/plugins/core/components/ChatRightPanel.js +++ b/plugins/plugins/core/components/ChatRightPanel.js @@ -194,8 +194,7 @@ class ChatRightPanel extends LitElement { async updated(changedProperties) { if (changedProperties && changedProperties.has('selectedHead')) { if (this.selectedHead !== {}) { - const userName = await getUserNameFromAddress(this.selectedHead.address); - this.userName = userName; + this.userName = await getUserNameFromAddress(this.selectedHead.address); } } } @@ -217,7 +216,7 @@ class ChatRightPanel extends LitElement { observerHandler(entries) { if (!entries[0].isIntersecting) { - return + } else { if(this.groupMembers.length < 20){ return diff --git a/plugins/plugins/core/components/ChatRightPanelResources.js b/plugins/plugins/core/components/ChatRightPanelResources.js index 08e251ed..26b0008b 100644 --- a/plugins/plugins/core/components/ChatRightPanelResources.js +++ b/plugins/plugins/core/components/ChatRightPanelResources.js @@ -11,7 +11,7 @@ import './TipUser'; import './UserInfo/UserInfo'; import './ChatImage'; import './ReusableImage'; -import {get, translate,} from '../../../../core/translate/index.js' +import {get, translate,} from '../../../../core/translate' import {generateIdFromAddresses} from '../../utils/id-generation'; const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); @@ -279,11 +279,11 @@ class ChatRightPanelResources extends LitElement { async updated(changedProperties) { if (changedProperties && changedProperties.has('_chatId')) { this.images = []; - this.getMoreImages(true); + await this.getMoreImages(true); } if (changedProperties && changedProperties.has('onlyMyImages')) { - this.getMoreImages(true) + await this.getMoreImages(true) } } @@ -307,7 +307,7 @@ class ChatRightPanelResources extends LitElement { observerHandler(entries) { if (!entries[0].isIntersecting) { - return; + } else { if (this.images.length < 20) { return; @@ -317,19 +317,11 @@ class ChatRightPanelResources extends LitElement { } selectAuto(e) { - if (e.target.checked) { - this.autoView = false - } else { - this.autoView = true - } + this.autoView = !e.target.checked; } selectMyImages(e) { - if (e.target.checked) { - this.onlyMyImages = false - } else { - this.onlyMyImages = true - } + this.onlyMyImages = !e.target.checked; } render() { diff --git a/plugins/plugins/core/components/ChatScroller-css.js b/plugins/plugins/core/components/ChatScroller-css.js index bf60e6c6..a2e7c367 100644 --- a/plugins/plugins/core/components/ChatScroller-css.js +++ b/plugins/plugins/core/components/ChatScroller-css.js @@ -69,7 +69,7 @@ export const chatStyles = css` .forwarded-text { user-select: none; - color: var(--accent-color); + color: var(--general-color-blue); margin-bottom: 5px; } diff --git a/plugins/plugins/core/components/ChatScroller.js b/plugins/plugins/core/components/ChatScroller.js index 9f53d2b2..b68ebdf3 100644 --- a/plugins/plugins/core/components/ChatScroller.js +++ b/plugins/plugins/core/components/ChatScroller.js @@ -1,6 +1,6 @@ import {html, LitElement,} from 'lit'; import {repeat} from 'lit/directives/repeat.js'; -import {get, translate,} from '../../../../core/translate/index.js' +import {get, translate,} from '../../../../core/translate' import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import {chatStyles} from './ChatScroller-css.js'; import {Epml} from '../../../epml'; @@ -40,8 +40,7 @@ const getApiKey = () => { window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node ]; - let apiKey = myNode.apiKey; - return apiKey; + return myNode.apiKey; }; const extractComponents = async (url) => { @@ -559,11 +558,11 @@ class ChatScroller extends LitElement { // Using map to return a new array, rather than mutating the old one - const newMessagesToRender = this.messagesToRender.map((group) => { + this.messagesToRender = this.messagesToRender.map((group) => { // For each message, return the updated message if it exists, otherwise return the original message const updatedGroupMessages = group.messages.map((message) => { return updatedMessages[message.signature] - ? { ...message, ...updatedMessages[message.signature] } + ? {...message, ...updatedMessages[message.signature]} : message; }); @@ -573,8 +572,6 @@ class ChatScroller extends LitElement { messages: updatedGroupMessages, }; }); - - this.messagesToRender = newMessagesToRender; this.requestUpdate(); await this.updateComplete; @@ -627,34 +624,34 @@ class ChatScroller extends LitElement { async updated(changedProperties) { if (changedProperties && changedProperties.has('messages')) { if (this.messages.type === 'initial') { - this.addNewMessages(this.messages.messages, 'initial'); + await this.addNewMessages(this.messages.messages, 'initial'); } else if (this.messages.type === 'initialLastSeen') { - this.newListMessagesUnreadMessages( + await this.newListMessagesUnreadMessages( this.messages.messages, 'initialLastSeen', this.messages.lastReadMessageTimestamp, this.messages.count ); } else if (this.messages.type === 'new') - this.addNewMessages(this.messages.messages); + await this.addNewMessages(this.messages.messages); else if (this.messages.type === 'newComingInAuto') - this.addNewMessages(this.messages.messages, 'newComingInAuto'); + await this.addNewMessages(this.messages.messages, 'newComingInAuto'); else if (this.messages.type === 'old') - this.prependOldMessages(this.messages.messages); + await this.prependOldMessages(this.messages.messages); else if (this.messages.type === 'inBetween') - this.newListMessages( + await this.newListMessages( this.messages.messages, this.messages.count ); else if (this.messages.type === 'update') - this.replaceMessagesWithUpdateByArray(this.messages.messages); + await this.replaceMessagesWithUpdateByArray(this.messages.messages); } if ( changedProperties && changedProperties.has('updateMessageHash') && Object.keys(this.updateMessageHash).length > 0 ) { - this.replaceMessagesWithUpdate(this.updateMessageHash); + await this.replaceMessagesWithUpdate(this.updateMessageHash); } if ( changedProperties && @@ -676,13 +673,9 @@ class ChatScroller extends LitElement { isLastMessageBeforeUnread(message, formattedMessages) { // if the message is the last one in the older messages list and its timestamp is before the user's last seen timestamp - if ( - message.timestamp < this.lastReadMessageTimestamp && - formattedMessages.indexOf(message) === formattedMessages.length - 21 - ) { - return true; - } - return false; + return message.timestamp < this.lastReadMessageTimestamp && + formattedMessages.indexOf(message) === formattedMessages.length - 21; + } render() { @@ -1097,11 +1090,7 @@ class MessageTemplate extends LitElement { } showBlockIconFunc(bool) { - if (bool) { - this.showBlockAddressIcon = true; - } else { - this.showBlockAddressIcon = false; - } + this.showBlockAddressIcon = !!bool; } async downloadAttachment(attachment) { @@ -1206,10 +1195,8 @@ class MessageTemplate extends LitElement { if (changedProperties.has('openDialogGif')) { return true; } - if (changedProperties.has('isGifLoaded')) { - return true; - } - return false; + return !!changedProperties.has('isGifLoaded'); + } clearConsole() { @@ -1405,14 +1392,13 @@ class MessageTemplate extends LitElement { edited = html` - ${translate('chatpage.cchange68')} + ${translate('chatpage.cchange68')} `; if (repliedToData) { try { - const parsedMsg = JSON.parse(repliedToData.decodedMessage); - repliedToData.decodedMessage = parsedMsg; + repliedToData.decodedMessage = JSON.parse(repliedToData.decodedMessage); } catch (error) { /* empty */ } } @@ -2535,4 +2521,4 @@ class ChatMenu extends LitElement { } } -window.customElements.define('chat-menu', ChatMenu); \ No newline at end of file +window.customElements.define('chat-menu', ChatMenu); diff --git a/plugins/plugins/core/components/ChatSeachResults.js b/plugins/plugins/core/components/ChatSeachResults.js index 53fc4c7f..5083dc57 100644 --- a/plugins/plugins/core/components/ChatSeachResults.js +++ b/plugins/plugins/core/components/ChatSeachResults.js @@ -1,6 +1,6 @@ import {html, LitElement} from 'lit'; import {chatSearchResultsStyles} from './ChatSearchResults-css.js' -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' export class ChatSearchResults extends LitElement { static get properties() { diff --git a/plugins/plugins/core/components/ChatSearchResults.js b/plugins/plugins/core/components/ChatSearchResults.js index 0a3bce40..03e18692 100644 --- a/plugins/plugins/core/components/ChatSearchResults.js +++ b/plugins/plugins/core/components/ChatSearchResults.js @@ -1,6 +1,6 @@ import {html, LitElement} from 'lit' import {chatSearchResultsStyles} from './ChatSearchResults-css.js' -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' import '@vaadin/icon' import '@vaadin/icons' diff --git a/plugins/plugins/core/components/ChatSelect.js b/plugins/plugins/core/components/ChatSelect.js index 80d71bbe..cded6988 100644 --- a/plugins/plugins/core/components/ChatSelect.js +++ b/plugins/plugins/core/components/ChatSelect.js @@ -210,11 +210,9 @@ class ChatSelect extends LitElement { if(changedProperties.has('activeChatHeadUrl')){ return true } - if(changedProperties.has('chatInfo')){ - return true - } + return !!changedProperties.has('chatInfo'); + - return false } getUrl(chatUrl) { diff --git a/plugins/plugins/core/components/ChatSideNavHeads.js b/plugins/plugins/core/components/ChatSideNavHeads.js index 7f93f720..04814076 100644 --- a/plugins/plugins/core/components/ChatSideNavHeads.js +++ b/plugins/plugins/core/components/ChatSideNavHeads.js @@ -185,11 +185,9 @@ class ChatSideNavHeads extends LitElement { if(changedProperties.has('chatInfo')){ return true } - if(changedProperties.has('isImageLoaded')){ - return true - } + return !!changedProperties.has('isImageLoaded'); + - return false } getUrl(chatUrl) { diff --git a/plugins/plugins/core/components/ChatTextEditor copy.js b/plugins/plugins/core/components/ChatTextEditor copy.js index 6ae81431..32613806 100644 --- a/plugins/plugins/core/components/ChatTextEditor copy.js +++ b/plugins/plugins/core/components/ChatTextEditor copy.js @@ -3,7 +3,7 @@ import {escape, unescape} from 'html-escaper' import {EmojiPicker} from 'emoji-picker-js' import {inputKeyCodes} from '../../utils/keyCodes.js' import {Epml} from '../../../epml.js' -import {get} from '../../../../core/translate/index.js' +import {get} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -268,7 +268,7 @@ class ChatTextEditor extends LitElement { if (!this.userName) { e.preventDefault(); parentEpml.request('showSnackBar', get("chatpage.cchange27")); - }; + } } initialChat(e) { @@ -360,15 +360,15 @@ class ChatTextEditor extends LitElement { shouldUpdate(changedProperties) { // Only update element if prop1 changed. - if(changedProperties.has('setChatEditor') && changedProperties.size === 1) return false - return true + return !(changedProperties.has('setChatEditor') && changedProperties.size === 1); + } sendMessageFunc(props) { if (this.chatMessageSize > 1000 ) { parentEpml.request('showSnackBar', get("chatpage.cchange29")) return - }; + } this.chatMessageSize = 0 this.chatEditor.updateMirror() this._sendMessage(props) @@ -376,9 +376,8 @@ class ChatTextEditor extends LitElement { getMessageSize(message){ try { - const messageText = message; - // Format and Sanitize Message - const sanitizedMessage = messageText.replace(/ /gi, ' ').replace(//gi, '\n'); + // Format and Sanitize Message + const sanitizedMessage = message.replace(/ /gi, ' ').replace(//gi, '\n'); const trimmedMessage = sanitizedMessage.trim(); let messageObject = {}; @@ -396,8 +395,7 @@ class ChatTextEditor extends LitElement { } else if (this.editedMessageObj) { let message = ""; try { - const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage); - message = parsedMessageObj; + message = JSON.parse(this.editedMessageObj.decodedMessage); } catch (error) { message = this.messageObj.decodedMessage } @@ -426,8 +424,7 @@ class ChatTextEditor extends LitElement { } const stringified = JSON.stringify(messageObject); - const size = new Blob([stringified]).size; - this.chatMessageSize = size; + this.chatMessageSize = new Blob([stringified]).size; } catch (error) { console.error(error) } @@ -626,8 +623,7 @@ class ChatTextEditor extends LitElement { const chatInputValue = editor.getValue(); const filteredValue = chatInputValue.replace(//g, ''); - let unescapedValue = editorConfig.unescape(filteredValue); - editor.mirror.value = unescapedValue; + editor.mirror.value = editorConfig.unescape(filteredValue); }; ChatEditor.prototype.listenChanges = function () { diff --git a/plugins/plugins/core/components/ChatTextEditor.js b/plugins/plugins/core/components/ChatTextEditor.js index 040f5f0a..f11999f4 100644 --- a/plugins/plugins/core/components/ChatTextEditor.js +++ b/plugins/plugins/core/components/ChatTextEditor.js @@ -3,7 +3,7 @@ import {EmojiPicker} from 'emoji-picker-js' import {Epml} from '../../../epml.js' import '@material/mwc-icon' import '@material/mwc-checkbox' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) @@ -358,10 +358,9 @@ class ChatTextEditor extends LitElement { .hide-styling { display: none; } -mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::before { - background-color:var(--mdc-theme-primary) +mwc-checkbox::shadow, mdc-checkbox::after, mwc-checkbox::shadow, mdc-checkbox::before { + background-color: var(--mdc-theme-primary) } - --mdc-checkbox-unchecked-color ` } @@ -665,8 +664,8 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b shouldUpdate(changedProperties) { // Only update element if prop1 changed. - if(changedProperties.has('setChatEditor') && changedProperties.size === 1) return false - return true + return !(changedProperties.has('setChatEditor') && changedProperties.size === 1); + } sendMessageFunc(props) { @@ -700,8 +699,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b } else if (this.editedMessageObj) { let message = ""; try { - const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage); - message = parsedMessageObj; + message = JSON.parse(this.editedMessageObj.decodedMessage); } catch (error) { message = this.messageObj.decodedMessage } @@ -743,8 +741,7 @@ mwc-checkbox::shadow .mdc-checkbox::after, mwc-checkbox::shadow .mdc-checkbox::b } const stringified = JSON.stringify(messageObject); - const size = new Blob([stringified]).size; - this.chatMessageSize = size; + this.chatMessageSize = new Blob([stringified]).size; } catch (error) { console.error(error) } diff --git a/plugins/plugins/core/components/ChatWelcomePage.js b/plugins/plugins/core/components/ChatWelcomePage.js index 8270afe4..aab8640b 100644 --- a/plugins/plugins/core/components/ChatWelcomePage.js +++ b/plugins/plugins/core/components/ChatWelcomePage.js @@ -1,6 +1,6 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import isElectron from 'is-electron' import '@material/mwc-icon' @@ -145,7 +145,7 @@ class ChatWelcomePage extends LitElement { } h2, h3, h4, h5 { - color:# var(--black); + color: var(--black); font-weight: 400; } @@ -369,7 +369,7 @@ class ChatWelcomePage extends LitElement { myRes = false; } else { myRes = myNameRes; - }; + } return myRes; }; @@ -379,7 +379,7 @@ class ChatWelcomePage extends LitElement { recipient = _recipient; } else { recipient = myNameRes.owner; - }; + } let _reference = new Uint8Array(64); window.crypto.getRandomValues(_reference); @@ -406,12 +406,12 @@ class ChatWelcomePage extends LitElement { } else if (addressPublicKey !== false) { isEncrypted = 1; _publicKey = addressPublicKey; - sendMessageRequest(isEncrypted, _publicKey); + await sendMessageRequest(isEncrypted, _publicKey); } else { isEncrypted = 0; _publicKey = this.selectedAddress.address; - sendMessageRequest(isEncrypted, _publicKey); - }; + await sendMessageRequest(isEncrypted, _publicKey); + } }; const sendMessageRequest = async (isEncrypted, _publicKey) => { @@ -437,7 +437,7 @@ class ChatWelcomePage extends LitElement { isText: 1 } }) - _computePow(chatResponse) + await _computePow(chatResponse) } const _computePow = async (chatBytes) => { @@ -482,7 +482,7 @@ class ChatWelcomePage extends LitElement { } } - getAddressPublicKey() + await getAddressPublicKey() } _textArea(e) { @@ -495,9 +495,8 @@ class ChatWelcomePage extends LitElement { } getApiKey() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; - let apiKey = myNode.apiKey; - return apiKey; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + return myNode.apiKey } } diff --git a/plugins/plugins/core/components/ImageComponent.js b/plugins/plugins/core/components/ImageComponent.js index 6cd3b3a3..7b1ae1fd 100644 --- a/plugins/plugins/core/components/ImageComponent.js +++ b/plugins/plugins/core/components/ImageComponent.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit'; -import {translate,} from '../../../../core/translate/index.js' +import {translate,} from '../../../../core/translate' export class ImageComponent extends LitElement { static get properties() { @@ -55,9 +55,8 @@ export class ImageComponent extends LitElement { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; - let apiKey = myNode.apiKey; - return apiKey; + ] + return myNode.apiKey } async _fetchImage() { @@ -78,15 +77,11 @@ export class ImageComponent extends LitElement { url: data.src, }; this.requestUpdate(); - } else if (!data.ok || data.error) { - this.error = true; - } else { - this.error = false; - } + } else this.error = !data.ok || data.error; } catch (error) { this.error = true; console.error(error); - this._fetchImage(); + await this._fetchImage(); } } diff --git a/plugins/plugins/core/components/LevelFounder.js b/plugins/plugins/core/components/LevelFounder.js index b3a060c9..51d616a5 100644 --- a/plugins/plugins/core/components/LevelFounder.js +++ b/plugins/plugins/core/components/LevelFounder.js @@ -1,6 +1,6 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' import '@polymer/paper-tooltip/paper-tooltip.js' import {RequestQueue} from '../../utils/queue.js' @@ -107,10 +107,9 @@ class LevelFounder extends LitElement { async checkAddressInfo() { try { let toCheck = this.checkleveladdress - const memberInfo = await parentEpml.request('apiCall', { - url: `/addresses/${toCheck}` - }) - this.memberInfo = memberInfo + this.memberInfo = await parentEpml.request('apiCall', { + url: `/addresses/${toCheck}` + }) } catch (error) { console.error(error) } @@ -146,8 +145,7 @@ class LevelFounder extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } } diff --git a/plugins/plugins/core/components/NameMenu.js b/plugins/plugins/core/components/NameMenu.js index 80c865b0..0ac661c7 100644 --- a/plugins/plugins/core/components/NameMenu.js +++ b/plugins/plugins/core/components/NameMenu.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' import snackbar from './snackbar.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import '@material/mwc-snackbar' import '@material/mwc-button' import '@material/mwc-dialog' @@ -90,7 +90,7 @@ class NameMenu extends LitElement { } h2, h3, h4, h5 { - color:# var(--black); + color: var(--black); font-weight: 400; } @@ -333,10 +333,9 @@ class NameMenu extends LitElement { } async getChatBlockedAdresses() { - const chatBlockedAdresses = await parentEpml.request('apiCall', { - url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` - }) - this.chatBlockedAdresses = chatBlockedAdresses + this.chatBlockedAdresses = await parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` + }) } async chatBlockAddress() { @@ -490,11 +489,11 @@ class NameMenu extends LitElement { } else if (addressPublicKey !== false) { isEncrypted = 1 _publicKey = addressPublicKey - sendMessageRequest(isEncrypted, _publicKey) + await sendMessageRequest(isEncrypted, _publicKey) } else { isEncrypted = 0 _publicKey = this.selectedAddress.address - sendMessageRequest(isEncrypted, _publicKey) + await sendMessageRequest(isEncrypted, _publicKey) } }; @@ -521,7 +520,7 @@ class NameMenu extends LitElement { isText: 1 } }) - _computePow(chatResponse) + await _computePow(chatResponse) } const _computePow = async (chatBytes) => { @@ -568,7 +567,7 @@ class NameMenu extends LitElement { } } - getAddressPublicKey() + await getAddressPublicKey() } _textMenu(event) { @@ -603,9 +602,8 @@ class NameMenu extends LitElement { } getApiKey() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node]; - let apiKey = myNode.apiKey; - return apiKey; + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + return myNode.apiKey } } diff --git a/plugins/plugins/core/components/QRCode.js b/plugins/plugins/core/components/QRCode.js index d4a7eff5..a496dbef 100644 --- a/plugins/plugins/core/components/QRCode.js +++ b/plugins/plugins/core/components/QRCode.js @@ -207,7 +207,7 @@ var encode = function(ver, mode, data, maxbuflen) { pack(data[i], 8); } break; - }; + } pack(MODE_TERMINATOR, 4); if (remaining < 8) buf.push(bits); @@ -596,4 +596,4 @@ var QRCode = { }; export { QRCode }; -export default QRCode; \ No newline at end of file +export default QRCode; diff --git a/plugins/plugins/core/components/ReusableImage.js b/plugins/plugins/core/components/ReusableImage.js index 1c53f003..2ea59214 100644 --- a/plugins/plugins/core/components/ReusableImage.js +++ b/plugins/plugins/core/components/ReusableImage.js @@ -1,5 +1,5 @@ import {css, html, LitElement} from 'lit' -import {translate,} from '../../../../core/translate/index.js' +import {translate,} from '../../../../core/translate' import axios from 'axios' import {RequestQueueWithPromise} from '../../utils/queue' import '@material/mwc-menu' @@ -121,26 +121,20 @@ export class ResuableImage extends LitElement { window.parent.reduxStore.getState().app.nodeConfig.node ] - const nodeUrl = - myNode.protocol + '://' + myNode.domain + ':' + myNode.port - return nodeUrl + return myNode.protocol + '://' + myNode.domain + ':' + myNode.port } getMyNode() { - const myNode = - window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ - window.parent.reduxStore.getState().app.nodeConfig.node + return window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ + window.parent.reduxStore.getState().app.nodeConfig.node ] - - return myNode } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node - ]; - let apiKey = myNode.apiKey - return apiKey + ] + return myNode.apiKey } async fetchResource() { @@ -160,7 +154,7 @@ export class ResuableImage extends LitElement { } async fetchVideoUrl() { - this.fetchResource(); + await this.fetchResource(); this.url = `${this.nodeUrl}/arbitrary/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?async=true&apiKey=${this.myNode.apiKey}` } @@ -217,7 +211,7 @@ export class ResuableImage extends LitElement { this.status = res if (this.status.status === 'DOWNLOADED') { - this.fetchResource() + await this.fetchResource() } } @@ -239,12 +233,12 @@ export class ResuableImage extends LitElement { async _fetchImage() { try { - this.fetchVideoUrl({ + await this.fetchVideoUrl({ name: this.resource.name, service: this.resource.service, identifier: this.resource.identifier, }); - this.fetchStatus() + await this.fetchStatus() } catch (error) { /* empty */ } } diff --git a/plugins/plugins/core/components/TipUser.js b/plugins/plugins/core/components/TipUser.js index e2ab7d7e..6688e43b 100644 --- a/plugins/plugins/core/components/TipUser.js +++ b/plugins/plugins/core/components/TipUser.js @@ -3,7 +3,7 @@ import {tipUserStyles} from './TipUser-css.js' import {Epml} from '../../../epml' import '@vaadin/button' import '@polymer/paper-progress/paper-progress.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' const parentEpml = new Epml({ type: "WINDOW", source: window.parent }); @@ -36,7 +36,7 @@ export class TipUser extends LitElement { async firstUpdated() { await this.fetchWalletDetails() - this.paymentFee() + await this.paymentFee() } updated(changedProperties) { @@ -50,11 +50,10 @@ export class TipUser extends LitElement { } async getLastRef() { - let myRef = await parentEpml.request("apiCall", { - type: "api", - url: `/addresses/lastreference/${this.myAddress.address}`, - }) - return myRef + return await parentEpml.request("apiCall", { + type: "api", + url: `/addresses/lastreference/${this.myAddress.address}`, + }) } async getSendQortFee() { @@ -89,8 +88,7 @@ export class TipUser extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } async fetchWalletDetails() { @@ -140,7 +138,7 @@ export class TipUser extends LitElement { }; const validateAddress = async (receiverAddress) => { - return await window.parent.validateAddress(receiverAddress); + return window.parent.validateAddress(receiverAddress); }; const getName = async (recipient) => { diff --git a/plugins/plugins/core/components/TradeInfoView.js b/plugins/plugins/core/components/TradeInfoView.js index 40c08edd..d7c01216 100644 --- a/plugins/plugins/core/components/TradeInfoView.js +++ b/plugins/plugins/core/components/TradeInfoView.js @@ -1,7 +1,6 @@ -import {css, html, LitElement} from 'lit' -import {render} from 'lit/html.js' +import {html, LitElement} from 'lit' import {Epml} from '../../../epml.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import {tradeInfoViewStyle} from './TradeInfoView-css.js' import './TraderInfoView.js' import '@polymer/paper-dialog/paper-dialog.js' @@ -161,11 +160,9 @@ class TradeInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const infoSellerAddressUrl = `${nodeUrl}/addresses/${seller}` - const qortalSellerAddressInfo = await fetch(infoSellerAddressUrl).then(response => { - return response.json() - }) - - this.addressSellerResult = qortalSellerAddressInfo + this.addressSellerResult = await fetch(infoSellerAddressUrl).then(response => { + return response.json() + }) } async getAddressBuyerInfo(buyer) { @@ -174,11 +171,9 @@ class TradeInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const infoBuyerAddressUrl = `${nodeUrl}/addresses/${buyer}` - const qortalBuyerAddressInfo = await fetch(infoBuyerAddressUrl).then(response => { - return response.json() - }) - - this.addressBuyerResult = qortalBuyerAddressInfo + this.addressBuyerResult = await fetch(infoBuyerAddressUrl).then(response => { + return response.json() + }) } async getAddressSellerAvatar(seller) { @@ -202,8 +197,7 @@ class TradeInfoView extends LitElement { } }) - const sellerImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.sellerImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.sellerImage = sellerImageUrl + this.sellerImage = `${nodeUrl}/arbitrary/THUMBNAIL/${this.sellerImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` } async getAddressBuyerAvatar(buyer) { @@ -227,8 +221,7 @@ class TradeInfoView extends LitElement { } }) - const buyerImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.buyerImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.buyerImage = buyerImageUrl + this.buyerImage = `${nodeUrl}/arbitrary/THUMBNAIL/${this.buyerImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` } avatarSellerImage() { @@ -257,8 +250,7 @@ class TradeInfoView extends LitElement { getApiKey() { const apiNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = apiNode.apiKey; - return apiKey; + return apiNode.apiKey; } isEmptyArray(arr) { @@ -269,8 +261,7 @@ class TradeInfoView extends LitElement { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } } diff --git a/plugins/plugins/core/components/TraderInfoView.js b/plugins/plugins/core/components/TraderInfoView.js index 1fe1fce6..539c3f78 100644 --- a/plugins/plugins/core/components/TraderInfoView.js +++ b/plugins/plugins/core/components/TraderInfoView.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' @@ -1375,13 +1375,11 @@ class TraderInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const fromNameUrl = `${nodeUrl}/names/${fromName}` - const qortalNameInfo = await fetch(fromNameUrl).then(response => { - return response.json() - }) - - this.nameAddressResult = qortalNameInfo + this.nameAddressResult = await fetch(fromNameUrl).then(response => { + return response.json() + }) const nameAddress = this.nameAddressResult.owner - this.getAllWithAddress(nameAddress) + await this.getAllWithAddress(nameAddress) } async getAllWithAddress(myAddress) { @@ -1402,11 +1400,9 @@ class TraderInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const infoAddressUrl = `${nodeUrl}/addresses/${infoAddress}` - const qortalAddressInfo = await fetch(infoAddressUrl).then(response => { - return response.json() - }) - - this.addressResult = qortalAddressInfo + this.addressResult = await fetch(infoAddressUrl).then(response => { + return response.json() + }) } async getAddressUserAvatar(avatarAddress) { @@ -1428,8 +1424,7 @@ class TraderInfoView extends LitElement { } }) - const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.imageUrl = myImageUrl + this.imageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` } async getAddressUserBalance(balanceAddress) { @@ -1452,19 +1447,15 @@ class TraderInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port if (checkBlocks === 0) { - let noMinterString = get("explorerpage.exp16") - this.startMintTime = noMinterString + this.startMintTime = get("explorerpage.exp16") } else { const rewardshareUrl = `${nodeUrl}/transactions/search?txType=REWARD_SHARE&address=${mintAddress}&confirmationStatus=CONFIRMED&limit=1&reverse=false` - const startMinting = await fetch(rewardshareUrl).then(response => { - return response.json() - }) + this.startMinting = await fetch(rewardshareUrl).then(response => { + return response.json() + }) - this.startMinting = startMinting - - const mintString = new Date(this.startMinting[0].timestamp).toLocaleDateString() - this.startMintTime = mintString + this.startMintTime = new Date(this.startMinting[0].timestamp).toLocaleDateString() } } @@ -1930,8 +1921,7 @@ class TraderInfoView extends LitElement { getApiKey() { const apiNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = apiNode.apiKey; - return apiKey; + return apiNode.apiKey } isEmptyArray(arr) { @@ -1942,8 +1932,7 @@ class TraderInfoView extends LitElement { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } } diff --git a/plugins/plugins/core/components/UserInfo/UserInfo.js b/plugins/plugins/core/components/UserInfo/UserInfo.js index c81542b0..5d66c36c 100644 --- a/plugins/plugins/core/components/UserInfo/UserInfo.js +++ b/plugins/plugins/core/components/UserInfo/UserInfo.js @@ -1,5 +1,5 @@ import {html, LitElement} from 'lit' -import {translate} from '../../../../../core/translate/index.js' +import {translate} from '../../../../../core/translate' import {userInfoStyles} from './UserInfo-css.js' import {cropAddress} from '../../../utils/cropAddress.js' @@ -118,13 +118,13 @@ export class UserInfo extends LitElement { this.openProfile() }, 250); this.setOpenUserInfo(false) - - + + }}> ${translate("profile.profile18")}
    ` : ''} - + ` } diff --git a/plugins/plugins/core/components/frag-file-input.js b/plugins/plugins/core/components/frag-file-input.js index 17744b88..3afa739c 100644 --- a/plugins/plugins/core/components/frag-file-input.js +++ b/plugins/plugins/core/components/frag-file-input.js @@ -3,7 +3,7 @@ import {css, html, LitElement} from 'lit' import '@material/mwc-button' import '@material/mwc-icon' -import {translate} from '../../../../core/translate/index.js' +import {translate} from '../../../../core/translate' class FragFileInput extends LitElement { static get properties () { diff --git a/plugins/plugins/core/components/qdn-action-encryption.js b/plugins/plugins/core/components/qdn-action-encryption.js index 1165807a..cabd288a 100644 --- a/plugins/plugins/core/components/qdn-action-encryption.js +++ b/plugins/plugins/core/components/qdn-action-encryption.js @@ -91,18 +91,16 @@ export function uint8ArrayToObject(uint8Array) { const jsonString = decoder.decode(uint8Array) // Convert the JSON string back into an object - const obj = JSON.parse(jsonString) - - return obj + return JSON.parse(jsonString) } export function objectToBase64(obj) { // Step 1: Convert the object to a JSON string const jsonString = JSON.stringify(obj); - + // Step 2: Create a Blob from the JSON string const blob = new Blob([jsonString], { type: 'application/json' }); - + // Step 3: Create a FileReader to read the Blob as a base64-encoded string return new Promise((resolve, reject) => { const reader = new FileReader(); @@ -128,8 +126,7 @@ export function uint8ArrayToObject(uint8Array) { export const encryptData = ({ data64, recipientPublicKey }) => { - const Uint8ArrayData = base64ToUint8Array(data64) - const uint8Array = Uint8ArrayData + const uint8Array = base64ToUint8Array(data64) if (!(uint8Array instanceof Uint8Array)) { @@ -220,7 +217,7 @@ export const encryptDataGroup = ({ data64, publicKeys }) => { const convertedPublicKey = ed2curve.convertPublicKey(publicKeyUnit8Array) const sharedSecret = new Uint8Array(32) - // the length of the sharedSecret will be 32 + 16 + // the length of the sharedSecret will be 32 + 16 // When you're encrypting data using nacl.secretbox, it's adding an authentication tag to the result, which is 16 bytes long. This tag is used for verifying the integrity and authenticity of the data when it is decrypted nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey) @@ -264,8 +261,7 @@ export const encryptDataGroup = ({ data64, publicKeys }) => { }); const countArray = new Uint8Array(new Uint32Array([publicKeysDuplicateFree.length]).buffer); combinedData.set(countArray, combinedData.length - 4); - const uint8arrayToData64 = uint8ArrayToBase64(combinedData) - return uint8arrayToData64; + return uint8ArrayToBase64(combinedData); } catch (error) { throw new Error("Error in encrypting data") @@ -317,8 +313,7 @@ export function decryptDeprecatedSingle(uint8Array, publicKey) { if (!_decryptedData) { throw new Error("Unable to decrypt") } - const decryptedDataToBase64 = uint8ArrayToBase64(_decryptedData) - return decryptedDataToBase64 + return uint8ArrayToBase64(_decryptedData) } export function decryptGroupData(data64EncryptedData) { diff --git a/plugins/plugins/core/components/qdn-action-types.js b/plugins/plugins/core/components/qdn-action-types.js index e6aeb21f..6a75af07 100644 --- a/plugins/plugins/core/components/qdn-action-types.js +++ b/plugins/plugins/core/components/qdn-action-types.js @@ -28,6 +28,9 @@ export const GET_USER_WALLET_INFO = 'GET_USER_WALLET_INFO'; // GET_CROSSCHAIN_SERVER_INFO action export const GET_CROSSCHAIN_SERVER_INFO = 'GET_CROSSCHAIN_SERVER_INFO'; +// GET_TX_ACTIVITY_SUMMARY action +export const GET_TX_ACTIVITY_SUMMARY = 'GET_TX_ACTIVITY_SUMMARY'; + // GET_WALLET_BALANCE action export const GET_WALLET_BALANCE = 'GET_WALLET_BALANCE'; diff --git a/plugins/plugins/core/components/qortal-info-view.js b/plugins/plugins/core/components/qortal-info-view.js index 9c97050b..b7afb6a6 100644 --- a/plugins/plugins/core/components/qortal-info-view.js +++ b/plugins/plugins/core/components/qortal-info-view.js @@ -1,6 +1,6 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' -import {get, translate} from '../../../../core/translate/index.js' +import {get, translate} from '../../../../core/translate' import '@polymer/paper-dialog/paper-dialog.js' import '@material/mwc-button' import '@material/mwc-icon' @@ -1298,13 +1298,11 @@ class QortalInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const fromNameUrl = `${nodeUrl}/names/${fromName}` - const qortalNameInfo = await fetch(fromNameUrl).then(response => { - return response.json() - }) - - this.nameAddressResult = qortalNameInfo + this.nameAddressResult = await fetch(fromNameUrl).then(response => { + return response.json() + }) const nameAddress = this.nameAddressResult.owner - this.getAllWithAddress(nameAddress) + await this.getAllWithAddress(nameAddress) } async getAllWithAddress(myAddress) { @@ -1325,11 +1323,9 @@ class QortalInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const infoAddressUrl = `${nodeUrl}/addresses/${infoAddress}` - const qortalAddressInfo = await fetch(infoAddressUrl).then(response => { - return response.json() - }) - - this.addressResult = qortalAddressInfo + this.addressResult = await fetch(infoAddressUrl).then(response => { + return response.json() + }) } async getAddressUserAvatar(avatarAddress) { @@ -1351,8 +1347,7 @@ class QortalInfoView extends LitElement { } }) - const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` - this.imageUrl = myImageUrl + this.imageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}` } async getAddressUserBalance(balanceAddress) { @@ -1378,28 +1373,22 @@ class QortalInfoView extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port if (checkBlocks === 0) { - let noMinterString = get("explorerpage.exp16") - this.startMintTime = noMinterString + this.startMintTime = get("explorerpage.exp16") } else { const blockheightUrl = `${nodeUrl}/blocks/height` - const currentBlockheight = await fetch(blockheightUrl).then(response => { - return response.json() - }) - - this.actualBlockheight = currentBlockheight + this.actualBlockheight = await fetch(blockheightUrl).then(response => { + return response.json() + }) this.reduceBlockheight = this.addressResult.blocksMinted + this.addressResult.blocksMintedAdjustment this.startMintBlockheight = (this.actualBlockheight - this.reduceBlockheight) const startMintUrl = `${nodeUrl}/blocks/byheight/${this.startMintBlockheight}?includeOnlineSignatures=false` - const startMintBlock = await fetch(startMintUrl).then(response => { - return response.json() - }) + this.startMintBlock = await fetch(startMintUrl).then(response => { + return response.json() + }) - this.startMintBlock = startMintBlock - - const mintString = new Date(this.startMintBlock.timestamp).toLocaleDateString() - this.startMintTime = mintString + this.startMintTime = new Date(this.startMintBlock.timestamp).toLocaleDateString() } } @@ -1854,8 +1843,7 @@ class QortalInfoView extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } isEmptyArray(arr) { @@ -1866,8 +1854,7 @@ class QortalInfoView extends LitElement { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } } diff --git a/plugins/plugins/core/components/time-elements/extended-time-element.js b/plugins/plugins/core/components/time-elements/extended-time-element.js index fce17b2d..874a1a89 100644 --- a/plugins/plugins/core/components/time-elements/extended-time-element.js +++ b/plugins/plugins/core/components/time-elements/extended-time-element.js @@ -75,7 +75,7 @@ export default class ExtendedTimeElement extends HTMLElement { } } getFormattedDate() { - return; + } } const titleFormatter = makeFormatter({ diff --git a/plugins/plugins/core/components/time-elements/index.js b/plugins/plugins/core/components/time-elements/index.js index 8b3dbe4c..961c29d9 100644 --- a/plugins/plugins/core/components/time-elements/index.js +++ b/plugins/plugins/core/components/time-elements/index.js @@ -240,7 +240,7 @@ class ExtendedTimeElement extends HTMLElement { } } getFormattedDate() { - return; + } } const titleFormatter = makeFormatter({ diff --git a/plugins/plugins/core/components/webworkerDecodeMessages.js b/plugins/plugins/core/components/webworkerDecodeMessages.js index 4c6af4f7..c12c004a 100644 --- a/plugins/plugins/core/components/webworkerDecodeMessages.js +++ b/plugins/plugins/core/components/webworkerDecodeMessages.js @@ -2379,7 +2379,7 @@ nacl.verify = function(x, y) { // Zero length arguments are considered not equal. if (x.length === 0 || y.length === 0) return false; if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; + return (vn(x, 0, y, 0, x.length) === 0); }; nacl.setPRNG = function(fn) { diff --git a/plugins/plugins/core/group-management/group-management.src.js b/plugins/plugins/core/group-management/group-management.src.js index a335cb3c..da426a27 100644 --- a/plugins/plugins/core/group-management/group-management.src.js +++ b/plugins/plugins/core/group-management/group-management.src.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import '../components/time-elements/index.js' import '@material/mwc-button' import '@material/mwc-dialog' @@ -1374,8 +1374,7 @@ class GroupManagement extends LitElement { this.filteredItems = [] const searchTerm = (e.target.value || '').trim() const keys = ['groupName', 'description', 'owner'] - const filtered = this.publicGroups.filter((search) => keys.some((key) => search[key].toLowerCase().includes(searchTerm.toLowerCase()))) - this.filteredItems = filtered + this.filteredItems = this.publicGroups.filter((search) => keys.some((key) => search[key].toLowerCase().includes(searchTerm.toLowerCase()))) }}" > @@ -1724,29 +1723,25 @@ class GroupManagement extends LitElement { let openG = await parentEpml.request('apiCall', { url: `/groups?limit=0&reverse=true` }) - let myGs = openG.filter(myG => myG.isOpen === true) - return myGs + return openG.filter(myG => myG.isOpen === true) } const getPrivateGroups = async () => { let privateG = await parentEpml.request('apiCall', { url: `/groups?limit=0&reverse=true` }) - let myPgs = privateG.filter(myP => myP.isOpen === false) - return myPgs + return privateG.filter(myP => myP.isOpen === false) } const getJoinedGroups = async () => { - let joinedG = await parentEpml.request('apiCall', { - url: `/groups/member/${this.selectedAddress.address}` - }) - return joinedG + return await parentEpml.request('apiCall', { + url: `/groups/member/${this.selectedAddress.address}` + }) } const getGroupInfo = async (groupId) => { - let joinedG = await parentEpml.request('apiCall', { - url: `/groups/${groupId}` - }) - return joinedG + return await parentEpml.request('apiCall', { + url: `/groups/${groupId}` + }) } const getGroupInvites = async () => { @@ -1769,14 +1764,16 @@ class GroupManagement extends LitElement { clearTimeout(timerGroupInvites) timerGroupInvites = setTimeout(getGroupInvites, 300000) } else { - this.myGroupInvites.map(a => { + const currentTime = Date.now() + this.myGroupInvites.forEach(a => { + if (a.expiry > currentTime) { let callTheNewInviteUrl = `${nodeUrl}/groups/${a.groupId}` fetch(callTheNewInviteUrl).then(res => { return res.json() }).then(jsonRes => { myArrObj.push(jsonRes) if (myArrObj.length) { - myArrObj.map(b => { + myArrObj.forEach(b => { const infoObjToAdd = { invitee: a.invitee, groupId: b.groupId, @@ -1793,6 +1790,7 @@ class GroupManagement extends LitElement { } this.groupInvites = myInvitesObj }) + } }) } setTimeout(getGroupInvites, 300000) @@ -1802,11 +1800,10 @@ class GroupManagement extends LitElement { let _joinedGroups = await getJoinedGroups() let _publicGroups = await getOpenPublicGroups() let _privateGroups = await getPrivateGroups() - let results = _publicGroups.filter(myOpenGroup => { - let value = _joinedGroups.some(myJoinedGroup => myOpenGroup.groupId === myJoinedGroup.groupId) - return !value - }); - this.publicGroups = results + this.publicGroups = _publicGroups.filter(myOpenGroup => { + let value = _joinedGroups.some(myJoinedGroup => myOpenGroup.groupId === myJoinedGroup.groupId) + return !value + }) this.privateGroups = _privateGroups this.joinedGroups = _joinedGroups this.filteredItems = this.publicGroups @@ -2245,13 +2242,11 @@ class GroupManagement extends LitElement { const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port const fromNameUrl = `${nodeUrl}/names/${_inviteMemberInfo}` - const qortalNameInfo = await fetch(fromNameUrl).then(response => { - return response.json() - }) - - this.nameAddressResult = qortalNameInfo + this.nameAddressResult = await fetch(fromNameUrl).then(response => { + return response.json() + }) const _inviteMemberNameInfo = this.nameAddressResult.owner - this.createInviteGroupMember(_inviteMemberNameInfo, _nviteMemberTime, _inviteGroupId) + await this.createInviteGroupMember(_inviteMemberNameInfo, _nviteMemberTime, _inviteGroupId) } closeErrorDialog() { @@ -2414,8 +2409,7 @@ class GroupManagement extends LitElement { await fetch(callMembersUrl).then(res => { return res.json() }).then(data => { - let groupMemberToParse = data - groupMemberToParse.members.map(a => { + data.members.map(a => { if (a.isAdmin === undefined) { let callTheNewMember = a.member let callSingleMemberUrl = `${nodeUrl}/names/address/${callTheNewMember}` @@ -2488,7 +2482,7 @@ class GroupManagement extends LitElement { }) if (this.bannedMembers.length === 0) { - return + } else { this.bannedMembers.map(a => { let callTheBannedMember = a.offender @@ -2539,7 +2533,7 @@ class GroupManagement extends LitElement { }) if (this.groupInviteMembers.length === 0) { - return + } else { this.groupInviteMembers.map(a => { let callTheInviteMember = a.invitee @@ -2586,7 +2580,7 @@ class GroupManagement extends LitElement { }) if (this.groupJoinMembers.length === 0) { - return + } else { this.groupJoinMembers.map(a => { let callTheJoinMember = a.joiner @@ -2695,14 +2689,11 @@ class GroupManagement extends LitElement { renderRole(groupObj) { if (groupObj.owner === this.selectedAddress.address) { - let ownerstring = get("grouppage.gchange10") - return ownerstring + return get("grouppage.gchange10") } else if (groupObj.isAdmin === true) { - let adminstring = get("grouppage.gchange52") - return adminstring + return get("grouppage.gchange52") } else { - let memberstring = get("grouppage.gchange53") - return memberstring + return get("grouppage.gchange53") } } @@ -2710,7 +2701,8 @@ class GroupManagement extends LitElement { if (groupObj.owner === this.selectedAddress.address) { return html` this.manageGroupOwner(groupObj)}>create ${translate("grouppage.gchange40")}` } else if (groupObj.isAdmin === true) { - return html` this.manageGroupAdmin(groupObj)}>create ${translate("grouppage.gchange40")}` + return html` this.manageGroupAdmin(groupObj)}>create ${translate("grouppage.gchange40")} +
    this.leaveGroup(groupObj)}>exit_to_app ${translate("grouppage.gchange50")}` } else { return html` this.leaveGroup(groupObj)}>exit_to_app ${translate("grouppage.gchange50")}` } @@ -2779,11 +2771,10 @@ class GroupManagement extends LitElement { this.isLoading = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -2805,27 +2796,26 @@ class GroupManagement extends LitElement { let groupdialog7 = get("grouppage.gchange4") let groupdialog8 = get("grouppage.gchange5") let groupdialog9 = get("grouppage.gchange13") - let myTxnrequest = await parentEpml.request('transaction', { - type: 22, - nonce: this.selectedAddress.nonce, - params: { - fee: createFeeInput, - registrantAddress: this.selectedAddress.address, - rGroupName: groupNameInput, - rGroupDesc: groupDescInput, - rGroupType: _groupTypeInput, - rGroupApprovalThreshold: _groupApprovalInput, - rGroupMinimumBlockDelay: _groupMinDelayInput, - rGroupMaximumBlockDelay: _groupMaxDelayInput, - lastReference: lastRef, - groupdialog5: groupdialog5, - groupdialog6: groupdialog6, - groupdialog7: groupdialog7, - groupdialog8: groupdialog8, - groupdialog9: groupdialog9, - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 22, + nonce: this.selectedAddress.nonce, + params: { + fee: createFeeInput, + registrantAddress: this.selectedAddress.address, + rGroupName: groupNameInput, + rGroupDesc: groupDescInput, + rGroupType: _groupTypeInput, + rGroupApprovalThreshold: _groupApprovalInput, + rGroupMinimumBlockDelay: _groupMinDelayInput, + rGroupMaximumBlockDelay: _groupMaxDelayInput, + lastReference: lastRef, + groupdialog5: groupdialog5, + groupdialog6: groupdialog6, + groupdialog7: groupdialog7, + groupdialog8: groupdialog8, + groupdialog9: groupdialog9, + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -2869,7 +2859,7 @@ class GroupManagement extends LitElement { this.isLoading = false } else { this.error = false - validateReceiver() + await validateReceiver() } } @@ -2891,11 +2881,10 @@ class GroupManagement extends LitElement { this.isLoading = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -2909,21 +2898,20 @@ class GroupManagement extends LitElement { const makeTransactionRequest = async (lastRef) => { let groupdialog1 = get("transactions.groupdialog1") let groupdialog2 = get("transactions.groupdialog2") - let myTxnrequest = await parentEpml.request('transaction', { - type: 31, - nonce: this.selectedAddress.nonce, - params: { - fee: joinFeeInput, - registrantAddress: this.selectedAddress.address, - rGroupName: groupName, - rGroupId: groupId, - lastReference: lastRef, - groupdialog1: groupdialog1, - groupdialog2: groupdialog2 - }, - apiVersion: 2 - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 31, + nonce: this.selectedAddress.nonce, + params: { + fee: joinFeeInput, + registrantAddress: this.selectedAddress.address, + rGroupName: groupName, + rGroupId: groupId, + lastReference: lastRef, + groupdialog1: groupdialog1, + groupdialog2: groupdialog2 + }, + apiVersion: 2 + }) } const getTxnRequestResponse = (txnResponse) => { @@ -2946,7 +2934,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() this.resetDefaultSettings() } @@ -2957,11 +2945,10 @@ class GroupManagement extends LitElement { this.isLoading = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; const validateReceiver = async () => { @@ -2975,20 +2962,19 @@ class GroupManagement extends LitElement { const makeTransactionRequest = async (lastRef) => { let groupdialog3 = get("transactions.groupdialog3") let groupdialog4 = get("transactions.groupdialog4") - let myTxnrequest = await parentEpml.request('transaction', { - type: 32, - nonce: this.selectedAddress.nonce, - params: { - fee: leaveFeeInput, - registrantAddress: this.selectedAddress.address, - rGroupName: groupName, - rGroupId: groupId, - lastReference: lastRef, - groupdialog3: groupdialog3, - groupdialog4: groupdialog4 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 32, + nonce: this.selectedAddress.nonce, + params: { + fee: leaveFeeInput, + registrantAddress: this.selectedAddress.address, + rGroupName: groupName, + rGroupId: groupId, + lastReference: lastRef, + groupdialog3: groupdialog3, + groupdialog4: groupdialog4 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3006,7 +2992,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() this.resetDefaultSettings() } @@ -3020,11 +3006,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3045,21 +3030,20 @@ class GroupManagement extends LitElement { const myBanMemberDialog1 = get("managegroup.mg22") const myBanMemberDialog2 = get("managegroup.mg23") - let myTxnrequest = await parentEpml.request('transaction', { - type: 26, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - rBanReason: myReason, - rBanTime: myBanTime, - lastReference: myLastRef, - banMemberDialog1: myBanMemberDialog1, - banMemberDialog2: myBanMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 26, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + rBanReason: myReason, + rBanTime: myBanTime, + lastReference: myLastRef, + banMemberDialog1: myBanMemberDialog1, + banMemberDialog2: myBanMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3099,7 +3083,7 @@ class GroupManagement extends LitElement { this.isLoading = false } else { this.error = false - validateReceiver() + await validateReceiver() } } @@ -3111,11 +3095,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3133,19 +3116,18 @@ class GroupManagement extends LitElement { const myCancelBanMemberDialog1 = get("managegroup.mg29") const myCancelBanMemberDialog2 = get("managegroup.mg30") - let myTxnrequest = await parentEpml.request('transaction', { - type: 27, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - lastReference: myLastRef, - cancelBanMemberDialog1: myCancelBanMemberDialog1, - cancelBanMemberDialog2: myCancelBanMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 27, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + lastReference: myLastRef, + cancelBanMemberDialog1: myCancelBanMemberDialog1, + cancelBanMemberDialog2: myCancelBanMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3168,7 +3150,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async createInviteGroupMember(_inviteMemberNameInfo, _nviteMemberTime, _inviteGroupId) { @@ -3180,11 +3162,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3202,20 +3183,19 @@ class GroupManagement extends LitElement { const myInviteMemberDialog1 = get("managegroup.mg40") const myInviteMemberDialog2 = get("managegroup.mg41") - let myTxnrequest = await parentEpml.request('transaction', { - type: 29, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - rInviteTime: myInviteTime, - lastReference: myLastRef, - inviteMemberDialog1: myInviteMemberDialog1, - inviteMemberDialog2: myInviteMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 29, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + rInviteTime: myInviteTime, + lastReference: myLastRef, + inviteMemberDialog1: myInviteMemberDialog1, + inviteMemberDialog2: myInviteMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3240,7 +3220,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async cancelInviteGroupMember(groupId) { @@ -3252,11 +3232,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3274,20 +3253,19 @@ class GroupManagement extends LitElement { const myCancelInviteDialog1 = get("managegroup.mg48") const myCancelInviteDialog2 = get("managegroup.mg49") - let myTxnrequest = await parentEpml.request('transaction', { - type: 30, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - memberName: myName, - recipient: myMember, - rGroupId: myGroupId, - lastReference: myLastRef, - cancelInviteDialog1: myCancelInviteDialog1, - cancelInviteDialog2: myCancelInviteDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 30, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + memberName: myName, + recipient: myMember, + rGroupId: myGroupId, + lastReference: myLastRef, + cancelInviteDialog1: myCancelInviteDialog1, + cancelInviteDialog2: myCancelInviteDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3312,7 +3290,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async createAcceptJoinGroupMember(joinObj) { @@ -3324,11 +3302,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3346,20 +3323,19 @@ class GroupManagement extends LitElement { const myInviteMemberDialog1 = get("managegroup.mg55") const myInviteMemberDialog2 = get("managegroup.mg56") - let myTxnrequest = await parentEpml.request('transaction', { - type: 29, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - rInviteTime: myInviteTime, - lastReference: myLastRef, - inviteMemberDialog1: myInviteMemberDialog1, - inviteMemberDialog2: myInviteMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 29, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + rInviteTime: myInviteTime, + lastReference: myLastRef, + inviteMemberDialog1: myInviteMemberDialog1, + inviteMemberDialog2: myInviteMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3383,7 +3359,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async kickJoinGroupMember(joinObj) { @@ -3395,11 +3371,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3417,20 +3392,19 @@ class GroupManagement extends LitElement { const myKickMemberDialog1 = get("managegroup.mg60") const myKickMemberDialog2 = get("managegroup.mg61") - let myTxnrequest = await parentEpml.request('transaction', { - type: 28, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - rBanReason: myReason, - lastReference: myLastRef, - kickMemberDialog1: myKickMemberDialog1, - kickMemberDialog2: myKickMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 28, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + rBanReason: myReason, + lastReference: myLastRef, + kickMemberDialog1: myKickMemberDialog1, + kickMemberDialog2: myKickMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3454,7 +3428,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async addGroupAdmin(groupId) { @@ -3465,11 +3439,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3486,19 +3459,18 @@ class GroupManagement extends LitElement { const myAddAdminDialog1 = get("managegroup.mg11") const myAddAdminDialog2 = get("managegroup.mg12") - let myTxnrequest = await parentEpml.request('transaction', { - type: 24, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - lastReference: myLastRef, - addAdminDialog1: myAddAdminDialog1, - addAdminDialog2: myAddAdminDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 24, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + lastReference: myLastRef, + addAdminDialog1: myAddAdminDialog1, + addAdminDialog2: myAddAdminDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3521,7 +3493,7 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async kickGroupMember(groupId) { @@ -3533,11 +3505,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3555,20 +3526,19 @@ class GroupManagement extends LitElement { const myKickMemberDialog1 = get("managegroup.mg33") const myKickMemberDialog2 = get("managegroup.mg34") - let myTxnrequest = await parentEpml.request('transaction', { - type: 28, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myMember, - rGroupId: myGroupId, - rBanReason: myReason, - lastReference: myLastRef, - kickMemberDialog1: myKickMemberDialog1, - kickMemberDialog2: myKickMemberDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 28, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myMember, + rGroupId: myGroupId, + rBanReason: myReason, + lastReference: myLastRef, + kickMemberDialog1: myKickMemberDialog1, + kickMemberDialog2: myKickMemberDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3602,7 +3572,7 @@ class GroupManagement extends LitElement { this.isLoading = false } else { this.error = false - validateReceiver() + await validateReceiver() } } @@ -3614,11 +3584,10 @@ class GroupManagement extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -3636,19 +3605,18 @@ class GroupManagement extends LitElement { const myKickAdminDialog1 = get("managegroup.mg15") const myKickAdminDialog2 = get("managegroup.mg16") - let myTxnrequest = await parentEpml.request('transaction', { - type: 25, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - recipient: myKickAdmin, - rGroupId: myGroupId, - lastReference: myLastRef, - kickAdminDialog1: myKickAdminDialog1, - kickAdminDialog2: myKickAdminDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 25, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + recipient: myKickAdmin, + rGroupId: myGroupId, + lastReference: myLastRef, + kickAdminDialog1: myKickAdminDialog1, + kickAdminDialog2: myKickAdminDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -3671,13 +3639,12 @@ class GroupManagement extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } isEmptyArray(arr) { diff --git a/plugins/plugins/core/group-management/group-transaction/group-transaction.src.js b/plugins/plugins/core/group-management/group-transaction/group-transaction.src.js index fec02327..6fe47a15 100644 --- a/plugins/plugins/core/group-management/group-transaction/group-transaction.src.js +++ b/plugins/plugins/core/group-management/group-transaction/group-transaction.src.js @@ -134,8 +134,7 @@ class GroupTransaction extends LitElement { let tempUrl = document.location.href let decodeTempUrl = decodeURI(tempUrl) let splitedUrl = decodeTempUrl.split('?') - let myGroupId = splitedUrl[1] - this.addMintingAccountMessage = myGroupId + this.addMintingAccountMessage = splitedUrl[1] } getGroupIdFromURL() diff --git a/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js b/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js index 08408ca2..95c8afb9 100644 --- a/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js +++ b/plugins/plugins/core/messaging/q-chat/q-chat-css.src.js @@ -1,483 +1,479 @@ import {css} from 'lit' -export const qchatStyles = css` - * { - --mdc-theme-primary: rgb(3, 169, 244); - --mdc-theme-secondary: var(--mdc-theme-primary); - --paper-input-container-focus-color: var(--mdc-theme-primary); - --mdc-theme-surface: var(--white); - --mdc-dialog-content-ink-color: var(--black); - --lumo-primary-text-color: rgb(0, 167, 245); - --lumo-primary-color-50pct: rgba(0, 167, 245, 0.5); - --lumo-primary-color-10pct: rgba(0, 167, 245, 0.1); - --lumo-primary-color: hsl(199, 100%, 48%); - --lumo-base-color: var(--white); - --lumo-body-text-color: var(--black); - --_lumo-grid-border-color: var(--border); - --_lumo-grid-secondary-border-color: var(--border2); - --mdc-dialog-min-width: 750px; - } +export const qchatStyles = css` + * { + --mdc-theme-primary: rgb(3, 169, 244); + --mdc-theme-secondary: var(--mdc-theme-primary); + --paper-input-container-focus-color: var(--mdc-theme-primary); + --mdc-theme-surface: var(--white); + --mdc-dialog-content-ink-color: var(--black); + --lumo-primary-text-color: rgb(0, 167, 245); + --lumo-primary-color-50pct: rgba(0, 167, 245, 0.5); + --lumo-primary-color-10pct: rgba(0, 167, 245, 0.1); + --lumo-primary-color: hsl(199, 100%, 48%); + --lumo-base-color: var(--white); + --lumo-body-text-color: var(--black); + --_lumo-grid-border-color: var(--border); + --_lumo-grid-secondary-border-color: var(--border2); + --mdc-dialog-min-width: 750px; + scrollbar-width: thin; + scrollbar-color: #6a6c75 #a1a1a1; + } + + paper-spinner-lite { + height: 24px; + width: 24px; + --paper-spinner-color: var(--mdc-theme-primary); + --paper-spinner-stroke-width: 2px; + } + + *, + *:before, + *:after { + box-sizing: border-box; + } + + ul { + list-style: none; + padding: 0; + } + + .container { + margin: 0 auto; + width: 100%; + background: var(--white); + } + + .people-list { + width: 20vw; + float: left; + height: 100vh; + overflow-y: hidden; + border-right: 3px #ddd solid; + } + + .people-list .blockedusers { + z-index: 1; + position: absolute; + bottom: 0; + width: 20vw; + background: var(--white); + border-right: 3px #ddd solid; + display: flex; + justify-content: space-between; + gap: 15px; + flex-direction: column; + padding: 5px 30px 0 30px; + } + + .groups-button-container { + position: relative; + } + + .groups-button { + width: 100%; + background-color: rgb(116, 69, 240); + border: none; + color: white; + font-weight: bold; + font-family: Roboto, sans-serif; + letter-spacing: 0.8px; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + border-radius: 5px; + gap: 10px; + padding: 5px 8px; + transition: all 0.1s ease-in-out; + } + + .groups-button-notif { + position: absolute; + top: -10px; + right: -8px; + width: 25px; + border-radius: 50%; + height: 25px; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; + font-family: Montserrat, sans-serif; + font-size: 16px; + color: black; + background-color: rgb(51, 213, 0); + user-select: none; + transition: all 0.3s ease-in-out 0s; + } + + .groups-button-notif:hover { + cursor: auto; + box-shadow: rgba(99, 99, 99, 0.2) 0 2px 8px 0; + } + + .groups-button-notif:hover + .groups-button-notif-number { + display: block; + opacity: 1; + animation: fadeIn 0.6s; + } + + @keyframes fadeIn { + from { + opacity: 0; + top: -10px; + } + + to { + opacity: 1; + top: -60px; + } + } + + .groups-button-notif-number { + position: absolute; + transform: translateX(-50%); + left: 50%; + width: 150px; + text-align: center; + border-radius: 3px; + padding: 5px 10px; + background-color: white; + color: black; + font-family: Roboto, sans-serif; + letter-spacing: 0.3px; + font-weight: 300; + display: none; + opacity: 0; + top: -60px; + box-shadow: rgb(216 216 216 / 25%) 0 6px 12px -2px, rgb(0 0 0 / 30%) 0 3px 7px -3px; + } + + .groups-button:hover { + cursor: pointer; + filter: brightness(120%); + } + + .people-list .search { + padding-top: 20px; + padding-left: 20px; + padding-right: 20px; + display: flex; + align-items: center; + gap: 10px; + justify-content: space-between; + } + + .center { + margin: 0; + position: absolute; + padding-top: 12px; + left: 50%; + -ms-transform: translateX(-50%); + transform: translateX(-50%); + } + + .people-list .create-chat { + border-radius: 5px; + border: none; + color: #fff; + width: 100%; + font-size: 15px; + text-align: center; + cursor: pointer; + display: flex; + flex: 0; + } + + .people-list .create-chat:hover { + opacity: .8; + box-shadow: 0 3px 5px rgba(0, 0, 0, .2); + } + + .people-list ul { + padding: 0 0 60px 0; + height: 85vh; + overflow-y: auto; + overflow-x: hidden; + } - paper-spinner-lite { - height: 24px; - width: 24px; - --paper-spinner-color: var(--mdc-theme-primary); - --paper-spinner-stroke-width: 2px; - } - - *, - *:before, - *:after { - box-sizing: border-box; - } - - ul { - list-style: none; - padding: 0; - } - - .container { - margin: 0 auto; - width: 100%; - background: var(--white); - } - - .people-list { - width: 20vw; - float: left; - height: 100vh; - overflow-y: hidden; - border-right: 3px #ddd solid; - } - - .people-list .blockedusers { - z-index: 1; - position: absolute; - bottom: 0; - width: 20vw; - background: var(--white); - border-right: 3px #ddd solid; - display: flex; - justify-content: space-between; - gap: 15px; - flex-direction: column; - padding: 5px 30px 0 30px; - } - - .groups-button-container { - position: relative; - } - - .groups-button { - width: 100%; - background-color: rgb(116, 69, 240); - border: none; - color: white; - font-weight: bold; - font-family: 'Roboto'; - letter-spacing: 0.8px; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - border-radius: 5px; - gap: 10px; - padding: 5px 8px; - transition: all 0.1s ease-in-out; - } - - .groups-button-notif { - position: absolute; - top: -10px; - right: -8px; - width: 25px; - border-radius: 50%; - height: 25px; - font-weight: bold; - display: flex; - align-items: center; - justify-content: center; - font-family: Montserrat, sans-serif; - font-size: 16px; - font-weight: bold; - color: black; - background-color: rgb(51, 213, 0); - user-select: none; - transition: all 0.3s ease-in-out 0s; - } - - .groups-button-notif:hover { - cursor: auto; - box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px; - } - - .groups-button-notif:hover + .groups-button-notif-number { - display: block; - opacity: 1; - animation: fadeIn 0.6s; -} - -@keyframes fadeIn { - from { - opacity: 0; - top: -10px; - } - - to { - opacity: 1; - top: -60px; - } -} - - .groups-button-notif-number { - position: absolute; - transform: translateX(-50%); - left: 50%; - width: 150px; - text-align: center; - border-radius: 3px; - padding: 5px 10px; - background-color: white; - color: black; - font-family: Roboto, sans-serif; - letter-spacing: 0.3px; - font-weight: 300; - display: none; - opacity: 0; - top: -60px; - box-shadow: rgb(216 216 216 / 25%) 0px 6px 12px -2px, rgb(0 0 0 / 30%) 0px 3px 7px -3px; - } - - .groups-button:hover { - cursor: pointer; - filter: brightness(120%); - } - - .people-list .search { - padding-top: 20px; - padding-left: 20px; - padding-right: 20px; - display: flex; - align-items: center; - gap: 10px; - justify-content: space-between; - } - - .center { - margin: 0; - position: absolute; - padding-top: 12px; - left: 50%; - -ms-transform: translateX(-50%); - transform: translateX(-50%); - } - - .people-list .create-chat { - border-radius: 5px; - border: none; - display: inline-block; - color: #fff; - width: 100%; - font-size: 15px; - text-align: center; - cursor: pointer; - display: flex; - flex: 0; - } - - .people-list .create-chat:hover { - opacity: .8; - box-shadow: 0 3px 5px rgba(0, 0, 0, .2); - } - - .people-list ul { - padding: 0px 0px 60px 0px; - height: 85vh; - overflow-y: auto; - overflow-x: hidden; - } - - .people-list ul::-webkit-scrollbar-track { - background-color: whitesmoke; - border-radius: 7px; + .people-list ul::-webkit-scrollbar-track { + background: #a1a1a1; } .people-list ul::-webkit-scrollbar { - width: 6px; - border-radius: 7px; - background-color: whitesmoke; + width: 11px; } .people-list ul::-webkit-scrollbar-thumb { - background-color: rgb(180, 176, 176); - border-radius: 7px; - transition: all 0.3s ease-in-out; + background-color: #6a6c75; + border-radius: 6px; + border: 3px solid #a1a1a1; } - .chat { - width: 80vw; - height: 100vh; - float: left; - background: var(--white); - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; - color: #434651; - box-sizing: border-box; - } + .chat { + width: 80vw; + height: 100vh; + float: left; + background: var(--white); + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + color: #434651; + box-sizing: border-box; + } - .chat .new-message-bar { - display: flex; - flex: 0 1 auto; - align-items: center; - justify-content: space-between; - padding: 0px 25px; - font-size: 14px; - font-weight: 500; - top: 0; - position: absolute; - left: 20vw; - right: 0; - z-index: 5; - background: var(--tradehead); - color: var(--white); - border-radius: 0 0 8px 8px; - min-height: 25px; - transition: opacity .15s; - text-transform: capitalize; - opacity: .85; - cursor: pointer; - } - - .chat .new-message-bar:hover { - opacity: .75; - transform: translateY(-1px); - box-shadow: 0 3px 7px rgba(0, 0, 0, .2); - } - - .hide-new-message-bar { - display: none !important; - } - - .chat .chat-history { - position: absolute; - top: 0; - right: 0; - bottom: 100%; - left: 20vw; - border-bottom: 2px solid var(--white); - overflow-y: hidden; - height: 100vh; - box-sizing: border-box; - } - - .chat .chat-message { - padding: 10px; - height: 10%; - display: inline-block; - width: 100%; - background-color: #eee; - } - - .chat .chat-message textarea { - width: 90%; - border: none; - font-size: 16px; - padding: 10px 20px; - border-radius: 5px; - resize: none; - } - - .chat .chat-message button { - float: right; - color: #94c2ed; - font-size: 16px; - text-transform: uppercase; - border: none; - cursor: pointer; - font-weight: bold; - background: #f2f5f8; - padding: 10px; - margin-top: 4px; - margin-right: 4px; - } - - .chat .chat-message button:hover { - color: #75b1e8; - } - - .online, - .offline, - .me { - margin-right: 3px; - font-size: 10px; - } - - .clearfix:after { - visibility: hidden; - display: block; - font-size: 0; - content: " "; - clear: both; - height: 0; - } - - .red { - --mdc-theme-primary: red; - } - - h2 { - margin:0; - } - - h2, h3, h4, h5 { - color: var(--black); - font-weight: 400; - } - - [hidden] { - display: hidden !important; - visibility: none !important; - } - - .details { - display: flex; - font-size: 18px; - } - - .title { - font-weight:600; - font-size:12px; - line-height: 32px; - opacity: 0.66; - } - - .textarea { - width: 100%; - border: none; - display: inline-block; - font-size: 16px; - padding: 10px 20px; - border-radius: 5px; - height: 120px; - resize: none; - background: #eee; - } - - .dialog-container { - position: relative; - display: flex; - align-items: center; - flex-direction: column; - padding: 0 10px; - gap: 10px; - height: 100%; - } - - .dialog-header { - color: var(--chat-bubble-msg-color); - } - - .dialog-subheader { - color: var(--chat-bubble-msg-color); - } - - .modal-button-row { - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - } - - .modal-button { - font-family: Roboto, sans-serif; - font-size: 16px; - color: var(--mdc-theme-primary); - background-color: transparent; - padding: 8px 10px; - border-radius: 5px; - border: none; - transition: all 0.3s ease-in-out; - } - - .modal-button-red { - font-family: Roboto, sans-serif; - font-size: 16px; - color: #F44336; - background-color: transparent; - padding: 8px 10px; - border-radius: 5px; - border: none; - transition: all 0.3s ease-in-out; - } - - .modal-button-red:hover { - cursor: pointer; - background-color: #f4433663; - } - - .modal-button:hover { - cursor: pointer; - background-color: #03a8f475; - } - - .name-input { - width: 100%; - outline: 0; - border-width: 0 0 2px; - border-color: var(--mdc-theme-primary); - background-color: transparent; - padding: 10px; - font-family: Roboto, sans-serif; - font-size: 15px; - color: var(--chat-bubble-msg-color); - box-sizing: border-box; - } - - .name-input::selection { + .chat .new-message-bar { + display: flex; + flex: 0 1 auto; + align-items: center; + justify-content: space-between; + padding: 0 25px; + font-size: 14px; + font-weight: 500; + top: 0; + position: absolute; + left: 20vw; + right: 0; + z-index: 5; + background: var(--tradehead); + color: var(--white); + border-radius: 0 0 8px 8px; + min-height: 25px; + transition: opacity .15s; + text-transform: capitalize; + opacity: .85; + cursor: pointer; + } + + .chat .new-message-bar:hover { + opacity: .75; + transform: translateY(-1px); + box-shadow: 0 3px 7px rgba(0, 0, 0, .2); + } + + .hide-new-message-bar { + display: none !important; + } + + .chat .chat-history { + position: absolute; + top: 0; + right: 0; + bottom: 100%; + left: 20vw; + border-bottom: 2px solid var(--white); + overflow-y: hidden; + height: 100vh; + box-sizing: border-box; + } + + .chat .chat-message { + padding: 10px; + height: 10%; + display: inline-block; + width: 100%; + background-color: #eee; + } + + .chat .chat-message textarea { + width: 90%; + border: none; + font-size: 16px; + padding: 10px 20px; + border-radius: 5px; + resize: none; + } + + .chat .chat-message button { + float: right; + color: #94c2ed; + font-size: 16px; + text-transform: uppercase; + border: none; + cursor: pointer; + font-weight: bold; + background: #f2f5f8; + padding: 10px; + margin-top: 4px; + margin-right: 4px; + } + + .chat .chat-message button:hover { + color: #75b1e8; + } + + .online, + .offline, + .me { + margin-right: 3px; + font-size: 10px; + } + + .clearfix:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } + + .red { + --mdc-theme-primary: red; + } + + h2 { + margin:0; + } + + h2, h3, h4, h5 { + color: var(--black); + font-weight: 400; + } + + [hidden] { + display: hidden !important; + visibility: none !important; + } + + .details { + display: flex; + font-size: 18px; + } + + .title { + font-weight:600; + font-size:12px; + line-height: 32px; + opacity: 0.66; + } + + .textarea { + width: 100%; + border: none; + display: inline-block; + font-size: 16px; + padding: 10px 20px; + border-radius: 5px; + height: 120px; + resize: none; + background: #eee; + } + + .dialog-container { + position: relative; + display: flex; + align-items: center; + flex-direction: column; + padding: 0 10px; + gap: 10px; + height: 100%; + } + + .dialog-header { + color: var(--chat-bubble-msg-color); + } + + .dialog-subheader { + color: var(--chat-bubble-msg-color); + } + + .modal-button-row { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + } + + .modal-button { + font-family: Roboto, sans-serif; + font-size: 16px; + color: var(--mdc-theme-primary); + background-color: transparent; + padding: 8px 10px; + border-radius: 5px; + border: none; + transition: all 0.3s ease-in-out; + } + + .modal-button-red { + font-family: Roboto, sans-serif; + font-size: 16px; + color: #F44336; + background-color: transparent; + padding: 8px 10px; + border-radius: 5px; + border: none; + transition: all 0.3s ease-in-out; + } + + .modal-button-red:hover { + cursor: pointer; + background-color: #f4433663; + } + + .modal-button:hover { + cursor: pointer; + background-color: #03a8f475; + } + + .name-input { + width: 100%; + outline: 0; + border-width: 0 0 2px; + border-color: var(--mdc-theme-primary); + background-color: transparent; + padding: 10px; + font-family: Roboto, sans-serif; + font-size: 15px; + color: var(--chat-bubble-msg-color); + box-sizing: border-box; + } + + .name-input::selection { background-color: var(--mdc-theme-primary); color: white; - } - - .name-input::placeholder { - opacity: 0.9; - color: var(--black); - } - - .search-field { - width: 100%; - position: relative; - } - - .search-icon { - position: absolute; - right: 3px; - color: var(--chat-bubble-msg-color); - transition: all 0.3s ease-in-out; - background: none; - border-radius: 50%; - padding: 6px 3px; - font-size: 21px; - } - - .search-icon:hover { - cursor: pointer; - background: #d7d7d75c; - } - - .search-results-div { - position: absolute; - top: 25px; - right: 25px; - } - - .user-verified { - position: absolute; - top: 0; - right: 5px; - display: flex; - align-items: center; - gap: 10px; - color: #04aa2e; - font-size: 13px; - } -` + } + + .name-input::placeholder { + opacity: 0.9; + color: var(--black); + } + + .search-field { + width: 100%; + position: relative; + } + + .search-icon { + position: absolute; + right: 3px; + color: var(--chat-bubble-msg-color); + transition: all 0.3s ease-in-out; + background: none; + border-radius: 50%; + padding: 6px 3px; + font-size: 21px; + } + + .search-icon:hover { + cursor: pointer; + background: #d7d7d75c; + } + + .search-results-div { + position: absolute; + top: 25px; + right: 25px; + } + .user-verified { + position: absolute; + top: 0; + right: 5px; + display: flex; + align-items: center; + gap: 10px; + color: #04aa2e; + font-size: 13px; + } +` \ No newline at end of file diff --git a/plugins/plugins/core/messaging/q-chat/q-chat.src.js b/plugins/plugins/core/messaging/q-chat/q-chat.src.js index 6dc84422..202f2cbf 100644 --- a/plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -2,7 +2,7 @@ import {html, LitElement} from 'lit' import {render} from 'lit/html.js' import {passiveSupport} from 'passive-events-support/src/utils' import {Epml} from '../../../../epml.js' -import {get, translate} from '../../../../../core/translate/index.js' +import {get, translate} from '../../../../../core/translate' import {qchatStyles} from './q-chat-css.src.js' import {Editor, Extension} from '@tiptap/core' import isElectron from 'is-electron' @@ -12,7 +12,7 @@ import Underline from '@tiptap/extension-underline'; import Placeholder from '@tiptap/extension-placeholder' import Highlight from '@tiptap/extension-highlight' import snackbar from '../../components/snackbar.js' -import ShortUniqueId from 'short-unique-id'; +import ShortUniqueId from 'short-unique-id' import '../../components/ChatWelcomePage.js' import '../../components/ChatHead.js' @@ -26,977 +26,961 @@ import '@material/mwc-icon' import '@material/mwc-snackbar' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@vaadin/grid' -import '@vaadin/tooltip'; - +import '@vaadin/tooltip' passiveSupport({ events: ['touchstart'] }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) class Chat extends LitElement { - static get properties() { - return { - selectedAddress: { type: Object }, - chatTitle: { type: String }, - chatHeads: { type: Array }, - chatHeadsObj: { type: Object }, - chatId: { type: String }, - messages: { type: Array }, - btnDisable: { type: Boolean }, - isLoading: { type: Boolean }, - balance: { type: Number }, - theme: { type: String, reflect: true }, - blockedUsers: { type: Array }, - blockedUserList: { type: Array }, - privateMessagePlaceholder: { type: String}, - imageFile: { type: Object }, - activeChatHeadUrl: { type: String }, - openPrivateMessage: { type: Boolean }, - userFound: { type: Array}, - userFoundModalOpen: { type: Boolean }, - userSelected: { type: Object }, - editor: {type: Object}, - groupInvites: { type: Array }, - loggedInUserName: {type: String}, - loggedInUserAddress: {type: String}, - openDialogGroupsModal: {type: Boolean} - } - } + static get properties() { + return { + selectedAddress: { type: Object }, + chatTitle: { type: String }, + chatHeads: { type: Array }, + chatHeadsObj: { type: Object }, + chatId: { type: String }, + messages: { type: Array }, + btnDisable: { type: Boolean }, + isLoading: { type: Boolean }, + balance: { type: Number }, + theme: { type: String, reflect: true }, + blockedUsers: { type: Array }, + blockedUserList: { type: Array }, + privateMessagePlaceholder: { type: String}, + imageFile: { type: Object }, + activeChatHeadUrl: { type: String }, + openPrivateMessage: { type: Boolean }, + userFound: { type: Array}, + userFoundModalOpen: { type: Boolean }, + userSelected: { type: Object }, + editor: {type: Object}, + groupInvites: { type: Array }, + loggedInUserName: {type: String}, + loggedInUserAddress: {type: String}, + openDialogGroupsModal: {type: Boolean} + } + } - static get styles() { + static get styles() { return [qchatStyles]; } - constructor() { - super() - this.selectedAddress = window.parent.reduxStore.getState().app.selectedAddress - this.config = { - user: { - node: { - } - } - } - this.chatTitle = "" - this.chatHeads = [] - this.chatHeadsObj = {} - this.chatId = '' - this.balance = 1 - this.messages = [] - this.btnDisable = false - this.isLoading = false - this.showNewMessageBar = this.showNewMessageBar.bind(this) - this.hideNewMessageBar = this.hideNewMessageBar.bind(this) - this.setOpenPrivateMessage = this.setOpenPrivateMessage.bind(this) - this._sendMessage = this._sendMessage.bind(this) - this.insertImage = this.insertImage.bind(this) - this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' - this.blockedUsers = [] - this.blockedUserList = [] - this.privateMessagePlaceholder = "" - this.imageFile = null - this.activeChatHeadUrl = '' - this.openPrivateMessage = false - this.userFound = [] - this.userFoundModalOpen = false - this.userSelected = {} - this.groupInvites = [] - this.loggedInUserName = "" - this.openDialogGroupsModal = false - this.uid = new ShortUniqueId(); - - } - - async setActiveChatHeadUrl(url) { - this.activeChatHeadUrl = url - this.requestUpdate() - } - - resetChatEditor(){ - this.editor.commands.setContent('') - } - - async getUpdateCompleteTextEditor() { - await super.getUpdateComplete() - const marginElements = Array.from(this.shadowRoot.querySelectorAll('chat-text-editor')) - await Promise.all(marginElements.map(el => el.updateComplete)) - const marginElements2 = Array.from(this.shadowRoot.querySelectorAll('wrapper-modal')) - await Promise.all(marginElements2.map(el => el.updateComplete)) - return true - } - - async connectedCallback() { - super.connectedCallback() - await this.getUpdateCompleteTextEditor() - - const elementChatId = this.shadowRoot.getElementById('messageBox').shadowRoot.getElementById('privateMessage') - this.editor = new Editor({ - onUpdate: ()=> { - this.shadowRoot.getElementById('messageBox').getMessageSize(this.editor.getJSON()) - }, - element: elementChatId, - extensions: [ - StarterKit, - Underline, - Highlight, - Placeholder.configure({ - placeholder: 'Write something …', - }), - Extension.create({ - addKeyboardShortcuts:()=> { - return { - 'Enter': ()=> { - const chatTextEditor = this.shadowRoot.getElementById('messageBox') - chatTextEditor.sendMessageFunc({ - }) - return true - } - } - }}) - ] - }) - - this.unsubscribeStore = window.parent.reduxStore.subscribe(() => { - try { - const currentState = window.parent.reduxStore.getState(); - - if(window.parent.location && window.parent.location.search) { - const queryString = window.parent.location.search - const params = new URLSearchParams(queryString) - const chat = params.get("chat") - if(chat && chat !== this.activeChatHeadUrl){ - let url = window.parent.location.href - let newUrl = url.split("?")[0] - window.parent.history.pushState({}, "", newUrl) - this.setActiveChatHeadUrl(chat) - } - } - if(currentState.app.accountInfo && currentState.app.accountInfo.names && currentState.app.accountInfo.names.length > 0 && this.loggedInUserName !== currentState.app.accountInfo.names[0].name){ - this.loggedInUserName = currentState.app.accountInfo.names[0].name - } - if(currentState.app.accountInfo && currentState.app.accountInfo.addressInfo && currentState.app.accountInfo.addressInfo.address && this.loggedInUserAddress !== currentState.app.accountInfo.addressInfo.address){ - this.loggedInUserAddress = currentState.app.accountInfo.addressInfo.address - } - } catch (error) { /* empty */ } - }) - } - - disconnectedCallback() { - super.disconnectedCallback() - this.editor.destroy() - this.unsubscribeStore() - } - - updatePlaceholder(editor, text) { - editor.extensionManager.extensions.forEach((extension) => { - if (extension.name === "placeholder") { - - extension.options["placeholder"] = text - editor.commands.focus('end') - } - }) - } - - setOpenDialogGroupsModal(val){ - this.openDialogGroupsModal = val - } - - openTabToGroupManagement(){ - window.parent.reduxStore.dispatch( - window.parent.reduxAction.setNewTab({ - url: `group-management`, - id: this.uid.rnd(), - myPlugObj: { - "url": "group-management", - "domain": "core", - "page": "group-management/index.html", - "title": "Group Management", - "icon": "vaadin:group", - "mwcicon": "group", - "pluginNumber": "plugin-fJZNpyLGTl", - "menus": [], - "parent": false - }, - openExisting: true - }) - ); - } - - render() { - return html` -
    -
    - - - -
    -
    -
    this.scrollToBottom()}> - ${translate("chatpage.cchange4")} - ${translate("chatpage.cchange5")} keyboard_arrow_down -
    -
    - - ${this.activeChatHeadUrl ? html`${this.renderChatPage()}` : html`${this.renderChatWelcomePage()}`} -
    -
    - - { - this.resetChatEditor() - this.openPrivateMessage = false - this.shadowRoot.getElementById('sendTo').value = "" - this.userFoundModalOpen = false; - this.userFound = [] - } } - style=${this.openPrivateMessage ? "visibility:visible;z-index:50" : "visibility: hidden;z-index:-100;position: relative"}> -
    -
    -
    -

    ${translate("chatpage.cchange1")}

    -
    -
    -

    ${translate("chatpage.cchange6")}

    -
    - { - this.userSelected = {} - this.requestUpdate() - }} - /> - ${this.userSelected.name ? ( - html` -
    -

    ${translate("chatpage.cchange38")}

    - -
    - ` - ) : ( - html` - - - ` - )} -
    - - this.updatePlaceholder(editor, value)} - > - - -
    -
    - { - this.userSelected = result; - this.userFound = []; - this.userFoundModalOpen = false; - }} - .closeFunc=${() => { - this.userFoundModalOpen = false; - this.userFound = []; - }} - .searchResults=${this.userFound} - ?isOpen=${this.userFoundModalOpen} - ?loading=${this.isLoading}> - -
    -
    -
    - - - -
    -

    ${translate("chatpage.cchange10")}

    -
    -
    -
    - - { - if (data.item.name === "No registered name") { - render(html`${translate("chatpage.cchange15")}`, root) - } else { - render(html`${data.item.name}`, root) - } - }}> - - - { - render(html`${this.renderUnblockButton(data.item)}`, root); - }}> - - - ${this.isEmptyArray(this.blockedUserList) ? html` - ${translate("chatpage.cchange14")} - `: ''} - - ${translate("general.close")} - -
    -
    - - ` - } - - async firstUpdated() { - this.changeTheme() - this.getChatBlockedList() - this.getLocalBlockedList() - // await this.getPendingGroupInvites() - - const getBlockedUsers = async () => { - let blockedUsers = await parentEpml.request('apiCall', { - url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` - }) - this.blockedUsers = blockedUsers - setTimeout(getBlockedUsers, 60000) - } - - const stopKeyEventPropagation = (e) => { - e.stopPropagation() - return false - } - - const nameInput = this.shadowRoot.getElementById('sendTo') - - nameInput.addEventListener('keydown', stopKeyEventPropagation) - - this.shadowRoot.getElementById('messageBox').addEventListener('keydown', stopKeyEventPropagation) - - const runFunctionsAfterPageLoad = () => { - // Functions to exec after render while waiting for page info... - // getDataFromURL() - - try { - let key = `${window.parent.reduxStore.getState().app.selectedAddress.address.substr(0, 10)}_chat-heads` - let localChatHeads = localStorage.getItem(key) - this.setChatHeads(JSON.parse(localChatHeads)) - } catch (e) { - // TODO: Could add error handling in case there's a weird one... (-_-) - return - } - - // Clear Interval... - if (this.selectedAddress.address !== undefined) { - clearInterval(runFunctionsAfterPageLoadInterval) - return - } - } - - let runFunctionsAfterPageLoadInterval = setInterval(runFunctionsAfterPageLoad, 100) - - window.addEventListener('storage', () => { - const checkTheme = localStorage.getItem('qortalTheme') - - if (checkTheme === 'dark') { - this.theme = 'dark' - } else { - this.theme = 'light' - } - document.querySelector('html').setAttribute('theme', this.theme) - }) - - if (!isElectron()) { /* empty */ } else { - window.addEventListener('contextmenu', (event) => { - // Check if the clicked element has the class - let target = event.target; - while (target !== null) { - if (target.classList && target.classList.contains('customContextMenuDiv')) { - // Your custom context menu logic - this.showContextMenu(event); - return; - } - target = target.parentNode; - } - - // If it doesn't, show the default Electron context menu - event.preventDefault(); - window.parent.electronAPI.showMyMenu(); - }); - - - - } - - let configLoaded = false - - parentEpml.ready().then(() => { - - parentEpml.subscribe('config', c => { - if (!configLoaded) { - setTimeout(getBlockedUsers, 1) - configLoaded = true - } - this.config = JSON.parse(c) - }) - parentEpml.subscribe('chat_heads', chatHeads => { - chatHeads = JSON.parse(chatHeads) - this.getChatHeadFromState(chatHeads) - }) - parentEpml.subscribe('side_effect_action', async sideEffectActionParam => { - const sideEffectAction = JSON.parse(sideEffectActionParam) - - if(sideEffectAction && sideEffectAction.type === 'openPrivateChat'){ - const name = sideEffectAction.data.name - const address = sideEffectAction.data.address - if(this.chatHeadsObj.direct && this.chatHeadsObj.direct.find(item=> item.address === address)){ - this.setActiveChatHeadUrl(`direct/${address}`) - window.parent.reduxStore.dispatch( - window.parent.reduxAction.setSideEffectAction(null)) - } else { - this.setOpenPrivateMessage({ - open: true, - name: name - }) - window.parent.reduxStore.dispatch( - window.parent.reduxAction.setSideEffectAction(null)) - } - - } - }) - parentEpml.request('apiCall', { - url: `/addresses/balance/${window.parent.reduxStore.getState().app.selectedAddress.address}` - }).then(res => { - this.balance = res - this.requestUpdate() - }) - }) - parentEpml.imReady() - this.clearConsole() - setInterval(() => { - this.clearConsole() - }, 60000) - } - - - - clearConsole() { - if (!isElectron()) { /* empty */ } else { - console.clear() - window.parent.electronAPI.clearCache() - } - } - - setOpenPrivateMessage(props) { - this.openPrivateMessage = props.open; - this.shadowRoot.getElementById("sendTo").value = props.name - } - - async userSearch() { - const nameValue = this.shadowRoot.getElementById('sendTo').value - if(!nameValue) { - this.userFound = [] - this.userFoundModalOpen = true - return; - } - try { - const result = await parentEpml.request('apiCall', { - type: 'api', - url: `/names/${nameValue}` - }) - if (result.error === 401) { - this.userFound = [] - } else { - this.userFound = [ - ...this.userFound, - result, - ]; - } - this.userFoundModalOpen = true; - } catch (error) { - let err4string = get("chatpage.cchange35"); - parentEpml.request('showSnackBar', `${err4string}`) - } - } - - redirectToGroups() { - window.location.href = `../../group-management/index.html` - } - - async _sendMessage(outSideMsg, msg) { - this.isLoading = true; - - const trimmedMessage = msg - if (/^\s*$/.test(trimmedMessage)) { - this.isLoading = false - } else { - const messageObject = { - messageText: trimmedMessage, - images: [''], - repliedTo: '', - version: 3 - } - const stringifyMessageObject = JSON.stringify(messageObject) - this.sendMessage(stringifyMessageObject) - } - } - - async sendMessage(messageText) { - this.isLoading = true - - const _recipient = this.shadowRoot.getElementById('sendTo').value - - let recipient - - const validateName = async (receiverName) => { - let myRes - try { - let myNameRes = await parentEpml.request('apiCall', { - type: 'api', - url: `/names/${receiverName}` - }); - if (myNameRes.error === 401) { - myRes = false; - } else { - myRes = myNameRes - } - return myRes; - } catch (error) { - return "" - } - }; - - const myNameRes = await validateName(_recipient) - if (!myNameRes) { - recipient = _recipient - } else { - recipient = myNameRes.owner - } - - const getAddressPublicKey = async () => { - let isEncrypted; - let _publicKey; - - let addressPublicKey = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/publickey/${recipient}` - }) - - if (addressPublicKey.error === 102) { - _publicKey = false - let err4string = get("chatpage.cchange19") - parentEpml.request('showSnackBar', `${err4string}`) - this.isLoading = false - } else if (addressPublicKey !== false) { - isEncrypted = 1 - _publicKey = addressPublicKey - sendMessageRequest(isEncrypted, _publicKey) - } else { - let err4string = get("chatpage.cchange39") - parentEpml.request('showSnackBar', `${err4string}`) - this.isLoading = false - } - }; - let _reference = new Uint8Array(64) - window.crypto.getRandomValues(_reference); - let reference = window.parent.Base58.encode(_reference) - const sendMessageRequest = async (isEncrypted, _publicKey) => { - let chatResponse = await parentEpml.request('chat', { - type: 18, - nonce: this.selectedAddress.nonce, - params: { - timestamp: Date.now(), - recipient: recipient, - recipientPublicKey: _publicKey, - hasChatReference: 0, - message: messageText, - lastReference: reference, - proofOfWorkNonce: 0, - isEncrypted: 1, - isText: 1 - } - }) - - _computePow(chatResponse); - }; - - const _computePow = async (chatBytes) => { - const difficulty = this.balance < 4 ? 18 : 8 - const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' - const worker = new WebWorker() - let nonce = null - let chatBytesArray = null; - await new Promise((res) => { - worker.postMessage({chatBytes, path, difficulty}) - worker.onmessage = e => { - worker.terminate() - chatBytesArray = e.data.chatBytesArray - nonce = e.data.nonce - res() - } - }) - - let _response = await parentEpml.request('sign_chat', { - nonce: this.selectedAddress.nonce, - chatBytesArray: chatBytesArray, - chatNonce: nonce - }); - - getSendChatResponse(_response) - }; - - const getSendChatResponse = (response) => { - if (response === true) { - this.setActiveChatHeadUrl(`direct/${recipient}`) - this.shadowRoot.getElementById('sendTo').value = "" - this.openPrivateMessage = false - this.resetChatEditor(); - } else if (response.error) { - parentEpml.request('showSnackBar', response.message) - } else { - let err2string = get("chatpage.cchange21") - parentEpml.request('showSnackBar', `${err2string}`) - } - - this.isLoading = false - } - - // Exec.. - getAddressPublicKey() - - } - - insertImage(file) { - if (file.type.includes('image')) { - this.imageFile = file - return - } - parentEpml.request('showSnackBar', get("chatpage.cchange28")) - } - - renderLoadingText() { - return html`
    ` - } - - renderSendText() { - return html`${translate("chatpage.cchange9")}` - } - - relMessages() { - setTimeout(() => { - window.location.href = window.location.href.split( '#' )[0] - }, 500) - } - - getLocalBlockedList() { - 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 blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}` - - localStorage.removeItem("MessageBlockedAddresses") - - var hidelist = [] - - fetch(blockedAddressesUrl).then(response => { - return response.json() - }).then(data => { - data.map(item => { - hidelist.push(item) - }) - localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist)) - - this.blockedUserList = hidelist - }) - } - - getChatBlockedList() { - 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 blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}` - const err1string = 'No registered name' - - localStorage.removeItem("ChatBlockedAddresses") - - var obj = [] - - fetch(blockedAddressesUrl).then(response => { - return response.json() - }).then(data => { - return data.map(item => { - const noName = { - name: err1string, - owner: item - } - fetch(`${nodeUrl}/names/address/${item}?limit=0&reverse=true`).then(res => { - return res.json() - }).then(jsonRes => { - if(jsonRes.length) { - jsonRes.map (item => { - obj.push(item) - }) - } else { - obj.push(noName) - } - localStorage.setItem("ChatBlockedAddresses", JSON.stringify(obj)) - this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]") - }) - }) - }) - } - - async getPendingGroupInvites() { - const myAddress = window.parent.reduxStore.getState().app.selectedAddress.address - try { - let pendingGroupInvites = await parentEpml.request('apiCall', { - url: `/groups/invites/${myAddress}` - }) - this.groupInvites = pendingGroupInvites; - } catch (error) { - let err4string = get("chatpage.cchange61"); - parentEpml.request('showSnackBar', `${err4string}`) - } - } - - async unblockUser(websiteObj) { - let owner = websiteObj.owner - - let items = [ - owner - ] - - let ownersJsonString = JSON.stringify({ "items": items }) - - let ret = await parentEpml.request('apiCall', { - url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`, - method: 'DELETE', - headers: { - 'Content-Type': 'application/json' - }, - body: `${ownersJsonString}` - }) - - if (ret === true) { - this.blockedUsers = this.blockedUsers.filter(item => item != owner) - this.getChatBlockedList() - this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]") - let err2string = get("chatpage.cchange16") - snackbar.add({ - labelText: `${err2string}`, - dismiss: true - }) - this.relMessages() - } - else { - let err3string = get("chatpage.cchange17") - snackbar.add({ - labelText: `${err3string}`, - dismiss: true - }) - } - return ret - } - - renderUnblockButton(websiteObj) { - return html`` - } - - changeTheme() { - const checkTheme = localStorage.getItem('qortalTheme') - if (checkTheme === 'dark') { - this.theme = 'dark' - } else { - this.theme = 'light' - } - document.querySelector('html').setAttribute('theme', this.theme) - } - - renderChatWelcomePage() { - return html` - this.setOpenPrivateMessage(val)} - > - ` - } - - renderChatHead(chatHeadArr) { - return chatHeadArr.map(eachChatHead => { - return html` this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}>` - }) - } - - renderChatPage() { - // Check for the chat ID from and render chat messages - // Else render Welcome to Q-CHat - - // TODO: DONE: Do the above in the ChatPage - return html` - this.setOpenPrivateMessage(val)} - .setActiveChatHeadUrl=${(val)=> this.setActiveChatHeadUrl(val)} - balance=${this.balance} - loggedInUserName=${this.loggedInUserName} - loggedInUserAddress=${this.loggedInUserAddress} - > - - ` - } - - setChatHeads(chatObj) { - const chatObjGroups = Array.isArray(chatObj.groups) ? chatObj.groups : [] - const chatObjDirect = Array.isArray(chatObj.direct) ? chatObj.direct : [] - - let groupList = chatObjGroups.map(group => group.groupId === 0 ? { - groupId: group.groupId, url: `group/${group.groupId}`, - groupName: "Qortal General Chat", - timestamp: group.timestamp === undefined ? 2 : group.timestamp, - sender: group.sender } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` - }) - - let directList = chatObjDirect.map(dc => { - return { ...dc, url: `direct/${dc.address}` } - }) - - const compareNames = (a, b) => { - return a.groupName.localeCompare(b.groupName) - } - - groupList.sort(compareNames) - let chatHeadMasterList = [...groupList, ...directList] - - const compareArgs = (a, b) => { - return b.timestamp - a.timestamp - } - - this.chatHeads = chatHeadMasterList.sort(compareArgs) - } - - getChatHeadFromState(chatObj) { - if (chatObj === undefined) { - return - } else { - this.chatHeadsObj = chatObj - this.setChatHeads(chatObj) - } - } - - _textArea(e) { - if (e.keyCode === 13 && !e.shiftKey) this._sendMessage() - } - - onPageNavigation(pageUrl) { - parentEpml.request('setPageUrl', pageUrl) - } - - isEmptyArray(arr) { - if (!arr) { return true } - return arr.length === 0 - } - - getApiKey() { - const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey - } - - scrollToBottom() { - const viewElement = this.shadowRoot.querySelector('chat-page').shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement') - - const chatScrollerElement = this.shadowRoot.querySelector('chat-page').shadowRoot.querySelector('chat-scroller') - if (chatScrollerElement && chatScrollerElement.disableAddingNewMessages) { - const chatPageElement = this.shadowRoot.querySelector('chat-page') - if(chatPageElement && chatPageElement.getLastestMessages) - chatPageElement.getLastestMessages() - } else { - viewElement.scroll({ top: viewElement.scrollHeight, left: 0, behavior: 'smooth' }) - } - } - - showNewMessageBar() { - this.shadowRoot.getElementById('newMessageBar').classList.remove('hide-new-message-bar') - } - - hideNewMessageBar() { - this.shadowRoot.getElementById('newMessageBar').classList.add('hide-new-message-bar') - } + constructor() { + super() + this.selectedAddress = window.parent.reduxStore.getState().app.selectedAddress + this.config = { + user: { + node: { + } + } + } + this.chatTitle = "" + this.chatHeads = [] + this.chatHeadsObj = {} + this.chatId = '' + this.balance = 1 + this.messages = [] + this.btnDisable = false + this.isLoading = false + this.showNewMessageBar = this.showNewMessageBar.bind(this) + this.hideNewMessageBar = this.hideNewMessageBar.bind(this) + this.setOpenPrivateMessage = this.setOpenPrivateMessage.bind(this) + this._sendMessage = this._sendMessage.bind(this) + this.insertImage = this.insertImage.bind(this) + this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light' + this.blockedUsers = [] + this.blockedUserList = [] + this.privateMessagePlaceholder = "" + this.imageFile = null + this.activeChatHeadUrl = '' + this.openPrivateMessage = false + this.userFound = [] + this.userFoundModalOpen = false + this.userSelected = {} + this.groupInvites = [] + this.loggedInUserName = "" + this.openDialogGroupsModal = false + this.uid = new ShortUniqueId() + + } + + async setActiveChatHeadUrl(url) { + this.activeChatHeadUrl = url + this.requestUpdate() + } + + resetChatEditor(){ + this.editor.commands.setContent('') + } + + async getUpdateCompleteTextEditor() { + await super.getUpdateComplete() + const marginElements = Array.from(this.shadowRoot.querySelectorAll('chat-text-editor')) + await Promise.all(marginElements.map(el => el.updateComplete)) + const marginElements2 = Array.from(this.shadowRoot.querySelectorAll('wrapper-modal')) + await Promise.all(marginElements2.map(el => el.updateComplete)) + return true + } + + async connectedCallback() { + super.connectedCallback() + await this.getUpdateCompleteTextEditor() + + const elementChatId = this.shadowRoot.getElementById('messageBox').shadowRoot.getElementById('privateMessage') + this.editor = new Editor({ + onUpdate: ()=> { + this.shadowRoot.getElementById('messageBox').getMessageSize(this.editor.getJSON()) + }, + element: elementChatId, + extensions: [ + StarterKit, + Underline, + Highlight, + Placeholder.configure({ + placeholder: 'Write something …', + }), + Extension.create({ + addKeyboardShortcuts:()=> { + return { + 'Enter': ()=> { + const chatTextEditor = this.shadowRoot.getElementById('messageBox') + chatTextEditor.sendMessageFunc({ + }) + return true + } + } + } + }) + ] + }) + + this.unsubscribeStore = window.parent.reduxStore.subscribe(() => { + try { + const currentState = window.parent.reduxStore.getState() + + if(window.parent.location && window.parent.location.search) { + const queryString = window.parent.location.search + const params = new URLSearchParams(queryString) + const chat = params.get("chat") + if(chat && chat !== this.activeChatHeadUrl){ + let url = window.parent.location.href + let newUrl = url.split("?")[0] + window.parent.history.pushState({}, "", newUrl) + this.setActiveChatHeadUrl(chat) + } + } + if(currentState.app.accountInfo && currentState.app.accountInfo.names && currentState.app.accountInfo.names.length > 0 && this.loggedInUserName !== currentState.app.accountInfo.names[0].name){ + this.loggedInUserName = currentState.app.accountInfo.names[0].name + } + if(currentState.app.accountInfo && currentState.app.accountInfo.addressInfo && currentState.app.accountInfo.addressInfo.address && this.loggedInUserAddress !== currentState.app.accountInfo.addressInfo.address){ + this.loggedInUserAddress = currentState.app.accountInfo.addressInfo.address + } + } catch (error) { /* empty */ } + }) + } + + disconnectedCallback() { + super.disconnectedCallback() + this.editor.destroy() + this.unsubscribeStore() + } + + updatePlaceholder(editor, text) { + editor.extensionManager.extensions.forEach((extension) => { + if (extension.name === "placeholder") { + + extension.options["placeholder"] = text + editor.commands.focus('end') + } + }) + } + + setOpenDialogGroupsModal(val){ + this.openDialogGroupsModal = val + } + + openTabToGroupManagement(){ + window.parent.reduxStore.dispatch( + window.parent.reduxAction.setNewTab({ + url: `group-management`, + id: this.uid.rnd(), + myPlugObj: { + "url": "group-management", + "domain": "core", + "page": "group-management/index.html", + "title": "Group Management", + "icon": "vaadin:group", + "mwcicon": "group", + "pluginNumber": "plugin-fJZNpyLGTl", + "menus": [], + "parent": false + }, + openExisting: true + }) + ); + } + + render() { + return html` +
    +
    + + +
    +
    +
    this.scrollToBottom()}> + ${translate("chatpage.cchange4")} + ${translate("chatpage.cchange5")} keyboard_arrow_down +
    +
    + ${this.activeChatHeadUrl ? html`${this.renderChatPage()}` : html`${this.renderChatWelcomePage()}`} +
    +
    + + { + this.resetChatEditor() + this.openPrivateMessage = false + this.shadowRoot.getElementById('sendTo').value = "" + this.userFoundModalOpen = false; + this.userFound = [] + }} + style=${this.openPrivateMessage ? "visibility:visible;z-index:50" : "visibility: hidden;z-index:-100;position: relative"}> +
    +
    +
    +

    ${translate("chatpage.cchange1")}

    +
    +
    +

    ${translate("chatpage.cchange6")}

    +
    + { + this.userSelected = {} + this.requestUpdate() + }} + /> + ${this.userSelected.name ? ( + html` +
    +

    ${translate("chatpage.cchange38")}

    + +
    + ` + ) : ( + html` + + + ` + )} +
    + + this.updatePlaceholder(editor, value)} + > + + + +
    +
    + { + this.userSelected = result + this.userFound = []; + this.userFoundModalOpen = false + }} + .closeFunc=${() => { + this.userFoundModalOpen = false + this.userFound = [] + }} + .searchResults=${this.userFound} + ?isOpen=${this.userFoundModalOpen} + ?loading=${this.isLoading} + > + +
    +
    +
    + + + +
    +

    ${translate("chatpage.cchange10")}

    +
    +
    +
    + + { + if (data.item.name === "No registered name") { + render(html`${translate("chatpage.cchange15")}`, root) + } else { + render(html`${data.item.name}`, root) + } + }}> + + + { + render(html`${this.renderUnblockButton(data.item)}`, root) + }}> + + + ${this.isEmptyArray(this.blockedUserList) ? html` + ${translate("chatpage.cchange14")} + `: ''} + + ${translate("general.close")} + +
    +
    + ` + } + + async firstUpdated() { + this.changeTheme() + this.getChatBlockedList() + this.getLocalBlockedList() + + const getBlockedUsers = async () => { + this.blockedUsers = await parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}` + }) + setTimeout(getBlockedUsers, 60000) + } + + const stopKeyEventPropagation = (e) => { + e.stopPropagation() + return false + } + + const nameInput = this.shadowRoot.getElementById('sendTo') + + nameInput.addEventListener('keydown', stopKeyEventPropagation) + + this.shadowRoot.getElementById('messageBox').addEventListener('keydown', stopKeyEventPropagation) + + const runFunctionsAfterPageLoad = () => { + // Functions to exec after render while waiting for page info... + // getDataFromURL() + + try { + let key = `${window.parent.reduxStore.getState().app.selectedAddress.address.substr(0, 10)}_chat-heads` + let localChatHeads = localStorage.getItem(key) + this.setChatHeads(JSON.parse(localChatHeads)) + } catch (e) { + // TODO: Could add error handling in case there's a weird one... (-_-) + return + } + + // Clear Interval... + if (this.selectedAddress.address !== undefined) { + clearInterval(runFunctionsAfterPageLoadInterval) + } + } + + let runFunctionsAfterPageLoadInterval = setInterval(runFunctionsAfterPageLoad, 100) + + window.addEventListener('storage', () => { + const checkTheme = localStorage.getItem('qortalTheme') + + if (checkTheme === 'dark') { + this.theme = 'dark' + } else { + this.theme = 'light' + } + document.querySelector('html').setAttribute('theme', this.theme) + }) + + if (!isElectron()) { /* empty */ } else { + window.addEventListener('contextmenu', (event) => { + // Check if the clicked element has the class + let target = event.target + while (target !== null) { + if (target.classList && target.classList.contains('customContextMenuDiv')) { + // Your custom context menu logic + this.showContextMenu(event) + return + } + target = target.parentNode + } + + // If it doesn't, show the default Electron context menu + event.preventDefault() + window.parent.electronAPI.showMyMenu() + }) + } + + let configLoaded = false + + parentEpml.ready().then(() => { + + parentEpml.subscribe('config', c => { + if (!configLoaded) { + setTimeout(getBlockedUsers, 1) + configLoaded = true + } + this.config = JSON.parse(c) + }) + parentEpml.subscribe('chat_heads', chatHeads => { + chatHeads = JSON.parse(chatHeads) + this.getChatHeadFromState(chatHeads) + }) + parentEpml.subscribe('side_effect_action', async sideEffectActionParam => { + const sideEffectAction = JSON.parse(sideEffectActionParam) + + if(sideEffectAction && sideEffectAction.type === 'openPrivateChat') { + const name = sideEffectAction.data.name + const address = sideEffectAction.data.address + if(this.chatHeadsObj.direct && this.chatHeadsObj.direct.find(item=> item.address === address)){ + await this.setActiveChatHeadUrl(`direct/${address}`) + window.parent.reduxStore.dispatch( + window.parent.reduxAction.setSideEffectAction(null)) + } else { + this.setOpenPrivateMessage({ + open: true, + name: name + }) + window.parent.reduxStore.dispatch( + window.parent.reduxAction.setSideEffectAction(null)) + } + + } + }) + parentEpml.request('apiCall', { + url: `/addresses/balance/${window.parent.reduxStore.getState().app.selectedAddress.address}` + }).then(res => { + this.balance = res + this.requestUpdate() + }) + }) + parentEpml.imReady() + this.clearConsole() + setInterval(() => { + this.clearConsole() + }, 60000) + } + + clearConsole() { + if (!isElectron()) { /* empty */ } else { + console.clear() + window.parent.electronAPI.clearCache() + } + } + + setOpenPrivateMessage(props) { + this.openPrivateMessage = props.open; + this.shadowRoot.getElementById("sendTo").value = props.name + } + + async userSearch() { + const nameValue = this.shadowRoot.getElementById('sendTo').value + if(!nameValue) { + this.userFound = [] + this.userFoundModalOpen = true + return + } + try { + const result = await parentEpml.request('apiCall', { + type: 'api', + url: `/names/${nameValue}` + }) + if (result.error === 401) { + this.userFound = [] + } else { + this.userFound = [ + ...this.userFound, + result, + ]; + } + this.userFoundModalOpen = true; + } catch (error) { + let err4string = get("chatpage.cchange35"); + parentEpml.request('showSnackBar', `${err4string}`) + } + } + + redirectToGroups() { + window.location.href = `../../group-management/index.html` + } + + async _sendMessage(outSideMsg, msg) { + this.isLoading = true; + + const trimmedMessage = msg + if (/^\s*$/.test(trimmedMessage)) { + this.isLoading = false + } else { + const messageObject = { + messageText: trimmedMessage, + images: [''], + repliedTo: '', + version: 3 + } + const stringifyMessageObject = JSON.stringify(messageObject) + await this.sendMessage(stringifyMessageObject) + } + } + + async sendMessage(messageText) { + this.isLoading = true + + const _recipient = this.shadowRoot.getElementById('sendTo').value + + let recipient + + const validateName = async (receiverName) => { + let myRes + try { + let myNameRes = await parentEpml.request('apiCall', { + type: 'api', + url: `/names/${receiverName}` + }); + if (myNameRes.error === 401) { + myRes = false; + } else { + myRes = myNameRes + } + return myRes; + } catch (error) { + return "" + } + } + + const myNameRes = await validateName(_recipient) + if (!myNameRes) { + recipient = _recipient + } else { + recipient = myNameRes.owner + } + + const getAddressPublicKey = async () => { + let isEncrypted; + let _publicKey; + + let addressPublicKey = await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/publickey/${recipient}` + }) + + if (addressPublicKey.error === 102) { + _publicKey = false + let err4string = get("chatpage.cchange19") + parentEpml.request('showSnackBar', `${err4string}`) + this.isLoading = false + } else if (addressPublicKey !== false) { + isEncrypted = 1 + _publicKey = addressPublicKey + await sendMessageRequest(isEncrypted, _publicKey) + } else { + let err4string = get("chatpage.cchange39") + parentEpml.request('showSnackBar', `${err4string}`) + this.isLoading = false + } + } + let _reference = new Uint8Array(64) + window.crypto.getRandomValues(_reference); + let reference = window.parent.Base58.encode(_reference) + const sendMessageRequest = async (isEncrypted, _publicKey) => { + let chatResponse = await parentEpml.request('chat', { + type: 18, + nonce: this.selectedAddress.nonce, + params: { + timestamp: Date.now(), + recipient: recipient, + recipientPublicKey: _publicKey, + hasChatReference: 0, + message: messageText, + lastReference: reference, + proofOfWorkNonce: 0, + isEncrypted: 1, + isText: 1 + } + }) + await _computePow(chatResponse) + } + + const _computePow = async (chatBytes) => { + const difficulty = this.balance < 4 ? 18 : 8 + const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' + const worker = new WebWorker() + let nonce = null + let chatBytesArray = null + await new Promise((res) => { + worker.postMessage({chatBytes, path, difficulty}) + worker.onmessage = e => { + worker.terminate() + chatBytesArray = e.data.chatBytesArray + nonce = e.data.nonce + res() + } + }) + + let _response = await parentEpml.request('sign_chat', { + nonce: this.selectedAddress.nonce, + chatBytesArray: chatBytesArray, + chatNonce: nonce + }) + getSendChatResponse(_response) + } + + const getSendChatResponse = (response) => { + if (response === true) { + this.setActiveChatHeadUrl(`direct/${recipient}`) + this.shadowRoot.getElementById('sendTo').value = "" + this.openPrivateMessage = false + this.resetChatEditor(); + } else if (response.error) { + parentEpml.request('showSnackBar', response.message) + } else { + let err2string = get("chatpage.cchange21") + parentEpml.request('showSnackBar', `${err2string}`) + } + + this.isLoading = false + } + // Exec.. + await getAddressPublicKey() + } + + insertImage(file) { + if (file.type.includes('image')) { + this.imageFile = file + return + } + parentEpml.request('showSnackBar', get("chatpage.cchange28")) + } + + renderLoadingText() { + return html`
    ` + } + + renderSendText() { + return html`${translate("chatpage.cchange9")}` + } + + relMessages() { + setTimeout(() => { + window.location.href = window.location.href.split( '#' )[0] + }, 500) + } + + getLocalBlockedList() { + 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 blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}` + + localStorage.removeItem("MessageBlockedAddresses") + + var hidelist = [] + + fetch(blockedAddressesUrl).then(response => { + return response.json() + }).then(data => { + data.map(item => { + hidelist.push(item) + }) + localStorage.setItem("MessageBlockedAddresses", JSON.stringify(hidelist)) + + this.blockedUserList = hidelist + }) + } + + getChatBlockedList() { + 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 blockedAddressesUrl = `${nodeUrl}/lists/blockedAddresses?apiKey=${this.getApiKey()}` + const err1string = 'No registered name' + + localStorage.removeItem("ChatBlockedAddresses") + + var obj = [] + + fetch(blockedAddressesUrl).then(response => { + return response.json() + }).then(data => { + return data.map(item => { + const noName = { + name: err1string, + owner: item + } + fetch(`${nodeUrl}/names/address/${item}?limit=0&reverse=true`).then(res => { + return res.json() + }).then(jsonRes => { + if(jsonRes.length) { + jsonRes.map (item => { + obj.push(item) + }) + } else { + obj.push(noName) + } + localStorage.setItem("ChatBlockedAddresses", JSON.stringify(obj)) + this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]") + }) + }) + }) + } + + async getPendingGroupInvites() { + const myAddress = window.parent.reduxStore.getState().app.selectedAddress.address + try { + this.groupInvites = await parentEpml.request('apiCall', { + url: `/groups/invites/${myAddress}` + }); + } catch (error) { + let err4string = get("chatpage.cchange61"); + parentEpml.request('showSnackBar', `${err4string}`) + } + } + + async unblockUser(websiteObj) { + let owner = websiteObj.owner + + let items = [ + owner + ] + + let ownersJsonString = JSON.stringify({ "items": items }) + + let ret = await parentEpml.request('apiCall', { + url: `/lists/blockedAddresses?apiKey=${this.getApiKey()}`, + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + }, + body: `${ownersJsonString}` + }) + + if (ret === true) { + this.blockedUsers = this.blockedUsers.filter(item => item != owner) + this.getChatBlockedList() + this.blockedUserList = JSON.parse(localStorage.getItem("ChatBlockedAddresses") || "[]") + let err2string = get("chatpage.cchange16") + snackbar.add({ + labelText: `${err2string}`, + dismiss: true + }) + this.relMessages() + } + else { + let err3string = get("chatpage.cchange17") + snackbar.add({ + labelText: `${err3string}`, + dismiss: true + }) + } + return ret + } + + renderUnblockButton(websiteObj) { + return html`` + } + + changeTheme() { + const checkTheme = localStorage.getItem('qortalTheme') + if (checkTheme === 'dark') { + this.theme = 'dark' + } else { + this.theme = 'light' + } + document.querySelector('html').setAttribute('theme', this.theme) + } + + renderChatWelcomePage() { + return html` + this.setOpenPrivateMessage(val)} + > + ` + } + + renderChatHead(chatHeadArr) { + return chatHeadArr.map(eachChatHead => { + return html` this.setActiveChatHeadUrl(val)} chatInfo=${JSON.stringify(eachChatHead)}>` + }) + } + + renderChatPage() { + // Check for the chat ID from and render chat messages + // Else render Welcome to Q-CHat + + // TODO: DONE: Do the above in the ChatPage + return html` + this.setOpenPrivateMessage(val)} + .setActiveChatHeadUrl=${(val)=> this.setActiveChatHeadUrl(val)} + balance=${this.balance} + loggedInUserName=${this.loggedInUserName} + loggedInUserAddress=${this.loggedInUserAddress} + > + + ` + } + + setChatHeads(chatObj) { + const chatObjGroups = Array.isArray(chatObj.groups) ? chatObj.groups : [] + const chatObjDirect = Array.isArray(chatObj.direct) ? chatObj.direct : [] + + let groupList = chatObjGroups.map(group => group.groupId === 0 ? { + groupId: group.groupId, url: `group/${group.groupId}`, + groupName: "Qortal General Chat", + timestamp: group.timestamp === undefined ? 2 : group.timestamp, + sender: group.sender } : { ...group, timestamp: group.timestamp === undefined ? 1 : group.timestamp, url: `group/${group.groupId}` + }) + + let directList = chatObjDirect.map(dc => { + return { ...dc, url: `direct/${dc.address}` } + }) + + const compareNames = (a, b) => { + return a.groupName.localeCompare(b.groupName) + } + + groupList.sort(compareNames) + let chatHeadMasterList = [...groupList, ...directList] + + const compareArgs = (a, b) => { + return b.timestamp - a.timestamp + } + + this.chatHeads = chatHeadMasterList.sort(compareArgs) + } + + getChatHeadFromState(chatObj) { + if (chatObj === undefined) { + + } else { + this.chatHeadsObj = chatObj + this.setChatHeads(chatObj) + } + } + + _textArea(e) { + if (e.keyCode === 13 && !e.shiftKey) this._sendMessage() + } + + onPageNavigation(pageUrl) { + parentEpml.request('setPageUrl', pageUrl) + } + + isEmptyArray(arr) { + if (!arr) { return true } + return arr.length === 0 + } + + getApiKey() { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + return myNode.apiKey + } + + scrollToBottom() { + const viewElement = this.shadowRoot.querySelector('chat-page').shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement') + + const chatScrollerElement = this.shadowRoot.querySelector('chat-page').shadowRoot.querySelector('chat-scroller') + if (chatScrollerElement && chatScrollerElement.disableAddingNewMessages) { + const chatPageElement = this.shadowRoot.querySelector('chat-page') + if(chatPageElement && chatPageElement.getLastestMessages) + chatPageElement.getLastestMessages() + } else { + viewElement.scroll({ top: viewElement.scrollHeight, left: 0, behavior: 'smooth' }) + } + } + + showNewMessageBar() { + this.shadowRoot.getElementById('newMessageBar').classList.remove('hide-new-message-bar') + } + + hideNewMessageBar() { + this.shadowRoot.getElementById('newMessageBar').classList.add('hide-new-message-bar') + } } window.customElements.define('q-chat', Chat) diff --git a/plugins/plugins/core/minting/minting-info.src.js b/plugins/plugins/core/minting/minting-info.src.js index 9790b268..f541a9de 100644 --- a/plugins/plugins/core/minting/minting-info.src.js +++ b/plugins/plugins/core/minting/minting-info.src.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {registerTranslateConfig, translate, use} from '../../../../core/translate' import '@material/mwc-icon' import '@material/mwc-button' import '@material/mwc-dialog' @@ -441,10 +441,9 @@ class MintingInfo extends LitElement { } async getAddressLevel() { - const callLevels = await parentEpml.request('apiCall', { - url: `/addresses/online/levels` - }) - this.addressLevel = callLevels + this.addressLevel = await parentEpml.request('apiCall', { + url: `/addresses/online/levels` + }) this.tier4Online = parseFloat(this.addressLevel[7].count) + parseFloat(this.addressLevel[8].count) } diff --git a/plugins/plugins/core/name-registration/name-registration.src.js b/plugins/plugins/core/name-registration/name-registration.src.js index 69aac944..426d8b29 100644 --- a/plugins/plugins/core/name-registration/name-registration.src.js +++ b/plugins/plugins/core/name-registration/name-registration.src.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import isElectron from 'is-electron' import '@material/mwc-button' import '@material/mwc-dialog' @@ -898,8 +898,7 @@ class NameRegistration extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } async registerName(e) { @@ -914,20 +913,18 @@ class NameRegistration extends LitElement { // Get Last Ref const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) }; // Get Account Details const validateName = async () => { - let isValid = await parentEpml.request('apiCall', { - type: 'api', - url: `/names/${nameInput}` - }) - return isValid + return await parentEpml.request('apiCall', { + type: 'api', + url: `/names/${nameInput}` + }) }; const validateReceiver = async () => { @@ -949,19 +946,18 @@ class NameRegistration extends LitElement { const makeTransactionRequest = async (lastRef) => { let dialogyou = get("transactions.namedialog1") let dialogonpress = get("transactions.namedialog2") - let myTxnrequest = await parentEpml.request('transaction', { - type: 3, - nonce: this.selectedAddress.nonce, - params: { - fee: feeInput, - name: nameInput, - value: descInput, - lastReference: lastRef, - dialogyou: dialogyou, - dialogonpress: dialogonpress, - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 3, + nonce: this.selectedAddress.nonce, + params: { + fee: feeInput, + name: nameInput, + value: descInput, + lastReference: lastRef, + dialogyou: dialogyou, + dialogonpress: dialogonpress, + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -979,7 +975,7 @@ class NameRegistration extends LitElement { } } - validateReceiver() + await validateReceiver() this.registerNameLoading = false } @@ -994,20 +990,18 @@ class NameRegistration extends LitElement { // Get Last Ref const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } // Get Account Details const validateName = async () => { - let isValid = await parentEpml.request('apiCall', { - type: 'api', - url: `/names/${newNameInput}` - }) - return isValid + return await parentEpml.request('apiCall', { + type: 'api', + url: `/names/${newNameInput}` + }) } const validateReceiver = async () => { @@ -1035,21 +1029,20 @@ class NameRegistration extends LitElement { let dialogUpdateName1 = get("registernamepage.nchange43") let dialogUpdateName2 = get("registernamepage.nchange44") let dialogUpdateName3 = get("registernamepage.nchange45") - let myTxnrequest = await parentEpml.request('transaction', { - type: 4, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - name: myOldName, - newName: myNewName, - newData: myNewDesc, - lastReference: myLastRef, - dialogUpdateName1: dialogUpdateName1, - dialogUpdateName2: dialogUpdateName2, - dialogUpdateName3: dialogUpdateName3 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 4, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myOldName, + newName: myNewName, + newData: myNewDesc, + lastReference: myLastRef, + dialogUpdateName1: dialogUpdateName1, + dialogUpdateName2: dialogUpdateName2, + dialogUpdateName3: dialogUpdateName3 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -1067,7 +1060,7 @@ class NameRegistration extends LitElement { } } - validateReceiver() + await validateReceiver() } async createSellName() { @@ -1078,11 +1071,10 @@ class NameRegistration extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -1100,20 +1092,19 @@ class NameRegistration extends LitElement { const mySellNameDialog2 = get("registernamepage.nchange27") const mySellNameDialog3 = get("registernamepage.nchange28") - let myTxnrequest = await parentEpml.request('transaction', { - type: 5, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - name: myName, - sellPrice: myPrice, - lastReference: myLastRef, - sellNameDialog1: mySellNameDialog1, - sellNameDialog2: mySellNameDialog2, - sellNameDialog3: mySellNameDialog3 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 5, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + sellPrice: myPrice, + lastReference: myLastRef, + sellNameDialog1: mySellNameDialog1, + sellNameDialog2: mySellNameDialog2, + sellNameDialog3: mySellNameDialog3 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -1138,7 +1129,7 @@ class NameRegistration extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } async createCancelSellName() { @@ -1148,11 +1139,10 @@ class NameRegistration extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -1168,18 +1158,17 @@ class NameRegistration extends LitElement { const myCancelSellNameDialog1 = get("registernamepage.nchange30") const myCancelSellNameDialog2 = get("registernamepage.nchange31") - let myTxnrequest = await parentEpml.request('transaction', { - type: 6, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - name: myName, - lastReference: myLastRef, - cancelSellNameDialog1: myCancelSellNameDialog1, - cancelSellNameDialog2: myCancelSellNameDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 6, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + lastReference: myLastRef, + cancelSellNameDialog1: myCancelSellNameDialog1, + cancelSellNameDialog2: myCancelSellNameDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -1202,12 +1191,11 @@ class NameRegistration extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } isEmptyArray(arr) { diff --git a/plugins/plugins/core/names-market/names-market.src.js b/plugins/plugins/core/names-market/names-market.src.js index c23f0f9a..8730b4a3 100644 --- a/plugins/plugins/core/names-market/names-market.src.js +++ b/plugins/plugins/core/names-market/names-market.src.js @@ -1,7 +1,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import isElectron from 'is-electron' import '../components/qortal-info-view.js' import '@material/mwc-button' @@ -580,7 +580,7 @@ class NamesMarket extends LitElement { }).then(res => { this.marketSellNames = res }) - this.updatePageSize() + await this.updatePageSize() this.isLoading = false setTimeout(fetchMarketSellNames, 180000) } @@ -592,7 +592,7 @@ class NamesMarket extends LitElement { }).then(res => { this.marketSoldNames = res }) - this.updatePageSoldSize() + await this.updatePageSoldSize() this.isLoading = false setTimeout(fetchMarketSoldNames, 300000) } @@ -1053,8 +1053,7 @@ class NamesMarket extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } async createCancelSellName() { @@ -1064,11 +1063,10 @@ class NamesMarket extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -1084,18 +1082,17 @@ class NamesMarket extends LitElement { const myCancelSellNameDialog1 = get("registernamepage.nchange30") const myCancelSellNameDialog2 = get("registernamepage.nchange31") - let myTxnrequest = await parentEpml.request('transaction', { - type: 6, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - name: myName, - lastReference: myLastRef, - cancelSellNameDialog1: myCancelSellNameDialog1, - cancelSellNameDialog2: myCancelSellNameDialog2 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 6, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + lastReference: myLastRef, + cancelSellNameDialog1: myCancelSellNameDialog1, + cancelSellNameDialog2: myCancelSellNameDialog2 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -1118,7 +1115,7 @@ class NamesMarket extends LitElement { throw new Error(txnResponse) } } - validateReceiver() + await validateReceiver() } createBuyName() { @@ -1130,11 +1127,10 @@ class NamesMarket extends LitElement { this.btnDisable = true const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { - type: 'api', - url: `/addresses/lastreference/${this.selectedAddress.address}` - }) - return myRef + return await parentEpml.request('apiCall', { + type: 'api', + url: `/addresses/lastreference/${this.selectedAddress.address}` + }) } const validateReceiver = async () => { @@ -1153,21 +1149,20 @@ class NamesMarket extends LitElement { const myBuyNameDialog2 = get("registernamepage.nchange27") const myBuyNameDialog3 = get("registernamepage.nchange40") - let myTxnrequest = await parentEpml.request('transaction', { - type: 7, - nonce: this.selectedAddress.nonce, - params: { - fee: myFee, - name: myName, - sellPrice: myPrice, - recipient: mySeller, - lastReference: myLastRef, - buyNameDialog1: myBuyNameDialog1, - buyNameDialog2: myBuyNameDialog2, - buyNameDialog3: myBuyNameDialog3 - } - }) - return myTxnrequest + return await parentEpml.request('transaction', { + type: 7, + nonce: this.selectedAddress.nonce, + params: { + fee: myFee, + name: myName, + sellPrice: myPrice, + recipient: mySeller, + lastReference: myLastRef, + buyNameDialog1: myBuyNameDialog1, + buyNameDialog2: myBuyNameDialog2, + buyNameDialog3: myBuyNameDialog3 + } + }) } const getTxnRequestResponse = (txnResponse) => { @@ -1198,8 +1193,7 @@ class NamesMarket extends LitElement { } round(number) { - let result = (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) - return result + return (Math.round(parseFloat(number) * 1e8) / 1e8).toFixed(8) } isEmptyArray(arr) { diff --git a/plugins/plugins/core/node-management/node-management.src.js b/plugins/plugins/core/node-management/node-management.src.js index 3716c024..57a1ac12 100644 --- a/plugins/plugins/core/node-management/node-management.src.js +++ b/plugins/plugins/core/node-management/node-management.src.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@material/mwc-icon' import '@material/mwc-textfield' @@ -581,8 +581,7 @@ class NodeManagement extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } isEmptyArray(arr) { diff --git a/plugins/plugins/core/overview-page/overview-page-css.js b/plugins/plugins/core/overview-page/overview-page-css.js index 2e3ef30f..e619ae67 100644 --- a/plugins/plugins/core/overview-page/overview-page-css.js +++ b/plugins/plugins/core/overview-page/overview-page-css.js @@ -522,7 +522,7 @@ button.bg-default:focus { page-break-after: avoid; } - @ page { + @page { size: a3; } } @@ -664,7 +664,7 @@ button.bg-default:focus { } @media (min-width: 768px) { - @ keyframes show-navbar-dropdown { + @keyframes show-navbar-dropdown { 0% { transition: visibility .25s, opacity .25s, transform .25s; transform: translate(0, 10px) perspective(200px) rotateX(-2deg); diff --git a/plugins/plugins/core/overview-page/overview-page.src.js b/plugins/plugins/core/overview-page/overview-page.src.js index 6592a09f..11baf6f3 100644 --- a/plugins/plugins/core/overview-page/overview-page.src.js +++ b/plugins/plugins/core/overview-page/overview-page.src.js @@ -1,6 +1,6 @@ import {css, html, LitElement} from 'lit' import {Epml} from '../../../epml.js' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import {overviewStyle} from './overview-page-css.js' import {asyncReplace} from 'lit/directives/async-replace.js' import isElectron from 'is-electron' @@ -146,9 +146,9 @@ class OverviewPage extends LitElement { this.nodeConfig = window.parent.reduxStore.getState().app.nodeConfig this.accountInfo = window.parent.reduxStore.getState().app.accountInfo - this.getNodeInfo() - this.getCoreInfo() - this.getBalanceInfo() + await this.getNodeInfo() + await this.getCoreInfo() + await this.getBalanceInfo() await this.getMintingKeysList() window.addEventListener('storage', () => { @@ -223,9 +223,9 @@ class OverviewPage extends LitElement { async refreshItems() { this.nodeConfig = window.parent.reduxStore.getState().app.nodeConfig this.accountInfo = window.parent.reduxStore.getState().app.accountInfo - this.getNodeInfo() - this.getCoreInfo() - this.getBalanceInfo() + await this.getNodeInfo() + await this.getCoreInfo() + await this.getBalanceInfo() await this.getMintingKeysList() } @@ -238,8 +238,7 @@ class OverviewPage extends LitElement { try { const res = await fetch(statusUrl) - const listAccounts = await res.json() - this.listAccounts = listAccounts + this.listAccounts = await res.json() const addressInfo = window.parent.reduxStore.getState().app.accountInfo.addressInfo const address = window.parent.reduxStore.getState().app.selectedAddress.address @@ -247,17 +246,9 @@ class OverviewPage extends LitElement { const findMyMintingRecipient = this.listAccounts.find((myKey) => myKey.recipientAccount === address) const findRemovedSponsorsKey = this.listAccounts.filter((my) => my.address) - if (findMyMintingAccount === undefined) { - this.check1 = false - } else { - this.check1 = true - } + this.check1 = findMyMintingAccount !== undefined; - if (findMyMintingRecipient === undefined) { - this.check2 = false - } else { - this.check2 = true - } + this.check2 = findMyMintingRecipient !== undefined; if (findRemovedSponsorsKey.length > 0) { this.removeBlankKey(findRemovedSponsorsKey.publicKey) @@ -367,8 +358,7 @@ class OverviewPage extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } } window.customElements.define('overview-page', OverviewPage) @@ -558,8 +548,7 @@ class StartMintingNow extends LitElement { const url = `${nodeUrl}/admin/mintingaccounts` try { const res = await fetch(url) - const mintingAccountData = await res.json() - this.mintingAccountData = mintingAccountData + this.mintingAccountData = await res.json() } catch (error) { this.errorMsg = this.renderErrorMsg1() } @@ -608,10 +597,10 @@ class StartMintingNow extends LitElement { let snack1 = get('becomeMinterPage.bchange19') parentEpml.request('showSnackBar', `${snack1}`) this.status = 5 - this.getMintingAcccounts() + await this.getMintingAcccounts() } catch (error) { this.errorMsg = this.renderErrorMsg3() - return + } } @@ -626,8 +615,7 @@ class StartMintingNow extends LitElement { const rewardShares = async (minterAddr) => { const url = `${nodeUrl}/addresses/rewardshares?minters=${minterAddr}&recipients=${minterAddr}` const res = await fetch(url) - const data = await res.json() - return data + return await res.json() } if (!stop) { @@ -667,7 +655,7 @@ class StartMintingNow extends LitElement { let rewarddialog3 = get('transactions.rewarddialog3') let rewarddialog4 = get('transactions.rewarddialog4') - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 38, nonce: nonce, params: { @@ -681,7 +669,6 @@ class StartMintingNow extends LitElement { }, disableModal: true }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -709,11 +696,10 @@ class StartMintingNow extends LitElement { } const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/lastreference/${address}` }) - return myRef } const startMinting = async () => { @@ -729,10 +715,10 @@ class StartMintingNow extends LitElement { try { this.privateRewardShareKey = await createSponsorshipKey() - this.confirmRelationship(publicAddress) + await this.confirmRelationship(publicAddress) } catch (error) { this.errorMsg = error.data.message || this.renderErrorMsg4() - return + } } diff --git a/plugins/plugins/core/puzzles/puzzles.src.js b/plugins/plugins/core/puzzles/puzzles.src.js index d979bb0f..cc78269f 100644 --- a/plugins/plugins/core/puzzles/puzzles.src.js +++ b/plugins/plugins/core/puzzles/puzzles.src.js @@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit' import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' import isElectron from 'is-electron' -import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {registerTranslateConfig, translate, use} from '../../../../core/translate' import nacl from '../../../../crypto/api/deps/nacl-fast.js' import Base58 from '../../../../crypto/api/deps/Base58.js' import publicKeyToAddress from '../../../../crypto/api/wallet/publicKeyToAddress.js' @@ -426,10 +426,9 @@ class Puzzles extends LitElement { // Get Last Ref const getLastRef = async (address) => { - let myRef = await parentEpml.request('apiCall', { - url: `/addresses/lastreference/${address}` - }) - return myRef + return await parentEpml.request('apiCall', { + url: `/addresses/lastreference/${address}` + }) } let lastRef = await getLastRef(_guessAddress) diff --git a/plugins/plugins/core/q-app/q-apps.src.js b/plugins/plugins/core/q-app/q-apps.src.js index 64241b73..593f508f 100644 --- a/plugins/plugins/core/q-app/q-apps.src.js +++ b/plugins/plugins/core/q-app/q-apps.src.js @@ -1,7 +1,6 @@ import {css, html, LitElement} from 'lit' -import {render} from 'lit/html.js' import {Epml} from '../../../epml.js' -import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../core/translate' import isElectron from 'is-electron' import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-dialog/paper-dialog.js' @@ -726,28 +725,23 @@ class QApps extends LitElement { }, 0) const getFollowedNames = async () => { - const followedNames = await parentEpml.request('apiCall', { - url: `/lists/followedNames?apiKey=${this.getApiKey()}` - }) - - this.followedNames = followedNames + this.followedNames = await parentEpml.request('apiCall', { + url: `/lists/followedNames?apiKey=${this.getApiKey()}` + }) setTimeout(getFollowedNames, 60000) } const getBlockedNames = async () => { - const blockedNames = await parentEpml.request('apiCall', { - url: `/lists/blockedNames?apiKey=${this.getApiKey()}` - }) - this.blockedNames = blockedNames + this.blockedNames = await parentEpml.request('apiCall', { + url: `/lists/blockedNames?apiKey=${this.getApiKey()}` + }) setTimeout(getBlockedNames, 60000) } const getRelayMode = async () => { - const relayMode = await parentEpml.request('apiCall', { - url: `/arbitrary/relaymode?apiKey=${this.getApiKey()}` - }) - - this.relayMode = relayMode + this.relayMode = await parentEpml.request('apiCall', { + url: `/arbitrary/relaymode?apiKey=${this.getApiKey()}` + }) setTimeout(getRelayMode, 600000) } @@ -858,10 +852,9 @@ class QApps extends LitElement { getAppsArrayData = async () => { this.isLoading = true this.appsArray = [] - const appsArrayRes = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=APP&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` - }) - this.appsArray = appsArrayRes + this.appsArray = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=APP&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&excludeblocked=true` + }) this.isLoading = false this.renderAppGrid() } @@ -950,19 +943,17 @@ class QApps extends LitElement { getFollowedNamesRefresh = async () => { this.isLoading = true - const followedNamesRes = await parentEpml.request('apiCall', { - url: `/lists/followedNames?apiKey=${this.getApiKey()}` - }) - this.followedNames = followedNamesRes + this.followedNames = await parentEpml.request('apiCall', { + url: `/lists/followedNames?apiKey=${this.getApiKey()}` + }) this.isLoading = false } getFollowedNamesResource = async () => { this.isLoading = true - const followedResourcesRes = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=followedNames` - }) - this.followedResources = followedResourcesRes + this.followedResources = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=followedNames` + }) this.isLoading = false this.renderFollowedAppsGrid() } @@ -1051,20 +1042,18 @@ class QApps extends LitElement { getBlockedNamesRefresh = async () => { this.isLoading = true - const blockedNamesRes = await parentEpml.request('apiCall', { - url: `/lists/blockedNames?apiKey=${this.getApiKey()}` - }) - this.blockedNames = blockedNamesRes + this.blockedNames = await parentEpml.request('apiCall', { + url: `/lists/blockedNames?apiKey=${this.getApiKey()}` + }) this.isLoading = false } getBlockedNamesResource = async () => { this.isLoading = true this.blockedResources = [] - const blockedResourcesRes = await parentEpml.request('apiCall', { - url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=blockedNames` - }) - this.blockedResources = blockedResourcesRes + this.blockedResources = await parentEpml.request('apiCall', { + url: `/arbitrary/resources?service=${this.service}&default=true&limit=0&reverse=false&includestatus=true&includemetadata=true&namefilter=blockedNames` + }) this.isLoading = false this.renderBlockedAppsGrid() } @@ -1410,9 +1399,9 @@ class QApps extends LitElement { this.textProgress = '' this.shadowRoot.getElementById('downloadProgressDialog').close() this.closeAppInfoDialog() - this.getAppsArrayData() - this.getFollowedNamesRefresh() - this.getFollowedNamesResource() + await this.getAppsArrayData() + await this.getFollowedNamesRefresh() + await this.getFollowedNamesResource() this.updateComplete.then(() => this.requestUpdate()) } else if (status.id === "BUILDING") { this.textProgress = '' @@ -1478,8 +1467,8 @@ class QApps extends LitElement { this.followedNames = this.followedNames.filter(item => item != name) this.followedNames.push(name) this.closeAppInfoDialog() - this.getFollowedNamesRefresh() - this.getFollowedNamesResource() + await this.getFollowedNamesRefresh() + await this.getFollowedNamesResource() } else { let err3string = get("appspage.schange22") parentEpml.request('showSnackBar', `${err3string}`) @@ -1506,8 +1495,8 @@ class QApps extends LitElement { if (ret === true) { this.followedNames = this.followedNames.filter(item => item != name) this.closeAppInfoDialog() - this.getFollowedNamesRefresh() - this.getFollowedNamesResource() + await this.getFollowedNamesRefresh() + await this.getFollowedNamesResource() } else { let err4string = get("appspage.schange23") parentEpml.request('showSnackBar', `${err4string}`) @@ -1535,9 +1524,9 @@ class QApps extends LitElement { this.blockedNames = this.blockedNames.filter(item => item != name) this.blockedNames.push(name) this.closeAppInfoDialog() - this.getAppsArrayData() - this.getBlockedNamesRefresh() - this.getBlockedNamesResource() + await this.getAppsArrayData() + await this.getBlockedNamesRefresh() + await this.getBlockedNamesResource() } else { let err5string = get("appspage.schange24") parentEpml.request('showSnackBar', `${err5string}`) @@ -1564,8 +1553,8 @@ class QApps extends LitElement { if (ret === true) { this.blockedNames = this.blockedNames.filter(item => item != name) this.closeBlockedInfoDialog() - this.getBlockedNamesRefresh() - this.getBlockedNamesResource() + await this.getBlockedNamesRefresh() + await this.getBlockedNamesResource() } else { let err6string = get("appspage.schange25") parentEpml.request('showSnackBar', `${err6string}`) @@ -1590,8 +1579,7 @@ class QApps extends LitElement { getApiKey() { const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } isEmptyArray(arr) { diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index b5354bf9..8e9828cc 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -1,7 +1,7 @@ -import { css, html, LitElement } from 'lit' -import { Epml } from '../../../../epml' +import {css, html, LitElement} from 'lit' +import {Epml} from '../../../../epml' import isElectron from 'is-electron' -import { get, registerTranslateConfig, translate, use } from '../../../../../core/translate/index.js' +import {get, registerTranslateConfig, translate, use} from '../../../../../core/translate' import ShortUniqueId from 'short-unique-id'; import FileSaver from 'file-saver' import * as actions from '../../components/qdn-action-types' @@ -10,10 +10,10 @@ import '@material/mwc-icon' import '@material/mwc-checkbox' import WebWorker from 'web-worker:./computePowWorkerFile.src.js' import WebWorkerChat from 'web-worker:./computePowWorker.src.js' -import { publishData } from '../../../utils/publish-image.js' -import { Loader } from '../../../utils/loader.js'; -import { QORT_DECIMALS } from '../../../../../crypto/api/constants' -import { mimeToExtensionMap } from '../../components/qdn-action-constants'; +import {publishData} from '../../../utils/publish-image.js' +import {Loader} from '../../../utils/loader.js'; +import {QORT_DECIMALS} from '../../../../../crypto/api/constants' +import {mimeToExtensionMap} from '../../components/qdn-action-constants'; import { base64ToUint8Array, decryptDeprecatedSingle, @@ -177,11 +177,9 @@ class WebBrowser extends LitElement { this.displayUrl = displayUrl const getFollowedNames = async () => { - let followedNames = await parentEpml.request('apiCall', { + this.followedNames = await parentEpml.request('apiCall', { url: `/lists/followedNames?apiKey=${this.getApiKey()}`, }) - - this.followedNames = followedNames setTimeout( getFollowedNames, this.config.user.nodeSettings.pingInterval @@ -189,11 +187,9 @@ class WebBrowser extends LitElement { } const getBlockedNames = async () => { - let blockedNames = await parentEpml.request('apiCall', { + this.blockedNames = await parentEpml.request('apiCall', { url: `/lists/blockedNames?apiKey=${this.getApiKey()}`, }) - - this.blockedNames = blockedNames setTimeout( getBlockedNames, this.config.user.nodeSettings.pingInterval @@ -299,8 +295,7 @@ class WebBrowser extends LitElement { async _handleKeyDown(e) { if (e.key === 'Enter') { - const value = e.target.value - let newQuery = value + let newQuery = e.target.value if (newQuery.endsWith('/')) { newQuery = newQuery.slice(0, -1) } @@ -323,8 +318,7 @@ class WebBrowser extends LitElement { async linkOpenNewTab(link) { - const value = link - let newQuery = value + let newQuery = link if (newQuery.endsWith('/')) { newQuery = newQuery.slice(0, -1) } @@ -449,8 +443,7 @@ class WebBrowser extends LitElement { } const data = await response.json() - const joinFee = (Number(data) / 1e8).toFixed(8) - return joinFee + return (Number(data) / 1e8).toFixed(8) } async deployAtFee() { @@ -463,8 +456,7 @@ class WebBrowser extends LitElement { } const data = await response.json() - const joinFee = (Number(data) / 1e8).toFixed(8) - return joinFee + return (Number(data) / 1e8).toFixed(8) } async getArbitraryFee() { @@ -494,8 +486,7 @@ class WebBrowser extends LitElement { } const data = await response.json() - const qortFee = (Number(data) / 1e8).toFixed(8) - return qortFee + return (Number(data) / 1e8).toFixed(8) } async unitVoteFee() { @@ -508,8 +499,7 @@ class WebBrowser extends LitElement { } const data = await response.json() - const joinFee = (Number(data) / 1e8).toFixed(8) - return joinFee + return (Number(data) / 1e8).toFixed(8) } async unitCreatePollFee() { @@ -522,31 +512,28 @@ class WebBrowser extends LitElement { } const data = await response.json() - const joinFee = (Number(data) / 1e8).toFixed(8) - return joinFee + return (Number(data) / 1e8).toFixed(8) } async _joinGroup(groupId, groupName) { const joinFeeInput = await this.unitJoinFee() const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/lastreference/${this.selectedAddress.address}` }) - return myRef } const validateReceiver = async () => { let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } const makeTransactionRequest = async (lastRef) => { let groupdialog1 = get("transactions.groupdialog1") let groupdialog2 = get("transactions.groupdialog2") - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 31, nonce: this.selectedAddress.nonce, params: { @@ -560,7 +547,6 @@ class WebBrowser extends LitElement { }, apiVersion: 2 }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -574,26 +560,23 @@ class WebBrowser extends LitElement { throw new Error('Server error. Could not perform action.') } } - const groupRes = await validateReceiver() - return groupRes + return await validateReceiver() } async _deployAt(name, description, tags, creationBytes, amount, assetId, atType) { const deployAtFee = await this.deployAtFee() const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/lastreference/${this.selectedAddress.address}` }) - return myRef } const validateReceiver = async () => { let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } const makeTransactionRequest = async (lastRef) => { @@ -601,7 +584,7 @@ class WebBrowser extends LitElement { let deployAtdialog2 = get("transactions.deployAtdialog2") let deployAtdialog3 = get("transactions.deployAtdialog3") let deployAtdialog4 = get("walletpage.wchange12") - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 16, nonce: this.selectedAddress.nonce, params: { @@ -621,7 +604,6 @@ class WebBrowser extends LitElement { }, apiVersion: 2 }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -635,26 +617,23 @@ class WebBrowser extends LitElement { throw new Error('Server error. Could not perform action.') } } - const groupRes = await validateReceiver() - return groupRes + return await validateReceiver() } async _voteOnPoll(pollName, optionIndex) { const voteFeeInput = await this.unitVoteFee() const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/lastreference/${this.selectedAddress.address}` }) - return myRef } const validateReceiver = async () => { let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } const makeTransactionRequest = async (lastRef) => { @@ -662,7 +641,7 @@ class WebBrowser extends LitElement { let votedialog2 = get("transactions.votedialog2") let feeDialog = get("walletpage.wchange12") - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 9, nonce: this.selectedAddress.nonce, params: { @@ -677,7 +656,6 @@ class WebBrowser extends LitElement { }, apiVersion: 2 }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -691,26 +669,23 @@ class WebBrowser extends LitElement { throw new Error('Server error. Could not perform action.') } } - const voteRes = await validateReceiver() - return voteRes + return await validateReceiver() } async _createPoll(pollName, pollDescription, options, pollOwnerAddress) { const voteFeeInput = await this.unitCreatePollFee() const getLastRef = async () => { - let myRef = await parentEpml.request('apiCall', { + return await parentEpml.request('apiCall', { type: 'api', url: `/addresses/lastreference/${this.selectedAddress.address}` }) - return myRef } const validateReceiver = async () => { let lastRef = await getLastRef() let myTransaction = await makeTransactionRequest(lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } const makeTransactionRequest = async (lastRef) => { @@ -720,7 +695,7 @@ class WebBrowser extends LitElement { let votedialog6 = get("transactions.votedialog6") let feeDialog = get("walletpage.wchange12") - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 8, nonce: this.selectedAddress.nonce, params: { @@ -738,7 +713,6 @@ class WebBrowser extends LitElement { }, apiVersion: 2 }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -752,8 +726,7 @@ class WebBrowser extends LitElement { throw new Error('Server error. Could not perform action.') } } - const voteRes = await validateReceiver() - return voteRes + return await validateReceiver() } @@ -829,8 +802,7 @@ class WebBrowser extends LitElement { break } else { const data = {} - const errorMsg = "User declined to share account details" - data['error'] = errorMsg + data['error'] = "User declined to share account details" response = JSON.stringify(data) break } @@ -868,8 +840,7 @@ class WebBrowser extends LitElement { } catch (error) { const data = {} - const errorMsg = error.message || "Error in encrypting data" - data['error'] = errorMsg + data['error'] = error.message || "Error in encrypting data" response = JSON.stringify(data) break } @@ -882,9 +853,7 @@ class WebBrowser extends LitElement { try { let data = {} if (!encryptedData) { - const errorMsg = `Missing fields: encryptedData` - - data['error'] = errorMsg + data['error'] = `Missing fields: encryptedData` response = JSON.stringify(data) break @@ -894,9 +863,7 @@ class WebBrowser extends LitElement { if (startsWithQortalEncryptedData) { if (!publicKey) { - const errorMsg = `Missing fields: publicKey` - - data['error'] = errorMsg + data['error'] = `Missing fields: publicKey` response = JSON.stringify(data) break } @@ -918,15 +885,13 @@ class WebBrowser extends LitElement { } - const errorMsg = "Unable to decrypt" - data['error'] = errorMsg + data['error'] = "Unable to decrypt" response = JSON.stringify(data) break } catch (error) { const data = {} - const errorMsg = error.message || "Error in decrypting data" - data['error'] = errorMsg + data['error'] = error.message || "Error in decrypting data" response = JSON.stringify(data) break } @@ -976,8 +941,7 @@ class WebBrowser extends LitElement { } catch (error) { const data = {} - const errorMsg = "Error in retrieving list" - data['error'] = errorMsg + data['error'] = "Error in retrieving list" response = JSON.stringify(data) } finally { break @@ -985,8 +949,7 @@ class WebBrowser extends LitElement { } else { const data = {} - const errorMsg = "User declined to share list" - data['error'] = errorMsg + data['error'] = "User declined to share list" response = JSON.stringify(data) break } @@ -1028,7 +991,7 @@ class WebBrowser extends LitElement { } const bodyToString = JSON.stringify(body) - const data = await parentEpml.request('apiCall', { + response = await parentEpml.request('apiCall', { type: 'api', method: 'POST', url: `/lists/${list_name}?apiKey=${this.getApiKey()}`, @@ -1037,11 +1000,9 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, }) - response = data } catch (error) { const data = {} - const errorMsg = "Error in adding to list" - data['error'] = errorMsg + data['error'] = "Error in adding to list" response = JSON.stringify(data) } finally { break @@ -1049,8 +1010,7 @@ class WebBrowser extends LitElement { } else { const data = {} - const errorMsg = "User declined add to list" - data['error'] = errorMsg + data['error'] = "User declined add to list" response = JSON.stringify(data) break } @@ -1093,7 +1053,7 @@ class WebBrowser extends LitElement { const bodyToString = JSON.stringify(body) - const data = await parentEpml.request('apiCall', { + response = await parentEpml.request('apiCall', { type: 'api', method: 'DELETE', url: `/lists/${list_name}?apiKey=${this.getApiKey()}`, @@ -1102,11 +1062,9 @@ class WebBrowser extends LitElement { 'Content-Type': 'application/json', }, }) - response = data } catch (error) { const data = {} - const errorMsg = "Error in adding to list" - data['error'] = errorMsg + data['error'] = "Error in adding to list" response = JSON.stringify(data) } finally { break @@ -1114,8 +1072,7 @@ class WebBrowser extends LitElement { } else { const data = {} - const errorMsg = "User declined add to list" - data['error'] = errorMsg + data['error'] = "User declined add to list" response = JSON.stringify(data) break } @@ -1143,8 +1100,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(list) } catch (error) { const data = {} - const errorMsg = "Error in retrieving friends list" - data['error'] = errorMsg + data['error'] = "Error in retrieving friends list" response = JSON.stringify(data) } @@ -1152,8 +1108,7 @@ class WebBrowser extends LitElement { } else { const data = {} - const errorMsg = "User declined to share friends list" - data['error'] = errorMsg + data['error'] = "User declined to share friends list" response = JSON.stringify(data) break } @@ -1296,8 +1251,7 @@ class WebBrowser extends LitElement { } catch (error) { const obj = {} - const errorMsg = error.message || 'Upload failed due to failed encryption' - obj['error'] = errorMsg + obj['error'] = error.message || 'Upload failed due to failed encryption' response = JSON.stringify(obj) break } @@ -1341,7 +1295,7 @@ class WebBrowser extends LitElement { tag4, tag5, apiVersion: 2, - withFee: res2.userData.isWithFee === true ? true : false, + withFee: res2.userData.isWithFee === true, feeAmount: feeAmount }) @@ -1350,8 +1304,7 @@ class WebBrowser extends LitElement { } catch (error) { worker.terminate() const obj = {} - const errorMsg = error.message || 'Upload failed' - obj['error'] = errorMsg + obj['error'] = error.message || 'Upload failed' response = JSON.stringify(obj) console.error(error) break @@ -1530,7 +1483,7 @@ class WebBrowser extends LitElement { tag4, tag5, apiVersion: 2, - withFee: res2.userData.isWithFee === true ? true : false, + withFee: res2.userData.isWithFee === true, feeAmount: feeAmount }) @@ -1547,7 +1500,6 @@ class WebBrowser extends LitElement { reason: errorMsg, identifier: resource.identifier }) - continue } } catch (error) { @@ -1555,7 +1507,6 @@ class WebBrowser extends LitElement { reason: "Unknown error", identifier: resource.identifier }) - continue } @@ -1565,10 +1516,9 @@ class WebBrowser extends LitElement { if (failedPublishesIdentifiers.length > 0) { response = failedPublishesIdentifiers const obj = {} - const errorMsg = { + obj['error'] = { unsuccessfulPublishes: failedPublishesIdentifiers } - obj['error'] = errorMsg response = JSON.stringify(obj) this.loader.hide() break @@ -1630,8 +1580,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(resVoteOnPoll) } catch (error) { const obj = {} - const errorMsg = error.message || 'Failed to vote on the poll.' - obj['error'] = errorMsg + obj['error'] = error.message || 'Failed to vote on the poll.' response = JSON.stringify(obj) } finally { this.loader.hide() @@ -1670,8 +1619,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(resCreatePoll) } catch (error) { const obj = {} - const errorMsg = error.message || 'Failed to created poll.' - obj['error'] = errorMsg + obj['error'] = error.message || 'Failed to created poll.' response = JSON.stringify(obj) } finally { this.loader.hide() @@ -1683,8 +1631,7 @@ class WebBrowser extends LitElement { case actions.OPEN_NEW_TAB: { if (!data.qortalLink) { const obj = {} - const errorMsg = 'Please enter a qortal link - qortal://...' - obj['error'] = errorMsg + obj['error'] = 'Please enter a qortal link - qortal://...' response = JSON.stringify(obj) break } @@ -1696,8 +1643,7 @@ class WebBrowser extends LitElement { } catch (error) { console.log('error', error) const obj = {} - const errorMsg = "Invalid qortal link" - obj['error'] = errorMsg + obj['error'] = "Invalid qortal link" response = JSON.stringify(obj) break } @@ -1763,8 +1709,7 @@ class WebBrowser extends LitElement { } catch (error) { const obj = {} - const errorMsg = error.message || "error in pushing notification" - obj['error'] = errorMsg + obj['error'] = error.message || "error in pushing notification" response = JSON.stringify(obj) break @@ -1775,7 +1720,7 @@ class WebBrowser extends LitElement { const message = data.message const recipient = data.destinationAddress const groupId = data.groupId - const isRecipient = groupId ? false : true + const isRecipient = !groupId const sendMessage = async (messageText, chatReference) => { let _reference = new Uint8Array(64) @@ -1826,8 +1771,7 @@ class WebBrowser extends LitElement { } - const msgResponse = await _computePow(chatResponse) - return msgResponse + return await _computePow(chatResponse) } const _computePow = async (chatBytes) => { @@ -1853,8 +1797,7 @@ class WebBrowser extends LitElement { apiVersion: 2 }) - const chatResponse = getSendChatResponse(_response) - return chatResponse + return getSendChatResponse(_response) } const getSendChatResponse = (res) => { @@ -1867,8 +1810,7 @@ class WebBrowser extends LitElement { } } - const chatResponse = await sendMessageRequest() - return chatResponse + return await sendMessageRequest() } const result = await showModalAndWait( @@ -1938,8 +1880,7 @@ class WebBrowser extends LitElement { // } try { this.loader.show() - const msgResponse = await sendMessage(stringifyMessageObject) - response = msgResponse + response = await sendMessage(stringifyMessageObject) } catch (error) { console.error(error) if (error.message) { @@ -2014,8 +1955,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(resJoinGroup) } catch (error) { const obj = {} - const errorMsg = error.message || 'Failed to join the group.' - obj['error'] = errorMsg + obj['error'] = error.message || 'Failed to join the group.' response = JSON.stringify(obj) } finally { this.loader.hide() @@ -2076,15 +2016,13 @@ class WebBrowser extends LitElement { let fileHandleOptions = {} if (!mimeType) { const obj = {} - const errorMsg = 'A mimeType could not be derived' - obj['error'] = errorMsg + obj['error'] = 'A mimeType could not be derived' response = JSON.stringify(obj) break } if (!fileExtension) { const obj = {} - const errorMsg = 'A file extension could not be derived' - obj['error'] = errorMsg + obj['error'] = 'A file extension could not be derived' response = JSON.stringify(obj) break } @@ -2117,8 +2055,7 @@ class WebBrowser extends LitElement { } catch (error) { if (error.name === 'AbortError') { const obj = {} - const errorMsg = 'User declined the download' - obj['error'] = errorMsg + obj['error'] = 'User declined the download' response = JSON.stringify(obj) break } @@ -2128,8 +2065,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(true) } catch (error) { const obj = {} - const errorMsg = error.message || 'Failed to initiate download' - obj['error'] = errorMsg + obj['error'] = error.message || 'Failed to initiate download' response = JSON.stringify(obj) } break @@ -2162,8 +2098,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(resDeployAt) } catch (error) { const obj = {} - const errorMsg = error.message || 'Failed to join the group.' - obj['error'] = errorMsg + obj['error'] = error.message || 'Failed to join the group.' response = JSON.stringify(obj) } finally { this.loader.hide() @@ -2240,8 +2175,7 @@ class WebBrowser extends LitElement { } catch (error) { const obj = {}; - const errorMsg = error.message || 'Failed to join the group.'; - obj['error'] = errorMsg; + obj['error'] = error.message || 'Failed to join the group.'; response = JSON.stringify(obj); } finally { this.loader.hide(); @@ -2319,8 +2253,7 @@ class WebBrowser extends LitElement { } catch (error) { const obj = {}; - const errorMsg = error.message || 'Failed to set property.'; - obj['error'] = errorMsg; + obj['error'] = error.message || 'Failed to set property.'; response = JSON.stringify(obj); } finally { this.loader.hide(); @@ -2356,8 +2289,7 @@ class WebBrowser extends LitElement { response = JSON.stringify(true); } catch (error) { const obj = {}; - const errorMsg = error.message || 'Failed to open profile'; - obj['error'] = errorMsg; + obj['error'] = error.message || 'Failed to open profile'; response = JSON.stringify(obj); } break; @@ -2468,17 +2400,15 @@ class WebBrowser extends LitElement { let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address try { this.loader.show() - const QORTBalance = await parentEpml.request('apiCall', { + response = await parentEpml.request('apiCall', { url: `/addresses/balance/${qortAddress}?apiKey=${this.getApiKey()}`, }) - response = QORTBalance } catch (error) { console.error(error) const data = {} - const errorMsg = error.message || get("browserpage.bchange21") - data['error'] = errorMsg + data['error'] = error.message || get("browserpage.bchange21") response = JSON.stringify(data) } finally { @@ -2525,8 +2455,7 @@ class WebBrowser extends LitElement { }) if (isNaN(Number(res))) { const data = {} - const errorMsg = get("browserpage.bchange21") - data['error'] = errorMsg + data['error'] = get("browserpage.bchange21") response = JSON.stringify(data) return } else { @@ -2535,8 +2464,7 @@ class WebBrowser extends LitElement { } catch (error) { console.error(error) const data = {} - const errorMsg = error.message || get("browserpage.bchange21") - data['error'] = errorMsg + data['error'] = error.message || get("browserpage.bchange21") response = JSON.stringify(data) return } finally { @@ -2597,8 +2525,7 @@ class WebBrowser extends LitElement { } catch (error) { console.error(error) const data = {} - const errorMsg = error.message || get("browserpage.bchange21") - data['error'] = errorMsg + data['error'] = error.message || get("browserpage.bchange21") response = JSON.stringify(data) return } finally { @@ -2644,8 +2571,7 @@ class WebBrowser extends LitElement { } catch (error) { console.error(error) const data = {} - const errorMsg = error.message || 'Error in retrieving server info' - data['error'] = errorMsg + data['error'] = error.message || 'Error in retrieving server info' response = JSON.stringify(data) return } finally { @@ -2655,17 +2581,54 @@ class WebBrowser extends LitElement { break } + case actions.GET_TX_ACTIVITY_SUMMARY: { + const requiredFields = ['coin'] + const missingFields = [] + + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field) + } + }) + + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const errorMsg = `Missing fields: ${missingFieldsString}` + let data = {} + data['error'] = errorMsg + response = JSON.stringify(data) + break + } + + try { + let coin = data.coin; + response = await parentEpml.request('apiCall', { + type: 'api', + method: 'POST', + url: `/crosschain/txactivity?apiKey=${this.getApiKey()}&foreignBlockchain=${coin}`, + headers: { + 'Accept': '*/*', + 'Content-Type': 'application/json' + }, + }) + } catch (error) { + const data = {} + data['error'] = "Error in tx activity summary" + response = JSON.stringify(data) + } finally { + break + } + } + case actions.GET_DAY_SUMMARY: { try { - const summary = await parentEpml.request('apiCall', { + response = 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 + data['error'] = "Error in retrieving summary" response = JSON.stringify(data) } finally { break @@ -2685,7 +2648,7 @@ class WebBrowser extends LitElement { if (missingFields.length > 0) { const missingFieldsString = missingFields.join(', ') const errorMsg = `Missing fields: ${missingFieldsString}` - showErrorAndWait("MISSING_FIELDS", errorMsg) + await showErrorAndWait("MISSING_FIELDS", errorMsg) let data = {} data['error'] = errorMsg response = JSON.stringify(data) @@ -2711,7 +2674,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch QORT Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " QORT " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2733,7 +2696,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2742,7 +2705,7 @@ class WebBrowser extends LitElement { if (amount <= 0) { let errorMsg = "Invalid Amount!" - showErrorAndWait("INVALID_AMOUNT", errorMsg) + await showErrorAndWait("INVALID_AMOUNT", errorMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2751,7 +2714,7 @@ class WebBrowser extends LitElement { if (recipient.length === 0) { let errorMsg = "Receiver cannot be empty!" - showErrorAndWait("NO_RECEIVER", errorMsg) + await showErrorAndWait("NO_RECEIVER", errorMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2773,7 +2736,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -2794,8 +2757,7 @@ class WebBrowser extends LitElement { } const validateAddress = async (receiverAddress) => { - let myAddress = await window.parent.validateAddress(receiverAddress) - return myAddress + return await window.parent.validateAddress(receiverAddress) } const validateReceiver = async (recipient) => { @@ -2810,19 +2772,17 @@ class WebBrowser extends LitElement { if (isAddress) { let myTransaction = await makeTransactionRequest(recipient, lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } else { let myNameRes = await validateName(recipient) if (myNameRes !== false) { let myNameAddress = myNameRes.owner let myTransaction = await makeTransactionRequest(myNameAddress, lastRef) - const res = getTxnRequestResponse(myTransaction) - return res + return getTxnRequestResponse(myTransaction) } else { let errorMsg = get("walletpage.wchange29") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INVALID_RECEIVER", errorMsg, pleaseMsg) + await showErrorAndWait("INVALID_RECEIVER", errorMsg, pleaseMsg) throw new Error(errorMsg) } } @@ -2855,7 +2815,7 @@ class WebBrowser extends LitElement { let dialogName = get("login.name") let dialogto = get("transactions.to") let recipientName = await getName(myReceiver) - let myTxnrequest = await parentEpml.request('transaction', { + return await parentEpml.request('transaction', { type: 2, nonce: this.myAddress.nonce, params: { @@ -2871,7 +2831,6 @@ class WebBrowser extends LitElement { }, apiVersion: 2 }) - return myTxnrequest } const getTxnRequestResponse = (txnResponse) => { @@ -2889,8 +2848,7 @@ class WebBrowser extends LitElement { } try { - const result = await validateReceiver(recipient) - response = result + response = await validateReceiver(recipient) } catch (error) { console.error(error) response = '{"error": "Request could not be fulfilled"}' @@ -2917,7 +2875,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch BTC Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " BTC " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2934,7 +2892,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -2958,7 +2916,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -2972,8 +2930,7 @@ class WebBrowser extends LitElement { bitcoinAmount: amount, feePerByte: feePerByte * QORT_DECIMALS } - const response = await parentEpml.request('sendBtc', opts) - return response + return await parentEpml.request('sendBtc', opts) } const manageResponse = (response) => { @@ -3027,7 +2984,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch LTC Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " LTC " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3044,7 +3001,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3068,7 +3025,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -3082,8 +3039,7 @@ class WebBrowser extends LitElement { litecoinAmount: amount, feePerByte: feePerByte * QORT_DECIMALS } - const response = await parentEpml.request('sendLtc', opts) - return response + return await parentEpml.request('sendLtc', opts) } const manageResponse = (response) => { @@ -3137,7 +3093,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch DOGE Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " DOGE " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3154,7 +3110,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3178,7 +3134,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -3192,8 +3148,7 @@ class WebBrowser extends LitElement { dogecoinAmount: amount, feePerByte: feePerByte * QORT_DECIMALS } - const response = await parentEpml.request('sendDoge', opts) - return response + return await parentEpml.request('sendDoge', opts) } const manageResponse = (response) => { @@ -3247,7 +3202,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch DGB Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " DGB " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3264,7 +3219,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3288,7 +3243,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -3302,8 +3257,7 @@ class WebBrowser extends LitElement { digibyteAmount: amount, feePerByte: feePerByte * QORT_DECIMALS } - const response = await parentEpml.request('sendDgb', opts) - return response + return await parentEpml.request('sendDgb', opts) } const manageResponse = (response) => { @@ -3357,7 +3311,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch RVN Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " RVN " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3374,7 +3328,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3398,7 +3352,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -3412,8 +3366,7 @@ class WebBrowser extends LitElement { ravencoinAmount: amount, feePerByte: feePerByte * QORT_DECIMALS } - const response = await parentEpml.request('sendRvn', opts) - return response + return await parentEpml.request('sendRvn', opts) } const manageResponse = (response) => { @@ -3467,7 +3420,7 @@ class WebBrowser extends LitElement { let errorMsg = "Failed to Fetch ARRR Balance. Try again!" let failedMsg = get("walletpage.wchange33") + " ARRR " + get("general.balance") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) + await showErrorAndWait("FAILED_FETCH", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3484,7 +3437,7 @@ class WebBrowser extends LitElement { let errorMsg = "Insufficient Funds!" let failedMsg = get("walletpage.wchange26") let pleaseMsg = get("walletpage.wchange44") - showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) + await showErrorAndWait("INSUFFICIENT_FUNDS", failedMsg, pleaseMsg) let obj = {} obj['error'] = errorMsg response = JSON.stringify(obj) @@ -3508,7 +3461,7 @@ class WebBrowser extends LitElement { let errorMsg = "User declined request" let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") - showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) + await showErrorAndWait("DECLINED_REQUEST", myMsg1, myMsg2) response = '{"error": "User declined request"}' break } @@ -3522,8 +3475,7 @@ class WebBrowser extends LitElement { arrrAmount: amount, memo: memo } - const response = await parentEpml.request('sendArrr', opts) - return response + return await parentEpml.request('sendArrr', opts) } const manageResponse = (response) => { @@ -3944,8 +3896,7 @@ class WebBrowser extends LitElement { window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.node ] - let apiKey = myNode.apiKey - return apiKey + return myNode.apiKey } } @@ -3980,7 +3931,7 @@ async function showModalAndWait(type, data) { ${type === actions.PUBLISH_MULTIPLE_QDN_RESOURCES ? `