diff options
| author | Adam Soltys <[email protected]> | 2026-11-04 14:29:35 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-11-04 14:38:48 -0700 |
| commit | a5ff626228b35ef587f6b9493998184e3e8354fe (patch) | |
| tree | f15d2726fbd391bbd3c4a3a1ca2826ff6c6ac2bd /src | |
| parent | 976473a781f1bcda7ba02fee9db122e163243e2b (diff) | |
| download | coinos-ui-a5ff626228b35ef587f6b9493998184e3e8354fe.tar.gz coinos-ui-a5ff626228b35ef587f6b9493998184e3e8354fe.zip | |
A Delete account entry on the security tab leads to /settings/delete,
which warns what's lost, asks for the username (and PIN when set) and
calls the server's POST /delete, then logs out. The page resets to the
(app) layout so its form isn't nested in the settings save form.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/locales/ar.json | 8 | ||||
| -rw-r--r-- | src/locales/bn.json | 8 | ||||
| -rw-r--r-- | src/locales/de.json | 8 | ||||
| -rw-r--r-- | src/locales/el.json | 8 | ||||
| -rw-r--r-- | src/locales/en.json | 20 | ||||
| -rw-r--r-- | src/locales/es.json | 8 | ||||
| -rw-r--r-- | src/locales/fa.json | 8 | ||||
| -rw-r--r-- | src/locales/fr.json | 8 | ||||
| -rw-r--r-- | src/locales/hi.json | 8 | ||||
| -rw-r--r-- | src/locales/it.json | 8 | ||||
| -rw-r--r-- | src/locales/ja.json | 8 | ||||
| -rw-r--r-- | src/locales/ko.json | 8 | ||||
| -rw-r--r-- | src/locales/nl.json | 8 | ||||
| -rw-r--r-- | src/locales/pl.json | 8 | ||||
| -rw-r--r-- | src/locales/pt.json | 8 | ||||
| -rw-r--r-- | src/locales/ru.json | 8 | ||||
| -rw-r--r-- | src/locales/th.json | 8 | ||||
| -rw-r--r-- | src/locales/tr.json | 8 | ||||
| -rw-r--r-- | src/locales/zh.json | 8 | ||||
| -rw-r--r-- | src/routes/(app)/settings/delete/+page.server.ts | 26 | ||||
| -rw-r--r-- | src/routes/(app)/settings/delete/+page@(app).svelte | 82 | ||||
| -rw-r--r-- | src/routes/(app)/settings/security/+page.svelte | 11 |
22 files changed, 258 insertions, 25 deletions
diff --git a/src/locales/ar.json b/src/locales/ar.json index 234e076f..f4fc0ea6 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -386,7 +386,13 @@ "continueSettingUp": "إنشاء حساب", "publishOffer": "النشر إلى نوستر", "offerPublished": "نُشرت!", - "offerPublishFailed": "عدم نشر العرض" + "offerPublishFailed": "عدم نشر العرض", + "deleteAccount": "الحساب", + "deleteAccountDescription": "دائماً أحذف حسابك وجميع بياناته.", + "deleteAccountWarning": "هذا يحذف دائما حسابك، تاريخ الدفع، الفواتير، الحسابات الفرعية، الاتصالات والتذاكر ذات الصلة. إسمك و عنوان البرق سيتوقفان عن العمل هذا لا يمكن أن يزول.", + "deleteAccountBalance": "سحب توازنك أولا. ولا يمكن حذف حسابات تحمل أكثر من 000 10 جلس.", + "deleteAccountConfirm": "قومي بتصنيف اسم مستخدمك لتأكيد", + "deleteAccountButton": "يحذف حسابي إلى الأبد" }, "support": { "header": "الدعم", diff --git a/src/locales/bn.json b/src/locales/bn.json index f6d4d87e..5a3baad5 100644 --- a/src/locales/bn.json +++ b/src/locales/bn.json @@ -386,7 +386,13 @@ "continueSettingUp": "অ্যাকাউন্ট সেটআপ", "publishOffer": "চিহ্নিত স্থানে প্রকাশ করুন", "offerPublished": "প্রকাশিত!", - "offerPublishFailed": "প্রকাশ করতে ব্যর্থ" + "offerPublishFailed": "প্রকাশ করতে ব্যর্থ", + "deleteAccount": "অ্যাকাউন্ট মুছে ফেলুন", + "deleteAccountDescription": "আপনার অ্যাকাউন্ট ও এর তথ্য স্থায়ীরূপে মুছে ফেলুন।.", + "deleteAccountWarning": "এটি আপনার অ্যাকাউন্ট মুছে ফেলে, আপনার পেমেন্ট ইতিহাস, ভয়েসে, সাব- অভিভাবক, যোগাযোগ এবং সংযুক্ত অ্যাপগুলোর মধ্যে। আপনার ব্যবহারকারীর নাম এবং ঠিকানার ক্ষেত্রেও প্রযোজ্য । এই কাজ নাকচ করা যাবে না।.", + "deleteAccountBalance": "প্রথমে ভারসাম্য খুলে ফেলো। অ্যাকাউন্ট রাখা যাবে না ১০,০০০ এরও বেশি।.", + "deleteAccountConfirm": "নিশ্চিত করার জন্য আপনার ব্যবহারকারীর নাম লিখুন", + "deleteAccountButton": "আমার অ্যাকাউন্ট সর্বদা মুছে ফেলা হবে" }, "support": { "header": "সহায়তা", diff --git a/src/locales/de.json b/src/locales/de.json index 3dfa1300..9e92b242 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -336,7 +336,13 @@ "continueSettingUp": "Konto einrichten", "publishOffer": "Veröffentlichen an nostr", "offerPublished": "Veröffentlicht!", - "offerPublishFailed": "Das Angebot konnte nicht veröffentlicht werden" + "offerPublishFailed": "Das Angebot konnte nicht veröffentlicht werden", + "deleteAccount": "Konto löschen", + "deleteAccountDescription": "Löschen Sie Ihr Konto und alle seine Daten dauerhaft.", + "deleteAccountWarning": "Dadurch werden Ihr Konto, Ihr Zahlungsverlauf, Rechnungen, Unterkonten, Kontakte und verbundene Apps dauerhaft gelöscht. Ihr Benutzername und Ihre Blitzadresse wird aufhören zu arbeiten. Das kann nicht rückgängig gemacht werden.", + "deleteAccountBalance": "Ziehen Sie zuerst Ihr Gleichgewicht. Konten mit mehr als 10.000 Sats können nicht gelöscht werden.", + "deleteAccountConfirm": "Geben Sie Ihren Benutzernamen ein, um zu bestätigen", + "deleteAccountButton": "Mein Konto für immer löschen" }, "support": { "header": "Support", diff --git a/src/locales/el.json b/src/locales/el.json index c6ab9878..ef6ba4e7 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -337,7 +337,13 @@ "continueSettingUp": "Setup λογαριασμού", "publishOffer": "Δημοσίευση στη μύτη", "offerPublished": "Εκδίδεται!", - "offerPublishFailed": "Αποτυχία δημοσίευσης της προσφοράς" + "offerPublishFailed": "Αποτυχία δημοσίευσης της προσφοράς", + "deleteAccount": "Διαγραφή λογαριασμού", + "deleteAccountDescription": "Διαγράψτε μόνιμα το λογαριασμό σας και όλα τα δεδομένα του.", + "deleteAccountWarning": "Αυτό διαγράφει μόνιμα το λογαριασμό σας, το ιστορικό πληρωμών σας, τιμολόγια, υπολογαριασμούς, επαφές και συνδεδεμένες εφαρμογές. Το όνομα χρήστη και η διεύθυνση αστραπής θα σταματήσουν να λειτουργούν. Αυτό δεν μπορεί να αναιρεθεί.", + "deleteAccountBalance": "Αποσύρετε την ισορροπία σας πρώτα. Οι λογαριασμοί που κατέχουν περισσότερους από 10.000 λογαριασμούς δεν μπορούν να διαγραφούν.", + "deleteAccountConfirm": "Πληκτρολογήστε το όνομα χρήστη για επιβεβαίωση", + "deleteAccountButton": "Διαγραφή του λογαριασμού μου για πάντα" }, "support": { "header": "Υποστήριξη", diff --git a/src/locales/en.json b/src/locales/en.json index 39dc613c..f3e66bed 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -294,10 +294,10 @@ "placeholder": "Enter an address, invoice or username" }, "settings": { - "connectSquare": "Connect to Square", - "revokeSquare": "Revoke Square Connection", - "confirmAutoWithdrawal": "Confirm auto withdrawal settings", - "confirmAutoWithdrawalDesc": "Your auto withdrawals have been disabled. Please double check your destination address before re-enabling them or remove the address to dismiss this message.", + "connectSquare": "Connect to Square", + "revokeSquare": "Revoke Square Connection", + "confirmAutoWithdrawal": "Confirm auto withdrawal settings", + "confirmAutoWithdrawalDesc": "Your auto withdrawals have been disabled. Please double check your destination address before re-enabling them or remove the address to dismiss this message.", "tip": "Default tip", "tipDesc": "Default tip percentage when auto-paying trusted users", "nostr": "Nostr", @@ -362,7 +362,7 @@ "yourUsername": "Your username is:", "yourPassword": "Your password is:", "welcome": "Welcome!", - "continueSettingUp": "Account setup", + "continueSettingUp": "Account setup", "clickBelow": "Click below to finish setting up your account", "about": "About", "aboutPlaceholder": "A little something about you or your business address and hours", @@ -406,7 +406,13 @@ "disablePIN": "Disable PIN", "publishNip5": "Publish nostr identity", "nip5a": "Use", - "nip5b": "as your publicly verified nostr address" + "nip5b": "as your publicly verified nostr address", + "deleteAccount": "Delete account", + "deleteAccountDescription": "Permanently delete your account and all of its data.", + "deleteAccountWarning": "This permanently deletes your account, your payment history, invoices, sub-accounts, contacts and connected apps. Your username and lightning address will stop working. This cannot be undone.", + "deleteAccountBalance": "Withdraw your balance first. Accounts holding more than 10,000 sats cannot be deleted.", + "deleteAccountConfirm": "Type your username to confirm", + "deleteAccountButton": "Delete my account forever" }, "support": { "fillForm": "Fill out this form or email us directly at", @@ -421,7 +427,7 @@ } }, "payments": { - "custom": "Custom", + "custom": "Custom", "trustUser": "Send and enable auto-pay", "gift": "Gift all funds", "giftLink": "Gift link", diff --git a/src/locales/es.json b/src/locales/es.json index f85cee80..6beeb57f 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -327,7 +327,13 @@ "continueSettingUp": "Configuración de la cuenta", "publishOffer": "Publish to nostr", "offerPublished": "¡Publicado!", - "offerPublishFailed": "Failed to publish offer" + "offerPublishFailed": "Failed to publish offer", + "deleteAccount": "Suprimir la cuenta", + "deleteAccountDescription": "Eliminar permanentemente su cuenta y todos sus datos.", + "deleteAccountWarning": "Esto elimina permanentemente su cuenta, su historial de pagos, facturas, subcuentas, contactos y aplicaciones conectadas. Su nombre de usuario y dirección de relámpago dejarán de funcionar. Esto no puede ser deshecho.", + "deleteAccountBalance": "Retire su equilibrio primero. No se pueden eliminar las cuentas con más de 10.000 sats.", + "deleteAccountConfirm": "Escriba su nombre de usuario para confirmar", + "deleteAccountButton": "Suprimir mi cuenta para siempre" }, "support": { "header": "Soporte", diff --git a/src/locales/fa.json b/src/locales/fa.json index ddd4bcca..312366b0 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -325,7 +325,13 @@ "continueSettingUp": "تنظیم حساب", "publishOffer": "انتشار به Nostr", "offerPublished": "منتشر شده!", - "offerPublishFailed": "شکست در انتشار پیشنهاد" + "offerPublishFailed": "شکست در انتشار پیشنهاد", + "deleteAccount": "حذف حساب", + "deleteAccountDescription": "به طور مداوم حساب خود و تمام داده های آن را حذف کنید.", + "deleteAccountWarning": "این به طور دائمی حساب شما، تاریخچه پرداخت، فاکتورها، حساب های فرعی، تماس ها و برنامه های متصل را حذف می کند. نام کاربری و آدرس رعد و برق شما کار را متوقف خواهد کرد. این را نمی توان رد کرد.", + "deleteAccountBalance": "ابتدا تعادل خود را برطرف کنید. حساب هایی که بیش از ۱۰۰۰۰ جلسه دارند، نمی توانند حذف شوند.", + "deleteAccountConfirm": "نام کاربری خود را برای تأیید", + "deleteAccountButton": "حذف حساب من برای همیشه" }, "support": { "header": "حمایت کردن", diff --git a/src/locales/fr.json b/src/locales/fr.json index 702bd3dc..994fca47 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -294,7 +294,13 @@ "continueSettingUp": "Configuration du compte", "publishOffer": "Publier sur nosr", "offerPublished": "Publié !", - "offerPublishFailed": "Échec de la publication de l'offre" + "offerPublishFailed": "Échec de la publication de l'offre", + "deleteAccount": "Supprimer le compte", + "deleteAccountDescription": "Supprimer définitivement votre compte et toutes ses données.", + "deleteAccountWarning": "Cela supprime définitivement votre compte, votre historique de paiement, factures, sous-comptes, contacts et applications connectées. Votre nom d'utilisateur et votre adresse de foudre cesseront de fonctionner. Cela ne peut être annulé.", + "deleteAccountBalance": "Retirez d'abord votre équilibre. Les comptes de plus de 10 000 sats ne peuvent être supprimés.", + "deleteAccountConfirm": "Saisissez votre nom d'utilisateur pour confirmer", + "deleteAccountButton": "Supprimer mon compte pour toujours" }, "support": { "header": "Assistance", diff --git a/src/locales/hi.json b/src/locales/hi.json index 05049011..ad54d50c 100644 --- a/src/locales/hi.json +++ b/src/locales/hi.json @@ -386,7 +386,13 @@ "continueSettingUp": "खाता सेटअप", "publishOffer": "Nostr को प्रकाशित करना", "offerPublished": "प्रकाशित!", - "offerPublishFailed": "प्रस्ताव को प्रकाशित करने में विफल" + "offerPublishFailed": "प्रस्ताव को प्रकाशित करने में विफल", + "deleteAccount": "खाता हटाएं", + "deleteAccountDescription": "अपने खाते और उसके सभी डेटा को स्थायी रूप से हटा दें।.", + "deleteAccountWarning": "यह स्थायी रूप से आपके खाते, आपके भुगतान इतिहास, चालान, उप-खाता, संपर्क और जुड़े ऐप्स को हटा देता है। आपका उपयोगकर्ता नाम और बिजली पता काम करना बंद कर देगा। यह नहीं हो सकता है।.", + "deleteAccountBalance": "पहले अपनी शेष राशि वापस लें। 10,000 से अधिक सत्संग रखने वाले खातों को हटाया नहीं जा सकता है।.", + "deleteAccountConfirm": "पुष्टि करने के लिए अपने उपयोगकर्ता नाम टाइप करें", + "deleteAccountButton": "मेरे खाते को हमेशा के लिए हटा दें" }, "support": { "header": "समर्थन", diff --git a/src/locales/it.json b/src/locales/it.json index 0bab970b..f6c3af6d 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -386,7 +386,13 @@ "continueSettingUp": "Configurazione account", "publishOffer": "Pubblica a nostr", "offerPublished": "Pubblicato!", - "offerPublishFailed": "Non pubblicare l'offerta" + "offerPublishFailed": "Non pubblicare l'offerta", + "deleteAccount": "Cancella account", + "deleteAccountDescription": "Cancellare permanentemente il tuo account e tutti i suoi dati.", + "deleteAccountWarning": "Questo elimina definitivamente il tuo account, la cronologia dei pagamenti, fatture, sub-account, contatti e app collegate. Il tuo nome utente e il tuo indirizzo fulmine smetteranno di funzionare. Questo non può essere annullato.", + "deleteAccountBalance": "Ritira prima il tuo equilibrio. I conti con più di 10.000 sati non possono essere eliminati.", + "deleteAccountConfirm": "Digitare il nome utente per confermare", + "deleteAccountButton": "Cancella il mio account per sempre" }, "support": { "header": "Supporto", diff --git a/src/locales/ja.json b/src/locales/ja.json index 50bde442..4e0713c4 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -325,7 +325,13 @@ "continueSettingUp": "アカウント設定", "publishOffer": "Nostr に公開", "offerPublished": "掲載情報!", - "offerPublishFailed": "オファーを公開できなかった" + "offerPublishFailed": "オファーを公開できなかった", + "deleteAccount": "アカウントの削除", + "deleteAccountDescription": "永続的にアカウントとすべてのデータを削除します.", + "deleteAccountWarning": "これにより、アカウント、支払い履歴、請求書、サブアカウント、連絡先、接続されたアプリが永久に削除されます。 ユーザー名と落雷アドレスは、作業を停止します。 これは元に戻すことができません.", + "deleteAccountBalance": "まずは残高を引き出します。 10,000以上のサットを保持するアカウントは削除できません.", + "deleteAccountConfirm": "ユーザー名を入力してください", + "deleteAccountButton": "アカウントを永遠に削除する" }, "support": { "header": "サポート", diff --git a/src/locales/ko.json b/src/locales/ko.json index f67191db..a497a23e 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -386,7 +386,13 @@ "continueSettingUp": "계정 설정", "publishOffer": "Nostr에 게시", "offerPublished": "이름 *!", - "offerPublishFailed": "게시 제안에 실패" + "offerPublishFailed": "게시 제안에 실패", + "deleteAccount": "계정 삭제", + "deleteAccountDescription": "영구적으로 계정과 모든 데이터를 삭제합니다.", + "deleteAccountWarning": "이 영구적으로 계정, 지불 내역, 청구서, 하위 계정, 연락처 및 연결된 앱을 삭제합니다. 사용자 이름과 번개 주소가 작동 중지됩니다. 이것은 undone일 수 없습니다.", + "deleteAccountBalance": "첫 잔액을 인출하십시오. 10,000개 이상의 통계를 보유한 계정은 삭제할 수 없습니다.", + "deleteAccountConfirm": "사용자 정의", + "deleteAccountButton": "내 계정 삭제" }, "support": { "header": "지원하다", diff --git a/src/locales/nl.json b/src/locales/nl.json index 875ea696..aada1962 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -386,7 +386,13 @@ "continueSettingUp": "Accountinstellingen", "publishOffer": "Publiceren naar nostr", "offerPublished": "Gepubliceerd!", - "offerPublishFailed": "Kon aanbod niet publiceren" + "offerPublishFailed": "Kon aanbod niet publiceren", + "deleteAccount": "Account verwijderen", + "deleteAccountDescription": "Verwijder permanent uw account en al zijn gegevens.", + "deleteAccountWarning": "Dit verwijdert permanent uw account, uw betalingsgeschiedenis, facturen, subrekeningen, contacten en verbonden apps. Uw gebruikersnaam en bliksem adres zal stoppen met werken. Dit kan niet ongedaan worden gemaakt.", + "deleteAccountBalance": "Trek eerst je balans terug. Rekeningen met meer dan 10.000 sats kunnen niet worden verwijderd.", + "deleteAccountConfirm": "Typ uw gebruikersnaam om te bevestigen", + "deleteAccountButton": "Mijn account voor altijd verwijderen" }, "support": { "header": "Ondersteuning", diff --git a/src/locales/pl.json b/src/locales/pl.json index 130df267..1bd264ee 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -386,7 +386,13 @@ "continueSettingUp": "Konfiguracja konta", "publishOffer": "Publikuj do nostr", "offerPublished": "Opublikowane!", - "offerPublishFailed": "Nie udało się opublikować oferty" + "offerPublishFailed": "Nie udało się opublikować oferty", + "deleteAccount": "Usuń konto", + "deleteAccountDescription": "Na stałe usuń swoje konto i wszystkie jego dane.", + "deleteAccountWarning": "To na stałe usuwa konto, historię płatności, faktury, subkonta, kontakty i połączone aplikacje. Twoja nazwa użytkownika i adres błyskawicy przestaną działać. Tego nie da się cofnąć.", + "deleteAccountBalance": "Najpierw wycofaj równowagę. Konta posiadające więcej niż 10 000 sat nie mogą zostać usunięte.", + "deleteAccountConfirm": "Wpisz nazwę użytkownika, aby potwierdzić", + "deleteAccountButton": "Usuń moje konto na zawsze" }, "support": { "header": "Wsparcie", diff --git a/src/locales/pt.json b/src/locales/pt.json index 56139fd4..04e40172 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -346,7 +346,13 @@ "continueSettingUp": "Configuração da conta", "publishOffer": "Publicar em nostr", "offerPublished": "Publicado!", - "offerPublishFailed": "Falha ao publicar a oferta" + "offerPublishFailed": "Falha ao publicar a oferta", + "deleteAccount": "Apagar conta", + "deleteAccountDescription": "Exclua permanentemente sua conta e todos os seus dados.", + "deleteAccountWarning": "Isso exclui permanentemente sua conta, seu histórico de pagamento, faturas, subcontas, contatos e aplicativos conectados. Seu nome de usuário e endereço relâmpago vai parar de funcionar. Isto não pode ser desfeito.", + "deleteAccountBalance": "Retira o teu equilíbrio primeiro. Contas com mais de 10.000 sats não podem ser apagadas.", + "deleteAccountConfirm": "Digite seu nome de usuário para confirmar", + "deleteAccountButton": "Apagar a minha conta para sempre" }, "support": { "header": "Suporte", diff --git a/src/locales/ru.json b/src/locales/ru.json index cd170ee3..4abf4945 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -325,7 +325,13 @@ "continueSettingUp": "Настройка аккаунта", "publishOffer": "Опубликовать в Nostr", "offerPublished": "Опубликовано!", - "offerPublishFailed": "Не удалось опубликовать предложение" + "offerPublishFailed": "Не удалось опубликовать предложение", + "deleteAccount": "Удалить аккаунт", + "deleteAccountDescription": "Постоянно удаляйте свою учетную запись и все ее данные.", + "deleteAccountWarning": "Это навсегда удаляет вашу учетную запись, историю платежей, счета-фактуры, субсчета, контакты и подключенные приложения. Имя пользователя и адрес молнии перестанут работать. Это нельзя отменить.", + "deleteAccountBalance": "Сначала снимите свой баланс. Учетные записи, содержащие более 10 000 сат, не могут быть удалены.", + "deleteAccountConfirm": "Введите свое имя пользователя, чтобы подтвердить", + "deleteAccountButton": "Удалить свой аккаунт навсегда" }, "support": { "header": "Поддержка", diff --git a/src/locales/th.json b/src/locales/th.json index 1fc20cc3..207db8b4 100644 --- a/src/locales/th.json +++ b/src/locales/th.json @@ -386,7 +386,13 @@ "continueSettingUp": "ตั้งค่าบัญชีผู้ใช้", "publishOffer": "เผยแพร่ไปยังโหนด", "offerPublished": "ตีพิมพ์!", - "offerPublishFailed": "ล้มเหลวในการเผยแพร่ข้อเสนอ" + "offerPublishFailed": "ล้มเหลวในการเผยแพร่ข้อเสนอ", + "deleteAccount": "ลบบัญชีผู้ใช้", + "deleteAccountDescription": "ลบบัญชีและข้อมูลทั้งหมดอย่างถาวร.", + "deleteAccountWarning": "นี่จะเป็นการลบบัญชีผู้ใช้ของคุณอย่างถาวร, ประวัติการจ่ายเงินของคุณ, ใบแจ้งหนี้, บัญชีย่อย, ที่อยู่ติดต่อ และโปรแกรมที่เชื่อมต่ออยู่ ชื่อผู้ใช้และที่อยู่ฟ้าผ่าของคุณจะหยุดการทํางาน นี่ไม่สามารถยกเลิกได้.", + "deleteAccountBalance": "ดึงความสมดุลของคุณก่อน บัญชี ที่ มี มาก กว่า 10,000 ที่นั่ง ไม่ อาจ ลบ ได้.", + "deleteAccountConfirm": "พิมพ์ชื่อผู้ใช้ของคุณเพื่อยืนยัน", + "deleteAccountButton": "ลบบัญชีผู้ใช้ของฉันตลอดไป" }, "support": { "header": "สนับสนุน", diff --git a/src/locales/tr.json b/src/locales/tr.json index 9bba1a45..a51877a1 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -386,7 +386,13 @@ "continueSettingUp": "Hesap kurulumu", "publishOffer": "Nostr", "offerPublished": "Yayınlanmış!", - "offerPublishFailed": "Yayımlama teklifinde başarısız oldu" + "offerPublishFailed": "Yayımlama teklifinde başarısız oldu", + "deleteAccount": "Delete hesabı", + "deleteAccountDescription": "Sürekli olarak hesabınızı ve tüm verilerini sil.", + "deleteAccountWarning": "Bu, hesabınızı kalıcı olarak silir, ödeme tarihiniz, faturalar, alt hesaplar, kontaklar ve bağlantılı uygulamalar. Kullanıcınız ve yıldırım adresiniz çalışmayı durduracaktır. Bu geri alınmaz.", + "deleteAccountBalance": "İlk önce bakiyenizi çizin. 10.000'den fazla oturma tutan hesaplar silinemez.", + "deleteAccountConfirm": "Kullanıcı adınızı doğrulamak için", + "deleteAccountButton": "Hesabımı sonsuza dek" }, "support": { "header": "Destek Desteği Destek Desteği", diff --git a/src/locales/zh.json b/src/locales/zh.json index f72ac733..e899debf 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -325,7 +325,13 @@ "continueSettingUp": "账户设置", "publishOffer": "发布到节点", "offerPublished": "发表!", - "offerPublishFailed": "发布要约失败" + "offerPublishFailed": "发布要约失败", + "deleteAccount": "删除账户", + "deleteAccountDescription": "永久删除您的账户和所有数据 .", + "deleteAccountWarning": "这将永久删除您的账户、 支付历史、 发票、 子账户、 联系人和连接的应用程序 。 您的用户名和闪电地址将停止工作 。 这一点是无法消除的.", + "deleteAccountBalance": "先收回你的余额 持有超过一万个卫星的账户不能被删除.", + "deleteAccountConfirm": "输入您的用户名以确认", + "deleteAccountButton": "永远删除我的账户" }, "support": { "header": "支持", diff --git a/src/routes/(app)/settings/delete/+page.server.ts b/src/routes/(app)/settings/delete/+page.server.ts new file mode 100644 index 00000000..05f4f026 --- /dev/null +++ b/src/routes/(app)/settings/delete/+page.server.ts @@ -0,0 +1,26 @@ +import { auth, post } from "$lib/utils"; +import { fail, redirect } from "@sveltejs/kit"; + +export async function load({ parent, url }) { + const { user } = await parent(); + if (!user) redirect(307, `/login?redirect=${encodeURIComponent(url.pathname)}`); +} + +export const actions = { + default: async ({ cookies, request }) => { + const form = await request.formData(); + const confirm = String(form.get("confirm") || ""); + const pin = String(form.get("pin") || ""); + + try { + // The server wipes everything (lib/deluser), including disabling the + // account's bolt12 offers, and refuses while a real balance remains. + await post("/delete", { confirm, ...(pin ? { pin } : {}) }, auth(cookies)); + } catch (e) { + return fail(400, { error: e?.message || String(e), confirm }); + } + + // The account is gone; /logout clears the session cookies. + redirect(303, "/logout"); + }, +}; diff --git a/src/routes/(app)/settings/delete/+page@(app).svelte b/src/routes/(app)/settings/delete/+page@(app).svelte new file mode 100644 index 00000000..e19a6604 --- /dev/null +++ b/src/routes/(app)/settings/delete/+page@(app).svelte @@ -0,0 +1,82 @@ +<script> + // Rendered outside the settings layout (+page@(app)) so this form isn't + // nested inside the settings save form. + import { enhance } from "$app/forms"; + import { t } from "$lib/translations"; + + let { data, form } = $props(); + let { user } = $derived(data); + + let confirm = $state(form?.confirm || ""); + let working = $state(false); + let matches = $derived( + confirm.trim().toLowerCase() === user.username.toLowerCase(), + ); +</script> + +<div class="container px-4 max-w-xl mx-auto space-y-5 mt-10"> + <h1 class="text-3xl font-bold text-center"> + {$t("user.settings.deleteAccount")} + </h1> + + <div class="rounded-2xl border-2 border-error p-4 space-y-3"> + <p class="flex gap-2"> + <iconify-icon + noobserver + icon="ph:warning-bold" + width="24" + class="text-error shrink-0" + ></iconify-icon> + <span>{$t("user.settings.deleteAccountWarning")}</span> + </p> + <p class="text-secondary">{$t("user.settings.deleteAccountBalance")}</p> + </div> + + {#if form?.error}<p class="text-error">{form.error}</p>{/if} + + <form + method="POST" + class="space-y-3" + use:enhance={() => { + working = true; + return async ({ update }) => { + await update({ reset: false }); + working = false; + }; + }} + > + <label class="block space-y-1"> + <span class="font-bold">{$t("user.settings.deleteAccountConfirm")}</span> + <input + class="input input-bordered w-full" + name="confirm" + autocomplete="off" + autocapitalize="off" + spellcheck="false" + placeholder={user.username} + bind:value={confirm} + /> + </label> + + {#if user.haspin} + <input + class="input input-bordered w-full" + type="password" + inputmode="numeric" + name="pin" + placeholder={$t("user.settings.securityPIN")} + /> + {/if} + + <button + class="btn btn-error w-full rounded-2xl" + disabled={!matches || working} + > + <iconify-icon noobserver icon="ph:trash-bold" width="24"></iconify-icon> + {$t("user.settings.deleteAccountButton")} + </button> + <a href="/settings/security" class="btn w-full rounded-2xl"> + {$t("payments.cancel")} + </a> + </form> +</div> diff --git a/src/routes/(app)/settings/security/+page.svelte b/src/routes/(app)/settings/security/+page.svelte index b774d919..b8c71aa6 100644 --- a/src/routes/(app)/settings/security/+page.svelte +++ b/src/routes/(app)/settings/security/+page.svelte @@ -288,3 +288,14 @@ </button> </a> </div> + +<div> + <span class="font-bold mb-1">{$t("user.settings.deleteAccount")}</span> + <p class="text-secondary mb-4"> + {$t("user.settings.deleteAccountDescription")} + </p> + <a href="/settings/delete" class="btn btn-outline btn-error"> + <iconify-icon noobserver icon="ph:trash-bold" width="32"></iconify-icon> + {$t("user.settings.deleteAccount")} + </a> +</div> |
