From b9844f48f176a0f0687faaed0559ed5287224366 Mon Sep 17 00:00:00 2001 From: Shjosan Date: Wed, 21 Jan 2026 22:40:49 +0100 Subject: [PATCH 1/8] Translated using Weblate (Swedish) Currently translated at 100.0% (407 of 407 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sv/ --- web/public/static/langs/sv.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/sv.json b/web/public/static/langs/sv.json index 8dc5c928..abcf94d6 100644 --- a/web/public/static/langs/sv.json +++ b/web/public/static/langs/sv.json @@ -403,5 +403,7 @@ "web_push_subscription_expiring_body": "Öppna ntfy för att fortsätta ta emot notifikationer", "web_push_unknown_notification_body": "Du kan behöva uppdatera ntfy genom att öppna webbappen", "prefs_notifications_web_push_disabled_description": "Meddelanden tas emot när webbappen körs (via WebSocket)", - "web_push_unknown_notification_title": "Okänd notifikation mottagen från server" + "web_push_unknown_notification_title": "Okänd notifikation mottagen från server", + "account_basics_cannot_edit_or_delete_provisioned_user": "En provisionerad användare kan inte redigeras eller tas bort", + "account_tokens_table_cannot_delete_or_edit_provisioned_token": "Kan inte redigera eller ta bort en provisionerad token" } From 64309c01015e4cf2ba025cb6a72ff6aa365a1105 Mon Sep 17 00:00:00 2001 From: jonnysemon Date: Fri, 23 Jan 2026 19:55:04 +0100 Subject: [PATCH 2/8] Translated using Weblate (Arabic) Currently translated at 88.9% (362 of 407 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ar/ --- web/public/static/langs/ar.json | 146 ++++++++++++++++---------------- 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index 158fa926..d0c1e4b6 100644 --- a/web/public/static/langs/ar.json +++ b/web/public/static/langs/ar.json @@ -1,18 +1,18 @@ { "action_bar_logo_alt": "شعار ntfy", "action_bar_settings": "اﻹعدادات", - "action_bar_clear_notifications": "محو كافة الإشعارات", + "action_bar_clear_notifications": "امحُ كل الإشعارات", "action_bar_unsubscribe": "إلغاء الاشتراك", "message_bar_show_dialog": "إظهار مربع حوار النشر", "message_bar_publish": "نشر الرسالة", - "nav_topics_title": "المواضيع التي تم الاشتراك فيها", - "nav_button_all_notifications": "كافة الإشعارات", + "nav_topics_title": "المواضيع المشترك فيها", + "nav_button_all_notifications": "كل الإشعارات", "nav_button_settings": "اﻹعدادات", "nav_button_documentation": "الدليل", "nav_button_publish_message": "نشر الإشعار", "nav_button_subscribe": "اشترك في الموضوع", "nav_button_connecting": "جارٍ الاتصال", - "alert_notification_permission_required_title": "تم تعطيل الإشعارات", + "alert_notification_permission_required_title": "عُطّلت الإشعارات", "alert_notification_permission_required_description": "امنح متصفحك الإذن لعرض إشعارات سطح المكتب.", "notifications_list": "قائمة الإشعارات", "notifications_list_item": "إشعار", @@ -21,7 +21,7 @@ "notifications_priority_x": "الأولوية {{priority}}", "notifications_new_indicator": "إشعار جديد", "notifications_attachment_image": "صورة مرفقة", - "notifications_attachment_copy_url_button": "نسخ عنوان URL", + "notifications_attachment_copy_url_button": "انسخ عنوان URL", "notifications_attachment_open_title": "انتقل إلى {{url}}", "notifications_attachment_link_expires": "تنتهي صلاحية الرابط {{date}}", "notifications_attachment_link_expired": "انتهت صلاحية رابط التنزيل", @@ -30,23 +30,23 @@ "notifications_attachment_file_audio": "ملف صوتي", "notifications_attachment_file_app": "ملف تطبيق Android", "notifications_attachment_file_document": "وثيقة أخرى", - "notifications_click_copy_url_button": "نسخ الرابط", + "notifications_click_copy_url_button": "انسخ الرابط", "notifications_click_open_button": "فتح الرابط", "notifications_actions_open_url_title": "انتقل إلى {{url}}", "notifications_actions_not_supported": "هذا الإجراء غير مدعوم في تطبيق الويب", "action_bar_send_test_notification": "إرسال إشعار للاختبار", - "action_bar_show_menu": "عرض القائمة", + "action_bar_show_menu": "اعرض القائمة", "message_bar_type_message": "اكتب رسالة هنا", "alert_not_supported_title": "الإشعارات غير مدعومة", "alert_not_supported_description": "الإشعارات غير مدعومة في متصفحك.", "message_bar_error_publishing": "خطأ خلال نشر الإشعار", "notifications_delete": "حذف", - "notifications_copied_to_clipboard": "تم نسخه إلى الحافظة", - "action_bar_toggle_mute": "كتم / إلغاء كتم الإشعارات", + "notifications_copied_to_clipboard": "نُسخ إلى الحافظة", + "action_bar_toggle_mute": "اكتم / ألغِ كتم الإشعارات", "action_bar_toggle_action_menu": "فتح/إغلاق قائمة الإجراءات", "alert_notification_permission_required_button": "امنح الآن", "notifications_attachment_open_button": "فتح المرفق", - "notifications_attachment_copy_url_title": "نسخ عنوان URL للمرفق إلى الحافظة", + "notifications_attachment_copy_url_title": "انسخ عنوان URL للمرفق إلى الحافظة", "notifications_click_copy_url_title": "انسخ رابط URL إلى الحافظة", "notifications_none_for_topic_title": "لم تتلق بعد أية إشعارات حول هذا الموضوع.", "notifications_none_for_any_title": "لم تتلق أية إشعارات.", @@ -60,7 +60,7 @@ "publish_dialog_priority_low": "أولوية منخفضة", "publish_dialog_priority_default": "الأولوية الافتراضية", "publish_dialog_priority_high": "أولوية عالية", - "publish_dialog_base_url_label": "الرابط التشعبي للخدمة", + "publish_dialog_base_url_label": "عنوان URL للخدمة", "publish_dialog_priority_max": "أولوية قصوى", "publish_dialog_topic_placeholder": "اسم الموضوع، على سبيل المثال phil_alerts", "publish_dialog_title_label": "العنوان", @@ -75,27 +75,27 @@ "publish_dialog_attach_label": "الرابط التشعبي URL للمرفق", "publish_dialog_filename_placeholder": "اسم ملف المرفق", "publish_dialog_delay_label": "تأخير", - "publish_dialog_delay_reset": "إزالة تأخر التسليم", + "publish_dialog_delay_reset": "أزل تأخر التوصيل", "publish_dialog_chip_click_label": "انقر على عنوان URL", "publish_dialog_chip_email_label": "إعادة التوجيه إلى البريد الإلكتروني", "publish_dialog_chip_attach_file_label": "إرفاق ملف محلي", "publish_dialog_chip_topic_label": "تغيير الموضوع", - "publish_dialog_button_cancel_sending": "إلغاء الإرسال", + "publish_dialog_button_cancel_sending": "ألغِ الإرسال", "publish_dialog_button_send": "أرسل", "publish_dialog_checkbox_publish_another": "نشر آخر", "publish_dialog_attached_file_title": "الملف المرفق:", "publish_dialog_attached_file_filename_placeholder": "اسم الملف المرفق", - "publish_dialog_attached_file_remove": "إزالة الملف المرفق", + "publish_dialog_attached_file_remove": "أزل الملف المرفق", "publish_dialog_drop_file_here": "قم بإسقاط ملف هنا", "emoji_picker_search_placeholder": "البحث عن رمز تعبيري", - "emoji_picker_search_clear": "مسح البحث", + "emoji_picker_search_clear": "امحُ البحث", "subscribe_dialog_subscribe_title": "الإشتراك في الموضوع", "subscribe_dialog_subscribe_use_another_label": "استخدام خادم آخر", "subscribe_dialog_subscribe_base_url_label": "الرابط التشعبي URL للخدمة", "subscribe_dialog_subscribe_button_subscribe": "اشترِك", "subscribe_dialog_login_title": "تسجيل الدخول مطلوب", "subscribe_dialog_login_username_label": "اسم المستخدم، على سبيل المثال phil", - "subscribe_dialog_login_password_label": "كلمة المرور", + "subscribe_dialog_login_password_label": "كلمة السر", "subscribe_dialog_login_button_login": "الولوج", "subscribe_dialog_error_user_anonymous": "مجهول", "prefs_notifications_title": "الإشعارات", @@ -107,9 +107,9 @@ "prefs_notifications_delete_after_three_hours": "بعد ثلاث ساعات", "prefs_notifications_delete_after_one_day": "بعد يوم واحد", "prefs_notifications_delete_after_one_month": "بعد شهر واحد", - "prefs_notifications_delete_after_never_description": "لا يتم حذف الإشعارات تلقائيا مطلقا", - "prefs_notifications_delete_after_one_week_description": "يتم حذف الإشعارات تلقائيا بعد يوم واحد", - "prefs_notifications_delete_after_one_month_description": "يتم حذف الإشعارات تلقائيا بعد شهر واحد", + "prefs_notifications_delete_after_never_description": "لا تُحذف الإشعارات تلقائيًا مطلقًا", + "prefs_notifications_delete_after_one_week_description": "تُحذف الإشعارات تلقائيًا بعد أسبوع واحد", + "prefs_notifications_delete_after_one_month_description": "تُحذف الإشعارات تلقائيًا بعد شهر واحد", "prefs_users_table": "قائمة المستخدمين", "prefs_users_edit_button": "تعديل المستخدم", "prefs_users_table_user_header": "المستخدم", @@ -127,76 +127,76 @@ "priority_max": "قصوى", "error_boundary_title": "أوه لا ، لقد تحطم ntfy", "prefs_users_delete_button": "حذف المستخدم", - "prefs_users_add_button": "إضافة مستخدم", + "prefs_users_add_button": "أضف مستخدم", "prefs_notifications_min_priority_any": "مهما كانت الأولوية", "prefs_notifications_delete_after_one_week": "بعد أسبوع واحد", - "prefs_notifications_delete_after_three_hours_description": "يتم حذف الإشعارات تلقائيا بعد ثلاث ساعات", - "prefs_notifications_delete_after_one_day_description": "يتم حذف الإشعارات تلقائيا بعد يوم واحد", + "prefs_notifications_delete_after_three_hours_description": "تُحذف الإشعارات تلقائيًا بعد ثلاث ساعات", + "prefs_notifications_delete_after_one_day_description": "تُحذف الإشعارات تلقائيًا بعد يوم واحد", "prefs_users_title": "إدارة المستخدمين", - "prefs_users_dialog_title_add": "إضافة مستخدم", + "prefs_users_dialog_title_add": "أضف مستخدم", "prefs_users_dialog_title_edit": "تعديل المستخدم", "prefs_users_dialog_base_url_label": "عنوان URL للخدمة، على سبيل المثال، https://ntfy.sh", - "publish_dialog_button_cancel": "إلغاء", + "publish_dialog_button_cancel": "ألغِ", "publish_dialog_message_published": "تم نشر الإشعار", - "prefs_users_dialog_password_label": "كلمة المرور", + "prefs_users_dialog_password_label": "كلمة السر", "publish_dialog_base_url_placeholder": "عنوان URL للخدمة، على سبيل المثال، https://example.com", "publish_dialog_progress_uploading": "جارٍ التحميل…", "publish_dialog_topic_label": "اسم الموضوع", "publish_dialog_topic_reset": "إعادة تعيين الموضوع", - "publish_dialog_email_reset": "إزالة إعادة توجيه البريد الإلكتروني", + "publish_dialog_email_reset": "أزل إعادة توجيه البريد الإلكتروني", "publish_dialog_email_placeholder": "عنوان لإعادة توجيه الإشعار إليه، على سبيل المثال phil@example.com", "publish_dialog_other_features": "ميزات أخرى:", "publish_dialog_chip_attach_url_label": "إرفاق ملف عن طريق عنوان URL", "subscribe_dialog_subscribe_topic_placeholder": "اسم الموضوع، على سبيل المثال phil_alerts", "prefs_notifications_sound_description_none": "لا تصدر الإشعارات أي صوت عند وصولها", - "publish_dialog_chip_delay_label": "تأخير التسليم", - "subscribe_dialog_login_description": "هذا الموضوع محمي بكلمة مرور. الرجاء إدخال اسم المستخدم وكلمة المرور للاشتراك.", - "subscribe_dialog_subscribe_button_cancel": "إلغاء", - "common_back": "الرجوع", + "publish_dialog_chip_delay_label": "تأخير التوصيل", + "subscribe_dialog_login_description": "هذا الموضوع محمي بكلمة سر. الرجاء إدخال اسم المستخدم وكلمة السر للاشتراك.", + "subscribe_dialog_subscribe_button_cancel": "ألغِ", + "common_back": "ارجع", "prefs_notifications_sound_play": "تشغيل الصوت المحدد", "prefs_notifications_min_priority_title": "أولوية دنيا", "prefs_notifications_min_priority_max_only": "الأولوية القصوى فقط", "notifications_no_subscriptions_description": "انقر فوق الرابط \"{{linktext}}\" لإنشاء موضوع أو الاشتراك فيه. بعد ذلك، يمكنك إرسال رسائل عبر PUT أو POST وستتلقى إشعارات هنا.", "publish_dialog_click_label": "الرابط التشعبي URL للنقر", - "publish_dialog_tags_placeholder": "قائمة علامات مفصولة بفواصل، على سبيل المثال تحذير, srv1-backup", + "publish_dialog_tags_placeholder": "قائمة العلامات مفصولة بفواصل، على سبيل المثال: تحذير، srv1-backup", "publish_dialog_attach_placeholder": "إرفاق ملف بعنوان URL ، على سبيل المثال https://f-droid.org/F-Droid.apk", - "publish_dialog_attach_reset": "إزالة عنوان URL للمرفق", + "publish_dialog_attach_reset": "أزل عنوان URL للمرفق", "subscribe_dialog_error_user_not_authorized": "المستخدم {{username}} غير مصرح به", - "common_save": "حفظ", - "common_add": "إضافة", - "signup_form_username": "إسم المستخدم", - "signup_form_confirm_password": "تأكيد كلمة المرور", + "common_save": "احفظ", + "common_add": "أضف", + "signup_form_username": "اسم المستخدم", + "signup_form_confirm_password": "أكِّد كلمة السر", "login_title": "تسجيل الدخول إلى حسابك ntfy", "login_form_button_submit": "الولوج", "login_link_signup": "إنشاء حساب", "login_disabled": "تم تعطيل تسجيل الدخول", "action_bar_account": "الحساب", - "action_bar_change_display_name": "تغيير الإسم المعروض", + "action_bar_change_display_name": "غيّر الإسم المعروض", "signup_error_creation_limit_reached": "تم بلوغ حد إنشاء الحسابات", "action_bar_reservation_add": "حجز الموضوع", "action_bar_reservation_edit": "تغيير الحجز", "action_bar_profile_title": "الملف التعريفي", "action_bar_profile_settings": "اﻹعدادات", - "action_bar_profile_logout": "الخروج", + "action_bar_profile_logout": "اخرج", "action_bar_sign_in": "الولوج", - "action_bar_sign_up": "إنشاء حساب", + "action_bar_sign_up": "أنشئ حساب", "nav_button_account": "الحساب", "nav_upgrade_banner_label": "قم بالترقية إلى NTFY Pro", "reserve_dialog_checkbox_label": "حجز الموضوع وإعداد الوصول", - "subscribe_dialog_subscribe_button_generate_topic_name": "توليد إسم", + "subscribe_dialog_subscribe_button_generate_topic_name": "ولِّد اسم", "subscribe_dialog_error_topic_already_reserved": "الموضوع محجوز بالفعل", "account_basics_title": "الحساب", "account_basics_username_title": "إسم المستخدم", "account_basics_username_description": "مرحبًا، هذا أنت ❤", "account_basics_username_admin_tooltip": "أنت مدير", - "account_basics_password_title": "كلمة المرور", - "account_basics_password_description": "غيّر كلمة مرور حسابك", - "account_basics_password_dialog_title": "تغيير كلمة المرور", - "account_basics_password_dialog_current_password_label": "كلمة المرور الحالية", - "account_basics_password_dialog_new_password_label": "كلمة المرور الجديدة", - "account_basics_password_dialog_confirm_password_label": "تأكيد كلمة المرور", - "account_basics_password_dialog_button_submit": "تغيير كلمة المرور", - "account_basics_password_dialog_current_password_incorrect": "الكلمة السرية خاطئة", + "account_basics_password_title": "كلمة السر", + "account_basics_password_description": "غيّر كلمة سر حسابك", + "account_basics_password_dialog_title": "غيّر كلمة السر", + "account_basics_password_dialog_current_password_label": "كلمة السر الحالية", + "account_basics_password_dialog_new_password_label": "كلمة السر جديدة", + "account_basics_password_dialog_confirm_password_label": "أكِّد كلمة السر", + "account_basics_password_dialog_button_submit": "غيّر كلمة السر", + "account_basics_password_dialog_current_password_incorrect": "كلمة السر غير صحيحة", "account_usage_title": "الإستخدام", "account_usage_of_limit": "من {{limit}}", "account_usage_unlimited": "غير محدود", @@ -212,13 +212,13 @@ "account_usage_attachment_storage_title": "تخزين المرفقات", "account_delete_title": "حذف الحساب", "account_delete_description": "احذف حسابك نهائيا", - "account_delete_dialog_label": "كلمة المرور", + "account_delete_dialog_label": "كلمة السر", "account_upgrade_dialog_title": "تغيير فئة الحساب", "account_upgrade_dialog_tier_features_messages_other": "{{messages}} رسائل يومية", "account_upgrade_dialog_tier_features_emails_other": "{{emails}} من رسائل البريد الإلكتروني اليومية", - "account_upgrade_dialog_button_cancel": "إلغاء", + "account_upgrade_dialog_button_cancel": "ألغِ", "account_upgrade_dialog_button_pay_now": "ادفع الآن واشترك", - "account_upgrade_dialog_button_cancel_subscription": "إلغاء الاشتراك", + "account_upgrade_dialog_button_cancel_subscription": "ألغِ الاشتراك", "account_tokens_title": "رموز الوصول", "account_tokens_table_token_header": "الرمز المميز", "account_tokens_table_last_access_header": "آخر وصول", @@ -235,7 +235,7 @@ "account_tokens_dialog_label": "التسمية، على سبيل المثال إشعارات الرادار", "account_tokens_dialog_button_create": "إنشاء رمز مميز", "account_tokens_dialog_button_update": "تحديث الرمز المميز", - "account_tokens_dialog_button_cancel": "إلغاء", + "account_tokens_dialog_button_cancel": "ألغِ", "account_tokens_dialog_expires_label": "تنتهي صلاحية الرمز المميز للوصول في", "account_tokens_dialog_expires_unchanged": "اترك تاريخ انتهاء الصلاحية دون تغيير", "account_tokens_dialog_expires_x_hours": "تنتهي صلاحية الرمز المميز في {{hours}} ساعات", @@ -243,7 +243,7 @@ "account_tokens_delete_dialog_title": "حذف الرمز المميز للوصول", "account_tokens_delete_dialog_submit_button": "حذف الرمز المميز نهائيا", "prefs_users_table_cannot_delete_or_edit": "لا يمكن حذف أو تحرير المستخدم الذي قام بتسجيل الدخول", - "prefs_reservations_add_button": "إضافة موضوع محجوز", + "prefs_reservations_add_button": "أضف موضوع محجوز", "prefs_reservations_table": "جدول المواضيع المحجوزة", "prefs_reservations_table_topic_header": "الموضوع", "prefs_reservations_table_access_header": "الوصول", @@ -256,19 +256,19 @@ "prefs_reservations_dialog_access_label": "الوصول", "reservation_delete_dialog_action_delete_title": "حذف الرسائل والمرفقات المخزنة مؤقتا", "reservation_delete_dialog_submit_button": "حذف الحجز", - "signup_title": "إنشاء حساب ntfy", - "common_cancel": "إلغاء", - "signup_form_password": "كلمة المرور", + "signup_title": "أنشئ حساب ntfy", + "common_cancel": "ألغِ", + "signup_form_password": "كلمة السر", "signup_already_have_account": "هل لديك حساب؟ قم بتسجيل الدخول!", - "signup_form_button_submit": "إنشاء حساب", - "signup_disabled": "تم تعطيل التسجيل", + "signup_form_button_submit": "أنشئ حساب", + "signup_disabled": "عُطّل التسجيل", "display_name_dialog_placeholder": "الإسم المعروض", "display_name_dialog_title": "تغيير الإسم المعروض", "account_basics_tier_basic": "أساسي", "account_usage_emails_title": "رسائل البريد الإلكتروني المرسلة", "account_usage_reservations_none": "لا توجد مواضيع محجوزة لهذا الحساب", "account_usage_cannot_create_portal_session": "تعذر فتح بوابة الفوترة", - "account_delete_dialog_button_cancel": "إلغاء", + "account_delete_dialog_button_cancel": "ألغِ", "account_delete_dialog_button_submit": "حذف الحساب نهائيا", "account_upgrade_dialog_button_update_subscription": "تحديث الاشتراك", "account_tokens_table_copied_to_clipboard": "تم نسخ الرمز المميز للوصول", @@ -276,31 +276,31 @@ "prefs_reservations_table_everyone_read_only": "يمكنني النشر والاشتراك ، ويمكن للجميع الاشتراك", "prefs_reservations_table_click_to_subscribe": "انقر للاشتراك", "reservation_delete_dialog_action_keep_title": "الاحتفاظ بالرسائل والمرفقات المخزنة مؤقتًا", - "action_bar_reservation_delete": "إزالة الحجز", + "action_bar_reservation_delete": "أزل الحجز", "display_name_dialog_description": "قم بتعيين اسم بديل للموضوع المعروض في قائمة الاشتراك. يساعد هذا في تحديد الموضوعات ذات الأسماء المعقدة بسهولة أكبر.", - "prefs_users_description": "إضافة / إزالة المستخدمين لمواضيعك المحمية هنا. يرجى الأخذ بعين الاعتبار أنه يتم تخزين اسم المستخدم وكلمة المرور في التخزين المحلي للمتصفح.", + "prefs_users_description": "إضافة / إزالة المستخدمين لمواضيعك المحمية هنا. يرجى الأخذ بعين الاعتبار أنه يتم تخزين اسم المستخدم وكلمة السر في التخزين المحلي للمتصفح.", "notifications_more_details": "لمزيد من المعلومات، الرجاء الاطّلاع على موقع الويب أو على الدليل.", "publish_dialog_details_examples_description": "للحصول على أمثلة ووصف مُفصّل لجميع ميزات الإرسال، يرجى الاستناد إلى الدليل.", "subscribe_dialog_subscribe_description": "قد لا تكون الموضوعات محمية بكلمة سر لذا اختر اسمًا ليس من السهل تخمينه وبمجرد اشتراكك، يمكنك الحصول على إشعارات عبر \"PUT/POST\".", "prefs_notifications_sound_description_some": "تقوم الإشعارات بتشغيل صوت {{sound}} عند وصولها", "notifications_none_for_topic_description": "لإرسال إشعارات إلى هذا الموضوع، ما عليك سوى PUT أو POST إلى عنوان URL الخاص بالموضوع.", "priority_low": "منخفضة", - "signup_form_toggle_password_visibility": "تبديل رؤية كلمة المرور", + "signup_form_toggle_password_visibility": "تبديل رؤية كلمة السر", "account_usage_limits_reset_daily": "يعاد تحديد حدود الاستخدام يوميا في منتصف الليل (UTC)", "account_tokens_table_label_header": "المُلصَقة", "account_upgrade_dialog_button_redirect_signup": "تسجيل فوري", "account_upgrade_dialog_tier_current_label": "الحالي", "account_tokens_dialog_expires_x_days": "تنتهي صلاحية الرمز المميز في غضون {{days}} أيام", - "prefs_reservations_dialog_title_add": "حجز موضوع", + "prefs_reservations_dialog_title_add": "احجز موضوع", "prefs_reservations_description": "يمكنك حجز أسماء الموضوعات للاستخدام الشخصي هنا. يمنحك حجز موضوع ما ملكية الموضوع، ويسمح لك بتحديد تصريحات الوصول للمستخدمين الآخرين إلى الموضوع.", - "prefs_users_description_no_sync": "لا تتم مزامنة المستخدمين وكلمات المرور مع حسابك.", + "prefs_users_description_no_sync": "لا تتم مزامنة المستخدمين وكلمات السر مع حسابك.", "reservation_delete_dialog_action_delete_description": "سيتم حذف الرسائل والمرفقات المخزنة مؤقتا نهائيا. لا يمكن التراجع عن هذا الإجراء.", "notifications_actions_http_request_title": "إرسال طلب HTTP {{method}} إلى {{url}}", "notifications_none_for_any_description": "لإرسال إشعارات إلى موضوع ما، ما عليك سوى إرسال طلب PUT أو POST إلى الرابط التشعبي URL للموضوع. إليك مثال باستخدام أحد مواضيعك.", "error_boundary_description": "من الواضح أن هذا لا ينبغي أن يحدث. آسف جدًا بشأن هذا.
إن كان لديك دقيقة، يرجى الإبلاغ عن ذلك على GitHub ، أو إعلامنا عبر Discord أو Matrix .", "nav_button_muted": "الإشعارات المكتومة", "priority_min": "دنيا", - "signup_error_username_taken": "تم حجز اسم المستخدم {{username}} مِن قَبلُ", + "signup_error_username_taken": "تم حجز اسم المستخدم {{username}} بالفعل", "action_bar_reservation_limit_reached": "بلغت الحد الأقصى", "prefs_reservations_delete_button": "إعادة تعيين الوصول إلى الموضوع", "prefs_reservations_edit_button": "تعديل الوصول إلى موضوع", @@ -323,7 +323,7 @@ "account_upgrade_dialog_interval_yearly": "سنويا", "account_upgrade_dialog_tier_features_no_reservations": "لا توجد مواضيع محجوزة", "account_upgrade_dialog_interval_yearly_discount_save": "وفر {{discount}}٪", - "publish_dialog_click_reset": "إزالة الرابط التشعبي URL للنقر", + "publish_dialog_click_reset": "أزل الرابط URL للنقر", "prefs_notifications_min_priority_description_max": "إظهار الإشعارات إذا كانت الأولوية 5 (كحد أقصى)", "publish_dialog_attachment_limits_file_reached": "يتجاوز الحد الأقصى للملف {{fileSizeLimit}}", "publish_dialog_attachment_limits_quota_reached": "يتجاوز الحصة، {{remainingBytes}} متبقية", @@ -335,16 +335,16 @@ "prefs_appearance_theme_light": "الوضع النهاري", "publish_dialog_checkbox_markdown": "تنسيق على هيئة ماركداون", "alert_not_supported_context_description": "الإشعارات مسموحة فقط على بروتوكول HTTPS المأمن, هذه القيود خصائص الإشعارات", - "publish_dialog_call_reset": "حذف اتصال بالهاتف", + "publish_dialog_call_reset": "احذف اتصال بالهاتف", "publish_dialog_call_label": "اتصال هاتفي", "publish_dialog_chip_call_label": "اتصال هاتفي", - "publish_dialog_delay_placeholder": "تأخير التوصيل, مثال {{unixTimestamp}}, {{relativeTime}}, او \"{{naturalLanguage}}\" (اللغة الإنجليزية فقط)", + "publish_dialog_delay_placeholder": "تأخير التوصيل، مثال {{unixTimestamp}}، {{relativeTime}}، أو \"{{naturalLanguage}}\" (اللغة الإنجليزية فقط)", "publish_dialog_attachment_limits_file_and_quota_reached": "تجاوز حجم {{fileSizeLimit}} الملف, {{remainingBytes}} متبقي", "prefs_reservations_dialog_title_delete": "حذف حجز موضوع", "publish_dialog_call_item": "اتصل برقم الهاتف {{number}}", "publish_dialog_chip_call_no_verified_numbers_tooltip": "لا يوجد ارقام هواتف معرفة", "action_bar_mute_notifications": "كتم الإشعارات", - "action_bar_unmute_notifications": "إلغاء كتم الإشعارات", + "action_bar_unmute_notifications": "ألغِ كتم الإشعارات", "alert_notification_ios_install_required_description": "اضغط على زر المشاركة ثم إضافة إلى الصفحة الرئيسية لتستقبل الإشعارات على أجهزة أبل", "alert_notification_ios_install_required_title": "يجب تثبيت الصفحة", "alert_notification_permission_denied_description": "الرجاء اعادة منح الصلاحيات في المتصفح", @@ -359,6 +359,10 @@ "account_basics_phone_numbers_dialog_verify_button_call": "اتصل بي", "account_basics_phone_numbers_dialog_code_label": "رمز التحقّق", "account_upgrade_dialog_tier_price_per_month": "شهر", - "prefs_appearance_theme_title": "الحُلّة", - "subscribe_dialog_subscribe_use_another_background_info": "لن يتم استلام الاشعارات من الخوادم الخارجية عندما يكون تطبيق الويب مغلقاً" + "prefs_appearance_theme_title": "السمة", + "subscribe_dialog_subscribe_use_another_background_info": "لن يتم استلام الاشعارات من الخوادم الخارجية عندما يكون تطبيق الويب مغلقاً", + "prefs_appearance_theme_system": "النظام (الافتراضي)", + "prefs_notifications_min_priority_low_and_higher": "أولوية منخفضة وأعلى", + "prefs_notifications_min_priority_default_and_higher": "الأولوية الافتراضية وما فوقها", + "prefs_notifications_min_priority_high_and_higher": "أولوية عالية وأعلى" } From 2343ce46bd0600e8f8a0fe6f3cb5492935095c22 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 25 Jan 2026 09:16:36 -0500 Subject: [PATCH 3/8] Release notes --- docs/publish.md | 3 +++ docs/releases.md | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index 9e5a7503..6e6f8854 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -3503,6 +3503,9 @@ Here's an example with a custom message, tags and a priority: ## Updating + deleting notifications _Supported on:_ :material-android: :material-firefox: +!!! info + This feature is not fully released yet. The ntfy Android 1.22.x is being released right now. This may take a week or so. + You can **update, clear (mark as read and dismiss), or delete notifications** that have already been delivered. This is useful for scenarios like download progress updates, replacing outdated information, or dismissing notifications that are no longer relevant. diff --git a/docs/releases.md b/docs/releases.md index 254c92af..d9aa2aa8 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -7,12 +7,12 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release | Component | Version | Release date | |------------------|---------|--------------| | ntfy server | v2.16.0 | Jan 19, 2026 | -| ntfy Android app | v1.22.1 | Jan 20, 2026 | +| ntfy Android app | v1.22.2 | Jan 25, 2026 | | ntfy iOS app | v1.3 | Nov 26, 2023 | Please check out the release notes for [upcoming releases](#not-released-yet) below. -### ntfy Android app v1.22.1 +### ntfy Android app v1.22.2 Released January 20, 2026 This release adds support for [updating and deleting notifications](publish.md#updating--deleting-notifications) (requires server v2.16.0), From 2ae962d957fbad3a941fcfa25e97a59ad4d5a8d0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 25 Jan 2026 09:24:30 -0500 Subject: [PATCH 4/8] Bump --- Makefile | 1 + go.mod | 20 +-- go.sum | 44 +++---- web/package-lock.json | 276 +++++++++++++++++++++--------------------- 4 files changed, 171 insertions(+), 170 deletions(-) diff --git a/Makefile b/Makefile index ed16cabc..3b9cfdc5 100644 --- a/Makefile +++ b/Makefile @@ -245,6 +245,7 @@ cli-deps-gcc-windows: cli-deps-update: go get -u + go mod tidy go install honnef.co/go/tools/cmd/staticcheck@latest go install golang.org/x/lint/golint@latest go install github.com/goreleaser/goreleaser/v2@latest diff --git a/go.mod b/go.mod index 1f7f6b4c..701e924a 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( golang.org/x/sync v0.19.0 golang.org/x/term v0.39.0 golang.org/x/time v0.14.0 - google.golang.org/api v0.260.0 + google.golang.org/api v0.262.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -30,7 +30,7 @@ replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pi require github.com/pkg/errors v0.9.1 // indirect require ( - firebase.google.com/go/v4 v4.18.0 + firebase.google.com/go/v4 v4.19.0 github.com/SherClockHolmes/webpush-go v1.4.0 github.com/microcosm-cc/bluemonday v1.0.27 github.com/prometheus/client_golang v1.23.2 @@ -42,21 +42,21 @@ require ( require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.0 // indirect + cloud.google.com/go/auth v0.18.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/longrunning v0.8.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect github.com/AlekSi/pointer v1.2.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect + github.com/cncf/xds/go v0.0.0-20260121142036-a486691bba94 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emersion/go-sasl v0.0.0-20241020182733-b788ff22d5a6 // indirect github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect @@ -95,9 +95,9 @@ require ( go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/net v0.49.0 // indirect google.golang.org/appengine/v2 v2.0.6 // indirect - google.golang.org/genproto v0.0.0-20260114163908-3f89685c29c3 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260114163908-3f89685c29c3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260114163908-3f89685c29c3 // indirect + google.golang.org/genproto v0.0.0-20260122232226-8e98ce8d340d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d // indirect google.golang.org/grpc v1.78.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 77e16c2b..2e213508 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.0 h1:wnqy5hrv7p3k7cShwAU/Br3nzod7fxoqG+k0VZ+/Pk0= -cloud.google.com/go/auth v0.18.0/go.mod h1:wwkPM1AgE1f2u6dG443MiWoD8C3BtOywNsUMcUTVDRo= +cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= +cloud.google.com/go/auth v0.18.1/go.mod h1:GfTYoS9G3CWpRA3Va9doKN9mjPGRS+v41jmZAhBzbrA= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -22,20 +22,20 @@ cloud.google.com/go/storage v1.59.1 h1:DXAZLcTimtiXdGqDSnebROVPd9QvRsFVVlptz02Wk cloud.google.com/go/storage v1.59.1/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= -firebase.google.com/go/v4 v4.18.0 h1:S+g0P72oDGqOaG4wlLErX3zQmU9plVdu7j+Bc3R1qFw= -firebase.google.com/go/v4 v4.18.0/go.mod h1:P7UfBpzc8+Z3MckX79+zsWzKVfpGryr6HLbAe7gCWfs= +firebase.google.com/go/v4 v4.19.0 h1:f5NMlC2YHFsncz00c2+ecBr+ZYlRMhKIhj1z8Iz0lD8= +firebase.google.com/go/v4 v4.19.0/go.mod h1:P7UfBpzc8+Z3MckX79+zsWzKVfpGryr6HLbAe7gCWfs= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= github.com/SherClockHolmes/webpush-go v1.4.0 h1:ocnzNKWN23T9nvHi6IfyrQjkIc0oJWv1B1pULsf9i3s= @@ -46,8 +46,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cncf/xds/go v0.0.0-20260121142036-a486691bba94 h1:kkHPnzHm5Ln7WA0XYjrr2ITA0l9Vs6H++Ni//P+SZso= +github.com/cncf/xds/go v0.0.0-20260121142036-a486691bba94/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -263,16 +263,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.260.0 h1:XbNi5E6bOVEj/uLXQRlt6TKuEzMD7zvW/6tNwltE4P4= -google.golang.org/api v0.260.0/go.mod h1:Shj1j0Phr/9sloYrKomICzdYgsSDImpTxME8rGLaZ/o= +google.golang.org/api v0.262.0 h1:4B+3u8He2GwyN8St3Jhnd3XRHlIvc//sBmgHSp78oNY= +google.golang.org/api v0.262.0/go.mod h1:jNwmH8BgUBJ/VrUG6/lIl9YiildyLd09r9ZLHiQ6cGI= google.golang.org/appengine/v2 v2.0.6 h1:LvPZLGuchSBslPBp+LAhihBeGSiRh1myRoYK4NtuBIw= google.golang.org/appengine/v2 v2.0.6/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= -google.golang.org/genproto v0.0.0-20260114163908-3f89685c29c3 h1:rUamZFBwsWVWg4Yb7iTbwYp81XVHUvOXNdrFCoYRRNE= -google.golang.org/genproto v0.0.0-20260114163908-3f89685c29c3/go.mod h1:wE6SUYr3iNtF/D0GxVAjT+0CbDFktQNssYs9PVptCt4= -google.golang.org/genproto/googleapis/api v0.0.0-20260114163908-3f89685c29c3 h1:X9z6obt+cWRX8XjDVOn+SZWhWe5kZHm46TThU9j+jss= -google.golang.org/genproto/googleapis/api v0.0.0-20260114163908-3f89685c29c3/go.mod h1:dd646eSK+Dk9kxVBl1nChEOhJPtMXriCcVb4x3o6J+E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260114163908-3f89685c29c3 h1:C4WAdL+FbjnGlpp2S+HMVhBeCq2Lcib4xZqfPNF6OoQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260114163908-3f89685c29c3/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto v0.0.0-20260122232226-8e98ce8d340d h1:hUplc9kLwH374NIY3PreRUK3Unc0xLm/W7MDsm0gCNo= +google.golang.org/genproto v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:SpjiK7gGN2j/djoQMxLl3QOe/J/XxNzC5M+YLecVVWU= +google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d h1:tUKoKfdZnSjTf5LW7xpG4c6SZ3Ozisn5eumcoTuMEN4= +google.golang.org/genproto/googleapis/api v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:p3MLuOwURrGBRoEyFHBT3GjUwaCQVKeNqqWxlcISGdw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d h1:xXzuihhT3gL/ntduUZwHECzAn57E8dA6l8SOtYWdD8Q= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= diff --git a/web/package-lock.json b/web/package-lock.json index e0a8c3c7..45fe975b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -194,17 +194,17 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2798,9 +2798,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz", + "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==", "cpu": [ "arm" ], @@ -2812,9 +2812,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz", + "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==", "cpu": [ "arm64" ], @@ -2826,9 +2826,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz", + "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==", "cpu": [ "arm64" ], @@ -2840,9 +2840,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz", + "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==", "cpu": [ "x64" ], @@ -2854,9 +2854,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz", + "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==", "cpu": [ "arm64" ], @@ -2868,9 +2868,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz", + "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==", "cpu": [ "x64" ], @@ -2882,9 +2882,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz", + "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==", "cpu": [ "arm" ], @@ -2896,9 +2896,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz", + "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==", "cpu": [ "arm" ], @@ -2910,9 +2910,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz", + "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==", "cpu": [ "arm64" ], @@ -2924,9 +2924,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz", + "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==", "cpu": [ "arm64" ], @@ -2938,9 +2938,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz", + "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==", "cpu": [ "loong64" ], @@ -2952,9 +2952,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz", + "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==", "cpu": [ "loong64" ], @@ -2966,9 +2966,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz", + "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==", "cpu": [ "ppc64" ], @@ -2980,9 +2980,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz", + "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==", "cpu": [ "ppc64" ], @@ -2994,9 +2994,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz", + "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==", "cpu": [ "riscv64" ], @@ -3008,9 +3008,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz", + "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==", "cpu": [ "riscv64" ], @@ -3022,9 +3022,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz", + "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==", "cpu": [ "s390x" ], @@ -3036,9 +3036,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz", + "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==", "cpu": [ "x64" ], @@ -3050,9 +3050,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz", + "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==", "cpu": [ "x64" ], @@ -3064,9 +3064,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz", + "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==", "cpu": [ "x64" ], @@ -3078,9 +3078,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz", + "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==", "cpu": [ "arm64" ], @@ -3092,9 +3092,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz", + "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==", "cpu": [ "arm64" ], @@ -3106,9 +3106,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz", + "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==", "cpu": [ "ia32" ], @@ -3120,9 +3120,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz", + "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==", "cpu": [ "x64" ], @@ -3134,9 +3134,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz", + "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==", "cpu": [ "x64" ], @@ -3248,9 +3248,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", - "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz", + "integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==", "license": "MIT", "peer": true, "dependencies": { @@ -3643,14 +3643,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { @@ -3672,13 +3672,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3702,9 +3702,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", - "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "version": "2.9.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz", + "integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3823,9 +3823,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001765", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", - "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "dev": true, "funding": [ { @@ -3967,13 +3967,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", - "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.28.0" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -4267,9 +4267,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.278", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", + "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", "dev": true, "license": "ISC" }, @@ -6477,9 +6477,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -7628,9 +7628,9 @@ } }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz", + "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==", "dev": true, "license": "MIT", "dependencies": { @@ -7644,31 +7644,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", + "@rollup/rollup-android-arm-eabi": "4.56.0", + "@rollup/rollup-android-arm64": "4.56.0", + "@rollup/rollup-darwin-arm64": "4.56.0", + "@rollup/rollup-darwin-x64": "4.56.0", + "@rollup/rollup-freebsd-arm64": "4.56.0", + "@rollup/rollup-freebsd-x64": "4.56.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", + "@rollup/rollup-linux-arm-musleabihf": "4.56.0", + "@rollup/rollup-linux-arm64-gnu": "4.56.0", + "@rollup/rollup-linux-arm64-musl": "4.56.0", + "@rollup/rollup-linux-loong64-gnu": "4.56.0", + "@rollup/rollup-linux-loong64-musl": "4.56.0", + "@rollup/rollup-linux-ppc64-gnu": "4.56.0", + "@rollup/rollup-linux-ppc64-musl": "4.56.0", + "@rollup/rollup-linux-riscv64-gnu": "4.56.0", + "@rollup/rollup-linux-riscv64-musl": "4.56.0", + "@rollup/rollup-linux-s390x-gnu": "4.56.0", + "@rollup/rollup-linux-x64-gnu": "4.56.0", + "@rollup/rollup-linux-x64-musl": "4.56.0", + "@rollup/rollup-openbsd-x64": "4.56.0", + "@rollup/rollup-openharmony-arm64": "4.56.0", + "@rollup/rollup-win32-arm64-msvc": "4.56.0", + "@rollup/rollup-win32-ia32-msvc": "4.56.0", + "@rollup/rollup-win32-x64-gnu": "4.56.0", + "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" } }, From b26546b709feaa3324facafe367cc4b072ab4c2f Mon Sep 17 00:00:00 2001 From: Alexander Ivanov Date: Sun, 25 Jan 2026 19:19:31 +0300 Subject: [PATCH 5/8] chore: fix typos in server.yml config file Signed-off-by: Alexander Ivanov --- server/server.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/server.yml b/server/server.yml index 639ed492..598c41bc 100644 --- a/server/server.yml +++ b/server/server.yml @@ -160,7 +160,7 @@ # If enabled, allow outgoing e-mail notifications via the 'X-Email' header. If this header is set, # messages will additionally be sent out as e-mail using an external SMTP server. # -# As of today, only SMTP servers with plain text auth (or no auth at all), and STARTLS are supported. +# As of today, only SMTP servers with plain text auth (or no auth at all), and STARTTLS are supported. # Please also refer to the rate limiting settings below (visitor-email-limit-burst & visitor-email-limit-burst). # # - smtp-sender-addr is the hostname:port of the SMTP server @@ -198,8 +198,8 @@ # - web-push-private-key is the generated VAPID private key, e.g. AA2BB1234567890abcdefzxcvbnm1234567890 # - web-push-file is a database file to keep track of browser subscription endpoints, e.g. /var/cache/ntfy/webpush.db # - web-push-email-address is the admin email address send to the push provider, e.g. sysadmin@example.com -# - web-push-startup-queries is an optional list of queries to run on startup` -# - web-push-expiry-warning-duration defines the duration after which unused subscriptions are sent a warning (default is 55d`) +# - web-push-startup-queries is an optional list of queries to run on startup +# - web-push-expiry-warning-duration defines the duration after which unused subscriptions are sent a warning (default is 55d) # - web-push-expiry-duration defines the duration after which unused subscriptions will expire (default is 60d) # # web-push-public-key: @@ -280,7 +280,7 @@ # # - upstream-base-url is the base URL of the upstream server. Should be "https://ntfy.sh". # - upstream-access-token is the token used to authenticate with the upstream server. This is only required -# if you exceed the upstream rate limits, or the uptream server requires authentication. +# if you exceed the upstream rate limits, or the upstream server requires authentication. # # upstream-base-url: # upstream-access-token: From f79c84e99e1ad0fa651831420b5c8e84d2b2a311 Mon Sep 17 00:00:00 2001 From: Kavyansh Khaitan <73186427+KavyanshKhaitan2@users.noreply.github.com> Date: Mon, 26 Jan 2026 17:31:15 +0530 Subject: [PATCH 6/8] Fix syntax error in publish.md --- docs/publish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/publish.md b/docs/publish.md index 6e6f8854..864e605b 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -2154,7 +2154,7 @@ And the same example using [JSON publishing](#publish-as-json): method: 'POST', body: JSON.stringify({ topic: "myhome", - message": "Garage door has been open for 15 minutes. Close it?", + "message": "Garage door has been open for 15 minutes. Close it?", actions: [ { "action": "http", From 448c5bfb88930449f841abbd97e9acf68f9ffbac Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 26 Jan 2026 20:31:11 -0500 Subject: [PATCH 7/8] Terms of service --- docs/terms.md | 257 ++++++++++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 258 insertions(+) create mode 100644 docs/terms.md diff --git a/docs/terms.md b/docs/terms.md new file mode 100644 index 00000000..26ced427 --- /dev/null +++ b/docs/terms.md @@ -0,0 +1,257 @@ +# Terms of Service + +**Last updated:** January 26, 2026 + +Please read these Terms of Service ("Terms") carefully before using the ntfy.sh website and service (the "Service") +operated by ntfy LLC ("us", "we", or "our"). + +Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These +Terms apply to all visitors, users, and others who access or use the Service. + +**By accessing or using the Service, you agree to be bound by these Terms. If you disagree with any part of the +Terms, you may not access the Service.** + +## Service description + +ntfy (pronounced "notify") is a simple HTTP-based pub-sub notification service. It allows you to send push +notifications to your phone or desktop via scripts from any computer, using a REST API. The Service includes: + +- The ntfy.sh hosted server +- The ntfy web application +- The ntfy mobile applications (Android and iOS) +- The ntfy command-line interface (CLI) + +The server software and mobile applications are open source and can be [self-hosted](install.md). These Terms +apply specifically to the ntfy.sh hosted service. + +## Subscriptions and billing + +### Free tier + +You may use the Service without creating an account or subscribing to a paid plan. Free usage is subject to +rate limits and other restrictions as described in our documentation. + +### Paid plans + +Some features of the Service are available only through paid subscription plans ("Subscriptions"). You will +be billed in advance on a recurring basis ("Billing Cycle"). Billing cycles are available on a monthly or +annual basis. + +At the end of each Billing Cycle, your Subscription will automatically renew under the same conditions unless +you cancel it or we cancel it. You may cancel your Subscription renewal through your account settings in the +web application. + +A valid payment method is required to process payment for your Subscription. You shall provide us with accurate +and complete billing information. By submitting such payment information, you authorize us to charge all +Subscription fees incurred through your account to your payment method. + +Payment processing is handled by Stripe. Your payment information is subject to Stripe's +[privacy policy](https://stripe.com/privacy) and [terms of service](https://stripe.com/legal). + +Should automatic billing fail to occur for any reason, we will retry the payment according to Stripe's retry +schedule. If payment continues to fail after multiple attempts, your Subscription will be canceled and your +account will revert to the free tier. + +### Fee changes + +We may, in our sole discretion and at any time, modify the Subscription fees for paid plans. Any fee change +will become effective at the end of the then-current Billing Cycle. + +We will provide you with reasonable prior notice of any change in Subscription fees to give you an opportunity +to cancel your Subscription before such change becomes effective. + +Your continued use of the Service after a fee change comes into effect constitutes your agreement to pay the +modified Subscription fee. + +## Refunds + +Refund requests for Subscriptions may be considered on a case-by-case basis and granted at the sole discretion +of ntfy LLC. To request a refund, please contact us at [billing@mail.ntfy.sh](mailto:billing@mail.ntfy.sh). + +## User accounts + +When you create an account with us, you must provide information that is accurate, complete, and current at +all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of +your account. + +You are responsible for: + +- Safeguarding the password that you use to access the Service +- Any activities or actions under your account, whether your password is with our Service or a third-party service +- Keeping your account credentials confidential + +You agree not to disclose your password to any third party. You must notify us immediately upon becoming aware +of any breach of security or unauthorized use of your account. + +You represent that you are at least 18 years old, or that you are at least the minimum age required to form +a binding contract in your jurisdiction, and have the legal authority to enter into these Terms. + +## Acceptable use + +You agree not to use the Service to: + +- Send spam, unsolicited messages, or messages to recipients who have not consented to receive them +- Distribute malware, viruses, or any other malicious software +- Transmit illegal content or content that violates the rights of others +- Harass, abuse, or harm another person or group +- Impersonate any person or entity, or falsely state or misrepresent your affiliation with a person or entity +- Interfere with or disrupt the Service or servers or networks connected to the Service +- Attempt to gain unauthorized access to the Service, other accounts, or computer systems +- Use the Service for any illegal purpose or in violation of any applicable laws or regulations +- Circumvent rate limits or other technical restrictions +- Use the Service in a manner that could reasonably be expected to impose an unreasonable or disproportionately + large load on our infrastructure + +We reserve the right to investigate and take appropriate action against anyone who, in our sole discretion, +violates this provision, including removing content, terminating accounts, and reporting to law enforcement. + +### Topic names + +Topic names on ntfy.sh are public. If you use the Service without access controls, your topic name functions +as a password. You are responsible for choosing topic names that cannot be easily guessed. We are not responsible +for any unauthorized access to messages published to easily guessable topic names. + +For reserved topics and access control features, consider subscribing to a paid plan. + +## Intellectual property + +### Open source software + +The ntfy server, web application, and mobile applications are open source software, dual-licensed under the +[Apache License 2.0](https://github.com/binwiederhier/ntfy/blob/main/LICENSE) and +[GPLv2](https://github.com/binwiederhier/ntfy/blob/main/LICENSE.GPLv2). You are free to use, modify, and +distribute the software in accordance with these licenses. + +### Trademarks + +The ntfy name, logo, and branding are trademarks of ntfy LLC. Our trademarks may not be used in connection +with any product or service without our prior written consent. + +### Your content + +You retain ownership of any content you transmit through the Service. By using the Service, you grant us a +limited license to process and transmit your content solely for the purpose of providing the Service. + +## Service availability + +The Service is provided on a "best effort" basis. We do not guarantee any specific uptime or availability. + +We strive to maintain high availability, but the Service may be interrupted for maintenance, updates, or +due to circumstances beyond our control. We will make reasonable efforts to notify users of planned +maintenance when possible. + +For applications requiring guaranteed uptime or specific service level agreements, we recommend +[self-hosting your own ntfy server](install.md). + +A [status page](https://ntfy.statuspage.io/) is available to check the current operational status of the Service. + +## Third-party services + +The Service relies on third-party services to provide certain functionality: + +- **Firebase Cloud Messaging (FCM)** - For push notifications to Android and iOS devices +- **Twilio** - For phone call notifications +- **Amazon SES** - For email notifications +- **Stripe** - For payment processing + +Your use of these features is subject to the respective third-party terms and privacy policies. For more +details, see our [privacy policy](privacy.md). + +## Links to other websites + +Our Service may contain links to third-party websites or services that are not owned or controlled by us. + +We have no control over, and assume no responsibility for, the content, privacy policies, or practices of +any third-party websites or services. You acknowledge and agree that we shall not be responsible or liable, +directly or indirectly, for any damage or loss caused by or in connection with the use of any such content, +goods, or services available through any such websites or services. + +## Termination + +We may terminate or suspend your account immediately, without prior notice or liability, for any reason +whatsoever, including without limitation if you breach these Terms. + +Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, +you may do so through your account settings or by simply discontinuing use of the Service. + +Termination of your account will result in the deletion of your account data in accordance with our +[privacy policy](privacy.md). + +We may retain certain data as required to comply with legal obligations, resolve disputes, and enforce our +agreements, as described in our privacy policy. + +## Limitation of liability + +In no event shall ntfy LLC, nor its owner, employees, partners, agents, suppliers, or affiliates, be liable +for any indirect, incidental, special, consequential, or punitive damages, including without limitation: + +- Loss of profits, data, use, goodwill, or other intangible losses +- Damages resulting from your access to, use of, or inability to access or use the Service +- Damages resulting from any conduct or content of any third party on the Service +- Damages resulting from any content obtained from the Service +- Damages resulting from unauthorized access, use, or alteration of your transmissions or content + +This limitation applies whether based on warranty, contract, tort (including negligence), or any other legal +theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set +forth herein is found to have failed of its essential purpose. + +## Indemnification + +You agree to defend, indemnify, and hold harmless ntfy LLC and its owner, employees, partners, agents, suppliers, +and affiliates from and against any claims, damages, obligations, losses, liabilities, costs, or debt, and +expenses (including but not limited to attorney's fees) arising from: + +- Your use of and access to the Service +- Your violation of any term of these Terms +- Your violation of any applicable law or regulation +- Your content, including any claim that your content infringes or misappropriates the rights of any third party + +## Disclaimer + +Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis, +without warranties of any kind, whether express or implied, including but not limited to implied warranties of +merchantability, fitness for a particular purpose, non-infringement, or course of performance. + +ntfy LLC does not warrant that: + +- The Service will function uninterrupted, secure, or available at any particular time or location +- Any errors or defects will be corrected +- The Service is free of viruses or other harmful components +- The results of using the Service will meet your requirements +- Messages will be delivered successfully or in a timely manner + +If your use case requires guaranteed message delivery, high availability, or handling of sensitive data, we +strongly recommend [self-hosting your own ntfy server](install.md) where you have full control over the +infrastructure and data. + +## Governing law + +These Terms shall be governed and construed in accordance with the laws of the State of Connecticut, United States, +without regard to its conflict of law provisions. + +Any legal action or proceeding arising under these Terms shall be brought exclusively in the federal or state +courts located in Connecticut, and the parties hereby consent to personal jurisdiction and venue therein. + +Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. +If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions +of these Terms will remain in effect. + +These Terms constitute the entire agreement between us regarding our Service and supersede any prior agreements +we might have had regarding the Service. + +## Changes to these Terms + +We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is +material, we will try to provide at least 30 days' notice prior to any new terms taking effect. + +What constitutes a material change will be determined at our sole discretion. Changes will be posted on this +page with an updated "Last updated" date. You may also review all changes in the +[Git history](https://github.com/binwiederhier/ntfy/commits/main/docs/terms.md). + +By continuing to access or use our Service after those revisions become effective, you agree to be bound by +the revised Terms. If you do not agree to the new Terms, please stop using the Service. + +## Contact + +If you have any questions about these Terms, please see our [contact page](contact.md) or email us at +[support@mail.ntfy.sh](mailto:support@mail.ntfy.sh). diff --git a/mkdocs.yml b/mkdocs.yml index 1e15b5db..f2a7afb7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -101,6 +101,7 @@ nav: - "Development": develop.md - "Contributing": contributing.md - "Privacy policy": privacy.md + - "Terms of Service": terms.md - "Contact": contact.md From cea5fececbb1759b2ca6bcca56e84b41d3c36264 Mon Sep 17 00:00:00 2001 From: Kavyansh Khaitan <73186427+KavyanshKhaitan2@users.noreply.github.com> Date: Tue, 27 Jan 2026 20:00:29 +0530 Subject: [PATCH 8/8] Fix JSON syntax for JS examples (and make one of them more consistent) --- docs/publish.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index 864e605b..12341f01 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -1619,7 +1619,7 @@ And the same example using [JSON publishing](#publish-as-json): method: 'POST', body: JSON.stringify({ topic: "myhome", - message": "Somebody retweeted your tweet.", + message: "Somebody retweeted your tweet.", actions: [ { action: "view", @@ -1879,7 +1879,7 @@ And the same example using [JSON publishing](#publish-as-json): method: 'POST', body: JSON.stringify({ topic: "wifey", - message": "Your wife requested you send a picture of yourself.", + message: "Your wife requested you send a picture of yourself.", actions: [ { "action": "broadcast", @@ -2154,7 +2154,7 @@ And the same example using [JSON publishing](#publish-as-json): method: 'POST', body: JSON.stringify({ topic: "myhome", - "message": "Garage door has been open for 15 minutes. Close it?", + message: "Garage door has been open for 15 minutes. Close it?", actions: [ { "action": "http",