diff --git a/frontend/src/components/TradeBox/Prompts/Successful.tsx b/frontend/src/components/TradeBox/Prompts/Successful.tsx index 5175e878..b67b14e1 100644 --- a/frontend/src/components/TradeBox/Prompts/Successful.tsx +++ b/frontend/src/components/TradeBox/Prompts/Successful.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { useTranslation, Trans } from 'react-i18next'; import { Grid, @@ -15,19 +15,21 @@ import { } from '@mui/material'; import currencies from '../../../../static/assets/currencies.json'; import TradeSummary from '../TradeSummary'; -import { Favorite, RocketLaunch, ContentCopy, Refresh } from '@mui/icons-material'; +import { Favorite, RocketLaunch, ContentCopy, Refresh, Info } from '@mui/icons-material'; import { LoadingButton } from '@mui/lab'; - +import { finalizeEvent, type Event } from 'nostr-tools'; import { type Order } from '../../../models'; import { systemClient } from '../../../services/System'; import { FederationContext, type UseFederationStoreType, } from '../../../contexts/FederationContext'; +import { type UseAppStoreType, AppContext } from '../../../contexts/AppContext'; +import { GarageContext, type UseGarageStoreType } from '../../../contexts/GarageContext'; interface SuccessfulPromptProps { order: Order; - ratePlatform: (rating: number) => void; + rateUserPlatform: (rating: number) => void; onClickStartAgain: () => void; onClickRenew: () => void; loadingRenew: boolean; @@ -35,16 +37,48 @@ interface SuccessfulPromptProps { export const SuccessfulPrompt = ({ order, - ratePlatform, + rateUserPlatform, onClickStartAgain, onClickRenew, loadingRenew, }: SuccessfulPromptProps): JSX.Element => { const { t } = useTranslation(); const currencyCode: string = currencies[`${order.currency}`]; + const { settings } = useContext(AppContext); const { federation } = useContext(FederationContext); + const { garage } = useContext(GarageContext); - const [rating, setRating] = useState(undefined); + const [hostRating, setHostRating] = useState(); + + const rateHostPlatform = function (): void { + if (!hostRating) return; + + const slot = garage.getSlot(); + const coordinatorPubKey = federation.getCoordinator(order.shortAlias)?.nostrHexPubkey; + + if (!slot?.nostrPubKey || !slot.nostrSecKey || !coordinatorPubKey || !order.id) return; + + const eventTemplate: Event = { + kind: 31986, + created_at: Math.floor(Date.now() / 1000), + tags: [ + ['d', `${order.shortAlias}:${order.id}`], + ['p', coordinatorPubKey], + ['rating', String(hostRating / 5)], + ], + content: '', + pubkey: slot.nostrPubKey, + id: '', + sig: '', + }; + + const signedEvent = finalizeEvent(eventTemplate, slot.nostrSecKey); + federation.roboPool.sendEvent(signedEvent); + }; + + useEffect(() => { + rateHostPlatform(); + }, [hostRating]); return ( - {t('What do you think your order host "{{coordinator}}"?', { - coordinator: federation.getCoordinator(order.shortAlias)?.longAlias, + {t('Rate your peer {{peer_nick}}', { + peer_nick: order.is_maker ? order.taker_nick : order.maker_nick, })} @@ -69,12 +103,36 @@ export const SuccessfulPrompt = ({ size='large' onChange={(e) => { const rate = e.target.value; - ratePlatform(rate); - setRating(rate); + rateUserPlatform(rate); }} /> - {rating === 5 ? ( + + + {t('Rate your host {{coordinator}}', { + coordinator: federation.getCoordinator(order.shortAlias)?.longAlias, + })}{' '} + + {t('BETA')} + + + + + + + + { + const rate = e.target.value; + setHostRating(rate); + }} + /> + + {hostRating ? (
- - {t('Thank you! RoboSats loves you too')} - - -
- - {t( - 'RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!', + {hostRating === 5 ? ( + <> + + + {t('Thank you! {{shortAlias}} loves you too', { + shortAlias: federation.getCoordinator(order.shortAlias)?.longAlias, + })} + + + + + ) : ( + + {t('Thank you for using Robosats!')} + )} - -
- ) : rating !== undefined ? ( - - - {t('Thank you for using Robosats!')} - - - - Let us know how the platform could improve ( - - Telegram - - {' / '} - - Github - - ) - - + + {hostRating === 5 ? ( + + {t( + 'RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!', + )} + + ) : ( + + + Let us know how the platform could improve ( + + Telegram + + {' / '} + + Github + + ) + + + )} ) : ( <> diff --git a/frontend/src/components/TradeBox/index.tsx b/frontend/src/components/TradeBox/index.tsx index f2bef15c..56fc5ffe 100644 --- a/frontend/src/components/TradeBox/index.tsx +++ b/frontend/src/components/TradeBox/index.tsx @@ -1,7 +1,6 @@ import React, { useState, useEffect, useContext } from 'react'; import { Box, Divider, Grid } from '@mui/material'; import { getWebln, pn } from '../../utils'; - import { ConfirmCancelDialog, ConfirmCollabCancelDialog, @@ -309,7 +308,7 @@ const TradeBox = ({ currentOrder, onStartAgain }: TradeBoxProps): JSX.Element => } }; - const ratePlatform = function (rating: number): void { + const rateUserPlatform = function (rating: number): void { submitAction({ action: 'rate_platform', rating }); }; @@ -617,7 +616,7 @@ const TradeBox = ({ currentOrder, onStartAgain }: TradeBoxProps): JSX.Element => return ( { @@ -641,7 +640,7 @@ const TradeBox = ({ currentOrder, onStartAgain }: TradeBoxProps): JSX.Element => return ( { @@ -680,7 +679,7 @@ const TradeBox = ({ currentOrder, onStartAgain }: TradeBoxProps): JSX.Element => return ( { diff --git a/frontend/src/models/Coordinator.model.ts b/frontend/src/models/Coordinator.model.ts index 1467bd1c..857c9bf3 100644 --- a/frontend/src/models/Coordinator.model.ts +++ b/frontend/src/models/Coordinator.model.ts @@ -138,6 +138,7 @@ export class Coordinator { this.testnet = value.testnet; this.mainnetNodesPubkeys = value.mainnetNodesPubkeys; this.testnetNodesPubkeys = value.testnetNodesPubkeys; + this.nostrHexPubkey = value.nostrHexPubkey; this.url = ''; this.basePath = ''; @@ -163,6 +164,7 @@ export class Coordinator { public testnetNodesPubkeys: string[] | undefined; public url: string; public basePath: string; + public nostrHexPubkey: string; // These properties are fetched from coordinator API public book: Record = {}; diff --git a/frontend/src/models/Robot.model.ts b/frontend/src/models/Robot.model.ts index a3c6114d..f571d1a8 100644 --- a/frontend/src/models/Robot.model.ts +++ b/frontend/src/models/Robot.model.ts @@ -10,6 +10,7 @@ class Robot { public token?: string; public pubKey?: string; public encPrivKey?: string; + public nostrPubKey?: string; public stealthInvoices: boolean = true; public activeOrderId?: number; public lastOrderId?: number; @@ -34,9 +35,11 @@ class Robot { const tokenSHA256 = this.tokenSHA256 ?? ''; const encPrivKey = this.encPrivKey ?? ''; const pubKey = this.pubKey ?? ''; + const nostrPubKey = this.nostrPubKey ?? ''; return { tokenSHA256, + nostrPubKey, keys: { pubKey: pubKey.split('\n').join('\\'), encPrivKey: encPrivKey.split('\n').join('\\'), diff --git a/frontend/src/models/Slot.model.ts b/frontend/src/models/Slot.model.ts index f003774b..fdf001f2 100644 --- a/frontend/src/models/Slot.model.ts +++ b/frontend/src/models/Slot.model.ts @@ -1,10 +1,13 @@ import { sha256 } from 'js-sha256'; +import { sha256 as sha256Hash } from '@noble/hashes/sha256'; import { Robot, Order, type Federation } from '.'; import { roboidentitiesClient } from '../services/Roboidentities/Web'; import { hexToBase91, validateTokenEntropy } from '../utils'; +import { getPublicKey } from 'nostr-tools'; export interface AuthHeaders { tokenSHA256: string; + nostrPubKey: string; keys: { pubKey: string; encPrivKey: string; @@ -33,6 +36,11 @@ class Slot { const { hasEnoughEntropy, bitsEntropy, shannonEntropy } = validateTokenEntropy(token); const tokenSHA256 = hexToBase91(sha256(token)); + const nostrHash = sha256Hash(this.token); + this.nostrSecKey = new Uint8Array(nostrHash); + const nostrPubKey = getPublicKey(this.nostrSecKey); + this.nostrPubKey = nostrPubKey; + this.robots = shortAliases.reduce((acc: Record, shortAlias: string) => { acc[shortAlias] = new Robot({ ...robotAttributes, @@ -41,6 +49,7 @@ class Slot { bitsEntropy, shannonEntropy, tokenSHA256, + nostrPubKey, }); this.updateSlotFromRobot(acc[shortAlias]); return acc; @@ -57,6 +66,8 @@ class Slot { activeOrder: Order | null = null; lastOrder: Order | null = null; copiedToken: boolean; + nostrSecKey?: Uint8Array; + nostrPubKey?: string; onSlotUpdate: () => void; diff --git a/frontend/src/services/RoboPool/index.ts b/frontend/src/services/RoboPool/index.ts index 1db0d8d3..2860fd1b 100644 --- a/frontend/src/services/RoboPool/index.ts +++ b/frontend/src/services/RoboPool/index.ts @@ -130,6 +130,12 @@ class RoboPool { this.sendMessage(JSON.stringify(requestPending)); this.sendMessage(JSON.stringify(requestSuccess)); }; + + sendEvent = (event: Event): void => { + const message = ['EVENT', event]; + + this.sendMessage(JSON.stringify(message)); + }; } export default RoboPool; diff --git a/frontend/src/services/api/ApiNativeClient/index.ts b/frontend/src/services/api/ApiNativeClient/index.ts index 3cbbb369..5b98a432 100644 --- a/frontend/src/services/api/ApiNativeClient/index.ts +++ b/frontend/src/services/api/ApiNativeClient/index.ts @@ -17,6 +17,7 @@ class ApiNativeClient implements ApiClient { ...headers, ...{ Authorization: `Token ${auth.tokenSHA256}`, + Nostr: auth.nostrPubKey, }, }; } else if (auth?.keys != null) { @@ -24,6 +25,7 @@ class ApiNativeClient implements ApiClient { ...headers, ...{ Authorization: `Token ${auth.tokenSHA256} | Public ${auth.keys.pubKey} | Private ${auth.keys.encPrivKey}`, + Nostr: auth.nostrPubKey, }, }; } diff --git a/frontend/src/services/api/ApiWebClient/index.ts b/frontend/src/services/api/ApiWebClient/index.ts index b28edf27..a14826fb 100644 --- a/frontend/src/services/api/ApiWebClient/index.ts +++ b/frontend/src/services/api/ApiWebClient/index.ts @@ -13,6 +13,7 @@ class ApiWebClient implements ApiClient { ...headers, ...{ Authorization: `Token ${auth.tokenSHA256}`, + Nostr: auth.nostrPubKey, }, }; } else if (auth?.keys != null) { @@ -20,6 +21,7 @@ class ApiWebClient implements ApiClient { ...headers, ...{ Authorization: `Token ${auth.tokenSHA256} | Public ${auth.keys.pubKey} | Private ${auth.keys.encPrivKey}`, + Nostr: auth.nostrPubKey, }, }; } diff --git a/frontend/src/services/api/index.ts b/frontend/src/services/api/index.ts index 21b8effd..1b8fcfb8 100644 --- a/frontend/src/services/api/index.ts +++ b/frontend/src/services/api/index.ts @@ -3,6 +3,7 @@ import ApiNativeClient from './ApiNativeClient'; export interface Auth { tokenSHA256: string; + nostrPubKey: string; keys?: { pubKey: string; encPrivKey: string }; } diff --git a/frontend/static/locales/ca.json b/frontend/static/locales/ca.json index 9326abbc..e8e047f0 100644 --- a/frontend/static/locales/ca.json +++ b/frontend/static/locales/ca.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats està intentant pagar la teva factura de Lightning. Recorda que els nodes Lightning han d'estar en línia per rebre pagaments.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renovar", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats millora amb més usuaris i liquiditat. Ensenya-li RoboSats a un amic bitcoiner!", "Sending coins to": "Enviant monedes a", "Start Again": "Començar de nou", "Thank you for using Robosats!": "Gràcies per fer servir RoboSats!", - "Thank you! RoboSats loves you too": "Gràcies! RoboSats també t'estima", - "What do you think your order host \"{{coordinator}}\"?": "Què en penses del teu amfitrió \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "El teu TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Si us plau, espera a que el prenedor bloquegi la seva fiança. Si no ho fa a temps, l'ordre serà pública de nou.", diff --git a/frontend/static/locales/cs.json b/frontend/static/locales/cs.json index f4793f33..a3040992 100644 --- a/frontend/static/locales/cs.json +++ b/frontend/static/locales/cs.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats se snaží zaplatit tvůj lightning invoice. Nezapomeň, že lightning nody musí být online, aby mohl přijímat platby.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats bude lepší s větší likviditou a uživateli. Pověz svým přátelům o Robosats!", "Sending coins to": "Sending coins to", "Start Again": "Začít znovu", "Thank you for using Robosats!": "Děkujeme, že používáš Robosats!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Tvé TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Vyčkej, až příjemce uzamkne kauci. Pokud příjemce neuzamkne kauci včas, nabídka se znovu zveřejní.", diff --git a/frontend/static/locales/de.json b/frontend/static/locales/de.json index 05a99eb4..608bb5e2 100644 --- a/frontend/static/locales/de.json +++ b/frontend/static/locales/de.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats versucht deine Lightning-Invoice zu bezahlen. Denk daran, dass deine Lightning-Node erreichbar sein muss, um die Zahlung zu erhalten.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats wird noch besser mit mehr Nutzern und Liquidität. Erzähl einem Bitcoin-Freund von uns!", "Sending coins to": "Sending coins to", "Start Again": "Nochmal", "Thank you for using Robosats!": "Danke, dass du Robosats benutzt hast!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Your TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Bitte warte auf den Taker, um eine Kaution zu sperren. Wenn der Taker nicht rechtzeitig eine Kaution sperrt, wird die Order erneut veröffentlicht.", diff --git a/frontend/static/locales/en.json b/frontend/static/locales/en.json index 619236da..c2c179e6 100644 --- a/frontend/static/locales/en.json +++ b/frontend/static/locales/en.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!", "Sending coins to": "Sending coins to", "Start Again": "Start Again", "Thank you for using Robosats!": "Thank you for using Robosats!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Your TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.", diff --git a/frontend/static/locales/es.json b/frontend/static/locales/es.json index 79eb2793..17f2db24 100644 --- a/frontend/static/locales/es.json +++ b/frontend/static/locales/es.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats está intentando pagar tu factura de Lightning. Recuerda que los nodos Lightning deben estar en línea para recibir pagos.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renovar", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats mejora con más liquidez y usuarios. ¡Háblale a un amigo bitcoiner sobre RoboSats!", "Sending coins to": "Sending coins to", "Start Again": "Empezar de nuevo", "Thank you for using Robosats!": "¡Gracias por usar RoboSats!", - "Thank you! RoboSats loves you too": "¡Gracias! RoboSats también te quiere", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Tu TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Por favor, espera a que el tomador bloquee su fianza. Si no lo hace a tiempo, la orden volverá a publicarse.", diff --git a/frontend/static/locales/eu.json b/frontend/static/locales/eu.json index 3b96480a..0065a326 100644 --- a/frontend/static/locales/eu.json +++ b/frontend/static/locales/eu.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats zure Lightning faktura ordaintzen saiatzen ari da. Gogoratu lightning nodoak online egon behar direla ordainketak jaso ahal izateko.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats hobetu egiten da likidezia eta erabiltzaile gehiagorekin. Aipatu Robosats lagun bitcoiner bati!", "Sending coins to": "Sending coins to", "Start Again": "Berriz Hasi", "Thank you for using Robosats!": "Mila esker Robosats erabiltzeagatik!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Zure TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Mesedez itxaron hartzaileak fidantza blokeatu harte. Hartzaileak fidantza garaiz blokeatzen ez badu, eskaera berriz publikatuko da.", diff --git a/frontend/static/locales/fr.json b/frontend/static/locales/fr.json index d76fcd8e..35ea143f 100644 --- a/frontend/static/locales/fr.json +++ b/frontend/static/locales/fr.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats tente de payer votre facture lightning. Rappelez-vous que les nœuds lightning doivent être en ligne pour recevoir des paiements.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renouveler", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats s'améliore avec plus de liquidité et d'utilisateurs. Parlez de Robosats à un ami bitcoiner!", "Sending coins to": "Envoi coins à", "Start Again": "Recommencer", "Thank you for using Robosats!": "Merci d'utiliser Robosats!", - "Thank you! RoboSats loves you too": "Merci ! RoboSats vous aime aussi", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Votre TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Veuillez attendre que le preneur verrouille une caution. Si le preneur ne verrouille pas la caution à temps, l'ordre sera rendue publique à nouveau", diff --git a/frontend/static/locales/it.json b/frontend/static/locales/it.json index b794f543..3517e273 100644 --- a/frontend/static/locales/it.json +++ b/frontend/static/locales/it.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats sta provando a pagare la tua fattura lightning. Ricorda che i nodi lightning devono essere online per ricevere pagamenti.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Rinnova", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats migliora se ha più liquidità ed utenti. Parla di Robosats ai tuoi amici bitcoiner!", "Sending coins to": "Invio monete a", "Start Again": "Ricomincia", "Thank you for using Robosats!": "Grazie per aver usato Robosats!", - "Thank you! RoboSats loves you too": "Grazie! Anche RoboSats ti ama", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Il tuo TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Per favore, attendi che l'acquirente blocchi una cauzione. Se l'acquirente non blocca una cauzione in tempo, l'ordine verrà reso nuovamente pubblico.", diff --git a/frontend/static/locales/ja.json b/frontend/static/locales/ja.json index 2e14eb12..8fb9f9c0 100644 --- a/frontend/static/locales/ja.json +++ b/frontend/static/locales/ja.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSatsはあなたのライトニングインボイスを支払おうとしています。支払いを受け取るには、ライトニングノードがオンラインである必要があることを忘れないでください。", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "更新する", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSatsはより多くの流動性とユーザーでより良くなります。ビットコイナーのお友達にRoboSatsについて話してください!", "Sending coins to": "コインを送信する先", "Start Again": "最初からやり直す", "Thank you for using Robosats!": "Robosatsをご利用いただきありがとうございます!", - "Thank you! RoboSats loves you too": "ありがとうございます! RoboSatsもあなたを愛しています", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "あなたのTXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "テイカーが担保金をロックするまでお待ちください。タイムリミット内に担保金がロックされない場合、オーダーは再度公開されます。", diff --git a/frontend/static/locales/pl.json b/frontend/static/locales/pl.json index ac73147d..581ac16a 100644 --- a/frontend/static/locales/pl.json +++ b/frontend/static/locales/pl.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats próbuje zapłacić fakturę za błyskawicę. Pamiętaj, że węzły pioruna muszą być online, aby otrzymywać płatności.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats staje się lepszy dzięki większej płynności i użytkownikom. Powiedz znajomemu bitcoinerowi o Robosats!", "Sending coins to": "Sending coins to", "Start Again": "Zacznij jeszcze raz", "Thank you for using Robosats!": "Dziękujemy za korzystanie z Robosatów!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Your TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Poczekaj, aż przyjmujący zablokuje obligację. Jeśli przyjmujący nie zablokuje obligacji na czas, zlecenie zostanie ponownie upublicznione.", diff --git a/frontend/static/locales/pt.json b/frontend/static/locales/pt.json index 8c93f440..e3f261a9 100644 --- a/frontend/static/locales/pt.json +++ b/frontend/static/locales/pt.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats está tentando pagar sua lightning invoice. Lembre-se de que os nós lightning devem estar online para receber pagamentos.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats fica melhor com mais liquidez e usuários. Conte a um amigo bitcoiner sobre Robosats!", "Sending coins to": "Enviando moedas para", "Start Again": "Comece de novo", "Thank you for using Robosats!": "Obrigado por usar Robosats!", - "Thank you! RoboSats loves you too": "Obriagdo! RoboSats também te ama", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Sua TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Por favor, espere que o tomador bloqueie uma fiança. Se o tomador não fechar um vínculo a tempo, a ordem será tornada pública novamente.", diff --git a/frontend/static/locales/ru.json b/frontend/static/locales/ru.json index 269b6622..ee945719 100644 --- a/frontend/static/locales/ru.json +++ b/frontend/static/locales/ru.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats пытается оплатить Ваш Lightning инвойс. Помните, что ноды Lightning должны быть подключены к сети, чтобы получать платежи.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats становится лучше с большей ликвидностью и пользователями. Расскажите другу-биткойнеру о Robosat!", "Sending coins to": "Отправка монет на", "Start Again": "Начать Снова", "Thank you for using Robosats!": "Спасибо за использование Robosats!", - "Thank you! RoboSats loves you too": "Спасибо! RoboSats тоже Вас любит", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Ваш TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Пожалуйста, подождите, пока тейкер заблокирует залог. Если тейкер не заблокирует залог вовремя, ордер будет снова опубликован", diff --git a/frontend/static/locales/sv.json b/frontend/static/locales/sv.json index ec8cbd7c..9e5c9b3e 100644 --- a/frontend/static/locales/sv.json +++ b/frontend/static/locales/sv.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats försöker betala din lightning-faktura. Kom ihåg att lightning-noder måste vara online för att kunna mottaga betalningar.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats blir bättre med mer likviditet och fler användare. Berätta om RoboSats för en Bitcoiner-vän!", "Sending coins to": "Sending coins to", "Start Again": "Börja om", "Thank you for using Robosats!": "Tack för att du använder RoboSats!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Ditt TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Var god vänta på att takern låser sin obligation. Om den inte gör det i tid kommer ordern att göras publik igen.", diff --git a/frontend/static/locales/sw.json b/frontend/static/locales/sw.json index fa20f8c5..63f8b63e 100644 --- a/frontend/static/locales/sw.json +++ b/frontend/static/locales/sw.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats inajaribu kulipa ankara yako ya umeme. Kumbuka kuwa nodi za umeme lazima ziwe mtandaoni ili kupokea malipo.", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats inaboreshwa na utoshelevu zaidi na watumiaji. Mwambie rafiki yako wa Bitcoin kuhusu RoboSats!", "Sending coins to": "Inatuma sarafu kwa", "Start Again": "Anza Tena", "Thank you for using Robosats!": "Asante kwa kutumia Robosats!", - "Thank you! RoboSats loves you too": "Asante! RoboSats pia inakupenda", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "Kitambulisho chako cha TX", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "Tafadhali subiri mpokeaji aweke dhamana. Ikiwa mpokeaji hataweka dhamana kwa wakati, agizo litatangazwa tena kwa umma.", diff --git a/frontend/static/locales/th.json b/frontend/static/locales/th.json index 0f04a284..b05a4a79 100644 --- a/frontend/static/locales/th.json +++ b/frontend/static/locales/th.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats กำลังจ่ายเหรียญให้ lightning invoice ของท่าน lightning nodes จะต้องออนไลน์เพื่อรับเหรียญ", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "Renew", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats จะดีขึ้นเมื่อมีสภาพคล่องและผู้ใช้งานมากขึ้น ช่วยกันชวนเพื่อนของคุณมาใช้ Robosats!", "Sending coins to": "Sending coins to", "Start Again": "Start Again", "Thank you for using Robosats!": "ขอบคุณที่ใช้งาน Robosats!", - "Thank you! RoboSats loves you too": "Thank you! RoboSats loves you too", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "TXID ของคุณ", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "โปรดรอคู่ค้าทำการกักกันเหรียญใน bond ถ้าเขากักกันเหรียญไม่ทันในเวลาที่กำหนด รายการจะถูกประำกาศใหม่", diff --git a/frontend/static/locales/zh-SI.json b/frontend/static/locales/zh-SI.json index 3d0a1dac..b0e6316c 100644 --- a/frontend/static/locales/zh-SI.json +++ b/frontend/static/locales/zh-SI.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats 正在尝试支付你的闪电发票。请注意,闪电节点必须在线才能接收付款。", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "延续", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats 会随着更多的流动性和更高的用户数量而变得更好。把 RoboSats 推荐给你的比特币朋友吧!", "Sending coins to": "将比特币发送到", "Start Again": "重新开始", "Thank you for using Robosats!": "感谢你使用 Robosats!", - "Thank you! RoboSats loves you too": "谢谢!RoboSats 也爱你", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "你的 TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "请等待吃单方锁定保证金。如果吃单方没有及时锁定保证金,订单将再次公开。", diff --git a/frontend/static/locales/zh-TR.json b/frontend/static/locales/zh-TR.json index 70fae3d0..94483bf6 100644 --- a/frontend/static/locales/zh-TR.json +++ b/frontend/static/locales/zh-TR.json @@ -675,13 +675,16 @@ "#81": "Phrases in components/TradeBox/Prompts/SendingSats.tsx", "RoboSats is trying to pay your lightning invoice. Remember that lightning nodes must be online in order to receive payments.": "RoboSats 正在嘗試支付你的閃電發票。請注意,閃電節點必須在線才能接收付款。", "#82": "Phrases in components/TradeBox/Prompts/Successful.tsx", + "BETA": "BETA", + "Rate your host {{coordinator}}": "Rate your host {{coordinator}}", + "Rate your peer {{peer_nick}}": "Rate your peer {{peer_nick}}", "Renew": "延續", "RoboSats gets better with more liquidity and users. Tell a bitcoiner friend about Robosats!": "RoboSats 會隨著更多的流動性和更高的用戶数量而變得更好。把 RoboSats 推薦給你的比特幣朋友吧!", "Sending coins to": "將比特幣發送到", "Start Again": "重新開始", "Thank you for using Robosats!": "感謝你使用 Robosats!", - "Thank you! RoboSats loves you too": "謝謝!RoboSats 也愛你", - "What do you think your order host \"{{coordinator}}\"?": "What do you think your order host \"{{coordinator}}\"?", + "Thank you! {{shortAlias}} loves you too": "Thank you! {{shortAlias}} loves you too", + "You need to enable nostr to rate your coordinator.": "You need to enable nostr to rate your coordinator.", "Your TXID": "你的 TXID", "#83": "Phrases in components/TradeBox/Prompts/TakerFound.tsx", "Please wait for the taker to lock a bond. If the taker does not lock a bond in time, the order will be made public again.": "請等待吃單方鎖定保證金。如果吃單方沒有及時鎖定保證金,訂單將再次公開。",