From 6728c68dd066cb27a442cd0b55cb2aff8206c444 Mon Sep 17 00:00:00 2001 From: koalasat Date: Wed, 9 Jul 2025 16:58:30 +0200 Subject: [PATCH] Manually verify ratings --- .../src/components/Dialogs/Coordinator.tsx | 4 +- .../src/components/FederationTable/index.tsx | 61 +++++++++++++++++-- frontend/static/locales/ca.json | 4 ++ frontend/static/locales/cs.json | 4 ++ frontend/static/locales/de.json | 4 ++ frontend/static/locales/en.json | 4 ++ frontend/static/locales/es.json | 4 ++ frontend/static/locales/eu.json | 4 ++ frontend/static/locales/fr.json | 4 ++ frontend/static/locales/it.json | 4 ++ frontend/static/locales/ja.json | 4 ++ frontend/static/locales/pl.json | 4 ++ frontend/static/locales/pt.json | 4 ++ frontend/static/locales/ru.json | 4 ++ frontend/static/locales/sv.json | 4 ++ frontend/static/locales/sw.json | 4 ++ frontend/static/locales/th.json | 4 ++ frontend/static/locales/zh-SI.json | 4 ++ frontend/static/locales/zh-TR.json | 4 ++ 19 files changed, 126 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Dialogs/Coordinator.tsx b/frontend/src/components/Dialogs/Coordinator.tsx index 0200b6ae..fde6fc92 100644 --- a/frontend/src/components/Dialogs/Coordinator.tsx +++ b/frontend/src/components/Dialogs/Coordinator.tsx @@ -72,7 +72,6 @@ import { systemClient } from '../../services/System'; import type Coordinator from '../../models/Coordinator.model'; import { type Badges } from '../../models/Coordinator.model'; import { type UseFederationStoreType, FederationContext } from '../../contexts/FederationContext'; -import { verifyCoordinatorToken } from '../../utils/nostr'; interface Props { open: boolean; @@ -367,9 +366,8 @@ const CoordinatorDialog = ({ open = false, onClose, shortAlias }: Props): React. federation.roboPool.subscribeRatings( { onevent: (event) => { - const verfied = verifyCoordinatorToken(event); const coordinatorPubKey = event.tags.find((t) => t[0] === 'p')?.[1]; - if (verfied && coordinatorPubKey === coordinator.nostrHexPubkey) { + if (coordinatorPubKey === coordinator.nostrHexPubkey) { const eventRating = event.tags.find((t) => t[0] === 'rating')?.[1]; if (eventRating) { setRating((prev) => { diff --git a/frontend/src/components/FederationTable/index.tsx b/frontend/src/components/FederationTable/index.tsx index b03ac298..d7013022 100644 --- a/frontend/src/components/FederationTable/index.tsx +++ b/frontend/src/components/FederationTable/index.tsx @@ -1,6 +1,15 @@ import React, { useCallback, useContext, useEffect, useState } from 'react'; import { Link, LinkOff } from '@mui/icons-material'; -import { Box, Checkbox, CircularProgress, Grid, Rating, Typography, useTheme } from '@mui/material'; +import { + Box, + Button, + Checkbox, + CircularProgress, + Grid, + Rating, + Typography, + useTheme, +} from '@mui/material'; import { DataGrid, type GridColDef, type GridValidRowModel } from '@mui/x-data-grid'; import { useTranslation } from 'react-i18next'; import { AppContext, type UseAppStoreType } from '../../contexts/AppContext'; @@ -33,6 +42,8 @@ const FederationTable = ({ }, {}), ); const [useDefaultPageSize, setUseDefaultPageSize] = useState(true); + const [verifyRatings, setVerifyRatings] = useState(false); + const [verifcationText, setVerificationText] = useState(); // all sizes in 'em' const fontSize = theme.typography.fontSize; @@ -49,6 +60,13 @@ const FederationTable = ({ loadRatings(); }, []); + useEffect(() => { + if (verifyRatings) { + loadRatings(); + setVerificationText(t('Reloading. Invalid ratings will be filtered.')); + } + }, [verifyRatings]); + useEffect(() => { if (useDefaultPageSize) { setPageSize(defaultPageSize); @@ -56,11 +74,17 @@ const FederationTable = ({ }, [federationUpdatedAt]); const loadRatings: () => void = () => { + setRatings( + federation.getCoordinators().reduce((acc, coord) => { + if (coord.nostrHexPubkey) acc[coord.nostrHexPubkey] = {}; + return acc; + }, {}), + ); federation.roboPool.subscribeRatings({ onevent: (event) => { - const verfied = verifyCoordinatorToken(event); const coordinatorPubKey = event.tags.find((t) => t[0] === 'p')?.[1]; - if (verfied && coordinatorPubKey) { + const verified = verifyRatings ? verifyCoordinatorToken(event) : true; + if (verified && coordinatorPubKey) { const rating = event.tags.find((t) => t[0] === 'rating')?.[1]; if (rating) { setRatings((prev) => { @@ -70,7 +94,9 @@ const FederationTable = ({ } } }, - oneose: () => {}, + oneose: () => { + if (verifyRatings) setVerificationText(t('Invalid ratings have been filtered.')); + }, }); }; @@ -333,6 +359,33 @@ const FederationTable = ({ }} hideFooter={true} /> + + + {!verifcationText && ( + + )} + + {verifcationText + ? verifcationText + : t( + 'Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.', + )} + + ); }; diff --git a/frontend/static/locales/ca.json b/frontend/static/locales/ca.json index 35d50401..499c6f16 100644 --- a/frontend/static/locales/ca.json +++ b/frontend/static/locales/ca.json @@ -361,9 +361,13 @@ "Warning": "Avís", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Habilitat", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No s'han trobat coordinadors.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Pujar", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "El client RoboSats és servit pel teu propi node, gaudeixes de la major seguretat i privacitat.", "You are self-hosting RoboSats": "Estàs hostejant RoboSats", diff --git a/frontend/static/locales/cs.json b/frontend/static/locales/cs.json index 84ee1b8b..b94b4cac 100644 --- a/frontend/static/locales/cs.json +++ b/frontend/static/locales/cs.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/de.json b/frontend/static/locales/de.json index b772b1f1..a689f95a 100644 --- a/frontend/static/locales/de.json +++ b/frontend/static/locales/de.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/en.json b/frontend/static/locales/en.json index 61190d22..29c6fd87 100644 --- a/frontend/static/locales/en.json +++ b/frontend/static/locales/en.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/es.json b/frontend/static/locales/es.json index e318e3a2..1664421e 100644 --- a/frontend/static/locales/es.json +++ b/frontend/static/locales/es.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "El cliente RoboSats es servido por tu propio nodo, gozas de la mayor seguridad y privacidad.", "You are self-hosting RoboSats": "Estás alojando RoboSats", diff --git a/frontend/static/locales/eu.json b/frontend/static/locales/eu.json index 55ad7bf1..8f332db8 100644 --- a/frontend/static/locales/eu.json +++ b/frontend/static/locales/eu.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats webgunea zure nodotik zerbitzatzen da beraz segurtasun eta pribatutasun sendoena eskaintzen dizu.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/fr.json b/frontend/static/locales/fr.json index ee09c48d..7f17e20c 100644 --- a/frontend/static/locales/fr.json +++ b/frontend/static/locales/fr.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "Le client RoboSats est servi à partir de votre propre nœud, ce qui vous garantit une sécurité et une confidentialité optimales.", "You are self-hosting RoboSats": "Vous auto-hébergez RoboSats", diff --git a/frontend/static/locales/it.json b/frontend/static/locales/it.json index 6cf35ae5..912213a5 100644 --- a/frontend/static/locales/it.json +++ b/frontend/static/locales/it.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "Il client RoboSats è servito dal proprio nodo, garantendo la massima sicurezza e privacy.", "You are self-hosting RoboSats": "Stai ospitando RoboSats in autonomia", diff --git a/frontend/static/locales/ja.json b/frontend/static/locales/ja.json index a7d6228b..03176d01 100644 --- a/frontend/static/locales/ja.json +++ b/frontend/static/locales/ja.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSatsクライアントは、あなた自身のノードから提供され、最高のセキュリティとプライバシーが保証されます。", "You are self-hosting RoboSats": "RoboSatsを自己ホスティングしています", diff --git a/frontend/static/locales/pl.json b/frontend/static/locales/pl.json index d9696899..4766e939 100644 --- a/frontend/static/locales/pl.json +++ b/frontend/static/locales/pl.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/pt.json b/frontend/static/locales/pt.json index f3e259eb..6e2a12eb 100644 --- a/frontend/static/locales/pt.json +++ b/frontend/static/locales/pt.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/ru.json b/frontend/static/locales/ru.json index a999c783..b44a5f61 100644 --- a/frontend/static/locales/ru.json +++ b/frontend/static/locales/ru.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "Клиент RoboSats обслуживается с вашего собственного нода, что обеспечивает максимальную безопасность и конфиденциальность.", "You are self-hosting RoboSats": "Вы самостоятельно размещаете RoboSats", diff --git a/frontend/static/locales/sv.json b/frontend/static/locales/sv.json index fb5b6ec5..fa7892e2 100644 --- a/frontend/static/locales/sv.json +++ b/frontend/static/locales/sv.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "You are self-hosting RoboSats", diff --git a/frontend/static/locales/sw.json b/frontend/static/locales/sw.json index f16a382d..1a6103e2 100644 --- a/frontend/static/locales/sw.json +++ b/frontend/static/locales/sw.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "Mteja wa RoboSats unatolewa kutoka kwenye node yako mwenyewe ikikupa usalama na faragha imara kabisa.", "You are self-hosting RoboSats": "Unaendesha RoboSats yako mwenyewe", diff --git a/frontend/static/locales/th.json b/frontend/static/locales/th.json index 020c9779..78547c59 100644 --- a/frontend/static/locales/th.json +++ b/frontend/static/locales/th.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats client is served from your own node granting you the strongest security and privacy.", "You are self-hosting RoboSats": "คูณกำลัง host RoboSats เอง", diff --git a/frontend/static/locales/zh-SI.json b/frontend/static/locales/zh-SI.json index 7d266d2a..b571b8f4 100644 --- a/frontend/static/locales/zh-SI.json +++ b/frontend/static/locales/zh-SI.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats 客户端已由你自己的节点提供服务,为你提供最强的安全性和隐私性。", "You are self-hosting RoboSats": "你在自托管 RoboSats", diff --git a/frontend/static/locales/zh-TR.json b/frontend/static/locales/zh-TR.json index 1c6e427e..a1956129 100644 --- a/frontend/static/locales/zh-TR.json +++ b/frontend/static/locales/zh-TR.json @@ -361,9 +361,13 @@ "Warning": "Warning", "#39": "Phrases in components/FederationTable/index.tsx", "Enabled": "Enabled", + "Invalid ratings have been filtered.": "Invalid ratings have been filtered.", "No coordinators found.": "No coordinators found.", "Rating": "Rating", + "Reloading. Invalid ratings will be filtered.": "Reloading. Invalid ratings will be filtered.", "Up": "Up", + "Verify ratings": "Verify ratings", + "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.": "Verifying all ratings might take some time; this window may freeze for a few seconds while the cryptographic certification is in progress.", "#40": "Phrases in components/HostAlert/SelfhostedAlert.tsx", "RoboSats client is served from your own node granting you the strongest security and privacy.": "RoboSats客戶端已由你自己的節點提供服務,為你提供最強的安全性和隱私性。", "You are self-hosting RoboSats": "你在自託管 RoboSats",