diff --git a/js/components/pages/page-about.js b/js/components/pages/page-about.js index cdd5d3a..ce3d40b 100644 --- a/js/components/pages/page-about.js +++ b/js/components/pages/page-about.js @@ -18,6 +18,7 @@ class PageAbout extends HTMLElement {
kashilo.com ist eine Privacy-First Kleinanzeigen-Plattform. Nutzer können Anzeigen erstellen und über Ende-zu-Ende verschlüsselte Nachrichten kommunizieren — ohne persönliche Daten preiszugeben.
Die Bezahlung erfolgt ausschliesslich über Monero (XMR). Kein KYC, keine E-Mail, kein Tracking.
+Die Veröffentlichung einer Anzeige kostet 1 USD (zahlbar in Monero). Keine versteckten Gebühren, keine Abos.
kashilo.com is a privacy-first classifieds platform. Users can create listings and communicate via end-to-end encrypted messages — without revealing any personal data.
Payments are made exclusively in Monero (XMR). No KYC, no email, no tracking.
+Publishing a listing costs $1 (payable in Monero). No hidden fees, no subscriptions.
kashilo.com est une plateforme de petites annonces axée sur la confidentialité. Les utilisateurs peuvent créer des annonces et communiquer via des messages chiffrés de bout en bout — sans révéler de données personnelles.
Les paiements s'effectuent exclusivement en Monero (XMR). Pas de KYC, pas d'e-mail, pas de tracking.
+La publication d'une annonce coûte 1 USD (payable en Monero). Pas de frais cachés, pas d'abonnements.
kashilo.com è una piattaforma di annunci incentrata sulla privacy. Gli utenti possono creare annunci e comunicare tramite messaggi crittografati end-to-end — senza rivelare dati personali.
I pagamenti avvengono esclusivamente in Monero (XMR). Nessun KYC, nessuna email, nessun tracking.
+La pubblicazione di un annuncio costa 1 USD (pagabile in Monero). Nessun costo nascosto, nessun abbonamento.
kashilo.com es una plataforma de clasificados centrada en la privacidad. Los usuarios pueden crear anuncios y comunicarse mediante mensajes cifrados de extremo a extremo — sin revelar datos personales.
Los pagos se realizan exclusivamente en Monero (XMR). Sin KYC, sin email, sin rastreo.
+Publicar un anuncio cuesta 1 USD (pagable en Monero). Sin costes ocultos, sin suscripciones.
kashilo.com é uma plataforma de classificados focada em privacidade. Os usuários podem criar anúncios e se comunicar por mensagens criptografadas de ponta a ponta — sem revelar dados pessoais.
Os pagamentos são feitos exclusivamente em Monero (XMR). Sem KYC, sem email, sem rastreamento.
+Publicar um anúncio custa 1 USD (pagável em Monero). Sem taxas ocultas, sem assinaturas.
kashilo.com — это платформа объявлений с приоритетом конфиденциальности. Пользователи могут создавать объявления и общаться через сквозное шифрование — без раскрытия личных данных.
Оплата осуществляется исключительно в Monero (XMR). Без KYC, без email, без отслеживания.
+Публикация объявления стоит 1 USD (оплата в Monero). Без скрытых комиссий, без подписок.
Pour toute question ou problème, contactez-nous à :
E-mail : hello@kashilo.com
+ `, + it: /* html */` +Per domande o problemi, contattaci a:
+E-mail: hello@kashilo.com
+ `, + es: /* html */` +Para preguntas o problemas, contáctanos en:
+Correo electrónico: hello@kashilo.com
+ `, + pt: /* html */` +Para dúvidas ou problemas, entre em contato:
+E-mail: hello@kashilo.com
+ `, + ru: /* html */` +По вопросам или проблемам свяжитесь с нами:
+E-mail: hello@kashilo.com
` } return content[lang] || content.de @@ -35,7 +55,7 @@ class PageContact extends HTMLElement { render() { const lang = getCurrentLanguage() - const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil' } + const backLabel = { de: 'Zurück zur Startseite', en: 'Back to Home', fr: 'Retour à l\'accueil', it: 'Torna alla home', es: 'Volver al inicio', pt: 'Voltar ao Início', ru: 'На главную' } this.innerHTML = /* html */`${t('create.publishFeeHint')}
+ ` : ''} ` @@ -690,7 +693,7 @@ class PageCreate extends HTMLElement { console.error('Failed to save listing:', error) console.error('Error details:', JSON.stringify(error.data, null, 2)) submitBtn.disabled = false - submitBtn.textContent = this.editMode ? t('create.saveChanges') : t('create.publish') + submitBtn.textContent = this.editMode ? t('create.saveChanges') : t('create.publishPaid') this.submitting = false const errorMsg = error.data?.errors?.[0]?.message || error.message || t('create.publishFailed') @@ -1023,6 +1026,13 @@ style.textContent = /* css */` justify-content: flex-end; margin-top: var(--space-xl); } + + page-create .publish-fee-hint { + text-align: right; + font-size: var(--font-size-xs); + color: var(--color-text-muted); + margin-top: var(--space-sm); + } page-create .form-error { padding: var(--space-md); diff --git a/js/components/pages/page-privacy.js b/js/components/pages/page-privacy.js index 26dbf56..f56e55a 100644 --- a/js/components/pages/page-privacy.js +++ b/js/components/pages/page-privacy.js @@ -25,20 +25,21 @@ class PagePrivacy extends HTMLElement {Die Plattform wurde nach dem Prinzip der Datensparsamkeit konzipiert.
3.1 Daten, die wir NICHT erheben: Keine E-Mail-Adressen, keine Namen, keine Telefonnummern, keine Standortdaten der Nutzer, keine Zahlungsdaten.
+3.1 Daten, die wir NICHT erheben: Keine E-Mail-Adressen, keine Namen, keine Telefonnummern, keine Standortdaten der Nutzer. Zahlungen werden über BTCPay Server abgewickelt — dabei werden keine personenbezogenen Zahlungsdaten erhoben.
3.2 Registrierung: Ein kryptografischer Hash (SHA-256) der UUID wird als Benutzerkennung gespeichert. Die UUID selbst wird nicht gespeichert.
-3.3 Nutzung: Anzeigen (Titel, Beschreibung, Preis, Kategorie, Standort, Bilder), Nachrichten (Ende-zu-Ende verschlüsselt, nur Ciphertext gespeichert), Favoriten (lokal im Browser).
+3.3 Nutzung: Anzeigen (Titel, Beschreibung, Preis, Kategorie, Standort, Bilder), Nachrichten (Ende-zu-Ende verschlüsselt, nur Ciphertext gespeichert), Favoriten (im Browser und serverseitig synchronisiert).
3.4 Technische Daten: Server-Logs können temporär IP-Adressen und Zugriffszeiten enthalten.
+3.5 Proof-of-Work: Bei der Registrierung und bestimmten Aktionen wird ein Proof-of-Work-Captcha durchgeführt. Dabei werden keine personenbezogenen Daten erhoben.
4.1 Keine Cookies für Tracking oder Analyse.
-4.2 localStorage: Spracheinstellung, Theme, Währung, Auth-Token, Favoriten, Kategorie-Cache.
+4.2 localStorage: Spracheinstellung, Theme, Währung, Auth-Token, Kategorie-Cache.
4.3 Diese Daten verlassen den Browser nicht.
5.1 Directus (Backend): Selbst gehostet, keine Datenübertragung an Dritte.
-5.2 BTCPay Server (Zahlungen): Keine personenbezogenen Daten übertragen.
-5.3 CoinGecko API (Wechselkurse): Keine personenbezogenen Daten übertragen.
+5.2 BTCPay Server (Zahlungen): Selbst gehostet, keine Datenübertragung an Dritte.
+5.3 CoinGecko API / Kraken API (Wechselkurse): Öffentliche APIs für aktuelle Wechselkurse. Es werden keine personenbezogenen Daten übertragen.
6.1 Kommunikation ist Ende-zu-Ende verschlüsselt (NaCl/TweetNaCl).
@@ -76,20 +77,21 @@ class PagePrivacy extends HTMLElement {The platform was designed following the principle of data minimization.
3.1 Data we do NOT collect: No email addresses, no names, no phone numbers, no user location data, no payment data.
+3.1 Data we do NOT collect: No email addresses, no names, no phone numbers, no user location data. Payments are processed via BTCPay Server — no personal payment data is collected.
3.2 Registration: A cryptographic hash (SHA-256) of the UUID is stored as user identifier. The UUID itself is not stored.
-3.3 Usage: Listings (title, description, price, category, location, images), Messages (end-to-end encrypted, only ciphertext stored), Favorites (stored locally in browser).
+3.3 Usage: Listings (title, description, price, category, location, images), Messages (end-to-end encrypted, only ciphertext stored), Favorites (stored in browser and synced server-side).
3.4 Technical data: Server logs may temporarily contain IP addresses and access times.
+3.5 Proof-of-Work: A proof-of-work captcha is performed during registration and certain actions. No personal data is collected in this process.
4.1 No cookies for tracking or analytics.
-4.2 localStorage: Language setting, theme, currency, auth token, favorites, category cache.
+4.2 localStorage: Language setting, theme, currency, auth token, category cache.
4.3 This data does not leave the browser.
5.1 Directus (Backend): Self-hosted, no data transfer to third parties.
-5.2 BTCPay Server (Payments): No personal data transferred.
-5.3 CoinGecko API (Exchange rates): No personal data transferred.
+5.2 BTCPay Server (Payments): Self-hosted, no data transfer to third parties.
+5.3 CoinGecko API / Kraken API (Exchange rates): Public APIs for current exchange rates. No personal data is transferred.
6.1 Communication is end-to-end encrypted (NaCl/TweetNaCl).
@@ -127,20 +129,21 @@ class PagePrivacy extends HTMLElement {La plateforme a été conçue selon le principe de minimisation des données.
3.1 Données que nous ne collectons PAS : Aucune adresse e-mail, aucun nom, aucun numéro de téléphone, aucune donnée de localisation, aucune donnée de paiement.
+3.1 Données que nous ne collectons PAS : Aucune adresse e-mail, aucun nom, aucun numéro de téléphone, aucune donnée de localisation. Les paiements sont traités via BTCPay Server — aucune donnée de paiement personnelle n'est collectée.
3.2 Inscription : Un hash cryptographique (SHA-256) de l'UUID est stocké comme identifiant. L'UUID lui-même n'est pas stocké.
-3.3 Utilisation : Annonces (titre, description, prix, catégorie, lieu, images), Messages (chiffrés de bout en bout, seul le texte chiffré est stocké), Favoris (stockés localement dans le navigateur).
+3.3 Utilisation : Annonces (titre, description, prix, catégorie, lieu, images), Messages (chiffrés de bout en bout, seul le texte chiffré est stocké), Favoris (stockés dans le navigateur et synchronisés côté serveur).
3.4 Données techniques : Les journaux serveur peuvent temporairement contenir des adresses IP et des heures d'accès.
+3.5 Proof-of-Work : Un captcha proof-of-work est effectué lors de l'inscription et de certaines actions. Aucune donnée personnelle n'est collectée dans ce processus.
4.1 Aucun cookie de suivi ou d'analyse.
-4.2 localStorage : Langue, thème, devise, jeton d'authentification, favoris, cache des catégories.
+4.2 localStorage : Langue, thème, devise, jeton d'authentification, cache des catégories.
4.3 Ces données ne quittent pas le navigateur.
5.1 Directus (Backend) : Auto-hébergé, aucun transfert de données à des tiers.
-5.2 BTCPay Server (Paiements) : Aucune donnée personnelle transférée.
-5.3 CoinGecko API (Taux de change) : Aucune donnée personnelle transférée.
+5.2 BTCPay Server (Paiements) : Auto-hébergé, aucun transfert de données à des tiers.
+5.3 CoinGecko API / Kraken API (Taux de change) : APIs publiques pour les taux de change actuels. Aucune donnée personnelle n'est transférée.
6.1 La communication est chiffrée de bout en bout (NaCl/TweetNaCl).
@@ -178,20 +181,21 @@ class PagePrivacy extends HTMLElement {La piattaforma è stata progettata secondo il principio della minimizzazione dei dati.
3.1 Dati che NON raccogliamo: Nessun indirizzo e-mail, nessun nome, nessun numero di telefono, nessun dato di localizzazione degli utenti, nessun dato di pagamento.
+3.1 Dati che NON raccogliamo: Nessun indirizzo e-mail, nessun nome, nessun numero di telefono, nessun dato di localizzazione degli utenti. I pagamenti vengono elaborati tramite BTCPay Server — non vengono raccolti dati di pagamento personali.
3.2 Registrazione: Un hash crittografico (SHA-256) dell'UUID viene memorizzato come identificativo utente. L'UUID stesso non viene memorizzato.
-3.3 Utilizzo: Annunci (titolo, descrizione, prezzo, categoria, località, immagini), Messaggi (crittografati end-to-end, solo il testo cifrato viene memorizzato), Preferiti (memorizzati localmente nel browser).
+3.3 Utilizzo: Annunci (titolo, descrizione, prezzo, categoria, località, immagini), Messaggi (crittografati end-to-end, solo il testo cifrato viene memorizzato), Preferiti (memorizzati nel browser e sincronizzati lato server).
3.4 Dati tecnici: I log del server possono contenere temporaneamente indirizzi IP e orari di accesso.
+3.5 Proof-of-Work: Un captcha proof-of-work viene eseguito durante la registrazione e determinate azioni. Nessun dato personale viene raccolto in questo processo.
4.1 Nessun cookie per tracciamento o analisi.
-4.2 localStorage: Impostazione lingua, tema, valuta, token di autenticazione, preferiti, cache delle categorie.
+4.2 localStorage: Impostazione lingua, tema, valuta, token di autenticazione, cache delle categorie.
4.3 Questi dati non lasciano il browser.
5.1 Directus (Backend): Self-hosted, nessun trasferimento di dati a terzi.
-5.2 BTCPay Server (Pagamenti): Nessun dato personale trasferito.
-5.3 CoinGecko API (Tassi di cambio): Nessun dato personale trasferito.
+5.2 BTCPay Server (Pagamenti): Self-hosted, nessun trasferimento di dati a terzi.
+5.3 CoinGecko API / Kraken API (Tassi di cambio): API pubbliche per i tassi di cambio attuali. Nessun dato personale viene trasferito.
6.1 La comunicazione è crittografata end-to-end (NaCl/TweetNaCl).
@@ -229,20 +233,21 @@ class PagePrivacy extends HTMLElement {La plataforma fue diseñada según el principio de minimización de datos.
3.1 Datos que NO recopilamos: Sin direcciones de correo electrónico, sin nombres, sin números de teléfono, sin datos de ubicación de los usuarios, sin datos de pago.
+3.1 Datos que NO recopilamos: Sin direcciones de correo electrónico, sin nombres, sin números de teléfono, sin datos de ubicación de los usuarios. Los pagos se procesan a través de BTCPay Server — no se recopilan datos de pago personales.
3.2 Registro: Un hash criptográfico (SHA-256) del UUID se almacena como identificador de usuario. El UUID en sí no se almacena.
-3.3 Uso: Anuncios (título, descripción, precio, categoría, ubicación, imágenes), Mensajes (cifrados de extremo a extremo, solo se almacena el texto cifrado), Favoritos (almacenados localmente en el navegador).
+3.3 Uso: Anuncios (título, descripción, precio, categoría, ubicación, imágenes), Mensajes (cifrados de extremo a extremo, solo se almacena el texto cifrado), Favoritos (almacenados en el navegador y sincronizados en el servidor).
3.4 Datos técnicos: Los registros del servidor pueden contener temporalmente direcciones IP y horarios de acceso.
+3.5 Proof-of-Work: Se realiza un captcha proof-of-work durante el registro y determinadas acciones. No se recopilan datos personales en este proceso.
4.1 Sin cookies para seguimiento o análisis.
-4.2 localStorage: Idioma, tema, moneda, token de autenticación, favoritos, caché de categorías.
+4.2 localStorage: Idioma, tema, moneda, token de autenticación, caché de categorías.
4.3 Estos datos no salen del navegador.
5.1 Directus (Backend): Autoalojado, sin transferencia de datos a terceros.
-5.2 BTCPay Server (Pagos): Sin datos personales transferidos.
-5.3 CoinGecko API (Tipos de cambio): Sin datos personales transferidos.
+5.2 BTCPay Server (Pagos): Autoalojado, sin transferencia de datos a terceros.
+5.3 CoinGecko API / Kraken API (Tipos de cambio): APIs públicas para tipos de cambio actuales. No se transfieren datos personales.
6.1 La comunicación está cifrada de extremo a extremo (NaCl/TweetNaCl).
@@ -280,20 +285,21 @@ class PagePrivacy extends HTMLElement {A plataforma foi projetada segundo o princípio da minimização de dados.
3.1 Dados que NÃO coletamos: Sem endereços de e-mail, sem nomes, sem números de telefone, sem dados de localização dos usuários, sem dados de pagamento.
+3.1 Dados que NÃO coletamos: Sem endereços de e-mail, sem nomes, sem números de telefone, sem dados de localização dos usuários. Os pagamentos são processados via BTCPay Server — nenhum dado de pagamento pessoal é coletado.
3.2 Registro: Um hash criptográfico (SHA-256) do UUID é armazenado como identificador do usuário. O UUID em si não é armazenado.
-3.3 Uso: Anúncios (título, descrição, preço, categoria, localização, imagens), Mensagens (criptografadas de ponta a ponta, apenas o texto cifrado é armazenado), Favoritos (armazenados localmente no navegador).
+3.3 Uso: Anúncios (título, descrição, preço, categoria, localização, imagens), Mensagens (criptografadas de ponta a ponta, apenas o texto cifrado é armazenado), Favoritos (armazenados no navegador e sincronizados no servidor).
3.4 Dados técnicos: Os logs do servidor podem conter temporariamente endereços IP e horários de acesso.
+3.5 Proof-of-Work: Um captcha proof-of-work é realizado durante o registro e determinadas ações. Nenhum dado pessoal é coletado neste processo.
4.1 Sem cookies para rastreamento ou análise.
-4.2 localStorage: Idioma, tema, moeda, token de autenticação, favoritos, cache de categorias.
+4.2 localStorage: Idioma, tema, moeda, token de autenticação, cache de categorias.
4.3 Estes dados não saem do navegador.
5.1 Directus (Backend): Auto-hospedado, sem transferência de dados a terceiros.
-5.2 BTCPay Server (Pagamentos): Sem dados pessoais transferidos.
-5.3 CoinGecko API (Taxas de câmbio): Sem dados pessoais transferidos.
+5.2 BTCPay Server (Pagamentos): Auto-hospedado, sem transferência de dados a terceiros.
+5.3 CoinGecko API / Kraken API (Taxas de câmbio): APIs públicas para taxas de câmbio atuais. Nenhum dado pessoal é transferido.
6.1 A comunicação é criptografada de ponta a ponta (NaCl/TweetNaCl).
@@ -331,20 +337,21 @@ class PagePrivacy extends HTMLElement {Платформа разработана по принципу минимизации данных.
3.1 Данные, которые мы НЕ собираем: Никаких адресов электронной почты, имён, номеров телефонов, данных о местоположении пользователей, платёжных данных.
+3.1 Данные, которые мы НЕ собираем: Никаких адресов электронной почты, имён, номеров телефонов, данных о местоположении пользователей. Платежи обрабатываются через BTCPay Server — персональные платёжные данные не собираются.
3.2 Регистрация: Криптографический хеш (SHA-256) UUID сохраняется как идентификатор пользователя. Сам UUID не сохраняется.
-3.3 Использование: Объявления (заголовок, описание, цена, категория, местоположение, изображения), Сообщения (сквозное шифрование, хранится только зашифрованный текст), Избранное (хранится локально в браузере).
+3.3 Использование: Объявления (заголовок, описание, цена, категория, местоположение, изображения), Сообщения (сквозное шифрование, хранится только зашифрованный текст), Избранное (хранится в браузере и синхронизируется на сервере).
3.4 Технические данные: Серверные логи могут временно содержать IP-адреса и время доступа.
+3.5 Proof-of-Work: При регистрации и определённых действиях выполняется captcha proof-of-work. Персональные данные при этом не собираются.
4.1 Никаких cookie для отслеживания или аналитики.
-4.2 localStorage: Язык, тема, валюта, токен аутентификации, избранное, кеш категорий.
+4.2 localStorage: Язык, тема, валюта, токен аутентификации, кеш категорий.
4.3 Эти данные не покидают браузер.
5.1 Directus (Бэкенд): Собственный хостинг, без передачи данных третьим лицам.
-5.2 BTCPay Server (Платежи): Персональные данные не передаются.
-5.3 CoinGecko API (Курсы валют): Персональные данные не передаются.
+5.2 BTCPay Server (Платежи): Собственный хостинг, без передачи данных третьим лицам.
+5.3 CoinGecko API / Kraken API (Курсы валют): Публичные API для актуальных курсов валют. Персональные данные не передаются.
6.1 Коммуникация защищена сквозным шифрованием (NaCl/TweetNaCl).
diff --git a/js/components/pages/page-terms.js b/js/components/pages/page-terms.js index 4f891ee..5cb88ca 100644 --- a/js/components/pages/page-terms.js +++ b/js/components/pages/page-terms.js @@ -63,10 +63,10 @@ class PageTerms extends HTMLElement {4.3 Anzeigen sind zeitlich begrenzt (30 Tage) und werden danach automatisch archiviert.
5.1 Die Veröffentlichung einer Anzeige ist gebührenpflichtig. Die aktuelle Gebühr wird vor der Veröffentlichung angezeigt.
-5.2 Die Bezahlung erfolgt ausschliesslich in Monero (XMR).
+5.1 Die Veröffentlichung einer Anzeige kostet 1 USD (oder Gegenwert in anderer Währung) für eine Laufzeit von 30 Tagen. Der Betreiber behält sich vor, die Gebühr anzupassen.
+5.2 Die Bezahlung erfolgt in Monero (XMR) über den Zahlungsdienstleister BTCPay Server. Es werden keine personenbezogenen Zahlungsdaten erhoben.
5.3 Bezahlte Gebühren werden nicht erstattet.
-5.4 Transaktionen zwischen Nutzer/innen erfolgen direkt und ohne Beteiligung der Plattform.
+5.4 Transaktionen zwischen Nutzer/innen erfolgen direkt und ohne Beteiligung der Plattform. Der Betreiber ist nicht Vertragspartei und übernimmt keine Verantwortung für Zahlungen zwischen Nutzern.
6.1 Die Plattform stellt einen Ende-zu-Ende verschlüsselten Chat zur Verfügung. Der Betreiber hat keinen Zugang zu den Nachrichteninhalten.
@@ -137,10 +137,10 @@ class PageTerms extends HTMLElement {4.3 Listings are limited to 30 days and are automatically archived thereafter.
5.1 Publishing a listing requires a fee. The current fee is displayed before publication.
-5.2 Payment is made exclusively in Monero (XMR).
+5.1 Publishing a listing costs $1 (or equivalent in other currencies) for a duration of 30 days. The operator reserves the right to adjust the fee.
+5.2 Payment is made in Monero (XMR) via the payment processor BTCPay Server. No personal payment data is collected.
5.3 Paid fees are non-refundable.
-5.4 Transactions between users are direct and without platform involvement.
+5.4 Transactions between users are direct and without platform involvement. The operator is not a contracting party and assumes no responsibility for payments between users.
6.1 The platform provides end-to-end encrypted chat. The operator has no access to message content.
@@ -211,10 +211,10 @@ class PageTerms extends HTMLElement {4.3 Les annonces sont limitées à 30 jours et sont automatiquement archivées.
5.1 La publication d'une annonce est payante. Les frais sont affichés avant la publication.
-5.2 Le paiement s'effectue exclusivement en Monero (XMR).
+5.1 La publication d'une annonce coûte 1 USD (ou l'équivalent dans une autre devise) pour une durée de 30 jours. L'exploitant se réserve le droit d'adapter les frais.
+5.2 Le paiement s'effectue en Monero (XMR) via le prestataire de paiement BTCPay Server. Aucune donnée de paiement personnelle n'est collectée.
5.3 Les frais payés ne sont pas remboursables.
-5.4 Les transactions entre utilisateurs sont directes et sans intervention de la plateforme.
+5.4 Les transactions entre utilisateurs sont directes et sans intervention de la plateforme. L'exploitant n'est pas partie contractante et n'assume aucune responsabilité pour les paiements entre utilisateurs.
6.1 La plateforme fournit un chat chiffré de bout en bout. L'exploitant n'a pas accès au contenu des messages.
@@ -285,10 +285,10 @@ class PageTerms extends HTMLElement {4.3 Gli annunci sono limitati a 30 giorni e vengono automaticamente archiviati.
5.1 La pubblicazione di un annuncio è a pagamento. La tariffa attuale viene visualizzata prima della pubblicazione.
-5.2 Il pagamento avviene esclusivamente in Monero (XMR).
+5.1 La pubblicazione di un annuncio costa 1 USD (o equivalente in altra valuta) per una durata di 30 giorni. Il gestore si riserva il diritto di adeguare la tariffa.
+5.2 Il pagamento avviene in Monero (XMR) tramite il fornitore di servizi di pagamento BTCPay Server. Non vengono raccolti dati di pagamento personali.
5.3 Le tariffe pagate non sono rimborsabili.
-5.4 Le transazioni tra utenti avvengono direttamente e senza il coinvolgimento della piattaforma.
+5.4 Le transazioni tra utenti avvengono direttamente e senza coinvolgimento della piattaforma. Il gestore non è parte contrattuale e non si assume responsabilità per i pagamenti tra utenti.
6.1 La piattaforma mette a disposizione una chat crittografata end-to-end. Il gestore non ha accesso al contenuto dei messaggi.
@@ -359,10 +359,10 @@ class PageTerms extends HTMLElement {4.3 Los anuncios están limitados a 30 días y se archivan automáticamente.
5.1 La publicación de un anuncio tiene un coste. La tarifa actual se muestra antes de la publicación.
-5.2 El pago se realiza exclusivamente en Monero (XMR).
+5.1 La publicación de un anuncio cuesta 1 USD (o equivalente en otra moneda) por una duración de 30 días. El operador se reserva el derecho de ajustar la tarifa.
+5.2 El pago se realiza en Monero (XMR) a través del procesador de pagos BTCPay Server. No se recopilan datos de pago personales.
5.3 Las tarifas pagadas no son reembolsables.
-5.4 Las transacciones entre usuarios son directas y sin intervención de la plataforma.
+5.4 Las transacciones entre usuarios son directas y sin participación de la plataforma. El operador no es parte contratante y no asume responsabilidad por los pagos entre usuarios.
6.1 La plataforma proporciona un chat cifrado de extremo a extremo. El operador no tiene acceso al contenido de los mensajes.
@@ -433,10 +433,10 @@ class PageTerms extends HTMLElement {4.3 Os anúncios são limitados a 30 dias e são automaticamente arquivados.
5.1 A publicação de um anúncio é paga. A taxa atual é exibida antes da publicação.
-5.2 O pagamento é feito exclusivamente em Monero (XMR).
+5.1 A publicação de um anúncio custa 1 USD (ou equivalente em outra moeda) por um período de 30 dias. O operador reserva-se o direito de ajustar a taxa.
+5.2 O pagamento é feito em Monero (XMR) através do processador de pagamentos BTCPay Server. Nenhum dado de pagamento pessoal é coletado.
5.3 As taxas pagas não são reembolsáveis.
-5.4 As transações entre usuários são diretas e sem envolvimento da plataforma.
+5.4 As transações entre usuários são diretas e sem envolvimento da plataforma. O operador não é parte contratante e não assume responsabilidade pelos pagamentos entre usuários.
6.1 A plataforma disponibiliza um chat criptografado de ponta a ponta. O operador não tem acesso ao conteúdo das mensagens.
@@ -507,10 +507,10 @@ class PageTerms extends HTMLElement {4.3 Объявления ограничены 30 днями и автоматически архивируются.
5.1 Публикация объявления является платной. Текущий тариф отображается перед публикацией.
-5.2 Оплата производится исключительно в Monero (XMR).
+5.1 Публикация объявления стоит 1 USD (или эквивалент в другой валюте) сроком на 30 дней. Оператор оставляет за собой право изменять тариф.
+5.2 Оплата производится в Monero (XMR) через платёжный сервис BTCPay Server. Персональные платёжные данные не собираются.
5.3 Оплаченные тарифы не подлежат возврату.
-5.4 Транзакции между пользователями осуществляются напрямую и без участия платформы.
+5.4 Транзакции между пользователями осуществляются напрямую и без участия платформы. Оператор не является стороной договора и не несёт ответственности за платежи между пользователями.
6.1 Платформа предоставляет чат со сквозным шифрованием. Оператор не имеет доступа к содержимому сообщений.
diff --git a/js/services/currency.js b/js/services/currency.js index 4287884..ea741d7 100644 --- a/js/services/currency.js +++ b/js/services/currency.js @@ -1,10 +1,12 @@ /** * Currency Service - XMR/Fiat Conversion * - * Uses CoinGecko API for real-time exchange rates (CORS-friendly) + * Primary: Kraken API (no key required, reliable) + * Fallback: CoinGecko API * Supports two modes: fiat-fix and xmr-fix */ +const KRAKEN_API = 'https://api.kraken.com/0/public/Ticker' const COINGECKO_API = 'https://api.coingecko.com/api/v3/simple/price' const CURRENCY_SYMBOLS = { @@ -90,25 +92,68 @@ export async function getXmrRates() { async function fetchRates() { lastRequestTime = Date.now() - + + // Try Kraken first, then CoinGecko as fallback + const rates = await fetchFromKraken() || await fetchFromCoinGecko() + + if (rates) { + cachedRates = rates + cacheTimestamp = Date.now() + saveToStorage() + return rates + } + + return cachedRates || getDefaultRates() +} + +async function fetchFromKraken() { + try { + const pairs = 'XMREUR,XMRUSD,XMRGBP,XMRJPY' + const response = await fetch(`${KRAKEN_API}?pair=${pairs}`) + if (!response.ok) return null + + const data = await response.json() + if (data.error?.length > 0) return null + + const r = data.result + const getPrice = (key) => { + const entry = r[key] + return entry ? parseFloat(entry.c[0]) : null + } + + const eur = getPrice('XXMRZEUR') || getPrice('XMREUR') + const usd = getPrice('XXMRZUSD') || getPrice('XMRUSD') + const gbp = getPrice('XXMRGBP') || getPrice('XMRGBP') + const jpy = getPrice('XXMRJPY') || getPrice('XMRJPY') + + if (!eur || !usd) return null + + // Kraken doesn't have CHF/RUB/BRL pairs for XMR — derive from EUR + const chf = eur * 0.97 + const rub = eur * 100 + const brl = usd * 5.5 + + return { EUR: eur, USD: usd, GBP: gbp || eur * 0.86, CHF: chf, JPY: jpy || eur * 162, RUB: rub, BRL: brl } + } catch (e) { + console.warn('Kraken API failed, trying CoinGecko:', e.message) + return null + } +} + +async function fetchFromCoinGecko() { try { const currencies = 'eur,usd,gbp,chf,jpy,rub,brl' const response = await fetch(`${COINGECKO_API}?ids=monero&vs_currencies=${currencies}`) - - // Handle rate limit response + if (response.status === 429) { - console.warn('CoinGecko rate limit hit, using cached rates') - return cachedRates || getDefaultRates() + console.warn('CoinGecko rate limit hit') + return null } - + const data = await response.json() + if (!data.monero) return null - if (!data.monero) { - console.error('CoinGecko API Error: No data returned') - return cachedRates || getDefaultRates() - } - - const rates = { + return { EUR: data.monero.eur, USD: data.monero.usd, GBP: data.monero.gbp, @@ -117,16 +162,9 @@ async function fetchRates() { RUB: data.monero.rub, BRL: data.monero.brl } - - // Update cache - cachedRates = rates - cacheTimestamp = Date.now() - saveToStorage() - - return rates - } catch (error) { - console.error('Failed to fetch XMR rates:', error) - return cachedRates || getDefaultRates() + } catch (e) { + console.error('CoinGecko API failed:', e.message) + return null } } diff --git a/locales/de.json b/locales/de.json index 44a3202..513e3ad 100644 --- a/locales/de.json +++ b/locales/de.json @@ -155,6 +155,8 @@ "moneroHint": "Käufer senden die Zahlung direkt an diese Adresse.", "cancel": "Abbrechen", "publish": "Veröffentlichen", + "publishPaid": "Kostenpflichtig veröffentlichen", + "publishFeeHint": "Für die Veröffentlichung wird eine Gebühr von 1\u00a0USD fällig, zahlbar mit Monero.", "publishing": "Wird veröffentlicht...", "saveChanges": "Änderungen speichern", "saving": "Wird gespeichert...", diff --git a/locales/en.json b/locales/en.json index fa0edd8..9e086b7 100644 --- a/locales/en.json +++ b/locales/en.json @@ -155,6 +155,8 @@ "moneroHint": "Buyers will send payment directly to this address.", "cancel": "Cancel", "publish": "Publish", + "publishPaid": "Publish (paid)", + "publishFeeHint": "A listing fee of $1 applies, payable with Monero.", "publishing": "Publishing...", "saveChanges": "Save Changes", "saving": "Saving...", diff --git a/locales/es.json b/locales/es.json index a3d9071..100f9e1 100644 --- a/locales/es.json +++ b/locales/es.json @@ -155,6 +155,8 @@ "moneroHint": "Los compradores enviarán el pago directamente a esta dirección.", "cancel": "Cancelar", "publish": "Publicar", + "publishPaid": "Publicar (de pago)", + "publishFeeHint": "Se aplica una tarifa de publicación de 1\u00a0USD, pagable con Monero.", "publishing": "Publicando...", "saveChanges": "Guardar cambios", "saving": "Guardando...", diff --git a/locales/fr.json b/locales/fr.json index b036ba0..f9fa0fb 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -155,6 +155,8 @@ "moneroHint": "Les acheteurs envoient le paiement directement à cette adresse.", "cancel": "Annuler", "publish": "Publier", + "publishPaid": "Publier (payant)", + "publishFeeHint": "Des frais de publication de 1\u00a0USD s'appliquent, payables en Monero.", "publishing": "Publication en cours...", "saveChanges": "Enregistrer les modifications", "saving": "Enregistrement...", diff --git a/locales/it.json b/locales/it.json index 5107ca6..d5b3884 100644 --- a/locales/it.json +++ b/locales/it.json @@ -155,6 +155,8 @@ "moneroHint": "Gli acquirenti invieranno il pagamento direttamente a questo indirizzo.", "cancel": "Annulla", "publish": "Pubblica", + "publishPaid": "Pubblica (a pagamento)", + "publishFeeHint": "Per la pubblicazione è previsto un costo di 1\u00a0USD, pagabile in Monero.", "publishing": "Pubblicazione in corso...", "saveChanges": "Salva modifiche", "saving": "Salvataggio...", diff --git a/locales/pt.json b/locales/pt.json index f119d08..d6fba47 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -155,6 +155,8 @@ "moneroHint": "Os compradores enviarão o pagamento diretamente para este endereço.", "cancel": "Cancelar", "publish": "Publicar", + "publishPaid": "Publicar (pago)", + "publishFeeHint": "Aplica-se uma taxa de publicação de 1\u00a0USD, pagável com Monero.", "publishing": "Publicando...", "saveChanges": "Salvar Alterações", "saving": "Salvando...", diff --git a/locales/ru.json b/locales/ru.json index 02b1980..6f130f9 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -155,6 +155,8 @@ "moneroHint": "Покупатели отправят оплату напрямую на этот адрес.", "cancel": "Отмена", "publish": "Опубликовать", + "publishPaid": "Опубликовать (платно)", + "publishFeeHint": "За публикацию взимается плата 1\u00a0USD, оплата в Monero.", "publishing": "Публикация...", "saveChanges": "Сохранить изменения", "saving": "Сохранение...",