Auto buy (First Stage) , Inside address explorer (First Stage), update deps

This commit is contained in:
AlphaX-Projects 2022-11-15 14:37:52 +01:00
parent aa5842b940
commit 4682ee891c
38 changed files with 7909 additions and 240 deletions

BIN
img/notfound.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -33,14 +33,14 @@
},
"dependencies": {
"electron-log": "4.4.8",
"electron-updater": "5.2.1"
"electron-updater": "5.3.0"
},
"devDependencies": {
"electron": "21.1.1",
"electron-builder": "23.3.3",
"electron-notarize": "1.2.1",
"electron-packager": "16.0.0",
"shelljs": "0.8.5"
"electron": "21.2.3",
"electron-builder": "23.6.0",
"electron-packager": "17.1.1",
"@electron/notarize": "1.2.3",
"shelljs": "^0.8.5"
},
"engines": {
"node": ">=16.15.0"

View File

@ -308,7 +308,20 @@
"tchange30":"Guthaben konnte nicht abgerufen werden. Versuchen Sie es nochmal!",
"tchange31":"VERKAUFT",
"tchange32":"GEKAUFT",
"tchange33":"Tauschrate"
"tchange33":"Durchschnitt",
"tchange34":"Betrag darf nicht 0 sein",
"tchange35":"Der Preis darf nicht 0 sein",
"tchange36":"AUSSTEHENDER AUTOKAUF",
"tchange37":"Keine automatische Kaufbestellung gefunden!",
"tchange38":"HINZUFÜGEN",
"tchange39":"AUTO KAUFAUFTRAG",
"tchange40":"Preis",
"tchange41":"Automatischer Kaufauftrag erfolgreich entfernt!",
"tchange42":"MARKET OFFENE VERKAUFSAUFTRÄGE",
"tchange43":"MEINE KAUFGESCHICHTE",
"tchange44":"Automatischer Kaufauftrag erfolgreich hinzugefügt!",
"tchange45":"AUTO KAUFEN MIT",
"tchange46":"AUTOKAUF"
},
"rewardsharepage":{
"rchange1":"Belohnungsanteile",
@ -674,5 +687,14 @@
"schange19":"Sponsoring-Schlüssel kopieren",
"schange20":"Beziehung schaffen",
"schange21":"Sponsoring-Schlüssel entfernen"
},
"explorerpage":{
"exp1":"Adresse oder Name zum Suchen",
"exp2":"Kontostand",
"exp3":"Mehr Info",
"exp4":"Adresse oder Name nicht gefunden !",
"exp5":"Beachten Sie, dass bei registrierten Namen zwischen Groß- und Kleinschreibung unterschieden wird.",
"exp6":"Gründer",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Fallo en la obtención del saldo. Inténtelo de nuevo!",
"tchange31":"VENDIDO",
"tchange32":"COMPRADO",
"tchange33":"Tipo de cambio"
"tchange33":"Promedio",
"tchange34":"La cantidad no puede ser 0",
"tchange35":"El precio no puede ser 0",
"tchange36":"AUTO COMPRA PENDIENTE",
"tchange37":"No se ha encontrado ninguna orden de compra automática!",
"tchange38":"AGREGAR",
"tchange39":"AUTO ORDEN DE COMPRA",
"tchange40":"Precio",
"tchange41":"Orden de compra automática eliminada con éxito!",
"tchange42":"MERCADO ABIERTO ÓRDENES DE VENTA",
"tchange43":"MI HISTORIAL DE COMPRAS",
"tchange44":"Orden de compra automática agregada con éxito!",
"tchange45":"AUTO COMPRAR CON",
"tchange46":"COMPRA AUTOMÁTICA"
},
"rewardsharepage":{
"rchange1":"Rewardshares",
@ -674,5 +687,14 @@
"schange19":"Copiar clave de patrocinio",
"schange20":"Creando relación",
"schange21":"Eliminar clave de patrocinio"
},
"explorerpage":{
"exp1":"Dirección o nombre a buscar",
"exp2":"Saldo de la cuenta",
"exp3":"Más información",
"exp4":"No se encontró la dirección o el nombre!",
"exp5":"Tenga en cuenta que los nombres registrados distinguen entre mayúsculas y minúsculas.",
"exp6":"Fundador",
"exp7":"Información"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Échec de la récupération du solde. Réessayez!",
"tchange31":"VENDU",
"tchange32":"ACHETE",
"tchange33":"Taux de change"
"tchange33":"Moyen",
"tchange34":"Le montant ne peut pas être 0",
"tchange35":"Le prix ne peut pas être 0",
"tchange36":"ACHAT AUTOMATIQUE EN ATTENTE",
"tchange37":"Aucune commande d'achat automatique trouvée !",
"tchange38":"AJOUTER",
"tchange39":"COMMANDE D'ACHAT AUTOMATIQUE",
"tchange40":"Prix",
"tchange41":"Commande d'achat automatique supprimée avec succès !",
"tchange42":"ORDRES DE VENTE À L'OUVERTURE DU MARCHÉ",
"tchange43":"MON HISTORIQUE D'ACHAT",
"tchange44":"Commande d'achat automatique ajoutée avec succès !",
"tchange45":"ACHAT AUTO AVEC",
"tchange46":"ACHAT AUTOMATIQUE"
},
"rewardsharepage":{
"rchange1":"Récompenses",
@ -674,5 +687,14 @@
"schange19":"Copier la clé de parrainage",
"schange20":"Créer une relation",
"schange21":"Supprimer la clé de parrainage"
},
"explorerpage":{
"exp1":"Adresse ou nom à rechercher",
"exp2":"Solde du compte",
"exp3":"Plus d'informations",
"exp4":"Adresse ou nom introuvable !",
"exp5":"Notez que les noms enregistrés sont sensibles à la casse.",
"exp6":"Fondateur",
"exp7":"Info"
}
}

View File

@ -309,7 +309,20 @@
"tchange30":"शेष को लाने में विफल फिर से प्रयास करें!",
"tchange31":"बेचा",
"tchange32":"खरीद लिया",
"tchange33":"विनिमय दर"
"tchange33":"औसत",
"tchange34":"राशि 0 नहीं हो सकती",
"tchange35":"मूल्य 0 नहीं हो सकता",
"tchange36":"लंबित ऑटो खरीद",
"tchange37":"कोई ऑटो खरीद आदेश नहीं मिला!",
"tchange38":"जोड़ें",
"tchange39":"ऑटो खरीद आदेश",
"tchange40":"कीमत",
"tchange41":"स्वचालित खरीद आदेश सफलतापूर्वक निकाला गया!",
"tchange42":"मार्केट ओपन सेल ऑर्डर",
"tchange43":"मेरा इतिहास खरीदें",
"tchange44":"स्वतः खरीद आदेश सफलतापूर्वक जोड़ा गया!",
"tchange45":"ऑटो के साथ खरीदें",
"tchange46":"ऑटो खरीदें"
},
"rewardsharepage":{
"rchange1":"रिवॉर्डशेयर",
@ -675,5 +688,14 @@
"schange19":"कॉपी प्रायोजन कुंजी",
"schange20":"संबंध बनाना",
"schange21":"प्रायोजन कुंजी हटाएं"
},
"explorerpage":{
"exp1":"खोजने के लिए पता या नाम",
"exp2":"खाते में शेष",
"exp3":"और जानकारी",
"exp4":"पता या नाम नहीं मिला !",
"exp5":"ध्यान दें कि पंजीकृत नाम केस-संवेदी होते हैं।",
"exp6":"संस्थापक",
"exp7":"जानकारी"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Neuspješno dohvatiti stanje. Pokušajte ponovno!",
"tchange31":"PRODANO",
"tchange32":"KUPLJENO",
"tchange33":"Tečaj"
"tchange33":"Prosjek",
"tchange34":"Iznos ne može biti 0",
"tchange35":"Cijena ne može biti 0",
"tchange36":"ČEKA SE AUTO KUPNJA",
"tchange37":"Nije pronađena automatska narudžba za kupnju!",
"tchange38":"DODATI",
"tchange39":"AUTOMATSKA NARUDŽBA",
"tchange40":"Cijena",
"tchange41":"Uspješno uklonjena automatska narudžba za kupnju!",
"tchange42":"TRŽIŠNI OTVORENI PRODAJNI NALOGI",
"tchange43":"MOJA POVIJEST KUPNJE",
"tchange44":"Uspješno dodana automatska narudžba za kupnju!",
"tchange45":"AUTO KUPITE SA",
"tchange46":"AUTO OTKUP"
},
"rewardsharepage":{
"rchange1":"Nagradni udio (Rewardshares)",
@ -674,5 +687,14 @@
"schange19":"Kopiraj ključ sponzorstva",
"schange20":"Stvaranje odnosa",
"schange21":"Ukloni sponzorski ključ"
},
"explorerpage":{
"exp1":"Adresa ili ime za pretraživanje",
"exp2":"Stanje na računu",
"exp3":"Više informacija",
"exp4":"Adresa ili ime nisu pronađeni!",
"exp5":"Imajte na umu da su registrirana imena osjetljiva na velika i mala slova.",
"exp6":"Osnivač",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Nem sikerült lekérni az egyenleget. Próbáld újra!",
"tchange31":"ELADOTT",
"tchange32":"VÁSÁROLT",
"tchange33":"Árfolyam"
"tchange33":"Átlagos",
"tchange34":"Az összeg nem lehet 0",
"tchange35":"Az ár nem lehet 0",
"tchange36":"FÜGGŐBEN AUTOMATIKUS VÁSÁRLÁS",
"tchange37":"Nem található automatikus vásárlási rendelés!",
"tchange38":"HOZZÁAD",
"tchange39":"AUTOMATIKUS VÁSÁRLÁSI MEGRENDELÉS",
"tchange40":"Ár",
"tchange41":"Az automatikus vásárlási rendelés sikeresen eltávolítva!",
"tchange42":"NYÍLT PIACI ELADÁSI MEGRENDELÉSEK",
"tchange43":"VÁSÁRLÁSI TÖRTÉNETEM",
"tchange44":"Az automatikus vásárlási rendelés sikeresen hozzáadva!",
"tchange45":"AUTOMATIKUS VÁSÁRLÁS",
"tchange46":"AUTOMATIKUS VÁSÁRLÁS"
},
"rewardsharepage":{
"rchange1":"Jutalommegosztások",
@ -674,5 +687,14 @@
"schange19":"Szponzori kulcs másolása",
"schange20":"Kapcsolatteremtés",
"schange21":"Szponzori kulcs távolítsa"
},
"explorerpage":{
"exp1":"Keresendő cím vagy név",
"exp2":"Számlaegyenleg",
"exp3":"Több információ",
"exp4":"Cím vagy név nem található!",
"exp5":"Vegye figyelembe, hogy a regisztrált nevek megkülönböztetik a kis- és nagybetűket.",
"exp6":"Alapító",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Impossibile recuperare il saldo. Riprova!",
"tchange31":"VENDUTO",
"tchange32":"ACQUISTATO",
"tchange33":"Tasso di cambio"
"tchange33":"Media",
"tchange34":"L'importo non può essere 0",
"tchange35":"Il prezzo non può essere 0",
"tchange36":"ACQUISTO AUTO IN ATTESA",
"tchange37":"Nessun ordine di acquisto automatico trovato!",
"tchange38":"INSERISCI",
"tchange39":"ORDINE DI ACQUISTO AUTOMATICO",
"tchange40":"Prezzo",
"tchange41":"Ordine di acquisto automatico rimosso con successo!",
"tchange42":"MERCATO APERTO ORDINI DI VENDITA",
"tchange43":"LA MIA STORIA DI ACQUISTO",
"tchange44":"Ordine di acquisto automatico aggiunto con successo!",
"tchange45":"ACQUISTA AUTO CON",
"tchange46":"ACQUISTO AUTO"
},
"rewardsharepage":{
"rchange1":"Quote di ricompensa",
@ -674,5 +687,14 @@
"schange19":"Copia la chiave di sponsorizzazione",
"schange20":"Creare relazione",
"schange21":"Rimuovi la chiave di sponsorizzazione"
},
"explorerpage":{
"exp1":"Indirizzo o nome da cercare",
"exp2":"Saldo del conto",
"exp3":"Ulteriori informazioni",
"exp4":"Indirizzo o nome non trovato!",
"exp5":"Si noti che i nomi registrati fanno distinzione tra maiuscole e minuscole.",
"exp6":"Fondatore",
"exp7":"Informazioni"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"밸런스를 가져오지 못했습니다. 다시 시도하십시오.!",
"tchange31":"판매된",
"tchange32":"구매된",
"tchange33":"환율"
"tchange33":"평균",
"tchange34":"금액은 0일 수 없습니다.",
"tchange35":"가격은 0일 수 없습니다.",
"tchange36":"대기 중인 자동 구매",
"tchange37":"자동 구매 주문이 없습니다!",
"tchange38":"추가하다",
"tchange39":"자동 구매 주문",
"tchange40":"가격",
"tchange41":"자동 구매 주문을 성공적으로 제거했습니다!",
"tchange42":"시장 오픈 매도 주문",
"tchange43":"내 구매 내역",
"tchange44":"자동 구매 주문을 성공적으로 추가했습니다!",
"tchange45":"자동 구매",
"tchange46":"자동 구매"
},
"rewardsharepage":{
"rchange1":"보상 공유",
@ -674,5 +687,14 @@
"schange19":"후원 키 복사",
"schange20":"관계 만들기",
"schange21":"후원 키 제거"
},
"explorerpage":{
"exp1":"검색할 주소 또는 이름",
"exp2":"계정 잔액",
"exp3":"더 많은 정보",
"exp4":"주소 또는 이름을 찾을 수 없습니다!",
"exp5":"등록된 이름은 대소문자를 구분합니다.",
"exp6":"설립자",
"exp7":"정보"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Kunne ikke hente saldoen. Prøv igjen!",
"tchange31":"SOLGT",
"tchange32":"KJØPT",
"tchange33":"Vekslingskurs"
"tchange33":"Gjennomsnitt",
"tchange34":"Beløpet kan ikke være 0",
"tchange35":"Prisen kan ikke være 0",
"tchange36":"VENTENDE AUTOKJØP",
"tchange37":"Ingen autokjøpsordre funnet!",
"tchange38":"LEGGE TIL",
"tchange39":"AUTO KJØP ORDRE",
"tchange40":"Pris",
"tchange41":"Fjernet automatisk kjøpsordre!",
"tchange42":"MARKED ÅPNE SALGSORDRE",
"tchange43":"MIN KJØPSHISTORIE",
"tchange44":"Autokjøpsordre er lagt til!",
"tchange45":"AUTOKJØP MED",
"tchange46":"AUTOKJØP"
},
"rewardsharepage":{
"rchange1":"Belønningsdel",
@ -674,5 +687,14 @@
"schange19":"Kopier sponsornøkkel",
"schange20":"Skaper forhold",
"schange21":"Fjern sponsornøkkel"
},
"explorerpage":{
"exp1":"Adresse eller navn for å søke",
"exp2":"Saldo",
"exp3":"Mer informasjon",
"exp4":"Finner ikke adresse eller navn!",
"exp5":"Merk at registrerte navn skiller mellom store og små bokstaver.",
"exp6":"Grunnlegger",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Nie udało się pobrać salda. Spróbuj ponownie!",
"tchange31":"SPRZEDANY",
"tchange32":"KUPIONY",
"tchange33":"Kurs wymiany"
"tchange33":"Przeciętny",
"tchange34":"Kwota nie może wynosić 0",
"tchange35":"Cena nie może wynosić 0",
"tchange36":"OCZEKUJĄCY NA AUTOMATYCZNY KUP",
"tchange37":"Nie znaleziono automatycznego zamówienia zakupu!",
"tchange38":"DODAJ",
"tchange39":"AUTOMATYCZNE ZAMÓWIENIE",
"tchange40":"Cena £",
"tchange41":"Pomyślnie usunięto automatyczne zamówienie zakupu!",
"tchange42":"RYNEK OTWARTYCH ZLECEŃ SPRZEDAŻY",
"tchange43":"MOJA HISTORIA ZAKUPÓW",
"tchange44":"Pomyślnie dodano automatyczne zamówienie zakupu!",
"tchange45":"AUTO KUP Z",
"tchange46":"AUTO KUP"
},
"rewardsharepage":{
"rchange1":"Podział nagród",
@ -674,5 +687,14 @@
"schange19":"Kopiuj klucz sponsorski",
"schange20":"Tworzenie relacji",
"schange21":"Usuń klucz sponsorsk"
},
"explorerpage":{
"exp1":"Adres lub nazwa do wyszukania",
"exp2":"Bilans konta",
"exp3":"Więcej informacji",
"exp4":"Nie znaleziono adresu lub nazwy!",
"exp5":"Należy pamiętać, że w zarejestrowanych nazwach rozróżniana jest wielkość liter.",
"exp6":"Założyciel",
"exp7":"Informacje"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Falha buscando Saldo. Tente novamente!",
"tchange31":"VENDIDO",
"tchange32":"COMPRADO",
"tchange33":"Taxa de câmbio"
"tchange33":"Média",
"tchange34":"O valor nao pode ser 0",
"tchange35":"O preço nao pode ser 0",
"tchange36":"COMPRA AUTOMÁTICA PENDENTE",
"tchange37":"Nenhuma ordem de compra automática encontrada!",
"tchange38":"ADICIONAR",
"tchange39":"ORDEM DE COMPRA AUTOMÁTICA",
"tchange40":"Preço",
"tchange41":"Pedido de compra automática removido com sucesso!",
"tchange42":"ORDENS DE VENDA ABERTA AO MERCADO",
"tchange43":"MEU HISTÓRICO DE COMPRAS",
"tchange44":"Pedido de compra automática adicionado com sucesso!",
"tchange45":"COMPRA AUTOMÁTICA COM",
"tchange46":"COMPRA AUTOMÁTICA"
},
"rewardsharepage":{
"rchange1":"Ações de recompensa",
@ -674,5 +687,14 @@
"schange19":"Copiar chave de patrocínio",
"schange20":"Criando relacionamento",
"schange21":"Remover chave de patrocínio"
},
"explorerpage":{
"exp1":"Endereço ou nome para pesquisar",
"exp2":"Saldo da conta",
"exp3":"Mais informações",
"exp4":"Endereço ou nome não encontrado!",
"exp5":"Observe que os nomes registrados diferenciam maiúsculas de minúsculas.",
"exp6":"Fundador",
"exp7":"Informações"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Nu s-a reusit actualizarea soldului. Mai incearca odata!",
"tchange31":"VANDUT",
"tchange32":"CUMPARAT",
"tchange33":"Rata de schimb"
"tchange33":"In medie",
"tchange34":"Suma nu poate fi 0",
"tchange35":"Pretul nu poate fi 0",
"tchange36":"CUMPARARE AUTOMATĂ in așteptare",
"tchange37":"Nu a fost gasită nicio comandă de cumparare automata!",
"tchange38":"ADAUGA",
"tchange39":"COMANDA DE CUMPARARE AUTOMATA",
"tchange40":"Pret",
"tchange41":"Comanda de cumparare automata a fost eliminata cu succes!",
"tchange42":"PIATA DESCHISA COMENZI DE VANZARE",
"tchange43":"ISTORICUL MEU DE CUMPARARI",
"tchange44":"Comanda de cumparare automata a fost adaugata cu succes!",
"tchange45":"CUMPARA AUTOMATA CU",
"tchange46":"CUMPARARE AUTOMATA"
},
"rewardsharepage":{
"rchange1":"Cote de recompensa",
@ -674,5 +687,14 @@
"schange19":"Copiati cheia de sponsorizare",
"schange20":"Crearea unei relatii",
"schange21":"Eliminati cheia de sponsorizare"
},
"explorerpage":{
"exp1":"Adresa sau numele de căutat",
"exp2":"Soldul contului",
"exp3":"Mai multe informatii",
"exp4":"Adresa sau Numele nu a fost găsit!",
"exp5":"Retineti că numele înregistrate sunt sensibile la majuscule.",
"exp6":"Fondator",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Neuspešna provera salda. Pokušajte ponovo!",
"tchange31":"PRODATO",
"tchange32":"KUPLJENO",
"tchange33":"Kurs"
"tchange33":"Prosek",
"tchange34":"Iznos ne može biti 0",
"tchange35":"Cena ne može biti 0",
"tchange36":"NA ČEKANJU AUTOMATSKA KUPOVINA",
"tchange37":"Nije pronađena narudžbina za automatsku kupovinu!",
"tchange38":"DODATI",
"tchange39":"AUTO KUPOVINA",
"tchange40":"Cena",
"tchange41":"Narudžbina za automatsku kupovinu je uspešno uklonjena!",
"tchange42":"TRŽIŠTE OTVORENI NALOG ZA PRODAJU",
"tchange43":"MOJA ISTORIJA KUPOVINE",
"tchange44":"Narudžbina za automatsku kupovinu je uspešno dodata!",
"tchange45":"AUTO KUPI SA",
"tchange46":"AUTO BUI"
},
"rewardsharepage":{
"rchange1":"Udeo nagrade",
@ -674,5 +687,14 @@
"schange19":"Kopiraj sponzorski ključ",
"schange20":"Stvaranje odnosa",
"schange21":"Uklonite sponzorski ključ"
},
"explorerpage":{
"exp1":"Adresa ili ime za pretragu",
"exp2":"Stanje na računu",
"exp3":"Više informacija",
"exp4":"Adresa ili ime nisu pronađeni!",
"exp5":"Imajte na umu da registrovana imena razlikuju velika i mala slova.",
"exp6":"Osnivač",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Не удалось получить баланс. Повторите попытку!",
"tchange31":"ПРОДАНО",
"tchange32":"КУПИЛ",
"tchange33":"Обменный курс"
"tchange33":"Средний",
"tchange34":"Сумма не может быть 0",
"tchange35":"Цена не может быть 0",
"tchange36":"ОЖИДАНИЕ ПОКУПКИ АВТО",
"tchange37":"Заказ на автоматическую покупку не найден!",
"tchange38":"ДОБАВЛЯТЬ",
"tchange39":"АВТО КУПИТЬ ЗАКАЗ",
"tchange40":"Цена",
"tchange41":"Заказ на автоматическую покупку успешно удален!",
"tchange42":"РЫНОК ОТКРЫТЫЕ ЗАКАЗЫ НА ПРОДАЖУ",
"tchange43":"МОЯ ИСТОРИЯ ПОКУПОК",
"tchange44":"Заказ на автоматическую покупку успешно добавлен!",
"tchange45":"АВТО КУПИТЬ С",
"tchange46":"АВТО КУПИТЬ"
},
"rewardsharepage":{
"rchange1":"Вознаграждения",
@ -674,5 +687,14 @@
"schange19":"Копировать спонсорский ключ",
"schange20":"Создание отношений",
"schange21":"Удалить спонсорский ключ"
},
"explorerpage":{
"exp1":"Адрес или имя для поиска",
"exp2":"Баланс",
"exp3":"Больше информации",
"exp4":"Адрес или имя не найдено!",
"exp5":"Обратите внимание, что зарегистрированные имена вводятся с учетом регистра.",
"exp6":"Основатель",
"exp7":"Информация"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"Failed to Fetch Balance. Try again!",
"tchange31":"SOLD",
"tchange32":"BOUGHT",
"tchange33":"Exchange Rate"
"tchange33":"Average",
"tchange34":"Amount can not be 0",
"tchange35":"Price can not be 0",
"tchange36":"PENDING AUTO BUY",
"tchange37":"No auto buy order found !",
"tchange38":"ADD",
"tchange39":"AUTO BUY ORDER",
"tchange40":"Price",
"tchange41":"Successfully removed auto buy order!",
"tchange42":"MARKET OPEN SELL ORDERS",
"tchange43":"MY BUY HISTORY",
"tchange44":"Successfully added auto buy order!",
"tchange45":"AUTO BUY WITH",
"tchange46":"AUTO BUY"
},
"rewardsharepage":{
"rchange1":"Rewardshares",
@ -674,5 +687,14 @@
"schange19":"Copy Sponsorship Key",
"schange20":"Creating relationship",
"schange21":"Remove Sponsorship Key"
},
"explorerpage":{
"exp1":"Address or name to search",
"exp2":"Account Balance",
"exp3":"More Info",
"exp4":"Address or Name not found !",
"exp5":"Note that registered names are case-sensitive.",
"exp6":"Founder",
"exp7":"Info"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"加载余额失败。请重新尝试!",
"tchange31":"已卖出",
"tchange32":"已买入",
"tchange33":"汇率"
"tchange33":"平均",
"tchange34":"金额不能为0",
"tchange35":"价格不能为0",
"tchange36":"待定汽车购买",
"tchange37":"未找到自动购买订单!",
"tchange38":"添加",
"tchange39":"自动购买订单",
"tchange40":"价格",
"tchange41":"成功删除自动购买订单!",
"tchange42":"开市卖单",
"tchange43":"我的购买历史",
"tchange44":"成功添加自动买单!",
"tchange45":"自动购买",
"tchange46":"自动购买"
},
"rewardsharepage":{
"rchange1":"铸币密钥",
@ -674,5 +687,14 @@
"schange19":"复制赞助密钥",
"schange20":"建立关系",
"schange21":"删除赞助密钥"
},
"explorerpage":{
"exp1":"要搜索的地址或名称",
"exp2":"账户余额",
"exp3":"更多信息",
"exp4":"找不到地址或姓名!",
"exp5":"请注意,注册名称区分大小写。",
"exp6":"创始人",
"exp7":"信息"
}
}

View File

@ -308,7 +308,20 @@
"tchange30":"加載餘額失敗。請重新嘗試!",
"tchange31":"已賣出",
"tchange32":"已買入",
"tchange33":"匯率"
"tchange33":"平均",
"tchange34":"金額不能為0",
"tchange35":"價格不能為0",
"tchange36":"待定汽車購買",
"tchange37":"未找到自動購買訂單!",
"tchange38":"添加",
"tchange39":"自動購買訂單",
"tchange40":"價格",
"tchange41":"成功刪除自動購買訂單!",
"tchange42":"開市賣單",
"tchange43":"我的購買歷史",
"tchange44":"成功添加自動買單!",
"tchange45":"自動購買",
"tchange46":"自動購買"
},
"rewardsharepage":{
"rchange1":"鑄幣密鑰",
@ -674,5 +687,14 @@
"schange19":"複製贊助密鑰",
"schange20":"建立關係",
"schange21":"刪除贊助密鑰"
},
"explorerpage":{
"exp1":"要搜索的地址或名稱",
"exp2":"賬戶餘額",
"exp3":"更多信息",
"exp4":"找不到地址或姓名!",
"exp5":"請注意,註冊名稱區分大小寫。",
"exp6":"創始人",
"exp7":"信息"
}
}

View File

@ -1,6 +1,6 @@
{
"name": "qortal-ui-core",
"version": "2.2.3",
"version": "2.2.4",
"description": "QORTAL-UI Core",
"keywords": [
"QORT",
@ -17,12 +17,12 @@
"author": "QORTAL <admin@qortal.org>",
"license": "GPL-3.0",
"dependencies": {
"@hapi/hapi": "20.2.2",
"@hapi/hapi": "21.0.0",
"@hapi/inert": "7.0.0",
"sass": "1.55.0"
"sass": "1.56.1"
},
"devDependencies": {
"@babel/core": "7.19.3",
"@babel/core": "7.20.2",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
"@material/mwc-dialog": "0.27.0",
@ -53,25 +53,25 @@
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-toast": "3.0.1",
"@polymer/paper-tooltip": "3.0.1",
"@rollup/plugin-alias": "4.0.0",
"@rollup/plugin-babel": "6.0.0",
"@rollup/plugin-commonjs": "23.0.0",
"@rollup/plugin-node-resolve": "15.0.0",
"@rollup/plugin-replace": "5.0.0",
"@vaadin/grid": "23.2.5",
"@vaadin/icons": "23.2.5",
"@vaadin/password-field": "23.2.5",
"@rollup/plugin-alias": "4.0.2",
"@rollup/plugin-babel": "6.0.2",
"@rollup/plugin-commonjs": "23.0.2",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.1",
"@vaadin/grid": "23.2.8",
"@vaadin/icons": "23.2.8",
"@vaadin/password-field": "23.2.8",
"asmcrypto.js": "2.3.2",
"bcryptjs": "2.4.3",
"epml": "0.3.3",
"file-saver": "2.0.5",
"lit": "2.4.0",
"lit": "2.4.1",
"lit-translate": "2.0.1",
"postcss": "8.4.18",
"pwa-helpers": "0.9.1",
"random-sentence-generator": "0.0.8",
"redux": "4.2.0",
"redux-thunk": "2.4.1",
"redux-thunk": "2.4.2",
"rollup": "2.79.1",
"rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-postcss": "4.0.2",

View File

@ -114,7 +114,7 @@ class AppInfo extends connect(store)(LitElement) {
setInterval(() => {
this.getNodeInfo()
this.getCoreInfo()
}, 60000)
}, 30000)
}
async getNodeInfo() {

View File

@ -7,6 +7,9 @@ import '@polymer/paper-icon-button/paper-icon-button.js'
import '@polymer/iron-icons/iron-icons.js'
import '@polymer/app-layout/app-layout.js'
import '@polymer/paper-ripple'
import '@vaadin/icon'
import '@vaadin/icons'
import '@vaadin/text-field'
import './wallet-profile.js'
import './app-info.js'
@ -16,12 +19,14 @@ import './qort-theme-toggle.js'
import './language-selector.js'
import './settings-view/user-settings.js'
import './logout-view/logout-view.js'
import './user-info-view/user-info-view.js'
class AppView extends connect(store)(LitElement) {
static get properties() {
return {
config: { type: Object },
theme: { type: String, reflect: true }
theme: { type: String, reflect: true },
searchContentString: { type: String }
}
}
@ -32,6 +37,14 @@ class AppView extends connect(store)(LitElement) {
--mdc-theme-primary: rgb(3, 169, 244);
--mdc-theme-secondary: var(--mdc-theme-primary);
--mdc-theme-error: rgb(255, 89, 89);
--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-secondary-text-color: var(--sectxt);
--lumo-contrast-60pct: var(--vdicon);
}
:host {
@ -57,6 +70,12 @@ class AppView extends connect(store)(LitElement) {
border-top: var(--border);
}
.search {
display: inline;
width: 50%;
align-items: center;
}
#sideBar {
height: 100vh;
display: flex;
@ -89,6 +108,7 @@ class AppView extends connect(store)(LitElement) {
constructor() {
super()
this.searchContentString = ''
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
@ -115,6 +135,19 @@ class AppView extends connect(store)(LitElement) {
<img src="${this.config.coin.logo}" style="height:32px; padding-left:12px;">
</span>
</div>
<div class="search">
<vaadin-text-field
style="width: 375px"
theme="medium"
id="searchContent"
placeholder="${translate("explorerpage.exp1")}"
value="${this.searchContentString}"
@keydown="${this.searchKeyListener}"
clear-button-visible
>
</vaadin-text-field>
<paper-icon-button icon="icons:search" @click="${() => this.openUserInfo()}"></paper-icon-button>
</div>
<div style="display: inline;">
<span>
<img src="/img/${translate("selectmenu.languageflag")}-flag-round-icon-32.png" style="width: 32px; height: 32px; padding-top: 4px;">
@ -138,19 +171,36 @@ class AppView extends connect(store)(LitElement) {
<show-plugin></show-plugin>
</app-header-layout>
</app-drawer-layout>
<user-info-view></user-info-view>
<user-settings></user-settings>
<logout-view></logout-view>
`
}
firstUpdated() {
// ...
}
stateChanged(state) {
this.config = state.config
}
searchKeyListener(e) {
if (e.key === 'Enter') {
this.openUserInfo()
}
}
clearSearchField() {
this.shadowRoot.getElementById('searchContent').value = this.searchContentString
}
openUserInfo() {
let sendInfoAddress = this.shadowRoot.getElementById('searchContent').value
const infoDialog = document.getElementById('main-app').shadowRoot.querySelector('app-view').shadowRoot.querySelector('user-info-view')
infoDialog.openUserInfo(sendInfoAddress)
this.clearSearchField()
}
openSettings() {
const settingsDialog = document.getElementById('main-app').shadowRoot.querySelector('app-view').shadowRoot.querySelector('user-settings')
settingsDialog.openSettings()

View File

@ -168,6 +168,18 @@ class SidenavMenu extends connect(store)(LitElement) {
>
<vaadin-icon icon="vaadin:bullets" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item label="${translate('tradepage.tchange46')}" expanded>
<vaadin-icon icon="vaadin:calc-book" slot="icon"></vaadin-icon>
<side-menu-item label="${translate('tradepage.tchange45')} BTC" href="/app/trade-bot-btc">
<vaadin-icon icon="vaadin:start-cog" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item label="${translate('tradepage.tchange45')} LTC" href="/app/trade-bot-ltc">
<vaadin-icon icon="vaadin:start-cog" slot="icon"></vaadin-icon>
</side-menu-item>
<side-menu-item label="${translate('tradepage.tchange45')} DOGE" href="/app/trade-bot-doge">
<vaadin-icon icon="vaadin:start-cog" slot="icon"></vaadin-icon>
</side-menu-item>
</side-menu-item>
<side-menu-item
label="${translate('sidemenu.rewardshare')}"
href="/app/reward-share"

View File

@ -187,7 +187,6 @@ class StartMinting extends connect(store)(LitElement) {
firstUpdated() {
this.getMintingAcccounts();
this.shadowRoot.querySelector('mdc-dialog--open').setAttribute('style', 'width: 100vw')
}
renderErrorMsg1() {
@ -229,9 +228,6 @@ class StartMinting extends connect(store)(LitElement) {
// Check to see if a sponsorship key on a newly-level 1 minter exists. If it does, remove it.
const findMintingAccountFromOtherUser = this.mintingAccountData.find((ma) => ma.recipientAccount === address && ma.mintingAccount !== address);
const removeMintingAccount = async (publicKey) => {
const url = `${nodeUrl}/admin/mintingaccounts?apiKey=${myNode.apiKey}`;
return await fetch(url, {
@ -495,8 +491,6 @@ class StartMinting extends connect(store)(LitElement) {
` : '' }
</div>
</div>
<!-- </mwc-dialog> -->
</div>
` : ""}

View File

@ -0,0 +1,320 @@
import { LitElement, html, css } from 'lit'
import { connect } from 'pwa-helpers'
import { store } from '../../store.js'
import { doLogout } from '../../redux/app/app-actions.js'
import { translate, translateUnsafeHTML } from 'lit-translate'
import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button'
class UserInfoView extends connect(store)(LitElement) {
static get properties() {
return {
theme: { type: String, reflect: true },
infoAccountName: { type: String },
imageUrl: { type: String },
addressResult: { type: Array },
nameAddressResult: { type: Array },
displayAddress: { type: String },
displayLevel: { type: String },
displayBalance: { type: String }
}
}
static get styles() {
return css`
* {
--mdc-theme-primary: rgb(3, 169, 244);
--mdc-theme-secondary: var(--mdc-theme-primary);
--mdc-theme-surface: var(--white);
--mdc-dialog-content-ink-color: var(--black);
box-sizing: border-box;
}
h2 {
margin: 10px 0;
}
h4 {
margin: 5px 0;
}
p {
font-size: 14px;
line-height: 21px;
}
.card-body {
background-color: var(--white);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
min-height: 100vh;
margin: 0;
}
.card-container {
background-color: var(--white);
border-radius: 5px;
color: var(--black);
padding-top: 30px;
position: relative;
width: 350px;
max-width: 100%;
text-align: center;
}
.card-container .level {
color: #ffffff;
background-color: #03a9f4;
border-radius: 3px;
font-size: 14px;
font-weight: bold;
padding: 3px 7px;
position: absolute;
top: 30px;
left: 30px;
}
.card-container .founder {
color: #ffffff;
background-color: #03a9f4;
border-radius: 3px;
font-size: 14px;
font-weight: bold;
padding: 3px 7px;
position: absolute;
top: 30px;
right: 30px;
}
.card-container .round {
width: 96px;
height: 96px;
border: 1px solid #03a9f4;
border-radius: 50%;
padding: 2px;
}
.card-container .badge {
width: 200px;
height: 135px;
border: 1px solid transparent;
border-radius: 10%;
padding: 2px;
}
.userdata {
background-color: #1F1A36;
text-align: left;
padding: 15px;
margin-top: 30px;
}
.userdata ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.userdata ul li {
border: 1px solid #2D2747;
border-radius: 2px;
display: inline-block;
font-size: 12px;
margin: 0 7px 7px 0;
padding: 7px;
}
.decline {
--mdc-theme-primary: var(--mdc-theme-error)
}
.buttons {
text-align:right;
}
`
}
constructor() {
super()
this.infoAccountName = ''
this.imageUrl = ''
this.addressResult = []
this.nameAddressResult = []
this.displayAddress = ''
this.displayLevel = ''
this.displayBalance = ''
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
}
render() {
return html`
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userInfoDialog" modal>
<div class="card-container">
<span class="level">${translate("mintingpage.mchange27")} ${this.displayLevel}</span>
${this.founderBadge()}
${this.avatarImage()}
<h2>${this.infoAccountName}</h2>
<h4>${this.displayAddress}</h4>
<p>${translate("explorerpage.exp2")}: ${this.displayBalance} QORT</p>
</div>
<div class="buttons">
<mwc-button @click=${() => this.openMoreInfoDialog()}>${translate("explorerpage.exp3")}</mwc-button>
<mwc-button class='decline' @click=${() => this.closeInfoDialog()} dialog-dismiss>${translate("general.close")}</mwc-button>
</div>
</paper-dialog>
<paper-dialog style="background: var(--white); border: 1px solid var(--black); border-radius: 5px;" id="userErrorDialog" modal>
<div class="card-container">
<img class="badge" src="/img/notfound.png" />
<h2>${translate("explorerpage.exp4")}</h2>
<h4>${translate("explorerpage.exp5")}</h4>
</div>
<div class="buttons">
<mwc-button class='decline' @click=${() => this.closeErrorDialog()} dialog-dismiss>${translate("general.close")}</mwc-button>
</div>
</paper-dialog>
`
}
openUserInfo(userData) {
if (userData.startsWith('Q') && userData.length == 34) {
this.getAddressUserResult(userData)
} else {
this.getNameUserResult(userData)
}
}
async getAddressUserResult(resultAddress) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const addressUrl = `${nodeUrl}/addresses/${resultAddress}`
await fetch(addressUrl).then(res => {
if (res.status === 400) {
this.shadowRoot.getElementById('userErrorDialog').open()
} else {
this.getAllWithAddress(resultAddress)
}
})
}
async getNameUserResult(resultName) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const nameUrl = `${nodeUrl}/names/${resultName}`
await fetch(nameUrl).then(res => {
if (res.status === 404) {
this.shadowRoot.getElementById('userErrorDialog').open()
} else {
this.getAddressFromName(resultName)
}
})
}
async getAddressFromName(fromName) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
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
const nameAddress = this.nameAddressResult.owner
this.getAllWithAddress(nameAddress)
}
async getAllWithAddress(myAddress) {
await this.getAddressUserInfo(myAddress)
await this.getAddressUserAvatar(myAddress)
await this.getAddressUserBalance(myAddress)
this.displayAddress = this.addressResult.address
this.displayLevel = this.addressResult.level
this.shadowRoot.getElementById('userInfoDialog').open()
}
async getAddressUserInfo(infoAddress) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
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
}
async getAddressUserAvatar(avatarAddress) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const nameUrl = `${nodeUrl}/names/address/${avatarAddress}?limit=0&reverse=true`
await fetch(nameUrl).then(res => {
return res.json()
}).then(jsonRes => {
if(jsonRes.length) {
jsonRes.map (item => {
this.infoAccountName = item.name
this.imageName = item.name
})
} else {
this.infoAccountName = "No registered name"
this.imageName = avatarAddress
}
})
const myImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.imageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
this.imageUrl = myImageUrl
}
async getAddressUserBalance(balanceAddress) {
const myNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node]
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const balanceAddressUrl = `${nodeUrl}/addresses/balance/${balanceAddress}`
const qortalBalanceInfo = await fetch(balanceAddressUrl).then(res => {
return res.json()
})
this.displayBalance = qortalBalanceInfo
}
avatarImage() {
return html`<img class="round" src="${this.imageUrl}" onerror="this.src='/img/incognito.png';" />`
}
founderBadge() {
if (this.addressResult.flags === 1) {
return html`<span class="founder">${translate("explorerpage.exp6")}</span>`
} else {
return html``
}
}
openMoreInfoDialog() {
this.shadowRoot.getElementById('userErrorDialog').open()
}
closeInfoDialog() {
this.shadowRoot.getElementById('userInfoDialog').close()
}
closeErrorDialog() {
this.shadowRoot.getElementById('userErrorDialog').close()
}
getApiKey() {
const apiNode = store.getState().app.nodeConfig.knownNodes[store.getState().app.nodeConfig.node];
let apiKey = apiNode.apiKey;
return apiKey;
}
}
window.customElements.define('user-info-view', UserInfoView)

View File

@ -1,6 +1,6 @@
{
"name": "qortal-ui-crypto",
"version": "2.2.3",
"version": "2.2.4",
"description": "QORTAL-UI Crypto",
"keywords": [
"QORT",

View File

@ -69,6 +69,18 @@ const generateForPlugins = () => {
in: 'plugins/core/trade-portal/trade-portal.src.js',
out: 'plugins/core/trade-portal/trade-portal.js',
},
{
in: 'plugins/core/trade-bot/trade-bot-btc/trade-bot-btc.src.js',
out: 'plugins/core/trade-bot/trade-bot-btc/trade-bot-btc.js',
},
{
in: 'plugins/core/trade-bot/trade-bot-ltc/trade-bot-ltc.src.js',
out: 'plugins/core/trade-bot/trade-bot-ltc/trade-bot-ltc.js',
},
{
in: 'plugins/core/trade-bot/trade-bot-doge/trade-bot-doge.src.js',
out: 'plugins/core/trade-bot/trade-bot-doge/trade-bot-doge.js',
},
{
in: 'plugins/core/wallet/wallet-app.src.js',
out: 'plugins/core/wallet/wallet-app.js',

View File

@ -1,6 +1,6 @@
{
"name": "qortal-ui-plugins",
"version": "2.2.3",
"version": "2.2.4",
"description": "QORTAL-UI Plugins",
"keywords": [
"QORT",
@ -22,7 +22,7 @@
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js"
},
"devDependencies": {
"@babel/core": "7.19.3",
"@babel/core": "7.20.2",
"@github/time-elements": "3.1.2",
"@material/mwc-button": "0.27.0",
"@material/mwc-checkbox": "0.27.0",
@ -41,18 +41,18 @@
"@polymer/paper-slider": "3.0.1",
"@polymer/paper-spinner": "3.0.2",
"@polymer/paper-tooltip": "3.0.1",
"@rollup/plugin-alias": "4.0.0",
"@rollup/plugin-babel": "6.0.0",
"@rollup/plugin-commonjs": "23.0.0",
"@rollup/plugin-node-resolve": "15.0.0",
"@rollup/plugin-replace": "5.0.0",
"@vaadin/button": "23.2.5",
"@vaadin/grid": "23.2.5",
"@vaadin/icons": "23.2.5",
"@rollup/plugin-alias": "4.0.2",
"@rollup/plugin-babel": "6.0.2",
"@rollup/plugin-commonjs": "23.0.2",
"@rollup/plugin-node-resolve": "15.0.1",
"@rollup/plugin-replace": "5.0.1",
"@vaadin/button": "23.2.8",
"@vaadin/grid": "23.2.8",
"@vaadin/icons": "23.2.8",
"epml": "0.3.3",
"file-saver": "2.0.5",
"html-escaper": "3.0.3",
"lit": "2.4.0",
"lit": "2.4.1",
"lit-translate": "2.0.1",
"rollup": "2.79.1",
"rollup-plugin-node-globals": "1.4.0",

View File

@ -1,4 +1,5 @@
import { LitElement, html, css } from 'lit'
import { render } from 'lit/html.js'
import { Epml } from '../../../epml.js'
import '@material/mwc-icon'

View File

@ -52,6 +52,33 @@ parentEpml.ready().then(() => {
menus: [],
parent: false,
},
{
url: 'trade-bot-btc',
domain: 'core',
page: 'trade-bot/trade-bot-btc/index.html',
title: 'Auto Buy With BTC',
icon: 'vaadin:automation',
menus: [],
parent: false,
},
{
url: 'trade-bot-ltc',
domain: 'core',
page: 'trade-bot/trade-bot-ltc/index.html',
title: 'Auto Buy With LTC',
icon: 'vaadin:automation',
menus: [],
parent: false,
},
{
url: 'trade-bot-doge',
domain: 'core',
page: 'trade-bot/trade-bot-doge/index.html',
title: 'Auto Buy With DOGE',
icon: 'vaadin:automation',
menus: [],
parent: false,
},
{
url: 'reward-share',
domain: 'core',

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/font/material-icons.css">
<link rel="stylesheet" href="/font/switch-theme.css">
<script>
const checkBack = localStorage.getItem('qortalTheme')
if (checkBack === 'dark') {
newtheme = 'dark';
} else {
newtheme = 'light';
}
document.querySelector('html').setAttribute('theme', newtheme);
</script>
<style>
html {
--scrollbarBG: #a1a1a1;
--thumbBG: #6a6c75;
}
*::-webkit-scrollbar {
width: 11px;
}
* {
scrollbar-width: thin;
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
}
*::-webkit-scrollbar-track {
background: var(--scrollbarBG);
}
*::-webkit-scrollbar-thumb {
background-color: var(--thumbBG);
border-radius: 6px;
border: 3px solid var(--scrollbarBG);
}
html,
body {
margin: 0;
font-family: "Roboto", sans-serif;
background: var(--plugback);
}
</style>
</head>
<body>
<trade-bot-btc></trade-bot-btc>
<script src="trade-bot-btc.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/font/material-icons.css">
<link rel="stylesheet" href="/font/switch-theme.css">
<script>
const checkBack = localStorage.getItem('qortalTheme')
if (checkBack === 'dark') {
newtheme = 'dark';
} else {
newtheme = 'light';
}
document.querySelector('html').setAttribute('theme', newtheme);
</script>
<style>
html {
--scrollbarBG: #a1a1a1;
--thumbBG: #6a6c75;
}
*::-webkit-scrollbar {
width: 11px;
}
* {
scrollbar-width: thin;
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
}
*::-webkit-scrollbar-track {
background: var(--scrollbarBG);
}
*::-webkit-scrollbar-thumb {
background-color: var(--thumbBG);
border-radius: 6px;
border: 3px solid var(--scrollbarBG);
}
html,
body {
margin: 0;
font-family: "Roboto", sans-serif;
background: var(--plugback);
}
</style>
</head>
<body>
<trade-bot-doge></trade-bot-doge>
<script src="trade-bot-doge.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/font/material-icons.css">
<link rel="stylesheet" href="/font/switch-theme.css">
<script>
const checkBack = localStorage.getItem('qortalTheme')
if (checkBack === 'dark') {
newtheme = 'dark';
} else {
newtheme = 'light';
}
document.querySelector('html').setAttribute('theme', newtheme);
</script>
<style>
html {
--scrollbarBG: #a1a1a1;
--thumbBG: #6a6c75;
}
*::-webkit-scrollbar {
width: 11px;
}
* {
scrollbar-width: thin;
scrollbar-color: var(--thumbBG) var(--scrollbarBG);
}
*::-webkit-scrollbar-track {
background: var(--scrollbarBG);
}
*::-webkit-scrollbar-thumb {
background-color: var(--thumbBG);
border-radius: 6px;
border: 3px solid var(--scrollbarBG);
}
html,
body {
margin: 0;
font-family: "Roboto", sans-serif;
background: var(--plugback);
}
</style>
</head>
<body>
<trade-bot-ltc></trade-bot-ltc>
<script src="trade-bot-ltc.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -9,12 +9,15 @@ registerTranslateConfig({
import '@material/mwc-button'
import '@material/mwc-textfield'
import '@material/mwc-icon'
import '@material/mwc-icon-button'
import '@material/mwc-dialog'
import '@material/mwc-tab-bar'
import '@material/mwc-tab'
import '@material/mwc-list/mwc-list-item'
import '@material/mwc-select'
import '@polymer/iron-icons/iron-icons.js'
import '@polymer/paper-icon-button/paper-icon-button.js'
import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@vaadin/grid'
import '@vaadin/grid/vaadin-grid-sorter'
@ -33,6 +36,9 @@ class TradePortal extends LitElement {
isSellLoading: { type: Boolean },
isBuyLoading: { type: Boolean },
buyBtnDisable: { type: Boolean },
autoBuyWarning: { type: Boolean },
autoBuyBtnDisable: { type: Boolean },
autoBuyBotDisable: { type: Boolean },
initialAmount: { type: Number },
cancelBtnDisable: { type: Boolean },
cancelStuckOfferBtnDisable: { type: Boolean },
@ -40,7 +46,14 @@ class TradePortal extends LitElement {
isLoadingHistoricTrades: { type: Boolean },
isLoadingOpenTrades: { type: Boolean },
isLoadingMyOpenOrders: { type: Boolean },
showGetWalletBance: { type: Boolean },
theme: { type: String, reflect: true },
btcWallet: { type: String },
ltcWallet: { type: String },
dogeWallet: { type: String },
dgbWallet: { type: String },
rvnWallet: { type: String },
arrrWallet: { type: String },
arrrWalletAddress: { type: String },
qortbtc: { type: Number },
qortltc: { type: Number },
@ -53,7 +66,13 @@ class TradePortal extends LitElement {
dogeqort: { type: Number },
dgbqort: { type: Number },
rvnqort: { type: Number },
arrrqort: { type: Number }
arrrqort: { type: Number },
tradeInfoAccountName: { type: String },
tradeImageUrl: { type: String },
tradeAddressResult: { type: Array },
displayTradeAddress: { type: String },
displayTradeLevel: { type: String },
displayTradeBalance: { type: String }
}
}
@ -73,6 +92,7 @@ class TradePortal extends LitElement {
--mdc-select-ink-color: var(--black);
--mdc-theme-surface: var(--white);
--mdc-dialog-content-ink-color: var(--black);
--mdc-dialog-shape-radius: 25px;
--paper-input-container-focus-color: var(--mdc-theme-primary);
--lumo-primary-text-color: rgb(0, 167, 245);
--lumo-primary-color-50pct: rgba(0, 167, 245, 0.5);
@ -121,6 +141,16 @@ class TradePortal extends LitElement {
--mdc-icon-button-size: 32px;
color: var(--black);
}
.btn-clear-bot {
--mdc-icon-button-size: 32px;
color: var(--black);
float: right;
}
.btn-info {
color: #03a9f4;
--mdc-icon-size: 16px;
padding-top: 3px;
}
#tab-sell[active] {
--mdc-theme-primary: rgb(255, 89, 89);
}
@ -134,8 +164,101 @@ class TradePortal extends LitElement {
box-shadow: 0 0.3px 1px 0 rgba(0, 0, 0, 0.14), 0 1px 1px -1px rgba(0, 0, 0, 0.12), 0 1px 2px 0 rgba(0, 0, 0, 0.2);
}
h2 {
margin: 10px 0;
}
h4 {
margin: 5px 0;
}
p {
font-size: 14px;
line-height: 21px;
}
.card-body {
background-color: var(--white);
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
min-height: 100vh;
margin: 0;
}
.card-container {
background-color: var(--white);
border-radius: 5px;
color: var(--black);
padding-top: 30px;
position: relative;
width: 350px;
max-width: 100%;
text-align: center;
}
.card-container .level {
color: #ffffff;
background-color: #03a9f4;
border-radius: 3px;
font-size: 14px;
font-weight: bold;
padding: 3px 7px;
position: absolute;
top: 30px;
left: 30px;
}
.card-container .founder {
color: #ffffff;
background-color: #03a9f4;
border-radius: 3px;
font-size: 14px;
font-weight: bold;
padding: 3px 7px;
position: absolute;
top: 30px;
right: 30px;
}
.card-container .round {
width: 96px;
height: 96px;
border: 1px solid #03a9f4;
border-radius: 50%;
padding: 2px;
}
.card-container .badge {
width: 200px;
height: 135px;
border: 1px solid transparent;
border-radius: 10%;
padding: 2px;
}
.userdata {
background-color: #1F1A36;
text-align: left;
padding: 15px;
margin-top: 30px;
}
.userdata ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.userdata ul li {
border: 1px solid #2D2747;
border-radius: 2px;
display: inline-block;
font-size: 12px;
margin: 0 7px 7px 0;
padding: 7px;
}
h2,
h3,
h4,
@ -172,6 +295,13 @@ class TradePortal extends LitElement {
flex-flow: column;
height: 100%;
}
.box-bot {
margin: 0;
padding: 0;
display: flex;
flex-flow: column;
height: 150px;
}
#first-trade-section {
margin-bottom: 10px;
}
@ -195,6 +325,12 @@ class TradePortal extends LitElement {
.open-trades {
text-align: center;
}
.open-market-container {
text-align: center;
}
.trade-bot-container {
text-align: center;
}
.no-last-seen {
background: rgb(255, 89, 89);
padding: 9px 1.3px;
@ -202,9 +338,6 @@ class TradePortal extends LitElement {
width: 1rem;
margin: 0 auto;
}
.open-market-container {
text-align: center;
}
.card {
padding: 1em;
border: 1px var(--tradeborder) solid;
@ -214,6 +347,15 @@ class TradePortal extends LitElement {
justify-content: space-evenly;
min-height: inherit;
}
.card-bot {
padding: 1em;
flex: 1 1 auto;
display: flex;
flex-flow: column;
justify-content: space-evenly;
width: 350px;
min-height: inherit;
}
.cancel {
--mdc-theme-primary: rgb(255, 89, 89);
}
@ -279,10 +421,15 @@ class TradePortal extends LitElement {
.sell-button {
--mdc-theme-primary: rgb(255, 89, 89);
}
.trade-bot-button {
margin-top: 20px;
margin-bottom: 20px;
--mdc-theme-primary: rgba(55, 160, 51, 0.9);
}
.full-width {
background-color: var(--white);
border: 2px #ddd solid;
height: 100px;
border: 2px var(--black);
height: 200px;
text-align: center;
}
vaading-grid {
@ -353,6 +500,22 @@ class TradePortal extends LitElement {
height: 26px;
padding-left: 45px;
}
.warning-text {
animation: blinker 1.5s linear infinite;
display: inline;
float: left;
margin-bottom: 5px;
color: rgb(255, 89, 89);
}
.warning-bot-text {
animation: blinker 1.5s linear infinite;
display: inline;
text-align: center;
color: rgb(255, 89, 89);
}
.red {
--mdc-theme-primary: #F44336;
}
@-webkit-keyframes loadingAnimation {
0% {
-webkit-transform: rotate(0deg);
@ -373,6 +536,11 @@ class TradePortal extends LitElement {
transform: rotate(360deg);
}
}
@keyframes blinker {
50% {
opacity: 0;
}
}
@media (min-width: 701px) {
* {
}
@ -397,6 +565,16 @@ class TradePortal extends LitElement {
align-items: stretch;
margin-bottom: 10px;
}
#third-trade-section {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-auto-rows: max(200px);
column-gap: 0.5em;
row-gap: 0.4em;
justify-items: stretch;
align-items: stretch;
margin-bottom: 10px;
}
}
`
}
@ -557,6 +735,9 @@ class TradePortal extends LitElement {
this.sellBtnDisable = false
this.isSellLoading = false
this.buyBtnDisable = true
this.autoBuyWarning = false
this.autoBuyBtnDisable = true
this.autoBuyBotDisable = false
this.isBuyLoading = false
this.initialAmount = 0
this.cancelBtnDisable = false
@ -564,7 +745,14 @@ class TradePortal extends LitElement {
this.isLoadingHistoricTrades = true
this.isLoadingOpenTrades = true
this.isLoadingMyOpenOrders = false
this.showGetWalletBance = true
this.theme = localStorage.getItem('qortalTheme') ? localStorage.getItem('qortalTheme') : 'light'
this.btcWallet = ''
this.ltcWallet = ''
this.dogeWallet = ''
this.dgbWallet = ''
this.rvnWallet = ''
this.arrrWallet = ''
this.arrrWalletAddress = ''
this.qortbtc = 0
this.qortltc = 0
@ -578,9 +766,14 @@ class TradePortal extends LitElement {
this.dgbqort = 0
this.rvnqort = 0
this.arrrqort = 0
this.tradeInfoAccountName = ''
this.tradeImageUrl = ''
this.tradeAddressResult = []
this.displayTradeAddress = ''
this.displayTradeLevel = ''
this.displayTradeBalance = ''
}
// TODO: Move each template to a separate components! Maybe
historicTradesTemplate() {
return html`
<div class="historic-trades">
@ -629,9 +822,8 @@ class TradePortal extends LitElement {
resizable
header="${translate("tradepage.tchange8")} (QORT)"
id="qortAmountColumn"
path="qortAmount"
.renderer=${(root, column, data) => {
render(html`<span> ${this.round(data.item.qortAmount)} </span>`, root)
render(html`<span @click="${() => this.fillBuyForm(data)}">${this.round(data.item.qortAmount)}</span>`, root)
}}
>
</vaadin-grid-column>
@ -640,9 +832,8 @@ class TradePortal extends LitElement {
resizable
header="${translate("tradepage.tchange9")} (${this.listedCoins.get(this.selectedCoin).coinCode})"
id="priceColumn"
path="price"
.renderer=${(root, column, data) => {
render(html`<span> ${this.round(data.item.price)} </span>`, root)
render(html`<span @click="${() => this.fillBuyForm(data)}">${this.round(data.item.price)}</span>`, root)
}}
>
</vaadin-grid-column>
@ -650,8 +841,9 @@ class TradePortal extends LitElement {
auto-width
resizable
header="${translate("tradepage.tchange10")} (${this.listedCoins.get(this.selectedCoin).coinCode})"
id="foreignAmountColumn"
.renderer=${(root, column, data) => {
render(html`<span> ${data.item.foreignAmount} </span>`, root)
render(html`<span @click="${() => this.fillBuyForm(data)}">${data.item.foreignAmount}</span>`, root)
}}
>
</vaadin-grid-column>
@ -659,8 +851,18 @@ class TradePortal extends LitElement {
auto-width
resizable
header="${translate("tradepage.tchange13")}"
id="qortalCreatorColumn"
.renderer=${(root, column, data) => {
render(html`<span> ${data.item.qortalCreator} </span>`, root)
render(html`<span @click="${() => this.fillBuyForm(data)}">${data.item.qortalCreator}</span>`, root)
}}
>
</vaadin-grid-column>
<vaadin-grid-column
auto-width
resizable
header="${translate("explorerpage.exp7")}"
.renderer=${(root, column, data) => {
render(html`<span @click="${() => this.getAllForAddress(data.item.qortalCreator)}"><mwc-icon class="btn-info">info</mwc-icon></span>`, root)
}}
>
</vaadin-grid-column>
@ -968,12 +1170,16 @@ class TradePortal extends LitElement {
${this.myOpenOrdersTemplate()}
${this.openMarketTemplate()}
</div>
</div>
</div>
<div id="third-trade-section">
<div></div>
<div style="text-align: center;">
<h2 style="color: var(--black);">${translate("tradepage.tchange33")}</h2>
<h2 style="color: var(--black);">${translate("tradepage.tchange33")} ${this.listedCoins.get(this.selectedCoin).coinCode} ${translate("tradepage.tchange40")}</h2>
<h3 style="color: var(--black);">1 <span style="color: #03a9f4;">QORT</span> = ${this.exchangeRateQort()} ${this.listedCoins.get(this.selectedCoin).coinCode}</h3>
</div>
<div></div>
</div>
</div>
</div>
<!-- Manage Stuck Orders Dialog -->
<mwc-dialog id="manageStuckOrdersDialog" scrimClickAction="${this.cancelStuckOfferBtnDisable ? '' : 'close'}">
<div style="text-align: center;">
@ -990,6 +1196,18 @@ class TradePortal extends LitElement {
</div>
<mwc-button slot="primaryAction" dialogAction="cancel" class="cancel">${translate("general.close")}</mwc-button>
</mwc-dialog>
<mwc-dialog style="background: var(--white);" id="sellerDialog">
<div class="card-container">
<span class="level">${translate("mintingpage.mchange27")} ${this.displayTradeLevel}</span>
${this.tradeFounderBadge()}
${this.tradeAvatarImage()}
<h2>${this.tradeInfoAccountName}</h2>
<h4>${this.displayTradeAddress}</h4>
<p>${translate("explorerpage.exp2")}: ${this.displayTradeBalance} QORT</p>
</div>
<mwc-button slot="primaryAction" dialogAction="cancel" class="cancel">${translate("general.close")}</mwc-button>
</mwc-dialog>
`
}
@ -1006,7 +1224,6 @@ class TradePortal extends LitElement {
this.displayTabContent('buy')
}, 0)
// Set Trade Panes
this._openOrdersGrid = this.shadowRoot.getElementById('openOrdersGrid')
this._openOrdersGrid.querySelector('#priceColumn').headerRenderer = function (root) {
@ -1024,8 +1241,6 @@ class TradePortal extends LitElement {
this._myHistoricTradesGrid = this.shadowRoot.getElementById('myHistoricTradesGrid')
this._stuckOrdersGrid = this.shadowRoot.getElementById('stuckOrdersGrid')
this.getOpenOrdersGrid()
const getQortBtcPrice = () => {
parentEpml.request("apiCall", { url: `/crosschain/price/BITCOIN?inverse=true` }).then((res) => {
setTimeout(() => { this.qortbtc = (Number(res) / 1e8).toFixed(8) }, 1)
@ -1097,6 +1312,13 @@ class TradePortal extends LitElement {
if (e.keyCode === 27) parentEpml.request('closeCopyTextMenu', null)
}
this.btcWallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.address
this.ltcWallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.address
this.dogeWallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.address
this.dgbWallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.address
this.rvnWallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.address
this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.address
let configLoaded = false
parentEpml.ready().then(() => {
@ -1105,6 +1327,14 @@ class TradePortal extends LitElement {
selectedAddress = JSON.parse(selectedAddress)
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
this.selectedAddress = selectedAddress
this.btcWallet = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.address
this.ltcWwallet = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.address
this.dogeWallet = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.address
this.dgbWallet = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.address
this.rvnWallet = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.address
this.arrrWallet = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.address
this.updateAccountBalance()
})
@ -1135,7 +1365,6 @@ class TradePortal extends LitElement {
})
parentEpml.imReady()
// Set Last Seen column's title on OpenOrders grid
setTimeout(() => this.shadowRoot.querySelector('[slot="vaadin-grid-cell-content-3"]').setAttribute('title', 'Last Seen'), 3000)
}
@ -1160,6 +1389,14 @@ class TradePortal extends LitElement {
}
}
renderFetchText() {
return html`${translate("walletpage.wchange1")}`
}
renderWarning() {
return html`<span class="warning-text">NOT ENOUGH ${this.listedCoins.get(this.selectedCoin).coinCode}</span>`
}
exchangeRateQort() {
if (this.listedCoins.get(this.selectedCoin).coinCode === "BTC") {
return html`${this.qortbtc}`
@ -1222,7 +1459,7 @@ class TradePortal extends LitElement {
}
}
updateWalletBalance() {
async updateWalletBalance() {
let _url = ``
let _body = null
@ -1255,7 +1492,9 @@ class TradePortal extends LitElement {
break
}
parentEpml.request('apiCall', {
this.showGetWalletBance = true
await parentEpml.request('apiCall', {
url: _url,
method: 'POST',
body: _body,
@ -1267,6 +1506,8 @@ class TradePortal extends LitElement {
this.listedCoins.get(this.selectedCoin).balance = (Number(res) / 1e8).toFixed(8)
}
})
this.showGetWalletBance = false
}
async fetchWalletAddress(coin) {
@ -1288,24 +1529,20 @@ class TradePortal extends LitElement {
}
}
setForeignCoin(coin,beingInitialized) {
async setForeignCoin(coin,beingInitialized) {
let _this = this
this.selectedCoin = coin
let coinSelectionMenu=this.shadowRoot.getElementById("coinSelectionMenu")
if(beingInitialized){
//apply padding to the container
coinSelectionMenu.shadowRoot.querySelector('.mdc-select--outlined .mdc-select__anchor').setAttribute('style', 'padding-left: 60px;')
//create the coin pair container
let pairIconContainer = document.createElement("span")
let pairicon = (_this.listedCoins.get(_this.selectedCoin).coinCode).toLowerCase()
pairIconContainer.setAttribute("class","pairIconContainer")
pairIconContainer.setAttribute('style', 'left: 10px;top: 50%;transform: translate(0, -50%);height: 26px;width: 45px;position: absolute;background-repeat: no-repeat;background-size: cover;background-image: url(/img/qort'+pairicon+'.png);')
//appending the coin pair container to the menu
coinSelectionMenu.shadowRoot.querySelector('.mdc-select--outlined .mdc-select__anchor').appendChild(pairIconContainer)
}else{//we need just to update the existing pair icon container
}else{
let pairIconContainer = coinSelectionMenu.shadowRoot.querySelector(".mdc-select--outlined .mdc-select__anchor span.pairIconContainer")
let pairicon = (_this.listedCoins.get(_this.selectedCoin).coinCode).toLowerCase()
pairIconContainer.style.backgroundImage='url(/img/qort'+pairicon+'.png)'
@ -1320,7 +1557,7 @@ class TradePortal extends LitElement {
}
this.clearSellForm()
this.clearBuyForm()
this.updateWalletBalance()
await this.updateWalletBalance()
this.fetchWalletAddress(coin)
}
@ -1350,29 +1587,91 @@ class TradePortal extends LitElement {
}
fillBuyForm(sellerRequest) {
this.shadowRoot.getElementById('buyAmountInput').value = parseFloat(sellerRequest.qortAmount)
this.shadowRoot.getElementById('buyPriceInput').value = this.round(parseFloat(sellerRequest.foreignAmount) / parseFloat(sellerRequest.qortAmount))
this.shadowRoot.getElementById('buyTotalInput').value = parseFloat(sellerRequest.foreignAmount)
this.shadowRoot.getElementById('qortalAtAddress').value = sellerRequest.qortalAtAddress
this.shadowRoot.getElementById('buyAmountInput').value = parseFloat(sellerRequest.item.qortAmount)
this.shadowRoot.getElementById('buyPriceInput').value = this.round(parseFloat(sellerRequest.item.foreignAmount) / parseFloat(sellerRequest.item.qortAmount))
this.shadowRoot.getElementById('buyTotalInput').value = parseFloat(sellerRequest.item.foreignAmount)
this.shadowRoot.getElementById('qortalAtAddress').value = sellerRequest.item.qortalAtAddress
const buyFunds = this.round(parseFloat(sellerRequest.item.foreignAmount))
const haveFunds = this.round(parseFloat(this.listedCoins.get(this.selectedCoin).balance))
if (Number(haveFunds) > Number(buyFunds)) {
this.buyBtnDisable = false
this.autoBuyWarning = false
} else {
this.buyBtnDisable = true
this.autoBuyWarning = true
}
}
getOpenOrdersGrid() {
const myGrid = this.shadowRoot.querySelector('#openOrdersGrid')
myGrid.addEventListener(
'click', (e) => {
let myItem = myGrid.getEventContext(e).item
if (myItem !== undefined && myItem.qortalCreator !== this.selectedAddress.address) {
this.fillBuyForm(myItem)
async getAllForAddress(tradeAddress) {
await this.getAddressTradeInfo(tradeAddress)
await this.getAddressTradeAvatar(tradeAddress)
await this.getAddressTradeBalance(tradeAddress)
this.displayTradeAddress = this.tradeAddressResult.address
this.displayTradeLevel = this.tradeAddressResult.level
this.shadowRoot.querySelector('#sellerDialog').show()
}
async getAddressTradeInfo(tradeInfoAddress) {
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 tradeInfoAddressUrl = `${nodeUrl}/addresses/${tradeInfoAddress}`
const qortalTradeAddressInfo = await fetch(tradeInfoAddressUrl).then(response => {
return response.json()
})
this.tradeAddressResult = qortalTradeAddressInfo
}
async getAddressTradeAvatar(tradeAvatarAddress) {
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 tradeNameUrl = `${nodeUrl}/names/address/${tradeAvatarAddress}?limit=0&reverse=true`
await fetch(tradeNameUrl).then(res => {
return res.json()
}).then(jsonRes => {
if(jsonRes.length) {
jsonRes.map (item => {
this.tradeInfoAccountName = item.name
this.tradeImageName = item.name
})
} else {
this.tradeInfoAccountName = "No registered name"
this.tradeImageName = tradeAvatarAddress
}
})
const myTradeImageUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.tradeImageName}/qortal_avatar?async=true&apiKey=${this.getApiKey()}`
this.tradeImageUrl = myTradeImageUrl
}
async getAddressTradeBalance(tradeBalanceAddress) {
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 tradeBalanceAddressUrl = `${nodeUrl}/addresses/balance/${tradeBalanceAddress}`
const qortalTradeBalanceInfo = await fetch(tradeBalanceAddressUrl).then(res => {
return res.json()
})
this.displayTradeBalance = qortalTradeBalanceInfo
}
tradeAvatarImage() {
return html`<img class="round" src="${this.tradeImageUrl}" onerror="this.src='/img/incognito.png';" />`
}
tradeFounderBadge() {
if (this.tradeAddressResult.flags === 1) {
return html`<span class="founder">${translate("explorerpage.exp6")}</span>`
} else {
return html``
}
},
{ passive: true }
)
}
processOfferingTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!=''){//check if the foreignBlockchain value is part of supported blockchains
if(this.listedCoins.get(offer.foreignBlockchain).name!='') {
const offerItem = {
...offer,
qortAmount: parseFloat(offer.qortAmount),
@ -1394,11 +1693,9 @@ class TradePortal extends LitElement {
processRedeemedTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!=''){//check if the foreignBlockchain value is part of supported blockchains
if (this.listedCoins.get(offer.foreignBlockchain).name!='') {
// If trade is mine, add it to my historic trades and also add it to historic trades
if (offer.qortalCreator === this.selectedAddress.address) {
// Check and Update Wallet Balance
if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) {
this.updateWalletBalance()
}
@ -1406,11 +1703,9 @@ class TradePortal extends LitElement {
...offer,
mode: 'SOLD',
}
// Add to my historic trades
this._myHistoricTradesGrid.items.unshift(offerItem)
this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? this._myHistoricTradesGrid.clearCache() : null
} else if (offer.partnerQortalReceivingAddress === this.selectedAddress.address) {
// Check and Update Wallet Balance
if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) {
this.updateWalletBalance()
}
@ -1418,11 +1713,9 @@ class TradePortal extends LitElement {
...offer,
mode: 'BOUGHT',
}
// Add to my historic trades
this._myHistoricTradesGrid.items.unshift(offerItem)
this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? this._myHistoricTradesGrid.clearCache() : null
}
// Add to historic trades
const addNewHistoricTrade = () => {
this._historicTradesGrid.items.unshift(offer)
this._historicTradesGrid.clearCache()
@ -1437,11 +1730,9 @@ class TradePortal extends LitElement {
processTradingTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!=''){//check if the foreignBlockchain value is part of supported blockchains
if (this.listedCoins.get(offer.foreignBlockchain).name!='') {
// Remove from open market orders
if (offer.qortalCreator === this.selectedAddress.address && this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) {
// Check and Update Wallet Balance
this.updateWalletBalance()
}
this._openOrdersGrid.items.forEach((item, index) => {
@ -1459,14 +1750,12 @@ class TradePortal extends LitElement {
processRefundedTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!=''){//check if the foreignBlockchain value is part of supported blockchains
if (this.listedCoins.get(offer.foreignBlockchain).name!='') {
if (offer.qortalCreator === this.selectedAddress.address) {
// Check and Update Wallet Balance
if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) {
this.updateWalletBalance()
}
// Add to my historic trades
this._myHistoricTradesGrid.items.unshift(offer)
this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? this._myHistoricTradesGrid.clearCache() : null
}
@ -1479,14 +1768,12 @@ class TradePortal extends LitElement {
processCancelledTrade(offer) {
try {
if(this.listedCoins.get(offer.foreignBlockchain).name!=''){//check if the foreignBlockchain value is part of supported blockchains
if (this.listedCoins.get(offer.foreignBlockchain).name!='') {
if (offer.qortalCreator === this.selectedAddress.address) {
// Check and Update Wallet Balance
if (this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1) {
this.updateWalletBalance()
}
// Add to my historic trades
this._myHistoricTradesGrid.items.unshift(offer)
this.listedCoins.get(offer.foreignBlockchain).tradeOffersSocketCounter > 1 ? this._myHistoricTradesGrid.clearCache() : null
}
@ -1580,7 +1867,6 @@ class TradePortal extends LitElement {
*/
const BitcoinACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1623,7 +1909,6 @@ class TradePortal extends LitElement {
*/
const LitecoinACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1666,7 +1951,6 @@ class TradePortal extends LitElement {
*/
const DogecoinACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1709,7 +1993,6 @@ class TradePortal extends LitElement {
*/
const DigibyteACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1752,7 +2035,6 @@ class TradePortal extends LitElement {
*/
const RavencoinACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1795,7 +2077,6 @@ class TradePortal extends LitElement {
*/
const PirateChainACCTv1 = (states) => {
// Reverse the states
states.reverse()
states.forEach((state) => {
if (state.creatorAddress === this.selectedAddress.address) {
@ -1844,15 +2125,12 @@ class TradePortal extends LitElement {
default:
break
}
// Fill Historic Trades and Filter Stuck Trades
if (this.listedCoins.get(this.selectedCoin).tradeOffersSocketCounter === 1) {
setTimeout(() => this.filterStuckTrades(tradeStates), 250)
}
}
changeTradeBotState(state, tradeState) {
// Set Loading state
this.isLoadingMyOpenOrders = true
const stateItem = {
...state,
@ -1877,7 +2155,6 @@ class TradePortal extends LitElement {
item ? updateStateItem() : addStateItem()
}
// ONLY USE FOR BOB_DONE, BOB_REFUNDED, ALICE_DONE, ALICE_REFUNDED
handleCompletedState(state) {
this._myOrdersGrid.items.forEach((item, index) => {
if (item.atAddress === state.atAddress) {
@ -1947,12 +2224,10 @@ class TradePortal extends LitElement {
let socketTimeout
let socketLink = `ws://NODEURL/websockets/crosschain/tradeoffers?foreignBlockchain=FOREIGN_BLOCKCHAIN&includeHistoric=true`
const socket = new WebSocket(socketLink)
// Open Connection
socket.onopen = () => {
setTimeout(pingSocket, 250)
setTimeout(pingSocket, 50)
tradeOffersSocketCounter += 1
}
// Message Event
socket.onmessage = (e) => {
e.relatedCoin = _relatedCoin
self.postMessage({
@ -1964,12 +2239,10 @@ class TradePortal extends LitElement {
tradeOffersSocketCounter += 1
restarted = false
}
// Closed Event
socket.onclose = () => {
clearTimeout(socketTimeout)
restartTradeOffersWebSocket()
}
// Error Event
socket.onerror = (e) => {
clearTimeout(socketTimeout)
}
@ -1983,11 +2256,9 @@ class TradePortal extends LitElement {
let socketTimeout
let socketLink = `ws://NODEURL/websockets/crosschain/tradebot?foreignBlockchain=FOREIGN_BLOCKCHAIN`
const socket = new WebSocket(socketLink)
// Open Connection
socket.onopen = () => {
setTimeout(pingSocket, 250)
setTimeout(pingSocket, 50)
}
// Message Event
socket.onmessage = (e) => {
e.relatedCoin = _relatedCoin
self.postMessage({
@ -1997,12 +2268,10 @@ class TradePortal extends LitElement {
})
restarted = false
}
// Closed Event
socket.onclose = () => {
clearTimeout(socketTimeout)
restartTradeBotWebSocket()
}
// Error Event
socket.onerror = (e) => {
clearTimeout(socketTimeout)
}
@ -2016,22 +2285,18 @@ class TradePortal extends LitElement {
let socketTimeout
let socketLink = `ws://NODEURL/websockets/crosschain/tradepresence`
const socket = new WebSocket(socketLink)
// Open Connection
socket.onopen = () => {
setTimeout(pingSocket, 250)
setTimeout(pingSocket, 50)
}
// Message Event
socket.onmessage = (e) => {
tradePresenceTxns = JSON.parse(e.data)
processOffersWithPresence()
restarted = false
}
// Closed Event
socket.onclose = () => {
clearTimeout(socketTimeout)
restartTradePresenceWebSocket()
}
// Error Event
socket.onerror = (e) => {
clearTimeout(socketTimeout)
}
@ -2042,24 +2307,19 @@ class TradePortal extends LitElement {
}
const restartTradePresenceWebSocket = () => {
setTimeout(() => initTradePresenceWebSocket(true), 1000)
setTimeout(() => initTradePresenceWebSocket(true), 50)
}
const restartTradeOffersWebSocket = () => {
setTimeout(() => initTradeOffersWebSocket(true), 1000)
setTimeout(() => initTradeOffersWebSocket(true), 50)
}
const restartTradeBotWebSocket = () => {
setTimeout(() => initTradeBotWebSocket(true), 1000)
setTimeout(() => initTradeBotWebSocket(true), 50)
}
// Start TradeOffersWebSocket
initTradeOffersWebSocket()
// Start TradePresenceWebSocket
initTradePresenceWebSocket()
// Start TradeBotWebSocket
initTradeBotWebSocket()
}
@ -2198,8 +2458,6 @@ class TradePortal extends LitElement {
parentEpml.request('showSnackBar', `${snack7string}: ${response.message}`)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
@ -2235,8 +2493,6 @@ class TradePortal extends LitElement {
parentEpml.request('showSnackBar', `${snack10string}: ${response.message}`)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
@ -2290,8 +2546,6 @@ class TradePortal extends LitElement {
parentEpml.request('showSnackBar', `${snack13string}: ${response.message}`)
}
}
// Call makeRequest
const res = await makeRequest()
manageResponse(res)
}
@ -2304,7 +2558,6 @@ class TradePortal extends LitElement {
}
}
// Helper Functions (Re-Used in Most part of the UI )
_checkSellAmount(e) {
const targetAmount = e.target.value
const target = e.target
@ -2543,6 +2796,7 @@ class TradePortal extends LitElement {
workers.get(this.selectedCoin).tradesConnectedWorker.addEventListener('message', function (event) { handleMessage(event.data) }, { passive: true })
workers.get(this.selectedCoin).tradesConnectedWorker.postMessage({ type: "set_coin", content: this.selectedCoin })
}
handleStuckTrades() {
@ -2580,11 +2834,7 @@ class TradePortal extends LitElement {
const stuckOffers = filterStuckOffers(myOpenTradeOrders)
self.postMessage({ type: 'STUCK_OFFERS', data: stuckOffers })
}
// Get Offers
setTimeout(() => { getOffers() }, 1000)
// Get Historic Trades
setTimeout(() => { getCompletedTrades() }, 1000)
}
@ -2594,7 +2844,6 @@ class TradePortal extends LitElement {
return
}
//show the loading on historic trades
this.shadowRoot.getElementById('loadingHistoricTrades').style.display = "block";
let isHandleTradesDone = false
let isHandleStuckOffersDone = false

View File

@ -1,5 +1,5 @@
require('dotenv').config();
const { notarize } = require('electron-notarize');
const { notarize } = require('@electron/notarize');
exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context;