From 52b0856a2a439c0db19c2a9249a6c0739bba26f2 Mon Sep 17 00:00:00 2001 From: Alex Nagy Date: Thu, 24 Apr 2025 20:21:45 +0000 Subject: [PATCH 001/133] Translated using Weblate (Hungarian) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: Alex Nagy Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hu/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/hu.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/lang/hu.json b/src/lang/hu.json index 2b0b8a625..2eb829c68 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -1080,5 +1080,24 @@ "Fail": "Hiba", "Pop": "Megjelen", "Bitrix24 Webhook URL": "Bitrix24 Webhook URL", - "wayToGetHeiiOnCallDetails": "A Trigger ID és az API kulcsok megszerzésének módja a {dokumentáció}" + "wayToGetHeiiOnCallDetails": "A Trigger ID és az API kulcsok megszerzésének módja a {dokumentáció}", + "telegramServerUrl": "(Választható) Szerver Url", + "telegramServerUrlDescription": "A Telegram bot api korlátozásainak feloldása vagy hozzáférés a blokkolt területekhez (Kína, Irán stb.). További információért kattintson a {0} gombra. Alapértelmezett: {1}", + "wahaSession": "Munkamenet", + "wahaChatId": "Beszélgetés azonosító (Telefonszám / Kontakt azonosító / Csoport azonosító)", + "wayToGetWahaApiUrl": "WAHA példányod URL-je.", + "wayToGetWahaApiKey": "Az API-kulcs a WHATSAPP_API_KEY környezeti változó értéke, amelyet a WAHA futtatásához használt.", + "wayToWriteWahaChatId": "A telefonszám nemzetközi előtaggal, de az elején lévő pluszjel ({0}), a kapcsolattartó azonosítója ({1}) vagy a csoportazonosító ({2}) nélkül. A WAHA Session értesítéseket küld erre a beszélgetési azonosítóra.", + "Plain Text": "Sima Szöveg", + "Message Template": "Üzenet Sablon", + "Template Format": "Sablon Formátum", + "wayToGetWahaSession": "A munkamenetből WAHA küld egy értesítést a Beszélgetés azonosítóra. Az értesítést megtalálhatod a WAHA műszerfalon.", + "YZJ Webhook URL": "YZJ Webhook URL", + "YZJ Robot Token": "YZJ Robot token", + "templateServiceName": "szolgáltatás név", + "templateHostnameOrURL": "kiszolgáló név vagy URL", + "templateStatus": "státusz", + "telegramUseTemplate": "Egyéni üzenetsablon használata", + "telegramUseTemplateDescription": "Ha engedélyezve van, az üzenet egy egyéni sablon szerint lesz elküldve.", + "telegramTemplateFormatDescription": "Telegram különböző jelölőnyelvek használatát engedi, további információkért lásd {0}." } From 4953bf5eacf859c2c616006cd01bef425f1f5845 Mon Sep 17 00:00:00 2001 From: Tiramisu Date: Thu, 24 Apr 2025 20:21:45 +0000 Subject: [PATCH 002/133] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: Tiramisu Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pt-BR.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index e6953ebfa..0fe853aef 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -1068,5 +1068,18 @@ "telegramTemplateFormatDescription": "O Telegram permite o uso de diferentes linguagens de marcação para mensagens. Veja o Telegram {0} para detalhes específicos.", "templateHostnameOrURL": "hostname ou URL", "templateStatus": "status", - "telegramUseTemplateDescription": "Se habilitado, a mensagem será enviada usando um template personalizado." + "telegramUseTemplateDescription": "Se habilitado, a mensagem será enviada usando um template personalizado.", + "telegramServerUrlDescription": "Para suspender as limitações da API de bots do Telegram ou obter acesso em áreas bloqueadas (China, Irã, etc). Para mais informações, clique em {0}. Padrão: {1}", + "wahaSession": "Sessão", + "wayToGetWahaApiUrl": "URL da sua instância WAHA.", + "wayToGetWahaApiKey": "API Key é o valor da variável de ambiente WHATSAPP_API_KEY que você usou para executar o WAHA.", + "wayToGetWahaSession": "A partir desta sessão, o WAHA envia notificações para o Chat ID. Você pode encontrá-lo no WAHA Dashboard.", + "wayToWriteWahaChatId": "O número de telefone com o prefixo internacional, mas sem o sinal de mais no início ({0}), o Contact ID ({1}) ou o Group ID ({2}). As notificações são enviadas para este Chat ID da sessão WAHA.", + "Plain Text": "Texto Simples", + "wahaChatId": "Chat ID (Número de Telefone / Contact ID / Group ID)", + "YZJ Webhook URL": "YZJ Webhook URL", + "YZJ Robot Token": "YZJ Robot token", + "telegramServerUrl": "(Opcional) URL do Servidor", + "Message Template": "Modelo de Mensagem", + "Template Format": "Formato do Modelo" } From 5654130ab4b4aa51f0b092b5269aa12f83cd46ec Mon Sep 17 00:00:00 2001 From: A3 Date: Thu, 24 Apr 2025 20:21:45 +0000 Subject: [PATCH 003/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: A3 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 4ddb77624..1c24ce38c 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -127,7 +127,7 @@ "Create": "Aanmaken", "Clear Data": "Data wissen", "Events": "Gebeurtenissen", - "Heartbeats": "Heartbeats", + "Heartbeats": "Hartslagen", "Auto Get": "Auto Get", "backupDescription": "U kunt een back-up maken van alle monitoren en alle meldingen in een JSON-bestand.", "backupDescription2": "PS: Geschiedenis- en gebeurtenisgegevens zijn niet inbegrepen.", @@ -1082,12 +1082,31 @@ "Time Sensitive (iOS Only)": "Tijdsgevoelig (alleen voor iOs)", "From": "Van", "Can be found on:": "Kan gevonden worden op: {0}", - "The phone number of the recipient in E.164 format.": "Het telefoonnummer van de ontvanger in E.164 formaat", + "The phone number of the recipient in E.164 format.": "Het telefoonnummer van de ontvanger in E.164 formaat.", "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Ofwel een sms zender ID of een telefoonnummer in E.164 formaat als je reacties wil ontvangen.", "Clear": "Helder", "Elevator": "Lift", "Pop": "Pop", "Community String": "Gemeenschap Tekst", - "Json Query Expression": "Json Query Expressie", - "ignoredTLSError": "TLS/SSL-fouten zijn genegeerd" + "Json Query Expression": "JSON Query Expressie", + "ignoredTLSError": "TLS/SSL-fouten zijn genegeerd", + "telegramServerUrl": "(Optioneel) Server Url", + "telegramServerUrlDescription": "Om de beperkingen van Telegram's bot api op te heffen of toegang te krijgen in geblokkeerde gebieden (China, Iran, enz.). Klik voor meer informatie op {0}. Standaard: {1}", + "wahaSession": "Sessie", + "wahaChatId": "Chat-ID (telefoonnummer / contact-ID / groeps-ID)", + "wayToGetWahaApiUrl": "Je WAHA Instance URL.", + "wayToGetWahaApiKey": "API Key is de WHATSAPP_API_KEY omgevingsvariabele die je hebt gebruikt om WAHA uit te voeren.", + "wayToGetWahaSession": "Vanaf deze sessie stuurt WAHA meldingen naar Chat ID. Je kunt deze vinden in WAHA Dashboard.", + "wayToWriteWahaChatId": "Het telefoonnummer met het internationale voorvoegsel, maar zonder het plusteken aan het begin ({0}), de contact-ID ({1}) of de groeps-ID ({2}). Vanuit WAHA Sessie worden meldingen naar deze Chat-ID verzonden.", + "YZJ Robot Token": "YZJ Robot token", + "Plain Text": "Platte tekst", + "Message Template": "Bericht Sjabloon", + "YZJ Webhook URL": "YZJ Webhook URL", + "Template Format": "Sjabloonformaat", + "templateServiceName": "service naam", + "templateHostnameOrURL": "hostnaam of url", + "templateStatus": "status", + "telegramUseTemplate": "Gebruik aangepaste bericht sjabloon", + "telegramTemplateFormatDescription": "Telegram staat het gebruik van verschillende opmaaktalen voor berichten toe, zie Telegram {0} voor specifieke details.", + "telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon." } From edc62bd68ef24068b74dc17cefa846df04f3695e Mon Sep 17 00:00:00 2001 From: B3CKDOOR Date: Thu, 24 Apr 2025 20:21:45 +0000 Subject: [PATCH 004/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: B3CKDOOR Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 1c24ce38c..2c1d0f47d 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -649,8 +649,8 @@ "smseagleTo": "Telefoonnummer(s)", "Custom Monitor Type": "Custom Monitor Type", "trustProxyDescription": "'X-Forwarded-*' headers vertrouwen. Als je de correcte client IP wilt krijgen en de Uptime Kuma installatie is achter een proxy zoals Nginx of Apache, schakel dan dit in.", - "RadiusCalledStationId": "Called Station Id", - "RadiusCalledStationIdDescription": "Identifier of the called device", + "RadiusCalledStationId": "Genoemde stations ID", + "RadiusCalledStationIdDescription": "Identifier van het genoemde apparaat", "RadiusCallingStationId": "Calling Station Id", "ZohoCliq": "ZohoCliq", "Long-Lived Access Token": "Long-Lived Access Token", From 87ab164a45b96c4f68ba5eb081bbbed53e97e0d9 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Thu, 24 Apr 2025 20:21:45 +0000 Subject: [PATCH 005/133] Translated using Weblate (Polish) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: Adam Stachowicz Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pl.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/lang/pl.json b/src/lang/pl.json index 9832fb7c1..fd96faef6 100644 --- a/src/lang/pl.json +++ b/src/lang/pl.json @@ -1098,5 +1098,24 @@ "RabbitMQ Username": "Nazwa użytkownika RabbitMQ", "RabbitMQ Password": "Hasło RabbitMQ", "SendGrid API Key": "Klucz API SendGrid", - "Separate multiple email addresses with commas": "Oddziel wiele adresów e-mail przecinkami" + "Separate multiple email addresses with commas": "Oddziel wiele adresów e-mail przecinkami", + "templateServiceName": "service name", + "telegramServerUrlDescription": "Aby znieść ograniczenia api bota Telegrama lub uzyskać dostęp w zablokowanych obszarach (Chiny, Iran itp.). Aby uzyskać więcej informacji, kliknij {0}. Domyślnie: {1}", + "wayToGetWahaSession": "Z tej sesji WAHA wysyła powiadomienia do Chat ID. Można go znaleźć w WAHA Dashboard.", + "wayToWriteWahaChatId": "Numer telefonu z prefiksem międzynarodowym, ale bez znaku plus na początku ({0}), identyfikator kontaktu ({1}) lub identyfikator grupy ({2}). Powiadomienia są wysyłane do tego identyfikatora czatu z sesji WAHA.", + "wahaSession": "Sesja", + "wahaChatId": "Identyfikator czatu (numer telefonu / identyfikator kontaktu / identyfikator grupy)", + "wayToGetWahaApiUrl": "Adres URL instancji WAHA.", + "wayToGetWahaApiKey": "Klucz API to wartość zmiennej środowiskowej WHATSAPP_API_KEY użytej do uruchomienia WAHA.", + "YZJ Robot Token": "Token robota YZJ", + "YZJ Webhook URL": "Adres URL usługi YZJ Webhook", + "telegramServerUrl": "(Opcjonalnie) Adres URL serwera", + "Plain Text": "Zwykły tekst", + "Message Template": "Szablon wiadomości", + "Template Format": "Format szablonu", + "templateHostnameOrURL": "nazwa hosta lub adres URL", + "templateStatus": "status", + "telegramUseTemplate": "Użyj niestandardowego szablonu wiadomości", + "telegramUseTemplateDescription": "Jeśli opcja ta jest włączona, wiadomość zostanie wysłana przy użyciu niestandardowego szablonu.", + "telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje." } From c82ee23d6539faaf6c5a46c5311f06f749c4af1c Mon Sep 17 00:00:00 2001 From: A3 Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 006/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: A3 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 2c1d0f47d..214d7c557 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -464,24 +464,24 @@ "Show Powered By": "Laat \"Mogeljik gemaakt door\" zien", "Domain Names": "Domein Namen", "pushoversounds pushover": "Pushover (standaard)", - "pushoversounds bike": "Bike", - "pushoversounds bugle": "Bugle", - "pushoversounds cashregister": "Cash Register", + "pushoversounds bike": "Fiets", + "pushoversounds bugle": "Trompet", + "pushoversounds cashregister": "Kassa", "pushoversounds classical": "Classical", - "pushoversounds cosmic": "Cosmic", - "pushoversounds falling": "Falling", + "pushoversounds cosmic": "Buitenaards", + "pushoversounds falling": "Vallend", "pushoversounds gamelan": "Gamelan", - "pushoversounds incoming": "Incoming", - "pushoversounds intermission": "Intermission", - "pushoversounds magic": "Magic", - "pushoversounds mechanical": "Mechanical", + "pushoversounds incoming": "Inkomend", + "pushoversounds intermission": "Pauze", + "pushoversounds magic": "Magie", + "pushoversounds mechanical": "Mechanisch", "pushoversounds pianobar": "Piano Bar", - "pushoversounds siren": "Siren", - "pushoversounds spacealarm": "Space Alarm", + "pushoversounds siren": "Sirene", + "pushoversounds spacealarm": "Ruimte Alarm", "pushoversounds tugboat": "Tug Boat", "pushoversounds alien": "Alien Alarm (long)", "pushoversounds climb": "Climb (long)", - "pushoversounds persistent": "Persistent (long)", + "pushoversounds persistent": "Aanhoudend (lang)", "pushoversounds echo": "Pushover Echo (long)", "pushoversounds updown": "Up Down (long)", "pushoversounds vibrate": "Alleen trillen", @@ -650,7 +650,7 @@ "Custom Monitor Type": "Custom Monitor Type", "trustProxyDescription": "'X-Forwarded-*' headers vertrouwen. Als je de correcte client IP wilt krijgen en de Uptime Kuma installatie is achter een proxy zoals Nginx of Apache, schakel dan dit in.", "RadiusCalledStationId": "Genoemde stations ID", - "RadiusCalledStationIdDescription": "Identifier van het genoemde apparaat", + "RadiusCalledStationIdDescription": "Identificatie van het genoemde apparaat", "RadiusCallingStationId": "Calling Station Id", "ZohoCliq": "ZohoCliq", "Long-Lived Access Token": "Long-Lived Access Token", @@ -789,7 +789,7 @@ "Badge Warn Days": "Badge Waarschuwing dagen", "Badge Down Days": "Badge Offline dagen", "Badge Style": "Badge stijl", - "chromeExecutable": "Chrome/Chromium Executable", + "chromeExecutable": "Chrome/Chromium Uitvoerbaar bestand", "chromeExecutableAutoDetect": "Automatisch detecteren", "Edit Maintenance": "Onderhoud bewerken", "Badge Label": "Badge Label", @@ -1042,33 +1042,33 @@ "greater than": "meer dan", "record": "dossier", "jsonQueryDescription": "Parseer en haal specifieke gegevens uit de JSON-respons van de server met behulp van JSON-query of gebruik \"$\" voor de onbewerkte respons, als u geen JSON verwacht. Het resultaat wordt vervolgens vergeleken met de verwachte waarde, als strings. Zie {0} voor documentatie en gebruik {1} om te experimenteren met query's.", - "rabbitmqNodesDescription": "Voer het URL voor de RabbitMQ beheerkooppunt inclusief protocol en poort in. Bijvoorbeeld: {0}", + "rabbitmqNodesDescription": "Voer het URL voor de RabbitMQ beheer nodes inclusief protocol en poort in. Bijvoorbeeld: {0}", "rabbitmqNodesRequired": "Aub stel de knooppunten voor deze monitor in.", - "rabbitmqNodesInvalid": "Stel gebruik een volledig gekwalificeerde (beginnend met 'http') URL voor RabbitMQ-knooppunten.", + "rabbitmqNodesInvalid": "Gebruik een volledig gekwalificeerde (beginnend met 'http') URL voor de RabbitMQ nodes.", "RabbitMQ Username": "RabbitMQ gebruikersnaam", "RabbitMQ Password": "RabbitMQ wachtwoord", "rabbitmqHelpText": "Om gebruik te maken van de monitor moet je de Management Plugin in de RabbitMQ setup aanzetten. Voor meer informatie zie de {rabitmq_documentatie}.", "SendGrid API Key": "SendGrid API sleutel", "Separate multiple email addresses with commas": "Splits meerdere emailadressen met kommas", - "RabbitMQ Nodes": "RabbitMQ Beheerknoppunten", + "RabbitMQ Nodes": "RabbitMQ beheer Nodes", "shrinkDatabaseDescriptionSqlite": "Trigger database {vacuum} voor SQLite. {auto_vacuum} is al ingeschakeld, maar hiermee wordt de database niet gedefragmenteerd en worden ook databasepagina's niet afzonderlijke opnieuw ingepakt zoals de opdracht {vacuum} dat doet.", - "aboutSlackUsername": "Wijzigt de weergavenaam van de afzender van het bericht. Als je iemand wilt vermelden, voer in dat geval de naam in als vriendelijke naam.", + "aboutSlackUsername": "Verandert de weergavenaam van de afzender. Als je iemand wil vermelden, voeg dit dan aan de vriendelijke naam toe.", "cacheBusterParam": "Voeg de parameter {0} toe", "Form Data Body": "Formulier Gegevens Content", "Optional: Space separated list of scopes": "Optioneel: Reikwijdte door spaties gescheiden lijst", - "Alphanumerical string and hyphens only": "Alleen alfanumerieke tekenreeksen en koppeltekens", + "Alphanumerical string and hyphens only": "Alleen alfanumerieke tekens en streepjes", "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Tijdsgevoelige meldingen worden meteen afgeleverd, zelfs als het apparaat in niet storen modus staat.", - "Message format": "Berichtformaat", - "Send rich messages": "Stuur rijke berichten", + "Message format": "Bericht opmaak", + "Send rich messages": "Verstuur berichten met opmaak", "OAuth Scope": "OAuth Reikwijdte", "equals": "gelijk aan", "not equals": "niet gelijk aan", "less than or equal to": "kleiner dan of gelijk aan", "greater than or equal to": "groter dan of gelijk aan", - "Notification Channel": "Meldingskanaal", + "Notification Channel": "Notificatie kanaal", "Sound": "Geluid", "Arcade": "Speelhal", - "Correct": "Juist", + "Correct": "Goed", "Fail": "Mislukt", "Harp": "Harp", "Reveal": "Laat zien", From 8eea2bde65bf40db93ff6c3e7f02f7f23ab158de Mon Sep 17 00:00:00 2001 From: B3CKDOOR Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 007/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: B3CKDOOR Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 214d7c557..5f121e8b3 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -1039,7 +1039,7 @@ "ends with": "eindigt met", "not ends with": "eindigt niet met", "less than": "minder dan", - "greater than": "meer dan", + "greater than": "groter dan", "record": "dossier", "jsonQueryDescription": "Parseer en haal specifieke gegevens uit de JSON-respons van de server met behulp van JSON-query of gebruik \"$\" voor de onbewerkte respons, als u geen JSON verwacht. Het resultaat wordt vervolgens vergeleken met de verwachte waarde, als strings. Zie {0} voor documentatie en gebruik {1} om te experimenteren met query's.", "rabbitmqNodesDescription": "Voer het URL voor de RabbitMQ beheer nodes inclusief protocol en poort in. Bijvoorbeeld: {0}", @@ -1053,18 +1053,18 @@ "RabbitMQ Nodes": "RabbitMQ beheer Nodes", "shrinkDatabaseDescriptionSqlite": "Trigger database {vacuum} voor SQLite. {auto_vacuum} is al ingeschakeld, maar hiermee wordt de database niet gedefragmenteerd en worden ook databasepagina's niet afzonderlijke opnieuw ingepakt zoals de opdracht {vacuum} dat doet.", "aboutSlackUsername": "Verandert de weergavenaam van de afzender. Als je iemand wil vermelden, voeg dit dan aan de vriendelijke naam toe.", - "cacheBusterParam": "Voeg de parameter {0} toe", - "Form Data Body": "Formulier Gegevens Content", - "Optional: Space separated list of scopes": "Optioneel: Reikwijdte door spaties gescheiden lijst", + "cacheBusterParam": "Voeg de {0} parameter", + "Form Data Body": "Formulier Gegevens Body", + "Optional: Space separated list of scopes": "Optioneel: door spaties gescheiden lijst met scopes", "Alphanumerical string and hyphens only": "Alleen alfanumerieke tekens en streepjes", "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Tijdsgevoelige meldingen worden meteen afgeleverd, zelfs als het apparaat in niet storen modus staat.", "Message format": "Bericht opmaak", "Send rich messages": "Verstuur berichten met opmaak", - "OAuth Scope": "OAuth Reikwijdte", - "equals": "gelijk aan", - "not equals": "niet gelijk aan", - "less than or equal to": "kleiner dan of gelijk aan", - "greater than or equal to": "groter dan of gelijk aan", + "OAuth Scope": "OAuth bereik", + "equals": "hetzelfde als", + "not equals": "niet gelijk", + "less than or equal to": "minder dan of gelijk aan", + "greater than or equal to": "meer dan of gelijk aan", "Notification Channel": "Notificatie kanaal", "Sound": "Geluid", "Arcade": "Speelhal", @@ -1087,7 +1087,7 @@ "Clear": "Helder", "Elevator": "Lift", "Pop": "Pop", - "Community String": "Gemeenschap Tekst", + "Community String": "Gemeenschapsreeks", "Json Query Expression": "JSON Query Expressie", "ignoredTLSError": "TLS/SSL-fouten zijn genegeerd", "telegramServerUrl": "(Optioneel) Server Url", From acdd1e6a32485f0a132c15e99261e2b649672c39 Mon Sep 17 00:00:00 2001 From: A3 Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 008/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: A3 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/nl-NL.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 5f121e8b3..806c921ad 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -1062,7 +1062,7 @@ "Send rich messages": "Verstuur berichten met opmaak", "OAuth Scope": "OAuth bereik", "equals": "hetzelfde als", - "not equals": "niet gelijk", + "not equals": "niet gelijk aan", "less than or equal to": "minder dan of gelijk aan", "greater than or equal to": "meer dan of gelijk aan", "Notification Channel": "Notificatie kanaal", From 16c048f3bb188a834b48af88f58edf86b9f13b39 Mon Sep 17 00:00:00 2001 From: ramondsq Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 009/133] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: ramondsq Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 5b473b071..d6fe898aa 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1117,5 +1117,7 @@ "wayToGetWahaApiKey": "API 密钥是你用于运行 WAHA 的 WHATSAPP_API_KEY 环境变量值。", "telegramTemplateFormatDescription": "Telegram 允许在消息中使用不同的标记语言,具体细节请参见 Telegram {0}。", "YZJ Webhook URL": "YZJ Webhook 地址", - "YZJ Robot Token": "YZJ 机器人令牌" + "YZJ Robot Token": "YZJ 机器人令牌", + "telegramServerUrl": "(可选) 服务器 Url", + "telegramServerUrlDescription": "要解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}" } From 395e505c184920e64bed8d537bd2c481379fad64 Mon Sep 17 00:00:00 2001 From: Roberto Agria Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 010/133] Translated using Weblate (Italian) Currently translated at 66.3% (709 of 1069 strings) Co-authored-by: Roberto Agria Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/it-IT.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 12278ff29..3104e5fcb 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -59,7 +59,7 @@ "day": "giorno | giorni", "-day": "-giorni", "hour": "ora", - "-hour": "-ore", + "-hour": "-ora", "Response": "Risposta", "Ping": "Ping", "Monitor Type": "Modalità di monitoraggio", @@ -80,7 +80,7 @@ "pushOptionalParams": "Parametri aggiuntivi: {0}", "Save": "Salva", "Notifications": "Notifiche", - "Not available, please setup.": "Non disponibili, richiesta configurazione manuale.", + "Not available, please setup.": "Non disponibile, richiesta configurazione manuale.", "Setup Notification": "Configura le notifiche", "Light": "Chiaro", "Dark": "Scuro", @@ -738,5 +738,9 @@ "invertKeywordDescription": "Cerca la parola chiave essere assente anziché presente.", "octopushAPIKey": "\"API Key\" dalle credenziali API HTTP nel pannello di controllo", "Enable TLS": "Abilita TLS", - "ignoredTLSError": "Ignora errori TLS/SSL" + "ignoredTLSError": "Ignora errori TLS/SSL", + "templateHostnameOrURL": "nome host o URL", + "templateStatus": "stato", + "templateServiceName": "nome del servizio", + "locally configured mail transfer agent": "agente mail configurato localmente" } From 139a2b78658e1d6e92cb1a2aafb72fdc71f9e41c Mon Sep 17 00:00:00 2001 From: Donker_Jumala Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 011/133] Translated using Weblate (Japanese) Currently translated at 100.0% (1070 of 1070 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: Donker_Jumala Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ja.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index 0f040cced..cb46b1500 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -1065,5 +1065,25 @@ "Key Added": "追加キー", "Bark Sound": "Bark通知音", "Badge URL": "バッジURL", - "pushoversounds intermission": "Intermission" + "pushoversounds intermission": "Intermission", + "telegramServerUrl": "(任意)サーバーUrl", + "telegramServerUrlDescription": "Telegramのボットapiの制限を解除したり、ブロックされた地域(中国、イランなど)でアクセスする。詳しくは {0} をクリックしてください。デフォルト: {1}", + "wayToWriteWahaChatId": "電話番号の先頭にプラス記号を付けない国際電話番号({0})、コンタクトID ({1})、またはグループID ({2}) 。WAHAセッションからこのチャットIDに通知が送信されます。", + "wahaSession": "セッション", + "wahaChatId": "チャットID(電話番号/連絡先ID/グループID)", + "wayToGetWahaApiUrl": "WAHAインスタンスのURL。", + "wayToGetWahaApiKey": "APIキーはWAHAを実行するために使用したWHATSAPP_API_KEY環境変数の値です。", + "wayToGetWahaSession": "このセッションから WAHA はチャット ID に通知を送信します。WAHAダッシュボードで確認できます。", + "YZJ Webhook URL": "YZJ ウェブフック URL", + "YZJ Robot Token": "YZJ ロボットトークン", + "Plain Text": "平文", + "Message Template": "メッセージテンプレート", + "Template Format": "テンプレート形式", + "templateServiceName": "サービス名", + "templateHostnameOrURL": "ホスト名またはURL", + "templateStatus": "ステータス", + "telegramUseTemplate": "カスタムメッセージテンプレートを使用", + "telegramUseTemplateDescription": "有効にすると、メッセージはカスタムテンプレートを使って送信されます。", + "telegramTemplateFormatDescription": "Telegramではメッセージに異なるマークアップ言語を使用することができます。詳細はTelegram {0} を参照してください。", + "Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています" } From d0d5dbc8e76dd31c5dc3bdce90a518f66b2b4a4d Mon Sep 17 00:00:00 2001 From: Marcis Pauls Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 012/133] Translated using Weblate (Latvian) Currently translated at 0.3% (4 of 1069 strings) Added translation using Weblate (Latvian) Co-authored-by: Marcis Pauls Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/lv/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/lv.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/lang/lv.json diff --git a/src/lang/lv.json b/src/lang/lv.json new file mode 100644 index 000000000..c069c7303 --- /dev/null +++ b/src/lang/lv.json @@ -0,0 +1,7 @@ +{ + "languageName": "Latviešu", + "setupDatabaseChooseDatabase": "Kuru datubāzi izmantosiet?", + "setupDatabaseEmbeddedMariaDB": "Jums nav nekas jādara. Docker imidžā ir iebūvēta un automātiski konfigurēta MariaDB datubāze. Uptime Kuma pieslēgsies šai datubāzei izmantojot unix soketu.", + "setupDatabaseSQLite": "Vienkāršs datu bāzes fails, iesakāms maza izmēra risinājumiem. Pirms versijas v2.0.0 SQLite bija noklusējuma datubāze.", + "setupDatabaseMariaDB": "Pieslēgties ārējai MariaDB datubāzei. Jums būs jākonfigurē datubāzes pieslēgšanās informācija." +} From 6869036a307d46b421482629607e9b28a6e7f226 Mon Sep 17 00:00:00 2001 From: ASTERISK Kwon Date: Thu, 24 Apr 2025 20:21:46 +0000 Subject: [PATCH 013/133] Translated using Weblate (Korean) Currently translated at 74.1% (793 of 1069 strings) Co-authored-by: ASTERISK Kwon Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ko-KR.json | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index c8601efbe..07f8fba74 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -76,7 +76,7 @@ "Accepted Status Codes": "응답 성공 상태 코드", "Save": "저장", "Notifications": "알림", - "Not available, please setup.": "존재하지 않아요, 새로운 거 하나 만드는 건 어때요?", + "Not available, please setup.": "존재하지 않아요. 새로운 거 하나 만드는 건 어때요?", "Setup Notification": "알림 설정", "Light": "화이트", "Dark": "다크", @@ -797,5 +797,34 @@ "successKeywordExplanation": "성공으로 간주되는 MQTT 키워드", "Reset Token": "토큰 초기화", "Check/Uncheck": "체크/체크 해제", - "pushViewCode": "푸시 모니터링는 어떻게 사용하나요? (코드 보기)" + "pushViewCode": "푸시 모니터링는 어떻게 사용하나요? (코드 보기)", + "Search monitored sites": "모니터링중인 사이트 검색", + "templateHeartbeatJSON": "heartbeat를 설명하는 오브젝트", + "shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에서 {vacuum} 명령을 실행해요. {auto_vacuum}이 이미 활성화되어 있지만, {auto_vacuum}은 {vacuum}이 하는 것처럼 데이터베이스를 조각 모음 하거나 페이지를 다시 압축하지는 않아요.", + "statusPageSpecialSlugDesc": "특별한 주소 {0}: 아무런 주소도 입력되지 않으면 이 페이지가 보여요", + "Add a new expiry notification day": "새 만료 알림 날짜 추가", + "Refresh Interval Description": "이 상태 페이지는 {0}초마다 완전 새로고침(F5) 돼요", + "telegramServerUrlDescription": "텔레그램 봇 API의 제한을 해제하거나, 차단된 지역(중국, 이란 등)에서 액세스하려면 {0}을 클릭하세요. 기본값: {1}", + "chromeExecutableDescription": "Docker 사용자의 경우, Chromium이 아직 설치되지 않았다면 이를 설치하고 테스트 결과를 표시하는 데 몇 분이 걸릴 수 있어요. 1GB의 디스크 공간을 사용해요.", + "templateMonitorJSON": "monitor를 설명하는 오브젝트", + "webhookBodyCustomOption": "커스텀 Body", + "telegramServerUrl": "(선택) 서버 URL", + "and": "그리고", + "emailCustomisableContent": "사용자 지정 가능한 콘텐츠", + "smtpLiquidIntroduction": "다음 두 개 필드는 Liquid 템플릿 언어를 통해 템플릿화할 수 있습니다. 사용 지침은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:", + "leave blank for default subject": "기본값을 사용하려면 비워두세요", + "emailCustomBody": "커스텀 Body", + "leave blank for default body": "기본값을 사용하려면 비워두세요", + "templateServiceName": "서비스 이름", + "templateHostnameOrURL": "호스트명 또는 URL", + "templateStatus": "상태", + "selectedMonitorCount": "선택됨: {0}", + "Remove the expiry notification": "만료 알림 날짜 제거", + "Refresh Interval": "새로고침 주기", + "noDockerHostMsg": "사용할 수 없습니다. 먼저 도커 호스트를 설정하세요.", + "DockerHostRequired": "이 모니터링을 위한 도커 호스트를 설정해 주세요.", + "tailscalePingWarning": "Tailscale Ping 모니터링을 사용하려면 Docker 없이 Uptime Kuma를 설치하고 서버에 Tailscale 클라이언트도 설치해야 합니다.", + "telegramUseTemplate": "커스텀 메시지 템플릿 사용", + "telegramUseTemplateDescription": "활성화하면 메시지를 보낼 때 커스텀 템플릿을 사용해요.", + "telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요." } From 6a7c5eb11d0ecc1fc2263add07087f6a7be6a76d Mon Sep 17 00:00:00 2001 From: dongsu8142 Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 014/133] Translated using Weblate (Korean) Currently translated at 74.9% (801 of 1069 strings) Co-authored-by: dongsu8142 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ko-KR.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 07f8fba74..be43aad89 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -826,5 +826,13 @@ "tailscalePingWarning": "Tailscale Ping 모니터링을 사용하려면 Docker 없이 Uptime Kuma를 설치하고 서버에 Tailscale 클라이언트도 설치해야 합니다.", "telegramUseTemplate": "커스텀 메시지 템플릿 사용", "telegramUseTemplateDescription": "활성화하면 메시지를 보낼 때 커스텀 템플릿을 사용해요.", - "telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요." + "telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요.", + "RabbitMQ Username": "RabbitMQ 사용자명", + "RabbitMQ Password": "RabbitMQ 비밀번호", + "wahaSession": "세션", + "emailTemplateMsg": "알림 메시지", + "Select message type": "메시지 유형 선택", + "Send to channel": "채널로 전송", + "Create new forum post": "새 포럼 게시물 만들기", + "Your User ID": "사용자 ID" } From 2660382a73dced678a7de6e0d600f9db361dd159 Mon Sep 17 00:00:00 2001 From: maz1lovo Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 015/133] Translated using Weblate (Russian) Currently translated at 99.6% (1065 of 1069 strings) Co-authored-by: maz1lovo Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ru-RU.json | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index a8935fe27..e055af110 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -1109,5 +1109,21 @@ "Json Query Expression": "Выражение запроса Json", "templateServiceName": "имя сервиса", "templateHostnameOrURL": "hostname или URL", - "templateStatus": "статус" + "templateStatus": "статус", + "telegramServerUrlDescription": "Чтобы поднять ограничения API API Telegram или получить доступ к заблокированным районам (Китай, Иран и т.д.). Для получения дополнительной информации нажмите {0}. По умолчанию: {1}", + "wayToGetWahaApiKey": "Ключ API - это значение переменной среды WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.", + "wayToGetWahaSession": "Из этой сессии WAHA отправляет уведомления на удостоверение личности чата. Вы можете найти его на приборной панели Waha.", + "wayToWriteWahaChatId": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатор контакта ({1}) или идентификатора группы ({2}). Уведомления отправляются на этот идентификатор чата от сеанса Waha.", + "wahaSession": "Сессия", + "wahaChatId": "Идентификатор чата (номер телефона / идентификатор контакта / идентификатор группы)", + "wayToGetWahaApiUrl": "Ваш экземпляр WAHA URL.", + "YZJ Webhook URL": "YZJ Вебхук URL", + "YZJ Robot Token": "YZJ Токен Робота", + "telegramServerUrl": "(Необязательно) URL Сервера", + "telegramUseTemplate": "Используйте пользовательский шаблон сообщения", + "telegramUseTemplateDescription": "Если включено, сообщение будет отправлено с помощью пользовательского шаблона.", + "telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки для сообщений, см. Telegram {0} для конкретных деталей.", + "Plain Text": "Простой текст", + "Message Template": "Шаблон сообщения", + "Template Format": "Формат шаблона" } From 2ac56d39bd2de220f965e2d2a795e0fd9a7ac439 Mon Sep 17 00:00:00 2001 From: Enes Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 016/133] Translated using Weblate (Turkish) Currently translated at 100.0% (1069 of 1069 strings) Co-authored-by: Enes Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/tr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/tr-TR.json | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json index 608ba8618..3c932d636 100644 --- a/src/lang/tr-TR.json +++ b/src/lang/tr-TR.json @@ -1,5 +1,5 @@ { - "languageName": "English", + "languageName": "İngilizce", "checkEverySecond": "{0} saniyede bir kontrol et", "retryCheckEverySecond": "{0} saniyede bir dene", "resendEveryXTimes": "Her {0} bir yeniden gönder", @@ -183,7 +183,7 @@ "Entry Page": "Giriş Sayfası", "statusPageNothing": "Burada hiçbir şey yok, lütfen bir grup veya servis ekleyin.", "No Services": "Hizmet Yok", - "All Systems Operational": "Tüm Sistemler Operasyonel", + "All Systems Operational": "Tüm Sistemler Sorunsuz", "Partially Degraded Service": "Kısmen Bozulmuş Hizmet", "Degraded Service": "Bozulmuş Hizmet", "Add Group": "Grup Ekle", @@ -224,7 +224,7 @@ "Prefix Custom Message": "Özel Önek Mesajı", "Hello @everyone is...": "Merhaba {'@'}everyone…", "teams": "Microsoft Teams", - "Webhook URL": "Webhook URL", + "Webhook URL": "Webhook URL'si", "wayToGetTeamsURL": "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.", "signal": "Sinyal", "Number": "Numara", @@ -378,8 +378,8 @@ "auto resolve": "otomatik çözümleme", "gorush": "Gorush", "alerta": "Alerta", - "alertaApiEndpoint": "API Endpoint", - "alertaEnvironment": "Environment", + "alertaApiEndpoint": "API Uç Noktası", + "alertaEnvironment": "Ortam", "alertaApiKey": "API Anahtarı", "alertaAlertState": "Uyarı Durumu", "alertaRecoverState": "Kurtarma Durumu", @@ -403,7 +403,7 @@ "Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir: ", "Bark Endpoint": "Bark Endpoint", "Bark Group": "Bark Group", - "Bark Sound": "Bark Sound", + "Bark Sound": "Havlama Sesi", "WebHookUrl": "WebHookUrl", "SecretKey": "SecretKey", "For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır", @@ -593,7 +593,7 @@ "Kook": "Kook", "wayToGetKookBotToken": "Uygulama oluşturun ve {0} adresinde bot tokenı alın", "wayToGetKookGuildID": "Kook ayarında \"Geliştirici Modu\"nu açın ve kimliğini almak için guild'e sağ tıklayın", - "Guild ID": "Guild ID", + "Guild ID": "Sunucu ID'si", "smseagle": "SMSEagle", "smseagleTo": "Telefon numara(ları)", "smseagleGroup": "Telefon defteri grubu ad(lar)ı", @@ -840,11 +840,11 @@ "styleElapsedTime": "Kalp atışı çubuğunun altında geçen süre", "styleElapsedTimeShowWithLine": "Göster (Satır ile birlikte)", "enableNSCD": "Tüm DNS isteklerini önbelleğe almak için NSCD'yi (Ad Hizmeti Önbellek Programı) etkinleştirin", - "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu docker imajı, MariaDB'yi sizin için otomatik olarak yerleştirdi ve yapılandırdı. Çalışma Süresi Kuma bu veritabanına unix soketi aracılığıyla bağlanacaktır.", + "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu docker imajı, MariaDB'yi sizin için otomatik olarak yerleştirdi ve yapılandırdı. Çalışma Süresi Kuma bu veri tabanına unix soketi aracılığıyla bağlanacaktır.", "setupDatabaseSQLite": "Küçük ölçekli dağıtımlar için önerilen basit bir veritabanı dosyası. v2.0.0'dan önce Uptime Kuma, varsayılan veritabanı olarak SQLite'ı kullanıyordu.", - "setupDatabaseChooseDatabase": "Hangi veritabanını kullanmak istersiniz?", - "setupDatabaseMariaDB": "Harici bir MariaDB veritabanına bağlanın. Veritabanı bağlantı bilgilerini ayarlamanız gerekir.", - "dbName": "Veritabanı ismi", + "setupDatabaseChooseDatabase": "Hangi veri tabanını kullanmak istersiniz?", + "setupDatabaseMariaDB": "Harici bir MariaDB veri tabanına bağlanın. Veri tabanı bağlantı bilgilerini ayarlamanız gerekir.", + "dbName": "Veri tabanı ismi", "Saved.": "Kaydedildi.", "toastErrorTimeout": "Hata Bildirimleri için Zaman Aşımı", "toastSuccessTimeout": "Başarı Bildirimleri için Zaman Aşımı", @@ -958,7 +958,7 @@ "whatHappensAtForumPost": "Yeni bir forum gönderisi oluşturun. Bu, mevcut gönderiye mesaj YAYINLAMAZ. Mevcut gönderide yayınlamak için \"{option}\" seçeneğini kullanın", "Command": "Komut", "mongodbCommandDescription": "Veritabanına karşı bir MongoDB komutu çalıştırın. Mevcut komutlar hakkında bilgi için {dokümantasyona} bakın", - "Bitrix24 Webhook URL": "Bitrix24 Webhook URL", + "Bitrix24 Webhook URL": "Bitrix24 Webhook URL'si", "wayToGetBitrix24Webhook": "{0} adresindeki adımları izleyerek bir web kancası oluşturabilirsiniz", "bitrix24SupportUserID": "Bitrix24'e kullanıcı kimliğinizi girin. Kullanıcının profiline giderek bağlantıdan kimliğini öğrenebilirsiniz.", "Select message type": "Mesaj türünü seçin", @@ -1098,5 +1098,24 @@ "RabbitMQ Nodes": "RabbitMQ Yönetim Sunucuları", "rabbitmqNodesDescription": "Protokol ve port dahil olmak üzere RabbitMQ yönetim düğümleri için URL'yi girin. Örnek: {0}", "rabbitmqHelpText": "Monitörü kullanmak için, RabbitMQ kurulumunuzda Yönetim Eklentisini etkinleştirmeniz gerekecektir. Daha fazla bilgi için lütfen {rabitmq_documentation}'a bakın.", - "aboutSlackUsername": "Mesaj göndericinin görünen adını değiştir. Eğer birilerini etiketlemek isterseniz, onu ismini dostça ekleyebilirsiniz." + "aboutSlackUsername": "Mesaj göndericinin görünen adını değiştir. Eğer birilerini etiketlemek isterseniz, onu ismini dostça ekleyebilirsiniz.", + "templateHostnameOrURL": "ana bilgisayar adı veya URL", + "templateStatus": "durum", + "telegramUseTemplate": "Özel mesaj şablonu kullan", + "telegramUseTemplateDescription": "Etkinleştirilirse mesaj özel bir şablon kullanılarak gönderilecektir.", + "telegramTemplateFormatDescription": "Telegram, mesajlar için farklı işaretleme dillerinin kullanılmasına izin verir, ayrıntılar için Telegram {0} bölümüne bakın.", + "templateServiceName": "servis adı", + "telegramServerUrlDescription": "Telegram'ın bot API sınırlamalarını kaldırmak veya engellenen alanlarda (Çin, İran vb.) erişim sağlamak için. Daha fazla bilgi için tıklayın {0}. Varsayılan: {1}", + "wahaSession": "Oturum", + "wahaChatId": "Sohbet Kimliği (Telefon Numarası / Kişi Kimliği / Grup Kimliği)", + "wayToGetWahaApiUrl": "WAHA Örnek URL'niz.", + "wayToGetWahaApiKey": "API Anahtarı, WAHA'yı çalıştırmak için kullandığınız WHATSAPP_API_KEY ortam değişkeni değeridir.", + "wayToGetWahaSession": "Bu oturumdan itibaren WAHA, Chat ID'ye bildirimler gönderir. Bunu WAHA Dashboard'da bulabilirsiniz.", + "wayToWriteWahaChatId": "Uluslararası ön eke sahip, ancak başında artı işareti olmayan telefon numarası ({0}), Kişi Kimliği ({1}) veya Grup Kimliği ({2}). Bildirimler WAHA Session'dan bu Sohbet Kimliğine gönderilir.", + "Plain Text": "Düz Metin", + "Message Template": "Mesaj Şablonu", + "Template Format": "Şablon Biçimi", + "YZJ Webhook URL": "YZJ Webhook URL'si", + "YZJ Robot Token": "YZJ Robot tokeni", + "telegramServerUrl": "(İsteğe bağlı) Sunucu URL'si" } From a09cbd176f0115d2e89c108d7bc5070734b92aec Mon Sep 17 00:00:00 2001 From: MrEddX Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 017/133] Translated using Weblate (Bulgarian) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: MrEddX Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/bg-BG.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 1154af1b0..63af43da0 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -1117,5 +1117,6 @@ "wayToWriteWahaChatId": "Телефонният номер с международния префикс, но без знака плюс в началото ({0}), ID на контакта ({1}) или ID на групата ({2}). Известията се изпращат до това чат ID от WAHA сесия.", "wayToGetWahaSession": "От тази сесия WAHA изпраща известия до чат ID. Можете да го намерите в таблото за управление на WAHA.", "telegramServerUrlDescription": "За премахване на API бот ограниченията за Telegram или за получаване на достъп в блокирани зони (Китай, Иран и др.). За повече информация щракнете върху {0}. По подразбиране: {1}", - "telegramServerUrl": "(По избор) URL адрес на сървъра" + "telegramServerUrl": "(По избор) URL адрес на сървъра", + "Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под" } From 8ea23daf2e4f583937041fd4621cbf99b4296a61 Mon Sep 17 00:00:00 2001 From: Marco Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 018/133] Translated using Weblate (German) Currently translated at 100.0% (1070 of 1070 strings) Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: Marco Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/de-CH.json | 3 ++- src/lang/de-DE.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index 85a921ee9..f45d41e89 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -1114,5 +1114,6 @@ "wayToGetWahaApiKey": "API-Schlüssel ist der Wert der WHATSAPP_API_KEY-Umgebungsvariable, den du beim Ausführen von WAHA verwendet hast.", "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.", "telegramServerUrl": "(Optional) Server URL", - "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}" + "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}", + "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter" } diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 5aff2e344..dc07a6262 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -1117,5 +1117,6 @@ "wayToGetWahaSession": "Von dieser Sitzung aus sendet WAHA Benachrichtigungen an die Chat-ID. Du kannst sie im WAHA Dashboard finden.", "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.", "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}", - "telegramServerUrl": "(Optional) Server URL" + "telegramServerUrl": "(Optional) Server URL", + "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter" } From cf7a6b0831e2943989984ff0387d665384da7199 Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 019/133] Translated using Weblate (French) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: Cyril59310 Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fr-FR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 0a6f66cd7..2d09b0bac 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -1117,5 +1117,6 @@ "wayToGetWahaApiKey": "La clé API est la valeur de la variable d'environnement WHATSAPP_API_KEY que vous avez utilisée pour exécuter WAHA.", "wayToWriteWahaChatId": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus ({0}), l'identifiant de contact ({1}) ni l'identifiant de groupe ({2}). Les notifications sont envoyées à cet identifiant de chat depuis la session WAHA.", "telegramServerUrlDescription": "Pour lever les limitations de l’API des bots Telegram ou accéder aux zones bloquées (Chine, Iran, etc.). Pour plus d’informations, cliquez sur {0}. Par défaut : {1}", - "telegramServerUrl": "(Facultatif) URL du serveur" + "telegramServerUrl": "(Facultatif) URL du serveur", + "Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence" } From edadbd5e9e4ff38eace312922c75f958a997af6b Mon Sep 17 00:00:00 2001 From: stanol Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 020/133] Translated using Weblate (Ukrainian) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: stanol Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/uk-UA.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index fd1703085..63070db9f 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -1123,5 +1123,6 @@ "wayToGetWahaSession": "З цієї сесії WAHA надсилає сповіщення на ID чату. Ви можете знайти його в інформаційній панелі WAHA.", "wayToWriteWahaChatId": "Номер телефону з міжнародним префіксом, але без знака плюс на початку ({0}), ID контакту ({1}) або ID групи ({2}). На цей ID чату надсилаються сповіщення з сеансу WAHA.", "telegramServerUrl": "(Необов'язково) URL сервера", - "telegramServerUrlDescription": "Щоб зняти обмеження з Telegram bot api або отримати доступ у заблокованих регіонах (Китай, Іран тощо). Для отримання додаткової інформації натисніть {0}. За замовчуванням: {1}" + "telegramServerUrlDescription": "Щоб зняти обмеження з Telegram bot api або отримати доступ у заблокованих регіонах (Китай, Іран тощо). Для отримання додаткової інформації натисніть {0}. За замовчуванням: {1}", + "Font Twemoji by Twitter licensed under": "Шрифт Twemoji від Twitter ліцензований під" } From ae52d9f68fd443ca6b9e055356912d202beb6de6 Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Thu, 24 Apr 2025 20:21:47 +0000 Subject: [PATCH 021/133] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: AnnAngela Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/zh-CN.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index d6fe898aa..88134e3d8 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1119,5 +1119,6 @@ "YZJ Webhook URL": "YZJ Webhook 地址", "YZJ Robot Token": "YZJ 机器人令牌", "telegramServerUrl": "(可选) 服务器 Url", - "telegramServerUrlDescription": "要解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}" + "telegramServerUrlDescription": "用以解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}", + "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权" } From dfc424494b3a6caa9c0acb66b76c30f2ecda2d83 Mon Sep 17 00:00:00 2001 From: JC Date: Thu, 24 Apr 2025 20:21:48 +0000 Subject: [PATCH 022/133] Translated using Weblate (Catalan) Currently translated at 52.9% (567 of 1070 strings) Co-authored-by: JC Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ca/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ca.json | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/lang/ca.json b/src/lang/ca.json index 2f10f32cb..39d6bc77c 100644 --- a/src/lang/ca.json +++ b/src/lang/ca.json @@ -457,7 +457,7 @@ "installing": "Instal·lant", "uninstall": "Desinstal·la", "confirmUninstallPlugin": "Estàs segur de desinstal·lar aquest connector?", - "notificationRegional": "Regional", + "notificationRegional": "Local", "Clone Monitor": "Clona el monitor", "Clone": "Clona", "cloneOf": "Clon de {0}", @@ -478,7 +478,7 @@ "To Email": "Destí email", "smtpCC": "CC", "smtpBCC": "BCC", - "Discord Webhook URL": "Discord Webhook URL", + "Discord Webhook URL": "URL del Webhook de Discord", "wayToGetDiscordURL": "Pots rebre aquest per anar a Paràmetres de Servidor -> Integracions -> Vista *Webhooks -> Nou *Webhook", "Bot Display Name": "Nom de pantalla de bot", "Prefix Custom Message": "Prefix de missatge personalitzat", @@ -560,5 +560,14 @@ "templateStatus": "Estat", "telegramUseTemplate": "Fes servir una plantilla de missatge personalitzada", "telegramUseTemplateDescription": "Si s'activa, el missatge s'enviarà fent servir una plantilla personalitzada.", - "telegramTemplateFormatDescription": "Telegram permet l'ús de diferents tipus de llenguatges de marcat, llegeix Telegram {0} per més detalls." + "telegramTemplateFormatDescription": "Telegram permet l'ús de diferents tipus de llenguatges de marcat, llegeix Telegram {0} per més detalls.", + "wayToGetDiscordThreadId": "Obtenir un identificador de publicació del fil/fòrum és semblant a obtenir un identificador de canal. Més informació sobre com obtenir identificadors {0}", + "lineDevConsoleTo": "Consola de desenvolupadors de linia - {0}", + "Basic Settings": "Configuracions bàsiques", + "User ID": "ID d'usuari", + "Your User ID": "El teu identificador d'usuari", + "Messaging API": "API de missatges", + "wayToGetLineChannelToken": "Primer accediu a {0}, creeu un proveïdor i un canal (API de missatgeria) i, a continuació, podeu obtenir el token d'accés al canal i l'identificador d'usuari dels elements del menú esmentats anteriorment.", + "Icon URL": "URL de la icona", + "aboutIconURL": "Pots donar un enllaç a la imatge a \"URL de la icona\" per sobreposar-la a la imatge de perfil pere defecte. No s'usarà si hi ha una icona d'emoji establerta." } From 9f927602387a591084cb65836422a734293a6e69 Mon Sep 17 00:00:00 2001 From: tepung Date: Thu, 24 Apr 2025 20:21:48 +0000 Subject: [PATCH 023/133] Translated using Weblate (Malay) Currently translated at 8.1% (87 of 1070 strings) Translated using Weblate (Malay) Currently translated at 7.6% (82 of 1070 strings) Co-authored-by: tepung Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ms/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/ms.json | 64 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/src/lang/ms.json b/src/lang/ms.json index 14ddd7d3a..ec7520832 100644 --- a/src/lang/ms.json +++ b/src/lang/ms.json @@ -7,24 +7,24 @@ "Game": "Permainan", "Primary Base URL": "URL Pangkalan Utama", "Version": "Versi", - "Add": "Menambah", - "Quick Stats": "Statistik ringkas", - "Up": "Dalam talian", - "Down": "Luar talian", - "Pending": "Belum selesai", - "statusMaintenance": "Membaiki", - "Maintenance": "Membaiki", - "Unknown": "Tidak ketahui", - "General Monitor Type": "Jenis monitor umum", - "Check Update On GitHub": "Semak kemas kini dalam GitHub", + "Add": "Tambah", + "Quick Stats": "Statistik Pantas", + "Up": "Atas", + "Down": "Bawah", + "Pending": "Dalam Proses", + "statusMaintenance": "Penyelenggaraan", + "Maintenance": "Penyelenggaraan", + "Unknown": "Tidak Diketahui", + "General Monitor Type": "Jenis Monitor Umum", + "Check Update On GitHub": "Semak kemas kini di GitHub", "List": "Senarai", - "Specific Monitor Type": "Jenis monitor spesifik", + "Specific Monitor Type": "Jenis Monitor Spesifik", "markdownSupported": "Sintaks markdown disokong", "languageName": "Bahasa inggeris", "Dashboard": "Papan pemuka", "Language": "Bahasa", - "Add New Monitor": "Tambah monitor baharu", - "Passive Monitor Type": "Jenis monitor pasif", + "Add New Monitor": "Tambah Monitor Baharu", + "Passive Monitor Type": "Jenis Monitor Pasif", "No Services": "Tiada Servis", "Add a monitor": "Tambah Monitor", "High": "Tinggi", @@ -49,5 +49,41 @@ "Content Type": "Jenis Content", "Home": "Laman Utama", "Settings": "Tetapan", - "Save": "Simpan" + "Save": "Simpan", + "Cannot connect to the socket server": "Tidak dapat disambungkan kepada pelayan soket", + "Resume": "Sambung", + "Current": "Terkini", + "Uptime": "Uptime", + "Cert Exp.": "Tamat Sijil", + "now": "sekarang", + "setupDatabaseMariaDB": "Sambungan kepada pangkalan data MariaDB secara luaran. Anda perlu tetapkan maklumat sambungan pangkalan data.", + "hour": "jam", + "Ping": "Ping", + "settingUpDatabaseMSG": "Pangkalan data sedang ditetapkan. Sila tunggu sebentar.", + "Reconnecting...": "Penyambungan...", + "Message": "Mesej", + "No important events": "Tiada info penting", + "Edit": "Sunting", + "Delete": "Padam", + "Monitor": "Monitor | Monitors", + "time ago": "{0} yang lepas", + "day": "hari | hari", + "-day": "-hari", + "-year": "-tahun", + "Pause": "Rehat", + "Status": "Status", + "DateTime": "TarikhMasa", + "dbName": "Nama Pangkalan Data", + "-hour": "-jam", + "Response": "Tindakbalas", + "Monitor Type": "Jenis Monitor", + "Keyword": "Katakunci", + "pauseDashboardHome": "Rehat", + "Name": "Nama", + "setupDatabaseChooseDatabase": "Pangkalan Data yang mana hendak digunakan ?", + "Host URL": "URL Host", + "URL": "URL", + "Expected Value": "Nilai Sepatutnya", + "Friendly Name": "Nama Mudah", + "Hostname": "Nama Host" } From e6aea02ddf8e6b52db202d3b597072cfc490919d Mon Sep 17 00:00:00 2001 From: Aluisio Date: Thu, 24 Apr 2025 20:21:48 +0000 Subject: [PATCH 024/133] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: Aluisio Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/pt-BR.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 0fe853aef..0764d1173 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -1081,5 +1081,6 @@ "YZJ Robot Token": "YZJ Robot token", "telegramServerUrl": "(Opcional) URL do Servidor", "Message Template": "Modelo de Mensagem", - "Template Format": "Formato do Modelo" + "Template Format": "Formato do Modelo", + "Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob" } From 0e9ba79ef2880ce202a93de1e5cd0d323154ef8b Mon Sep 17 00:00:00 2001 From: Jonne Saloranta Date: Thu, 24 Apr 2025 20:21:48 +0000 Subject: [PATCH 025/133] Translated using Weblate (Finnish) Currently translated at 100.0% (1070 of 1070 strings) Co-authored-by: Jonne Saloranta Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/ Translation: Uptime Kuma/Uptime Kuma --- src/lang/fi.json | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/lang/fi.json b/src/lang/fi.json index 8a77a20e0..bf203a749 100644 --- a/src/lang/fi.json +++ b/src/lang/fi.json @@ -341,7 +341,7 @@ "Packet Size": "Paketin koko", "telegram": "Telegram", "ZohoCliq": "ZohoCliq", - "Bot Token": "Botin token", + "Bot Token": "Botin tokeni", "wayToGetTelegramToken": "Voit saada tunnuksen osoitteesta {0}.", "Chat ID": "Chat-tunnus", "wayToGetTelegramChatID": "Saat chat-tunnuksesi lähettämällä viestin botille ja siirtymällä tähän URL-osoitteeseen nähdäksesi chat_id:", @@ -1096,5 +1096,25 @@ "RabbitMQ Nodes": "RabbitMQ-hallintasolmut", "rabbitmqNodesDescription": "Anna URL RabbitMQ-hallintasolmuille sisältäen protokollan ja portin. Esimerkki: {0}", "rabbitmqHelpText": "Jotta voit käyttää seurainta, sinun on otettava hallintalaajennus käyttöön RabbitMQ-asetuksissa. Lisätietoja saat osoitteesta {rabitmq_documentation}.", - "aboutSlackUsername": "Muuttaa viestin lähettäjän näyttönimeä. Jos haluat mainita jonkun, lisää se ystävälliseen nimeen." + "aboutSlackUsername": "Muuttaa viestin lähettäjän näyttönimeä. Jos haluat mainita jonkun, lisää se ystävälliseen nimeen.", + "Font Twemoji by Twitter licensed under": "Twemoji-fontti (Twitter) on lisensoitu seuraavalla lisenssillä", + "wayToGetWahaSession": "Tästä istunnosta WAHA lähettää ilmoituksia Chat ID:hen. Löydät sen WAHA kojelaudasta.", + "wayToWriteWahaChatId": "Puhelinnumero kansainvälisellä etuliitteellä, mutta ilman plusmerkkiä alussa ({0}), yhteystietotunnusta ({1}) tai ryhmätunnusta ({2}). Ilmoitukset lähetetään tähän chat-tunnukseen WAHA-istunnosta.", + "wahaSession": "Istunto", + "wahaChatId": "Viesti ID (Puhelinnumero / Yhteystieto ID / Ryhmä ID)", + "Template Format": "Malli Muotoilu", + "wayToGetWahaApiUrl": "Sinun WAHA instanssin URL.", + "YZJ Webhook URL": "YZJ Webhook URL", + "telegramServerUrl": "(Valinnainen) Palvelin Url", + "telegramServerUrlDescription": "Telegramin bot-api-rajoitusten poistamiseksi tai pääsyn saamiseksi estetyille alueille (Kiina, Iran jne.). Saat lisätietoja napsauttamalla {0}. Oletus: {1}", + "Message Template": "Viesti Malli", + "YZJ Robot Token": "YZJ Robotti tokeni", + "wayToGetWahaApiKey": "API Key on WHATSAPP_API_KEY ympäristömuuttujan arvo, jota käytit WAHA käynnistämiseen.", + "Plain Text": "Pelkkää tekstiä", + "templateServiceName": "palvelin nimi", + "templateHostnameOrURL": "isäntänimi tai URL", + "templateStatus": "tila", + "telegramUseTemplate": "Käytä mukautettua viesti mallia", + "telegramUseTemplateDescription": "Jos aktivoitu, viesti lähetetään käyttämällä mukautettua mallia.", + "telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja." } From 64b2c6b1837976057057da769cc73477a948985e Mon Sep 17 00:00:00 2001 From: Cyril59310 Date: Sat, 26 Apr 2025 23:10:54 +0000 Subject: [PATCH 026/133] Translated using Weblate (French) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fr/ --- src/lang/fr-FR.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json index 2d09b0bac..91bed3527 100644 --- a/src/lang/fr-FR.json +++ b/src/lang/fr-FR.json @@ -1118,5 +1118,11 @@ "wayToWriteWahaChatId": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus ({0}), l'identifiant de contact ({1}) ni l'identifiant de groupe ({2}). Les notifications sont envoyées à cet identifiant de chat depuis la session WAHA.", "telegramServerUrlDescription": "Pour lever les limitations de l’API des bots Telegram ou accéder aux zones bloquées (Chine, Iran, etc.). Pour plus d’informations, cliquez sur {0}. Par défaut : {1}", "telegramServerUrl": "(Facultatif) URL du serveur", - "Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence" + "Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence", + "the smsplanet documentation": "la documentation de smsplanet", + "Phone numbers": "Numéros de téléphone", + "Sender name": "Nom de l'expéditeur", + "smsplanetNeedToApproveName": "Doit être approuvé dans le panneau client", + "smsplanetApiToken": "Jeton pour l'API SMSPlanet", + "smsplanetApiDocs": "Des informations détaillées sur l'obtention de jetons API peuvent être trouvées dans {the_smsplanet_documentation}." } From 95023e64ab005d7b050ac2d5cb2d833dbc7f21e9 Mon Sep 17 00:00:00 2001 From: MrEddX Date: Sun, 27 Apr 2025 03:44:11 +0000 Subject: [PATCH 027/133] Translated using Weblate (Bulgarian) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/bg/ --- src/lang/bg-BG.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json index 63af43da0..9643dbee5 100644 --- a/src/lang/bg-BG.json +++ b/src/lang/bg-BG.json @@ -1118,5 +1118,11 @@ "wayToGetWahaSession": "От тази сесия WAHA изпраща известия до чат ID. Можете да го намерите в таблото за управление на WAHA.", "telegramServerUrlDescription": "За премахване на API бот ограниченията за Telegram или за получаване на достъп в блокирани зони (Китай, Иран и др.). За повече информация щракнете върху {0}. По подразбиране: {1}", "telegramServerUrl": "(По избор) URL адрес на сървъра", - "Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под" + "Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под", + "the smsplanet documentation": "документацията на smsplanet", + "Phone numbers": "Телефонни номера", + "Sender name": "Име на подател", + "smsplanetNeedToApproveName": "Трябва да бъде одобрен в клиентския панел", + "smsplanetApiToken": "Токен код за SMSPlanet API", + "smsplanetApiDocs": "Подробна информация, за получаване на API токен кодове, можете да намерите в {the_smsplanet_documentation}." } From a3ca2d1838caa50922f7ae3270017c97d7c822c1 Mon Sep 17 00:00:00 2001 From: stanol Date: Sun, 27 Apr 2025 09:50:02 +0000 Subject: [PATCH 028/133] Translated using Weblate (Ukrainian) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/uk/ --- src/lang/uk-UA.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json index 63070db9f..68b4b5c74 100644 --- a/src/lang/uk-UA.json +++ b/src/lang/uk-UA.json @@ -1124,5 +1124,11 @@ "wayToWriteWahaChatId": "Номер телефону з міжнародним префіксом, але без знака плюс на початку ({0}), ID контакту ({1}) або ID групи ({2}). На цей ID чату надсилаються сповіщення з сеансу WAHA.", "telegramServerUrl": "(Необов'язково) URL сервера", "telegramServerUrlDescription": "Щоб зняти обмеження з Telegram bot api або отримати доступ у заблокованих регіонах (Китай, Іран тощо). Для отримання додаткової інформації натисніть {0}. За замовчуванням: {1}", - "Font Twemoji by Twitter licensed under": "Шрифт Twemoji від Twitter ліцензований під" + "Font Twemoji by Twitter licensed under": "Шрифт Twemoji від Twitter ліцензований під", + "the smsplanet documentation": "документації smsplanet", + "Phone numbers": "Номери телефонів", + "Sender name": "Ім'я відправника", + "smsplanetNeedToApproveName": "Потребує схвалення в клієнтській панелі", + "smsplanetApiToken": "Токен для API SMSPlanet", + "smsplanetApiDocs": "Детальну інформацію про отримання токенів API можна знайти в {the_smsplanet_documentation}." } From 2cbf3483bd4de36cae84f42ec6c5835e436bc947 Mon Sep 17 00:00:00 2001 From: Marco Date: Sun, 27 Apr 2025 19:11:56 +0000 Subject: [PATCH 029/133] Translated using Weblate (German (Switzerland)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de_CH/ --- src/lang/de-CH.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json index f45d41e89..3c3cb3731 100644 --- a/src/lang/de-CH.json +++ b/src/lang/de-CH.json @@ -1115,5 +1115,11 @@ "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.", "telegramServerUrl": "(Optional) Server URL", "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}", - "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter" + "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter", + "smsplanetApiToken": "Token für die SMSPlanet API", + "smsplanetApiDocs": "Ausführliche Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}.", + "the smsplanet documentation": "die smsplanet Dokumentation", + "Phone numbers": "Telefonnummern", + "Sender name": "Absendername", + "smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden" } From fbd9490fc7198ef1ba45cdbe4673347b48b7ac5c Mon Sep 17 00:00:00 2001 From: Marco Date: Sun, 27 Apr 2025 19:12:59 +0000 Subject: [PATCH 030/133] Translated using Weblate (German) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ --- src/lang/de-DE.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index dc07a6262..2f3cb2136 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -1118,5 +1118,11 @@ "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.", "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}", "telegramServerUrl": "(Optional) Server URL", - "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter" + "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter", + "the smsplanet documentation": "die smsplanet Dokumentation", + "Phone numbers": "Telefonnummern", + "Sender name": "Absendername", + "smsplanetNeedToApproveName": "Muss im Kundenpanel genehmigt werden", + "smsplanetApiToken": "Token für die SMSPlanet API", + "smsplanetApiDocs": "Ausführliche Informationen zum Erhalt von API-Tokens findest du in {the_smsplanet_documentation}." } From cf82085917c91d86ce69e783c0a17c3cb6c6d927 Mon Sep 17 00:00:00 2001 From: Aluisio Date: Sun, 27 Apr 2025 19:56:10 +0000 Subject: [PATCH 031/133] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ --- src/lang/pt-BR.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 0764d1173..7cdc3e772 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -1082,5 +1082,11 @@ "telegramServerUrl": "(Opcional) URL do Servidor", "Message Template": "Modelo de Mensagem", "Template Format": "Formato do Modelo", - "Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob" + "Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob", + "the smsplanet documentation": "a documentação do smsplanet", + "Phone numbers": "Números de telefone", + "Sender name": "Nome do remetente", + "smsplanetNeedToApproveName": "Precisa ser aprovado no painel do cliente", + "smsplanetApiToken": "Token para a API SMSPlanet", + "smsplanetApiDocs": "Informações detalhadas sobre a obtenção de tokens de API podem ser encontradas em {the_smsplanet_documentation}." } From c60c0c4912ed168839446161ec2a99cb97e7f4ed Mon Sep 17 00:00:00 2001 From: carbeso Date: Mon, 28 Apr 2025 10:45:48 +0000 Subject: [PATCH 032/133] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hant/ --- src/lang/zh-TW.json | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json index b894f1298..611cb8334 100644 --- a/src/lang/zh-TW.json +++ b/src/lang/zh-TW.json @@ -586,7 +586,7 @@ "Domain": "網域", "Workstation": "工作站", "disableCloudflaredNoAuthMsg": "您處於無驗證模式。無須輸入密碼。", - "trustProxyDescription": "信任 'X-Forwarded-*' 標頭。如果您想要取得正確的客戶端 IP,且您的 Uptime Kuma 架設於 Nginx 或 Apache 後方,您應該啟用此選項。", + "trustProxyDescription": "信任“X-Forwarded-*”標頭。如果您想要取得正確的用戶端 IP,而您的 Uptime Kuma 位於 Nginx 或 Apache 等代理程式後面,則應該啟用此功能。", "wayToGetLineNotifyToken": "您可以從 {0} 取得存取權杖", "Examples": "範例", "Home Assistant URL": "Home Assistant 網址", @@ -606,7 +606,7 @@ "goAlertInfo": "GoAlert 是用於待命排程、升級自動化,以及通知 (如簡訊或語音通話) 的開源應用程式。自動在正確的時間、用洽當的方法、聯絡合適的人! {0}", "goAlertIntegrationKeyInfo": "取得服務的通用 API 整合金鑰,格式為 \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"。通常是已複製的網址的權杖參數值。", "goAlert": "GoAlert", - "backupOutdatedWarning": "即將棄用:由於專案新增了大量新功能,且備份功能未被妥善維護,故此功能無法產生或復原完整備份。", + "backupOutdatedWarning": "已棄用:由於添加了許多功能且此備份功能有點無人維護,因此它無法產生或還原完整的備份。", "backupRecommend": "請直接備份磁碟區或 ./data/ 資料夾。", "Optional": "選填", "squadcast": "Squadcast", @@ -716,7 +716,7 @@ "apiKey-expired": "已過期", "Reconnecting...": "重新連線...", "Expiry date": "過期時間", - "Don't expire": "不要過期", + "Don't expire": "永不過期", "Continue": "繼續", "Add Another": "新增作者", "Add API Key": "新增 API 金鑰", @@ -738,10 +738,10 @@ "Learn More": "閱讀更多", "pushoverMessageTtl": "Message TTL (秒)", "apiKeyAddedMsg": "您的 API 金鑰已建立。金鑰不會再次顯示,請將它放在安全的地方。", - "No API Keys": "無 API 金鑰", - "apiKey-active": "活躍", + "No API Keys": "沒有 API Keys", + "apiKey-active": "啟用", "Expires": "過期", - "disableAPIKeyMsg": "您確定要停用這個 API 金鑰?", + "disableAPIKeyMsg": "確定要禁用這個 API key?", "Monitor Setting": "{0} 的監視器設定", "Guild ID": "公會 ID", "chromeExecutableDescription": "如果您使用 Docker 且未安裝 Chromium,可能要花數分鐘安裝後才能顯示測試結果。安裝會使用 1GB 的硬碟空間。", @@ -1085,5 +1085,31 @@ "conditionValuePlaceholder": "值", "Separate multiple email addresses with commas": "用逗號分隔多個電子郵件地址", "record": "記錄", - "New Group": "新分組" + "New Group": "新分組", + "Font Twemoji by Twitter licensed under": "已經由 Twitter 的 Twemoji 授權", + "Phone numbers": "手機號碼", + "smsplanetApiToken": "SMSPlanet 的 Token", + "smsplanetApiDocs": "有關取得 API token的詳細信息,請參閱 {the_smsplanet_documentation}。", + "the smsplanet documentation": "smsplanet 說明文件", + "Sender name": "發送者名稱", + "smsplanetNeedToApproveName": "需在用戶介面獲得允許", + "templateServiceName": "伺服器名稱", + "templateHostnameOrURL": "主機名稱或 URL", + "templateStatus": "狀態", + "telegramUseTemplate": "使用自訂訊息模板", + "telegramTemplateFormatDescription": "Telegram 允許使用不同的標記語言來傳送訊息,有關具體詳情請參閱 Telegram {0}。", + "telegramUseTemplateDescription": "如果啟用則使用自訂模板發送訊息。", + "Plain Text": "純文字", + "Message Template": "訊息模板", + "wayToGetWahaApiUrl": "你的 WAHA 主機 URL。", + "wayToGetWahaApiKey": "API Key 是你在 WAHA 使用的環境變數 WHATSAPP_API_KEY 的值。", + "wayToGetWahaSession": "從這個 WAHA 會話發送通知到聊天ID。你可以從 WAHA 儀錶板找到它。", + "Template Format": "模板格式", + "wahaSession": "WAHA 會話", + "wahaChatId": "聊天室ID (手機號碼/聯絡人 ID/群組 ID)", + "wayToWriteWahaChatId": "帶有國際前綴但不含開頭加號 ({0})、聯絡人 ID ({1}) 或群組 ID ({2}) 的電話號碼。通知從 WAHA 會話傳送到此聊天 ID。", + "YZJ Webhook URL": "YZJ 的 Webhook URL", + "YZJ Robot Token": "YZJ 的機器人 token", + "telegramServerUrl": "(可選) 伺服器 URL", + "telegramServerUrlDescription": "解除 Telegram 的機器人 API 限製或在被封鎖區域(中國、伊朗等)取得存取權限。欲了解更多信息,請點擊{0}。預設值:{1}" } From 94275de493de7b8e5ddc521a308544711d5cc4b0 Mon Sep 17 00:00:00 2001 From: Junghyuk Kwon Date: Tue, 29 Apr 2025 05:46:10 +0000 Subject: [PATCH 033/133] Translated using Weblate (Korean) Currently translated at 74.4% (801 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ --- src/lang/ko-KR.json | 320 ++++++++++++++++++++++---------------------- 1 file changed, 160 insertions(+), 160 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index be43aad89..b6559cf04 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -1,16 +1,16 @@ { "languageName": "한국어", - "checkEverySecond": "{0}초마다 확인해요", - "retryCheckEverySecond": "{0}초마다 다시 확인해요", - "retriesDescription": "서비스가 중단된 후 알림을 보내기 전 최대 재시도 횟수", - "ignoreTLSError": "HTTPS 웹사이트에서 TLS/SSL 오류 무시하기", - "upsideDownModeDescription": "서버 상태를 반대로 표시해요. 서버가 작동하면 오프라인으로 표시할 거예요.", - "maxRedirectDescription": "최대 리다이렉트 횟수예요. 0을 입력하면 리다이렉트를 꺼요.", + "checkEverySecond": "{0}초마다 확인", + "retryCheckEverySecond": "{0}초마다 재시도", + "retriesDescription": "서비스가 다운된 것으로 간주하고 알림을 보내기 전까지의 최대 재시도 횟수", + "ignoreTLSError": "HTTPS 웹사이트에서 TLS/SSL 오류 무시", + "upsideDownModeDescription": "상태를 반대로 표시합니다. 서비스에 연결 가능하면 '다운'으로 간주됩니다.", + "maxRedirectDescription": "최대 리디렉션 허용 횟수. 0으로 설정하면 리디렉션을 사용하지 않습니다.", "acceptedStatusCodesDescription": "응답 성공으로 간주할 상태 코드를 정해요.", "passwordNotMatchMsg": "비밀번호 재입력이 일치하지 않아요.", "notificationDescription": "모니터링에 알림을 설정할 수 있어요.", "keywordDescription": "HTML 이나 JSON에서 대소문자를 구분해 키워드를 검색해요.", - "pauseDashboardHome": "일시 정지", + "pauseDashboardHome": "정지", "deleteMonitorMsg": "정말 이 모니터링을 삭제할까요?", "deleteNotificationMsg": "정말 이 알림을 모든 모니터링에서 삭제할까요?", "resolverserverDescription": "Cloudflare가 기본 서버예요, 원한다면 언제나 다른 Resolver 서버로 변경할 수 있어요.", @@ -28,17 +28,17 @@ "confirmDisableTwoFAMsg": "정말 2단계 인증을 비활성화할까요?", "Settings": "설정", "Dashboard": "대시보드", - "New Update": "새로운 업데이트", + "New Update": "새 업데이트", "Language": "언어", - "Appearance": "디스플레이", + "Appearance": "모양", "Theme": "테마", "General": "일반", "Version": "버전", - "Check Update On GitHub": "깃허브에서 업데이트 확인", + "Check Update On GitHub": "Github에서 업데이트 확인", "List": "목록", "Add": "추가", - "Add New Monitor": "새로운 모니터링 추가하기", - "Quick Stats": "간단한 정보", + "Add New Monitor": "새 모니터 추가", + "Quick Stats": "요약", "Up": "온라인", "Down": "오프라인", "Pending": "대기 중", @@ -50,22 +50,22 @@ "Message": "메시지", "No important events": "중요 이벤트 없음", "Resume": "재개", - "Edit": "수정", + "Edit": "편집", "Delete": "삭제", "Current": "현재", "Uptime": "업타임", - "Cert Exp.": "인증서 만료.", + "Cert Exp.": "인증서 만료", "day": "일", - "-day": "-일", + "-day": "일", "hour": "시간", - "-hour": "-시간", + "-hour": "시간", "Response": "응답", "Ping": "핑", "Monitor Type": "모니터링 종류", "Keyword": "키워드", - "Friendly Name": "이름", + "Friendly Name": "별명", "URL": "URL", - "Hostname": "호스트네임", + "Hostname": "호스트명", "Port": "포트", "Heartbeat Interval": "하트비트 주기", "Retries": "재시도", @@ -73,46 +73,46 @@ "Advanced": "고급", "Upside Down Mode": "상태 반전 모드", "Max. Redirects": "최대 리다이렉트", - "Accepted Status Codes": "응답 성공 상태 코드", + "Accepted Status Codes": "허용된 상태 코드", "Save": "저장", "Notifications": "알림", - "Not available, please setup.": "존재하지 않아요. 새로운 거 하나 만드는 건 어때요?", + "Not available, please setup.": "아직 사용할 수 없습니다. 설정이 필요합니다.", "Setup Notification": "알림 설정", - "Light": "화이트", + "Light": "라이트", "Dark": "다크", "Auto": "자동", "Theme - Heartbeat Bar": "테마 - 하트비트 바", "Normal": "기본값", - "Bottom": "가운데", + "Bottom": "하단", "None": "없음", "Timezone": "시간대", - "Search Engine Visibility": "검색 엔진 활성화", + "Search Engine Visibility": "검색 엔진 노출", "Allow indexing": "인덱싱 허용", - "Discourage search engines from indexing site": "검색 엔진 인덱싱 거부", + "Discourage search engines from indexing site": "검색 엔진의 인덱싱을 허용하지 않음", "Change Password": "비밀번호 변경", - "Current Password": "기존 비밀번호", + "Current Password": "현재 비밀번호", "New Password": "새 비밀번호", - "Repeat New Password": "새로운 비밀번호 재입력", + "Repeat New Password": "새 비밀번호 확인", "Update Password": "비밀번호 변경", "Disable Auth": "인증 비활성화", "Enable Auth": "인증 활성화", - "disableauth.message1": "정말로 {disableAuth}?", - "disable authentication": "인증 기능을 끌까요", - "disableauth.message2": "이 기능은 {intendThirdPartyAuth}을 Uptime Kuma 앞에 둔 사용자를 위한 기능이에요.", - "where you intend to implement third-party authentication": "Cloudflare Access와 같은 서드파티 인증", + "disableauth.message1": "{disableAuth}하시겠습니까?", + "disable authentication": "인증을 비활성화", + "disableauth.message2": "이 기능은 Uptime Kuma 앞단에 Cloudflare Access, Authelia 등의 {intendThirdPartyAuth}을 위해 설계되었습니다.", + "where you intend to implement third-party authentication": "서드 파티 인증을 구현하는 상황", "Please use this option carefully!": "신중하게 사용하세요!", "Logout": "로그아웃", - "Leave": "나가기", - "I understand, please disable": "기능에 대해 이해했으니 꺼주세요.", + "Leave": "취소", + "I understand, please disable": "이해했습니다. 비활성화합니다.", "Confirm": "확인", - "Yes": "확인", - "No": "취소", - "Username": "이름", + "Yes": "예", + "No": "아니요", + "Username": "사용자명", "Password": "비밀번호", - "Remember me": "비밀번호 기억하기", + "Remember me": "로그인 상태 유지", "Login": "로그인", - "No Monitors, please": "모니터링이 현재 없어요,", - "add one": "한번 추가해보실래요?", + "No Monitors, please": "등록된 모니터가 없습니다.", + "add one": "추가하기", "Notification Type": "알림 종류", "Email": "이메일", "Test": "테스트", @@ -120,33 +120,33 @@ "Resolver Server": "Resolver 서버", "Resource Record Type": "리소스 레코드 유형", "Last Result": "최근 결과", - "Create your admin account": "관리자 계정 만들기", - "Repeat Password": "비밀번호 재입력", + "Create your admin account": "관리자 계정 생성", + "Repeat Password": "비밀번호 확인", "Import Backup": "백업 가져오기", "Export Backup": "백업 내보내기", "Export": "내보내기", "Import": "가져오기", "respTime": "응답 시간 (ms)", "notAvailableShort": "N/A", - "Default enabled": "기본 알림으로 설정", - "Apply on all existing monitors": "기존 모니터링에 모두 적용하기", - "Create": "생성하기", + "Default enabled": "기본적으로 활성화", + "Apply on all existing monitors": "기존 모니터에 모두 적용", + "Create": "생성", "Clear Data": "데이터 삭제", "Events": "이벤트", "Heartbeats": "하트비트", - "Auto Get": "자동 Get", + "Auto Get": "Auto Get", "backupDescription": "모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.", "backupDescription2": "히스토리와 이벤트 데이터는 포함되어 있지 않아요.", "backupDescription3": "알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.", - "alertNoFile": "가져오기를 하기 위해 파일을 선택해주세요.", - "alertWrongFileType": "JSON 파일을 선택해주세요.", - "Clear all statistics": "모든 통계치 삭제", - "Skip existing": "기존값 건너뛰기", + "alertNoFile": "가져올 파일을 선택하세요.", + "alertWrongFileType": "JSON 파일을 선택하세요.", + "Clear all statistics": "모든 통계 삭제", + "Skip existing": "기존 항목 건너뛰기", "Overwrite": "덮어쓰기", "Options": "옵션", - "Keep both": "두개 모두 보존", + "Keep both": "모두 보존", "Verify Token": "토큰 검증", - "Setup 2FA": "2단계 인증 설정하기", + "Setup 2FA": "2단계 인증 설정", "Enable 2FA": "2단계 인증 활성화", "Disable 2FA": "2단계 인증 비활성화", "2FA Settings": "2단계 인증 설정", @@ -154,34 +154,34 @@ "Active": "활성화", "Inactive": "비활성화", "Token": "토큰", - "Show URI": "URI 보기", + "Show URI": "URI 표시", "Tags": "태그", - "Add New below or Select...": "아래 새롭게 추가 또는 선택…", - "Tag with this name already exist.": "같은 태그 이름이 이미 존재해요.", - "Tag with this value already exist.": "같은 값을 가진 태그가 이미 존재해요.", + "Add New below or Select...": "아래에서 선택하거나 추가…", + "Tag with this name already exist.": "동일한 이름의 태그가 이미 존재합니다.", + "Tag with this value already exist.": "동일한 값의 태그가 이미 존재합니다.", "color": "색상", "value (optional)": "값 (선택)", "Gray": "회색", - "Red": "빨간색", - "Orange": "주황색", - "Green": "초록색", - "Blue": "파란색", - "Indigo": "남색", - "Purple": "보라색", - "Pink": "핑크색", + "Red": "빨강", + "Orange": "주황", + "Green": "초록", + "Blue": "파랑", + "Indigo": "인디고", + "Purple": "보라", + "Pink": "핑크", "Search...": "검색…", "Avg. Ping": "평균 핑", "Avg. Response": "평균 응답", "Entry Page": "첫 페이지", - "statusPageNothing": "아무것도 없어요. 새로운 그룹 또는 모니터링을 추가해주세요.", + "statusPageNothing": "아무것도 없습니다. 새 그룹이나 모니터를 추가하세요.", "No Services": "서비스 없음", - "All Systems Operational": "모든 시스템 정상", - "Partially Degraded Service": "일부 시스템 비정상", - "Degraded Service": "모든 시스템 비정상", + "All Systems Operational": "모든 시스템 작동 중", + "Partially Degraded Service": "일부 서비스 불안정", + "Degraded Service": "서비스 불안정", "Add Group": "그룹 추가", - "Add a monitor": "모니터링 추가", - "Edit Status Page": "상태 페이지 수정", - "Go to Dashboard": "대시보드로 가기", + "Add a monitor": "모니터 추가", + "Edit Status Page": "상태 페이지 편집", + "Go to Dashboard": "대시보드로", "Status Page": "상태 페이지", "Status Pages": "상태 페이지", "defaultNotificationName": "내 {notification} 알림 ({number})", @@ -198,8 +198,8 @@ "webhook": "Webhook", "Post URL": "Post URL", "Content Type": "Content Type", - "webhookJsonDesc": "{0}은 Express.js와 같은 최신 HTTP 서버에 적합해요", - "webhookFormDataDesc": "{multipart}은 PHP에 적합해요. {decodeFunction}를 기준으로 JSON을 디코딩하면 되어요", + "webhookJsonDesc": "{0}은(는) Express.js와 같은 모던 HTTP 서버에 적합합니다.", + "webhookFormDataDesc": "{multipart}는 PHP에 적합합니다. JSON은 {decodeFunction}을 사용해 파싱해야 합니다.", "smtp": "Email (SMTP)", "secureOptionNone": "없음 / STARTTLS (25, 587)", "secureOptionTLS": "TLS (465)", @@ -215,7 +215,7 @@ "Prefix Custom Message": "접두사 메시지", "Hello @everyone is...": "{'@'}everyone 서버 상태 알림이에요…", "teams": "Microsoft Teams", - "Webhook URL": "웹훅 URL", + "Webhook URL": "Webhook URL", "wayToGetTeamsURL": "{0}에서 Webhook을 어떻게 만드는지 알아보세요.", "signal": "Signal", "Number": "숫자", @@ -234,7 +234,7 @@ "aboutWebhooks": "Webhook에 대한 설명: {0}", "aboutChannelName": "Webhook 채널을 무시하려면 {0} 채널 이름칸에 채널 이름을 입력해주세요. 예: #기타-채널", "aboutKumaURL": "Uptime Kuma URL칸을 공백으로 두면 기본적으로 Github Project 페이지로 설정해요.", - "emojiCheatSheet": "이모지 목록 시트: {0}", + "emojiCheatSheet": "이모지 목록: {0}", "rocket.chat": "Rocket.chat", "pushover": "Pushover", "pushy": "Pushy", @@ -263,9 +263,9 @@ "Example:": "예: {0}", "Read more:": "더 보기: {0}", "Status:": "상태: {0}", - "Read more": "더 보기", - "appriseInstalled": "Apprise가 설치되어있어요.", - "appriseNotInstalled": "Apprise가 설치되어있지 않아요. {0}", + "Read more": "더보기", + "appriseInstalled": "Apprise가 설치되어 있습니다.", + "appriseNotInstalled": "Apprise가 설치되지 않았습니다. {0}", "Access Token": "액세스 토큰", "Channel access token": "채널 액세스 토큰", "Line Developers Console": "Line 개발자 콘솔", @@ -284,10 +284,10 @@ "promosmsTypeSpeed": "SMS SPEED - 시스템에서 가장 높은 우선순위예요. 매우 빠르고 신뢰할 수 있지만 비용이 많이 들어요 (SMS 전체 가격의 약 두 배).", "promosmsPhoneNumber": "전화 번호 (폴란드 수신자라면 지역번호를 적지 않아도 되어요.)", "promosmsSMSSender": "SMS 보내는 사람 이름 : 미리 등록된 이름 혹은 기본값 중 하나예요: InfoSMS, SMS Info, MaxSMS, INFO, SMS", - "Primary Base URL": "기본 URL", + "Primary Base URL": "주 베이스 URL", "Push URL": "Push URL", - "needPushEvery": "이 URL을 {0} 초 마다 호출할 수 있어요.", - "pushOptionalParams": "선택적 파라미터: {0}", + "needPushEvery": "이 URL을 {0}초 마다 호출할 수 있습니다.", + "pushOptionalParams": "추가 파라미터: {0}", "emailCustomSubject": "커스텀 주제", "clicksendsms": "ClickSend SMS", "checkPrice": "{0} 가격 확인:", @@ -298,56 +298,56 @@ "Internal Room Id": "내부 방 ID", "matrixDesc1": "Matrix 클라이언트 방 설정의 고급 섹션에서 내부 방 ID를 찾을 수 있어요. 내부 방 ID는 이렇게 생겼답니다: !QMdRCpUIfLwsfjxye6:home.server.", "matrixDesc2": "사용자의 모든 방에 대한 엑세스가 허용될 수 있어서 새로운 사용자를 만들고 원하는 방에만 초대한 후 엑세스 토큰을 사용하는 것이 좋아요. {0} 이 명령어를 통해 엑세스 토큰을 얻을 수 있어요", - "Method": "메서드", + "Method": "Method", "Body": "Body", "Headers": "헤더", "PushUrl": "Push URL", - "HeadersInvalidFormat": "요청 Headers의 JSON 형식이 올바르지 않아요: ", - "BodyInvalidFormat": "요청 Body의 JSON 형식이 올바르지 않아요: ", - "Monitor History": "모니터링 기록", - "clearDataOlderThan": "모니터링 기록을 {0}일 동안 저장해요.", - "PasswordsDoNotMatch": "비밀번호가 일치하지 않아요.", - "records": "records", + "HeadersInvalidFormat": "요청 헤더의 JSON 형식이 올바르지 않음: ", + "BodyInvalidFormat": "요청 본문의 JSON 형식이 올바르지 않음: ", + "Monitor History": "모니터 기록", + "clearDataOlderThan": "모니터 기록을 {0}일간 저장합니다.", + "PasswordsDoNotMatch": "비밀번호가 일치하지 않습니다.", + "records": "레코드", "One record": "One record", - "steamApiKeyDescription": "스팀 게임 서버를 모니터링하려면 Steam Web API 키가 필요해요. API 키는 하단 웹사이트에서 등록할 수 있어요: ", + "steamApiKeyDescription": "Steam 게임 서버를 모니터링하려면 Steam Web-API 키가 필요합니다. 여기서 API 키를 등록하세요: ", "Current User": "현재 사용자", "recent": "최근", "Done": "완료", "Info": "정보", "Security": "보안", - "Steam API Key": "스팀 API 키", + "Steam API Key": "Steam API 키", "Shrink Database": "데이터베이스 축소", - "Pick a RR-Type...": "RR-Type을 골라주세요…", - "Pick Accepted Status Codes...": "상태 코드를 골라주세요…", + "Pick a RR-Type...": "RR-Type 선택…", + "Pick Accepted Status Codes...": "성공 상태 코드 선택…", "Default": "기본", "HTTP Options": "HTTP 옵션", - "Create Incident": "인시던트 만들기", + "Create Incident": "인시던트 생성", "Title": "제목", "Content": "내용", "Style": "스타일", "info": "정보", - "warning": "주의", - "danger": "경고", + "warning": "경고", + "danger": "위험", "primary": "기본", - "light": "화이트", + "light": "라이트", "dark": "다크", "Post": "게시", - "Please input title and content": "제목과 내용을 작성해주세요", - "Created": "생성 날짜", - "Last Updated": "마지막 업데이트", + "Please input title and content": "제목 및 내용을 입력하세요.", + "Created": "생성일", + "Last Updated": "최근 수정", "Unpin": "제거", - "Switch to Light Theme": "화이트 테마로 전환", + "Switch to Light Theme": "라이트 테마로 전환", "Switch to Dark Theme": "다크 테마로 전환", - "Show Tags": "태그 보이기", + "Show Tags": "태그 보기", "Hide Tags": "태그 숨기기", "Description": "설명", - "No monitors available.": "모니터링이 없어요.", + "No monitors available.": "사용 가능한 모니터가 없습니다.", "Add one": "추가하기", - "No Monitors": "모니터링 없음", - "Untitled Group": "이름없는 그룹", + "No Monitors": "모니터 없음", + "Untitled Group": "제목 없는 그룹", "Services": "서비스", "Discard": "취소", - "Cancel": "취소", + "Cancel": "닫기", "Powered by": "Powered by", "serwersms": "SerwerSMS.pl", "serwersmsAPIUser": "API Usename (webapi_ 접두사 포함)", @@ -359,14 +359,14 @@ "PushByTechulus": "Push by Techulus", "GoogleChat": "Google Chat (Google Workspace only)", "topic": "Topic", - "topicExplanation": "모니터링할 MQTT Topic", + "topicExplanation": "모니터링할 MQTT 토픽", "successMessage": "성공 메시지", "successMessageExplanation": "성공으로 간주되는 MQTT 메시지", "error": "오류", - "critical": "크리티컬", - "Customize": "커스터마이즈", - "Custom Footer": "커스텀 Footer", - "Custom CSS": "커스텀 CSS", + "critical": "중대", + "Customize": "사용자화", + "Custom Footer": "사용자 지정 푸터", + "Custom CSS": "사용자 지정 CSS", "smtpDkimSettings": "DKIM 설정", "smtpDkimDesc": "사용 방법은 DKIM {0}를 참조하세요.", "documentation": "문서", @@ -390,17 +390,17 @@ "alertaApiKey": "API 키", "alertaAlertState": "경고 상태", "alertaRecoverState": "해결된 상태", - "deleteStatusPageMsg": "정말 이 상태 페이지를 삭제할까요?", + "deleteStatusPageMsg": "이 상태 페이지를 삭제하시겠습니까?", "Proxies": "프록시", - "default": "Default", + "default": "기본", "enabled": "활성화", - "setAsDefault": "기본 프록시로 설정", - "deleteProxyMsg": "정말 이 프록시를 모든 모니터링에서 삭제할까요?", - "proxyDescription": "프록시가 작동하려면 모니터에 할당되어야 해요.", - "enableProxyDescription": "이 프록시는 활성화될 때까지 영향을 미치지 않아요. 활성화 상태에 따라 모든 모니터에서 프록시를 일시정지할 수 있어요.", - "setAsDefaultProxyDescription": "새로 추가하는 모든 모니터링에 이 프록시를 기본적으로 활성화해요. 각 모니터에 대해 별도로 프록시를 비활성화할 수 있어요.", + "setAsDefault": "기본으로 설정", + "deleteProxyMsg": "이 프록시를 모든 모니터에서 삭제하시겠습니까?", + "proxyDescription": "프록시가 작동하려면 모니터에 할당되어야 합니다.", + "enableProxyDescription": "이 프록시는 활성화될 때까지 모니터의 요청에 미치지 않습니다. 활성화 상태를 통해 모든 모니터에서 프록시를 일시 정지할 수 있습니다.", + "setAsDefaultProxyDescription": "새 모니터에 이 프록시를 기본으로 사용합니다. 개별 모니터에 대해 프록시를 비활성화할 수 있습니다.", "Certificate Chain": "인증서 체인", - "Valid": "유효", + "Valid": "유효함", "Invalid": "유효하지 않음", "AccessKeyId": "AccessKey ID", "SecretAccessKey": "AccessKey Secret", @@ -425,17 +425,17 @@ "Proxy server has authentication": "프록시 서버에 인증 절차가 있음", "User": "사용자", "Installed": "설치됨", - "Not installed": "설치되어 있지 않음", + "Not installed": "설치되지 않음", "Running": "작동 중", - "Not running": "작동하고 있지 않음", - "Remove Token": "토큰 삭제", + "Not running": "작동 중이 아님", + "Remove Token": "토큰 제거", "Start": "시작", "Stop": "정지", "Uptime Kuma": "Uptime Kuma", - "Add New Status Page": "새로운 상태 페이지 만들기", - "Slug": "주소", + "Add New Status Page": "새 상태 페이지 추가", + "Slug": "Slug", "Accept characters:": "허용되는 문자열:", - "startOrEndWithOnly": "{0} 로 시작하거나 끝나야 해요", + "startOrEndWithOnly": "{0}로 시작하거나 끝나야 합니다.", "No consecutive dashes": "연속되는 대시는 허용되지 않아요", "Next": "다음", "The slug is already taken. Please choose another slug.": "이미 존재하는 주소에요. 다른 주소를 사용해 주세요.", @@ -545,8 +545,8 @@ "smseagleRecipient": "받는 사람 (쉼표로 구분)", "Maintenance": "점검", "statusMaintenance": "점검 중", - "resendEveryXTimes": "{0}번마다 다시 보내요", - "resendDisabled": "다시 보내지 않아요", + "resendEveryXTimes": "{0}번마다 재전송", + "resendDisabled": "재전송하지 않음", "loadingError": "데이터를 가져올 수 없어요, 나중에 다시 시도하세요.", "plugin": "플러그인", "install": "설치", @@ -677,24 +677,24 @@ "wayToGetKookBotToken": "{0} 에서 애플리케이션을 만들고 봇 토큰을 얻어요", "Help": "도움말", "Game": "게임", - "General Monitor Type": "일반 모니터링", - "Passive Monitor Type": "수동 모니터링", - "Specific Monitor Type": "특정 모니터링", + "General Monitor Type": "일반 모니터 유형", + "Passive Monitor Type": "수동 모니터 유형", + "Specific Monitor Type": "특정 모니터 유형", "Monitor": "모니터", - "Resend Notification if Down X times consecutively": "X번 중단될 경우 알림 다시 보내기", - "Schedule maintenance": "점검 예약하기", - "Affected Monitors": "영향을 받는 모니터링", - "Pick Affected Monitors...": "영향을 받는 모니터링 선택하기…", + "Resend Notification if Down X times consecutively": "연속적인 다운으로 판단해 알림을 재전송할 기준 횟수", + "Schedule maintenance": "유지보수 예약", + "Affected Monitors": "영향을 받는 모니터", + "Pick Affected Monitors...": "영향을 받는 모니터 선택…", "Start of maintenance": "점검 시작", "All Status Pages": "모든 상태 페이지", - "Select status pages...": "상태 페이지 선택하기…", - "Custom": "커스텀", + "Select status pages...": "상태 페이지 선택…", + "Custom": "사용자 지정", "webhookAdditionalHeadersTitle": "추가 헤더", - "webhookAdditionalHeadersDesc": "웹훅과 함께 전송될 추가 헤더를 설정해요. 각각의 헤더는 JSON 키/값으로 구성되어야 해요.", + "webhookAdditionalHeadersDesc": "Webhook과 함께 전송되는 추가 헤더를 설정합니다. 각각의 헤더는 JSON 키/값으로 이루어져야 합니다.", "HTTP Headers": "HTTP 헤더", "Trust Proxy": "프록시 신뢰", "API Keys": "API 키", - "markdownSupported": "Markdown 문법이 지원됨", + "markdownSupported": "마크다운 문법 사용 가능", "telegramMessageThreadID": "(선택) 메시지 스레드 ID", "Clone": "복제", "cloneOf": "{0}의 복제본", @@ -703,7 +703,7 @@ "telegramProtectContentDescription": "활성화 할경우 텔레그램 봇 메시지는 포워딩 및 저장으로부터 보호됩니다.", "telegramSendSilentlyDescription": "조용히 메시지를 보냅니다. 사용자들은 무음으로 알림을 받습니다.", "telegramSendSilently": "무음 알림", - "Add New Tag": "태그 추가", + "Add New Tag": "새 태그 추가", "Edit Tag": "태그 수정", "Server Address": "서버 주소", "Learn More": "자세히 알아보기", @@ -752,62 +752,62 @@ "telegramMessageThreadIDDescription": "포럼의 대상 메시지 쓰레드(주제)에 대한 선택적 고유 식별인, 포럼 관리자 그룹에만 해당", "pagertreeSilent": "없음", "setupDatabaseChooseDatabase": "어떤 데이터베이스를 사용하시겠습니까?", - "setupDatabaseEmbeddedMariaDB": "추가 설정은 필요 없습니다. 이 도커 이미지에는 MariaDB가 내장되어 구성되어 있습니다. Uptime Kuma는 Unix Socket을 통해 데이터베이스에 연결합니다.", + "setupDatabaseEmbeddedMariaDB": "추가 설정이 필요하지 않습니다. 이 도커 이미지에는 MariaDB가 자동으로 포함 및 구성되어 있으며, Uptime Kuma는 유닉스 소켓을 통해 데이터베이스에 연결합니다.", "setupDatabaseMariaDB": "외부 MariaDB 데이터베이스에 연결합니다. 데이터베이스 연결 정보를 설정해야 합니다.", - "setupDatabaseSQLite": "소규모 배포에 권장되는 간단한 데이터베이스 파일입니다. v2.0.0 이전에는 Uptime Kuma가 SQLite를 기본 데이터베이스로 사용했습니다.", + "setupDatabaseSQLite": "소규모 배포에 권장되는 간단한 데이터베이스 파일입니다. Uptime Kuma는 v2.0.0 이전까지 SQLite를 기본 데이터베이스로 사용했습니다.", "dbName": "데이터베이스 이름", - "filterActive": "활성화", - "filterActivePaused": "일시중지", + "filterActive": "활성", + "filterActivePaused": "일시 정지", "Home": "홈", - "Cannot connect to the socket server": "소켓 서버에 연결 할 수 없습니다", - "Reconnecting...": "재 연결중...", + "Cannot connect to the socket server": "소켓 서버에 연결할 수 없습니다.", + "Reconnecting...": "다시 연결하는 중...", "Json Query": "JSON 쿼리", - "settingUpDatabaseMSG": "데이터베이스를 설정하는 중입니다. 시간이 걸릴 수 있으니 기다려 주세요.", + "settingUpDatabaseMSG": "데이터베이스를 설정하는 중입니다. 시간이 걸릴 수 있으니 잠시만 기다려 주세요.", "enableNSCD": "모든 DNS 요청을 캐싱하기 위해 NSCD (Name Service Cache Daemon) 활성화", "pushOthers": "기타", "programmingLanguages": "프로그래밍 언어", "Select": "선택", "Edit Maintenance": "점검 수정하기", - "styleElapsedTime": "하트비트 바 밑의 지난 시간 표시", - "styleElapsedTimeShowNoLine": "보이기 (선 없음)", - "styleElapsedTimeShowWithLine": "보이기 (선 있음)", + "styleElapsedTime": "하트비트 바 아래 표시되는 경과 시간", + "styleElapsedTimeShowNoLine": "표시 (선 없음)", + "styleElapsedTimeShowWithLine": "표시 (선 있음)", "chromeExecutable": "Chrome/Chromium 실행 파일", "chromeExecutableAutoDetect": "자동 감지", "Invert Keyword": "키워드 반전", - "Expected Value": "기대값", + "Expected Value": "기댓값", "Add a domain": "도메인 추가", "Remove domain": "도메인 '{0}' 제거", "Monitor Group": "모니터링 그룹", "Monitor Setting": "{0}의 모니터 설정", "now": "지금", "time ago": "{0} 전", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "연결하려는 서버의 호스트 이름을 입력하거나 {local_mta}를 사용하려는 경우 {localhost}를 입력합니다", - "-year": "-연도", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "연결하려는 서버의 호스트 이름을 입력하거나, {local_mta}를 사용하려는 경우 {localhost}를 입력합니다.", + "-year": "년", "Json Query Expression": "Json 쿼리 표현식", "Host URL": "호스트 URL", - "locally configured mail transfer agent": "로컬로 구성된 메일 전송 에이전트", - "ignoreTLSErrorGeneral": "연결에 TLS/SSL 오류 무시하기", + "locally configured mail transfer agent": "로컬에 구성된 메일 전송 에이전트", + "ignoreTLSErrorGeneral": "연결 중 TLS/SSL 오류 무시", "ignoredTLSError": "TLS/SSL 오류가 무시되었습니다", - "liquidIntroduction": "템플릿 생성은 Liquid 템플릿 언어를 통해 이루어집니다. 사용 지침은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:", + "liquidIntroduction": "템플릿은 Liquid 템플릿 언어를 통해 생성됩니다. 사용법은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:", "templateMsg": "알림 메시지", - "templateLimitedToUpDownCertNotifications": "업/다운/인증서 만료 알림에만 사용 가능", - "templateLimitedToUpDownNotifications": "UP/DOWN 알림에만 사용 가능", - "webhookBodyPresetOption": "프리셋 - {0}", + "templateLimitedToUpDownCertNotifications": "온라인/오프라인/인증서 만료 알림에만 사용 가능", + "templateLimitedToUpDownNotifications": "온라인/오프라인 알림에만 사용 가능", + "webhookBodyPresetOption": "사전 설정 - {0}", "successKeyword": "성공 키워드", - "successKeywordExplanation": "성공으로 간주되는 MQTT 키워드", + "successKeywordExplanation": "성공으로 간주할 MQTT 키워드", "Reset Token": "토큰 초기화", "Check/Uncheck": "체크/체크 해제", "pushViewCode": "푸시 모니터링는 어떻게 사용하나요? (코드 보기)", "Search monitored sites": "모니터링중인 사이트 검색", - "templateHeartbeatJSON": "heartbeat를 설명하는 오브젝트", - "shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에서 {vacuum} 명령을 실행해요. {auto_vacuum}이 이미 활성화되어 있지만, {auto_vacuum}은 {vacuum}이 하는 것처럼 데이터베이스를 조각 모음 하거나 페이지를 다시 압축하지는 않아요.", + "templateHeartbeatJSON": "하트비트를 설명하는 오브젝트", + "shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에 대해 {vacuum}을(를) 트리거합니다. {auto_vacuum}이 이미 활성화되어 있지만, 이는 데이터베이스를 조각 모음하거나 {vacuum} 명령어처럼 개별 데이터베이스 페이지를 다시 정리하지는 않습니다.", "statusPageSpecialSlugDesc": "특별한 주소 {0}: 아무런 주소도 입력되지 않으면 이 페이지가 보여요", "Add a new expiry notification day": "새 만료 알림 날짜 추가", "Refresh Interval Description": "이 상태 페이지는 {0}초마다 완전 새로고침(F5) 돼요", "telegramServerUrlDescription": "텔레그램 봇 API의 제한을 해제하거나, 차단된 지역(중국, 이란 등)에서 액세스하려면 {0}을 클릭하세요. 기본값: {1}", "chromeExecutableDescription": "Docker 사용자의 경우, Chromium이 아직 설치되지 않았다면 이를 설치하고 테스트 결과를 표시하는 데 몇 분이 걸릴 수 있어요. 1GB의 디스크 공간을 사용해요.", - "templateMonitorJSON": "monitor를 설명하는 오브젝트", - "webhookBodyCustomOption": "커스텀 Body", + "templateMonitorJSON": "모니터를 설명하는 오브젝트", + "webhookBodyCustomOption": "사용자 지정 본문 (Body)", "telegramServerUrl": "(선택) 서버 URL", "and": "그리고", "emailCustomisableContent": "사용자 지정 가능한 콘텐츠", @@ -815,7 +815,7 @@ "leave blank for default subject": "기본값을 사용하려면 비워두세요", "emailCustomBody": "커스텀 Body", "leave blank for default body": "기본값을 사용하려면 비워두세요", - "templateServiceName": "서비스 이름", + "templateServiceName": "서비스명", "templateHostnameOrURL": "호스트명 또는 URL", "templateStatus": "상태", "selectedMonitorCount": "선택됨: {0}", From 8f245b89cfde241f121606825833584aff08eb48 Mon Sep 17 00:00:00 2001 From: Artur S Date: Tue, 29 Apr 2025 09:25:56 +0000 Subject: [PATCH 034/133] Translated using Weblate (Russian) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ru/ --- src/lang/ru-RU.json | 63 +++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json index e055af110..e4a01cfcb 100644 --- a/src/lang/ru-RU.json +++ b/src/lang/ru-RU.json @@ -1,10 +1,10 @@ { - "languageName": "Русский", + "languageName": "Английский", "checkEverySecond": "Проверка каждые {0} секунд", - "retriesDescription": "Максимальное количество попыток перед пометкой сервиса, как недоступного, и отправкой уведомления", - "ignoreTLSError": "Игнорировать ошибки TLS/SSL для HTTPS сайтов", - "upsideDownModeDescription": "Инверсия статуса. Если сервис доступен, он будет отмечен как недоступный.", - "maxRedirectDescription": "Максимальное количество перенаправлений. Поставьте 0, чтобы отключить перенаправления.", + "retriesDescription": "Максимальное число попыток перед тем, как сервис будет помечен как неработающий и будет отправлено уведомление", + "ignoreTLSError": "Игнорировать ошибки TLS/SSL для сайтов с HTTPS", + "upsideDownModeDescription": "Инвертировать статус. Если сервис доступен — он считается НЕРАБОТАЮЩИМ.", + "maxRedirectDescription": "Максимальное число перенаправлений. Установите 0, чтобы отключить перенаправления.", "acceptedStatusCodesDescription": "Выберите коды статусов для определения доступности сервиса.", "passwordNotMatchMsg": "Введённые пароли не совпадают.", "notificationDescription": "Необходимо привязать уведомления к монитору чтобы они функционировали.", @@ -26,8 +26,8 @@ "Check Update On GitHub": "Проверить наличие обновления в GitHub", "List": "Список", "Add": "Добавить", - "Add New Monitor": "Добавить Новый Сенсор", - "Quick Stats": "Статистика", + "Add New Monitor": "Новый монитор", + "Quick Stats": "Сводка", "Up": "Доступен", "Down": "Не доступен", "Pending": "В ожидании", @@ -43,7 +43,7 @@ "Delete": "Удалить", "Current": "Текущий", "Uptime": "Время безотказной работы", - "Cert Exp.": "Сертификат ист.", + "Cert Exp.": "Срок SSL", "day": "день | дней", "-day": "-дней", "hour": "час", @@ -56,7 +56,7 @@ "URL": "URL-ссылка", "Hostname": "Имя хоста", "Port": "Порт", - "Heartbeat Interval": "Частота опроса", + "Heartbeat Interval": "Интервал опроса", "Retries": "Попыток", "Advanced": "Дополнительно", "Upside Down Mode": "Режим инверсии статуса", @@ -208,10 +208,10 @@ "pushbullet": "Pushbullet", "line": "Line Messenger", "mattermost": "Mattermost", - "Primary Base URL": "Основной URL", + "Primary Base URL": "Основной URL, по которому доступен Uptime Kuma", "Push URL": "URL-ссылка push уведомлений", "needPushEvery": "К этому URL необходимо обращаться каждые {0} секунд.", - "pushOptionalParams": "Опциональные параметры: {0}", + "pushOptionalParams": "Необязательные параметры: {0}", "defaultNotificationName": "Уведомления {notification} ({number})", "here": "здесь", "Required": "Обязательно", @@ -689,7 +689,7 @@ "Guild ID": "Идентификатор гильдии", "Kook": "Kook", "wayToGetKookBotToken": "Создайте приложение и получите токен бота по адресу {0}", - "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при неудачном запросе X раз", + "Resend Notification if Down X times consecutively": "Повторно отправлять уведомление, если сбой произошёл X раз подряд", "telegramProtectContent": "Запретить пересылку/сохранение", "telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.", "telegramSendSilently": "Отправить без звука", @@ -786,7 +786,7 @@ "Badge Label Suffix": "Суффикс надписи для значка", "Edit Maintenance": "Редактировать техобслуживание", "Reconnecting...": "Переподключение...", - "Cannot connect to the socket server": "Невозможно подключиться к серверу", + "Cannot connect to the socket server": "Не удаётся подключиться к сокет-серверу", "Badge Warn Color": "Цвет значка для предупреждения", "Badge Warn Days": "Значок для \"дней предупреждения\"", "Badge Down Days": "Значок для \"дней недоступности\"", @@ -829,7 +829,7 @@ "PushDeer Server": "Сервер PushDeer", "pushDeerServerDescription": "Оставьте пустым для использования официального сервера", "showCertificateExpiry": "Показывать истекающий сертификат", - "Request Timeout": "Тайм-Аут запроса", + "Request Timeout": "Таймаут ожидания", "timeoutAfter": "Тайм-Аут через {0} секунд", "Select": "Выбрать", "selectedMonitorCount": "Выбрано: {0}", @@ -850,12 +850,12 @@ "nostrRelaysHelp": "Один URL-адрес ретрансляции в каждой строке", "enableNSCD": "Включить NSCD (Name Service Cache Daemon) для кэширования всех DNS-запросов", "Saved.": "Сохранено.", - "setupDatabaseChooseDatabase": "Какую базу данных Вы бы хотели использовать?", - "setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот докер-образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-сокет.", - "setupDatabaseSQLite": "Простой файл базы данных, рекомендуемый для небольших развертываний. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.", - "setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Необходимо задать информацию о подключении к базе данных.", + "setupDatabaseChooseDatabase": "Какую базу данных вы хотите использовать?", + "setupDatabaseEmbeddedMariaDB": "Ничего настраивать не нужно. Этот образ Docker уже содержит встроенную и настроенную MariaDB. Uptime Kuma будет подключаться к базе данных через Unix-сокет.", + "setupDatabaseSQLite": "Простой файл базы данных, рекомендуется для небольших установок. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.", + "setupDatabaseMariaDB": "Подключение к внешней базе данных MariaDB. Необходимо указать информацию для подключения.", "dbName": "Имя базы данных", - "pushViewCode": "Как использовать монитор Push? (Посмотреть код)", + "pushViewCode": "Как настроить Push-монитор? (Показать код)", "programmingLanguages": "Языки программирования", "Bark API Version": "Версия Bark API", "monitorToastMessagesDescription": "Уведомления для мониторов исчезают через заданное время в секундах. Значение -1 отключает тайм-аут. Значение 0 отключает уведомления.", @@ -914,7 +914,7 @@ "Add a Remote Browser": "Добавить удаленный браузер", "Remote Browser not found!": "Удаленный браузер не найден!", "remoteBrowsersDescription": "Удаленные браузеры — альтернатива локальному запуску Chromium. Установите такой сервис, как browserless.io, или подключитесь к своему собственному", - "settingUpDatabaseMSG": "Настраиваем базу данных. Это может занять некоторое время, пожалуйста подождите.", + "settingUpDatabaseMSG": "Настройка базы данных. Это может занять некоторое время, пожалуйста, подождите.", "setup a new monitor group": "настроить новую группу мониторов", "openModalTo": "открыть модальное окно {0}", "Add a domain": "Добавить домен", @@ -929,8 +929,8 @@ "Mention group": "Упомянуть {group}", "Your User ID": "Ваш идентификатор пользователя", "Host URL": "URL Хоста", - "locally configured mail transfer agent": "Настроенный локально агент передачи почты", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Введите {Hostname} сервера, к которому вы хотите подключиться, либо {localhost}, если вы собираетесь использовать {local_mta}", + "locally configured mail transfer agent": "локальный почтовый агент", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Укажите имя хоста сервера, к которому хотите подключиться, или {localhost}, если планируете использовать {local_mta}", "wayToGetHeiiOnCallDetails": "Как получить ID триггера и ключи API , рассказывается в {documentation}", "gtxMessagingApiKeyHint": "Вы можете найти свой ключ API на странице: Мои учетные записи маршрутизации > Показать информацию об учетной записи > Учетные данные API > REST API (v2.x)", "From Phone Number / Transmission Path Originating Address (TPOA)": "Номер телефона / Адрес источника пути передачи (АИПП)", @@ -978,7 +978,7 @@ "Refresh Interval Description": "Страница статуса будет полностью обновлена каждые {0} секунд", "and": "и", "e.g. {discordThreadID}": "например {discordThreadID}", - "ignoredTLSError": "Ошибки TLS/SSL проигнорированы", + "ignoredTLSError": "TLS/SSL ошибки не учитываются", "Debug": "Отладка", "Copy": "Скопировать", "CopyToClipboardError": "Не удалось скопировать: {error}", @@ -1110,20 +1110,27 @@ "templateServiceName": "имя сервиса", "templateHostnameOrURL": "hostname или URL", "templateStatus": "статус", - "telegramServerUrlDescription": "Чтобы поднять ограничения API API Telegram или получить доступ к заблокированным районам (Китай, Иран и т.д.). Для получения дополнительной информации нажмите {0}. По умолчанию: {1}", - "wayToGetWahaApiKey": "Ключ API - это значение переменной среды WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.", + "telegramServerUrlDescription": "Чтобы обойти ограничения API бота Telegram или получить доступ в заблокированных регионах (например, в Китае или Иране), нажмите {0} для получения подробной информации. Значение по умолчанию: {1}", + "wayToGetWahaApiKey": "Ключ API — это значение переменной окружения WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.", "wayToGetWahaSession": "Из этой сессии WAHA отправляет уведомления на удостоверение личности чата. Вы можете найти его на приборной панели Waha.", "wayToWriteWahaChatId": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатор контакта ({1}) или идентификатора группы ({2}). Уведомления отправляются на этот идентификатор чата от сеанса Waha.", "wahaSession": "Сессия", "wahaChatId": "Идентификатор чата (номер телефона / идентификатор контакта / идентификатор группы)", "wayToGetWahaApiUrl": "Ваш экземпляр WAHA URL.", - "YZJ Webhook URL": "YZJ Вебхук URL", + "YZJ Webhook URL": "URL вебхука YZJ", "YZJ Robot Token": "YZJ Токен Робота", "telegramServerUrl": "(Необязательно) URL Сервера", "telegramUseTemplate": "Используйте пользовательский шаблон сообщения", "telegramUseTemplateDescription": "Если включено, сообщение будет отправлено с помощью пользовательского шаблона.", - "telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки для сообщений, см. Telegram {0} для конкретных деталей.", + "telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки в сообщениях. Подробности смотрите в документации Telegram — {0}.", "Plain Text": "Простой текст", "Message Template": "Шаблон сообщения", - "Template Format": "Формат шаблона" + "Template Format": "Формат шаблона", + "Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter лицензирован на условиях", + "smsplanetApiToken": "Токен для API SMSPlanet", + "smsplanetApiDocs": "Подробную информацию о получении API-токенов можно найти в {the_smsplanet_documentation}.", + "the smsplanet documentation": "документация SMSPlanet", + "Phone numbers": "Номера телефонов", + "Sender name": "Имя отправителя", + "smsplanetNeedToApproveName": "Требуется одобрение в панели клиента" } From d2a4972f6a9e0b1d011111bda1000b10bb9e9e1a Mon Sep 17 00:00:00 2001 From: Artur S Date: Tue, 29 Apr 2025 09:31:43 +0000 Subject: [PATCH 035/133] Translated using Weblate (Belarusian) Currently translated at 89.9% (968 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/be/ --- src/lang/be.json | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/lang/be.json b/src/lang/be.json index 0f526a143..f0bdc9c62 100644 --- a/src/lang/be.json +++ b/src/lang/be.json @@ -933,5 +933,43 @@ "threadForumPostID": "Трэд / ID паста", "whatHappensAtForumPost": "Стварыць новы пост на форуме. Гэта НЕ размяшчае паведамленні ў існуючым пасце. Для публікацыі ў існуючай публікацыі выкарыстоўвайце \"{option}\"", "now": "зараз", - "-year": "-год" + "-year": "-год", + "telegramServerUrl": "(Неабавязкова) URL сервера", + "telegramServerUrlDescription": "Каб зняць абмежаванні API бота Telegram або атрымаць доступ у заблакіраваных рэгіёнах (Кітай, Іран і інш.), націсніце {0} для атрымання дадатковай інфармацыі. Значэнне па змаўчанні: {1}", + "smspartnerPhoneNumber": "Нумар(ы) тэлефона", + "smspartnerSenderName": "Імя адпраўніка SMS", + "Command": "Каманда", + "mongodbCommandDescription": "Выканаць каманду MongoDB для базы даных. Інфармацыю пра даступныя каманды можна знайсці ў {documentation}", + "Community String": "Радок супольнасці", + "snmpCommunityStringHelptext": "Гэты радок выконвае функцыю пароля для аўтэнтыфікацыі і кантролю доступу да прылад з падтрымкай SNMP. Павінен адпавядаць канфігурацыі вашай SNMP-прылады.", + "OID (Object Identifier)": "OID (Ідэнтыфікатар аб’екта)", + "snmpOIDHelptext": "Увядзіце OID для датчыка або статусу, які вы хочаце маніторыць. Выкарыстоўвайце інструменты кіравання сеткай, такія як аглядальнікі MIB або праграмы SNMP, калі вы не ўпэўнены ў патрэбным OID.", + "SNMP Version": "Версія SNMP", + "Please enter a valid OID.": "Калі ласка, увядзіце карэктны OID.", + "wayToGetThreemaGateway": "Вы можаце зарэгістравацца для Threema Gateway {0}.", + "threemaRecipient": "Атрымальнік", + "templateServiceName": "назва сэрвісу", + "templateHostnameOrURL": "імя хоста або URL", + "templateStatus": "статус", + "telegramUseTemplate": "Выкарыстоўваць уласны шаблон паведамлення", + "telegramUseTemplateDescription": "Калі ўключана, паведамленне будзе адпраўлена з выкарыстаннем уласнага шаблона.", + "telegramTemplateFormatDescription": "Telegram дазваляе выкарыстоўваць розныя мовы разметкі для паведамленняў, падрабязнасці глядзіце ў Telegram {0}.", + "cacheBusterParamDescription": "Выпадкова згенераваны параметр для абыходу кэша.", + "Send rich messages": "Адправіць пашыраныя паведамленні", + "Bitrix24 Webhook URL": "URL вэбхука Bitrix24", + "wayToGetBitrix24Webhook": "Вы можаце стварыць вэбхук, выканаўшы крокі, апісаныя тут: {0}", + "bitrix24SupportUserID": "Увядзіце свой ідэнтыфікатар карыстальніка ў Bitrix24. Вы можаце даведацца ідэнтыфікатар па спасылцы, перайшоўшы ў профіль карыстальніка.", + "Condition": "Умова", + "aboutSlackUsername": "Змяняе адлюстраванае імя адпраўніка паведамлення. Калі вы хочаце згадваць кагосьці, уключыце гэта ў сяброўскае імя замест гэтага.", + "time ago": "{0} таму", + "Json Query Expression": "Выраз запыту JSON", + "and": "i", + "smspartnerApiurl": "Вы можаце знайсці свой ключ API на панэлі кіравання па адрасе {0}", + "smspartnerSenderNameInfo": "Павінна быць ад 3 да 11 звычайных сімвалаў", + "Message format": "Фармат паведамлення", + "ignoredTLSError": "Памылкі TLS/SSL былі праігнараваныя", + "shrinkDatabaseDescriptionSqlite": "Запусціць аперацыю {vacuum} для SQLite. {auto_vacuum} ужо ўключаны, але ён не дэфрагментуе базу даных і не перапакоўвае асобныя старонкі базы даных так, як гэта робіць каманда {vacuum}.", + "wayToGetDiscordThreadId": "Атрыманне ідэнтыфікатара тэмы або паведамлення на форуме аналагічнае атрыманню ідэнтыфікатара канала. Падрабязней пра тое, як атрымаць ідэнтыфікатары, чытайце тут {0}", + "smspartnerPhoneNumberHelptext": "Нумар павінен быць у міжнародным фармаце {0}, {1}. Некалькі нумароў павінны быць падзелены {2}", + "cacheBusterParam": "Дадайце параметр {0}" } From 5c7b91a99d6ff9c86a62725a50a1839e8dba4259 Mon Sep 17 00:00:00 2001 From: Junghyuk Kwon Date: Tue, 29 Apr 2025 23:44:30 +0000 Subject: [PATCH 036/133] Translated using Weblate (Korean) Currently translated at 74.4% (801 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ --- src/lang/ko-KR.json | 88 ++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index b6559cf04..5fc94676f 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -222,18 +222,18 @@ "Recipients": "받는 사람", "needSignalAPI": "REST API를 사용하는 Signal 클라이언트가 있어야 해요.", "wayToCheckSignalURL": "밑에 URL을 확인해 URL 설정 방법을 볼 수 있어요:", - "signalImportant": "경고: 받는 사람의 그룹과 숫자는 섞을 수 없어요!", + "signalImportant": "중요: 수신자 그룹과 숫자는 섞을 수 없습니다!", "gotify": "Gotify", "Application Token": "애플리케이션 토큰", "Server URL": "서버 URL", "Priority": "우선 순위", "slack": "Slack", "Icon Emoji": "아이콘 이모지", - "Channel Name": "채널 이름", + "Channel Name": "채널명", "Uptime Kuma URL": "Uptime Kuma URL", - "aboutWebhooks": "Webhook에 대한 설명: {0}", - "aboutChannelName": "Webhook 채널을 무시하려면 {0} 채널 이름칸에 채널 이름을 입력해주세요. 예: #기타-채널", - "aboutKumaURL": "Uptime Kuma URL칸을 공백으로 두면 기본적으로 Github Project 페이지로 설정해요.", + "aboutWebhooks": "Webhook에 대한 자세한 내용: {0}", + "aboutChannelName": "Webhook 채널을 바이패스하려면 {0}에 채널 이름을 입력하세요. 예: #기타-채널", + "aboutKumaURL": "Uptime Kuma URL 필드를 공백으로 두면 기본적으로 Github Project 페이지로 설정합니다,", "emojiCheatSheet": "이모지 목록: {0}", "rocket.chat": "Rocket.chat", "pushover": "Pushover", @@ -297,7 +297,7 @@ "matrixHomeserverURL": "Homeserver URL (http(s):// 와 함께 적어주세요. 그리고 포트 번호는 선택적 입니다.)", "Internal Room Id": "내부 방 ID", "matrixDesc1": "Matrix 클라이언트 방 설정의 고급 섹션에서 내부 방 ID를 찾을 수 있어요. 내부 방 ID는 이렇게 생겼답니다: !QMdRCpUIfLwsfjxye6:home.server.", - "matrixDesc2": "사용자의 모든 방에 대한 엑세스가 허용될 수 있어서 새로운 사용자를 만들고 원하는 방에만 초대한 후 엑세스 토큰을 사용하는 것이 좋아요. {0} 이 명령어를 통해 엑세스 토큰을 얻을 수 있어요", + "matrixDesc2": "개인 Matrix 사용자 계정의 액세스 토큰을 사용하는 것은 계정 전체와 참여 중인 모든 방에 완전한 접근 권한을 부여하게 되므로 권장되지 않습니다. 대신 새로운 사용자를 생성한 후 알림을 받을 방에만 초대하는 것을 권장합니다. 액세스 토큰은 {0} 명령어를 실행하여 얻을 수 있습니다.", "Method": "Method", "Body": "Body", "Headers": "헤더", @@ -350,10 +350,10 @@ "Cancel": "닫기", "Powered by": "Powered by", "serwersms": "SerwerSMS.pl", - "serwersmsAPIUser": "API Usename (webapi_ 접두사 포함)", + "serwersmsAPIUser": "API 사용자명 (webapi_ 접두사 포함)", "serwersmsAPIPassword": "API 비밀번호", - "serwersmsPhoneNumber": "휴대전화 번호", - "serwersmsSenderName": "보내는 사람 이름 (customer portal를 통해 가입된 정보)", + "serwersmsPhoneNumber": "휴대폰 번호", + "serwersmsSenderName": "SMS 발신자명 (customer portal로 가입된 정보)", "stackfield": "Stackfield", "dnsPortDescription": "DNS 서버 포트, 기본값은 53 이에요. 포트는 언제나 변경할 수 있어요.", "PushByTechulus": "Push by Techulus", @@ -368,28 +368,28 @@ "Custom Footer": "사용자 지정 푸터", "Custom CSS": "사용자 지정 CSS", "smtpDkimSettings": "DKIM 설정", - "smtpDkimDesc": "사용 방법은 DKIM {0}를 참조하세요.", + "smtpDkimDesc": "사용 방법은 Nodemailer DKIM {0}을(를) 참조하세요.", "documentation": "문서", "smtpDkimDomain": "도메인 이름", "smtpDkimKeySelector": "Key Selector", - "smtpDkimPrivateKey": "Private Key", + "smtpDkimPrivateKey": "비밀 키", "smtpDkimHashAlgo": "해시 알고리즘 (선택)", "smtpDkimheaderFieldNames": "서명할 헤더 키 (선택)", "smtpDkimskipFields": "서명하지 않을 헤더 키 (선택)", - "wayToGetPagerDutyKey": "Service -> Service Directory -> (서비스 선택) -> Integrations -> Add integration. 에서 찾을 수 있어요. 자세히 알아보려면 {0}에서 \"Events API V2\"를 검색해봐요", + "wayToGetPagerDutyKey": "\"Events API V2\"는 Service -> Service Directory -> (서비스 선택) -> Integrations -> Add integration. 에서 찾을 수 있습니다. 자세한 내용 {0}", "Integration Key": "Integration 키", "Integration URL": "Integration URL", - "Auto resolve or acknowledged": "자동 해결 혹은 승인", + "Auto resolve or acknowledged": "자동 해결 또는 승인", "do nothing": "아무것도 하지 않기", "auto acknowledged": "자동 승인 (acknowledged)", "auto resolve": "자동 해결 (resolve)", "gorush": "Gorush", "alerta": "Alerta", - "alertaApiEndpoint": "API Endpoint", - "alertaEnvironment": "환경변수", + "alertaApiEndpoint": "API 엔드포인트", + "alertaEnvironment": "환경", "alertaApiKey": "API 키", - "alertaAlertState": "경고 상태", - "alertaRecoverState": "해결된 상태", + "alertaAlertState": "알림 상태", + "alertaRecoverState": "복구 상태", "deleteStatusPageMsg": "이 상태 페이지를 삭제하시겠습니까?", "Proxies": "프록시", "default": "기본", @@ -469,7 +469,7 @@ "onebotGroupMessage": "그룹 메시지", "onebotPrivateMessage": "개인 메시지", "onebotUserOrGroupId": "그룹/사용자 ID", - "onebotSafetyTips": "안전을 위해 Access 토큰을 설정하세요", + "onebotSafetyTips": "보안을 위해 Access 토큰을 설정하세요.", "PushDeer Key": "PushDeer 키", "Footer Text": "Footer 문구", "Show Powered By": "Powered By 문구 표시하기", @@ -479,9 +479,9 @@ "Certificate Expiry Notification": "인증서 만료 알림", "API Username": "API 사용자 이름", "API Key": "API 키", - "Recipient Number": "받는 사람 번호", + "Recipient Number": "수신자 번호", "From Name/Number": "발신자 이름/번호", - "Leave blank to use a shared sender number.": "공유 발신자 번호를 사용하려면 공백으로 두세요.", + "Leave blank to use a shared sender number.": "공유 발신 번호를 사용하려면 공백으로 두세요.", "Octopush API Version": "Octopush API 버전", "Legacy Octopush-DM": "레거시 Octopush-DM", "endpoint": "endpoint", @@ -526,8 +526,8 @@ "Retype the address.": "주소 다시 입력하기.", "Go back to the previous page.": "이전 페이지로 돌아가기.", "Coming Soon": "Coming Soon", - "wayToGetClickSendSMSToken": "{0}에서 API 사용자 이름과 키를 얻을 수 있어요.", - "Custom Monitor Type": "커스텀 모니터링", + "wayToGetClickSendSMSToken": "{0}에서 API 사용자명과 키를 얻을 수 있습니다.", + "Custom Monitor Type": "커스텀 모니터", "deleteDockerHostMsg": "정말 이 도커 호스트를 모든 모니터링에서 삭제할까요?", "trustProxyDescription": "'X-Forwarded-*' 헤더를 신뢰해요. 올바른 클라이언트 IP를 얻어야하고Uptime Kuma가 Nginx나 Apache 같은 프록시 뒤에 있다면 이 기능을 활성화해야 해요.", "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "프로필 이름(왼쪽 아래)을 클릭하고 아래로 스크롤한 다음 토큰 만들기를 클릭하여 장기 액세스 토큰을 만들 수 있어요. ", @@ -541,8 +541,8 @@ "You can divide numbers with": "다음과 같이 숫자를 구분할 수 있어요:", "goAlertInfo": "GoAlert는 온콜 스케줄링, 자동 에스컬레이션 및 알림(SMS 또는 음성 통화와 같은)을 위한 오픈 소스 응용 프로그램이에요. 올바른 사람, 올바른 방법, 적절한 시간에 자동으로 참여하세요! {0}", "smseagle": "SMSEagle", - "smseagleTo": "휴대전화 번호", - "smseagleRecipient": "받는 사람 (쉼표로 구분)", + "smseagleTo": "휴대폰 번호", + "smseagleRecipient": "수신자 (여러 명인 경우 쉼표로 구분)", "Maintenance": "점검", "statusMaintenance": "점검 중", "resendEveryXTimes": "{0}번마다 재전송", @@ -575,14 +575,14 @@ "Bark Group": "Bark 그룹", "Bark Sound": "Bark 소리", "promosmsAllowLongSMS": "긴 SMS 허용", - "smseagleGroup": "전화번호부 그룹 이름", - "smseagleContact": "전화번호부 연락처 이름", - "smseagleRecipientType": "받는 사람 종류", - "smseagleToken": "API 엑세스 토큰", + "smseagleGroup": "연락처 그룹명 목록", + "smseagleContact": "연락처 이름 목록", + "smseagleRecipientType": "수신자 종류", + "smseagleToken": "API 액세스 토큰", "smseagleUrl": "SMSEagle 기기 URL", "smseagleEncoding": "유니코드로 보내기", "smseaglePriority": "메시지 우선 순위 (0-9, 기본값= 0)", - "ntfy Topic": "ntfy 주제", + "ntfy Topic": "ntfy 토픽", "HomeAssistant": "홈 어시스턴트", "RadiusSecretDescription": "클라이언트와 서버 간의 비밀 키", "RadiusSecret": "Radius 비밀 키", @@ -704,30 +704,30 @@ "telegramSendSilentlyDescription": "조용히 메시지를 보냅니다. 사용자들은 무음으로 알림을 받습니다.", "telegramSendSilently": "무음 알림", "Add New Tag": "새 태그 추가", - "Edit Tag": "태그 수정", + "Edit Tag": "태그 편집", "Server Address": "서버 주소", "Learn More": "자세히 알아보기", "Continue": "계속", "Key Added": "키 추가됨", "No API Keys": "API 키 없음", - "disableAPIKeyMsg": "이 API키를 정말로 비활성화하시겠습니까?", - "deleteAPIKeyMsg": "이 API키를 정말로 삭제하시겠습니까?", + "disableAPIKeyMsg": "이 API 키를 비활성화하시겠습니까?", + "deleteAPIKeyMsg": "이 API 키를 삭제하시겠습니까?", "Generate": "생성", - "Body Encoding": "Body 인코딩", + "Body Encoding": "본문(Body) 인코딩", "Expiry": "만료", - "Expiry date": "만료 날짜", + "Expiry date": "만료일", "Don't expire": "만료되지 않음", "notificationRegional": "지역별", - "Google Analytics ID": "Google Analytics ID", + "Google Analytics ID": "Google 애널리틱스 ID", "Add API Key": "API 키 추가", - "apiKeyAddedMsg": "API 키가 추가되었습니다. 다시 표시되지 않을 것이므로 메모해 두세요.", + "apiKeyAddedMsg": "API 키가 추가되었습니다. 다시 표시되지 않으므로 메모해 두세요.", "pagertreeCritical": "긴급", - "apiKey-active": "사용 가능", + "apiKey-active": "활성", "lunaseaUserID": "사용자 ID", "apiKey-expired": "만료됨", - "Expires": "만료일", + "Expires": "만료", "twilioAuthToken": "인증 토큰 / API 키 시크릿", - "twilioFromNumber": "번호에서", + "twilioFromNumber": "발신 번호", "twilioToNumber": "번호에서", "twilioAccountSID": "계정 SID", "pagertreeUrgency": "긴급", @@ -739,15 +739,15 @@ "invalidCronExpression": "알수없는 Cron 값입니다: {0}", "Add Another": "다른 항목 추가", "apiKey-inactive": "비활성화", - "pagertreeIntegrationUrl": "Integration 링크", + "pagertreeIntegrationUrl": "Integration URL", "pagertreeLow": "낮음", "pagertreeMedium": "중간", "pagertreeHigh": "높음", - "pagertreeResolve": "자동으로 해결하기", + "pagertreeResolve": "자동으로 해결", "pagertreeDoNothing": "아무것도 하지 않음", - "wayToGetPagerTreeIntegrationURL": "PagerTree에서 Uptime Kuma 통합을 생성한 후 Endpoint를 복사합니다. 전체 세부 정보 보기 {0}", + "wayToGetPagerTreeIntegrationURL": "PagerTree에서 Uptime Kuma 통합을 생성한 후 엔드포인트를 복사합니다. 세부 정보 보기 {0}", "lunaseaTarget": "대상", - "lunaseaDeviceID": "기기 ID", + "lunaseaDeviceID": "디바이스 ID", "statusPageRefreshIn": "{0} 후 새로고침", "telegramMessageThreadIDDescription": "포럼의 대상 메시지 쓰레드(주제)에 대한 선택적 고유 식별인, 포럼 관리자 그룹에만 해당", "pagertreeSilent": "없음", @@ -777,7 +777,7 @@ "Expected Value": "기댓값", "Add a domain": "도메인 추가", "Remove domain": "도메인 '{0}' 제거", - "Monitor Group": "모니터링 그룹", + "Monitor Group": "모니터 그룹", "Monitor Setting": "{0}의 모니터 설정", "now": "지금", "time ago": "{0} 전", From 5255b6bbb9a72ea775ea58603ab4d348252bd68a Mon Sep 17 00:00:00 2001 From: Donker_Jumala Date: Wed, 30 Apr 2025 09:03:30 +0000 Subject: [PATCH 037/133] Translated using Weblate (Japanese) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ --- src/lang/ja.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index cb46b1500..825928a43 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -1085,5 +1085,11 @@ "telegramUseTemplate": "カスタムメッセージテンプレートを使用", "telegramUseTemplateDescription": "有効にすると、メッセージはカスタムテンプレートを使って送信されます。", "telegramTemplateFormatDescription": "Telegramではメッセージに異なるマークアップ言語を使用することができます。詳細はTelegram {0} を参照してください。", - "Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています" + "Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています", + "the smsplanet documentation": "smsplanetドキュメント", + "Phone numbers": "携帯電話番号", + "Sender name": "送信者名", + "smsplanetNeedToApproveName": "クライアントパネルでの承認が必要", + "smsplanetApiToken": "SMSPlanet APIのトークン", + "smsplanetApiDocs": "APIトークンの取得に関する詳細な情報は、{the_smsplanet_documentation}にあります。" } From 2ba33f068bc3bf952f8f14b9df6951635c0b75e9 Mon Sep 17 00:00:00 2001 From: Junghyuk Kwon Date: Wed, 30 Apr 2025 10:34:29 +0000 Subject: [PATCH 038/133] Translated using Weblate (Korean) Currently translated at 74.4% (801 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ --- src/lang/ko-KR.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 5fc94676f..2da645dfd 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -8,19 +8,19 @@ "maxRedirectDescription": "최대 리디렉션 허용 횟수. 0으로 설정하면 리디렉션을 사용하지 않습니다.", "acceptedStatusCodesDescription": "응답 성공으로 간주할 상태 코드를 정해요.", "passwordNotMatchMsg": "비밀번호 재입력이 일치하지 않아요.", - "notificationDescription": "모니터링에 알림을 설정할 수 있어요.", + "notificationDescription": "알림이 동작하려면 기존 모니터에 할당되어야 합니다.", "keywordDescription": "HTML 이나 JSON에서 대소문자를 구분해 키워드를 검색해요.", "pauseDashboardHome": "정지", - "deleteMonitorMsg": "정말 이 모니터링을 삭제할까요?", - "deleteNotificationMsg": "정말 이 알림을 모든 모니터링에서 삭제할까요?", + "deleteMonitorMsg": "이 모니터를 삭제하시겠습니까?", + "deleteNotificationMsg": "이 알림을 모든 모니터에서 삭제하시겠습니까?", "resolverserverDescription": "Cloudflare가 기본 서버예요, 원한다면 언제나 다른 Resolver 서버로 변경할 수 있어요.", - "rrtypeDescription": "모니터링할 RR-Type을 선택해요", - "pauseMonitorMsg": "정말 이 모니터링을 일시 정지할까요?", - "enableDefaultNotificationDescription": "새로 추가하는 모든 모니터링에 이 알림을 기본적으로 활성화해요. 각 모니터에 대해 별도로 알림을 비활성화할 수 있어요.", - "clearEventsMsg": "정말 이 모니터링에 대한 모든 이벤트를 삭제할까요?", - "clearHeartbeatsMsg": "정말 이 모니터링에 대한 모든 하트비트를 삭제할까요?", + "rrtypeDescription": "모니터링할 RR Type을 선택하세요.", + "pauseMonitorMsg": "이 모니터를 일시 정지하시겠습니까?", + "enableDefaultNotificationDescription": "새 모니터에 이 알림을 기본적으로 활성화합니다. 개별 모니터에 대해 알림을 비활성화할 수 있습니다.", + "clearEventsMsg": "이 모니터의 모든 이벤트를 삭제하시겠습니까?", + "clearHeartbeatsMsg": "이 모니터의 모든 하트비트를 삭제하시겠습니까?", "confirmClearStatisticsMsg": "정말 모든 통계를 삭제할까요?", - "importHandleDescription": "이름이 같은 모든 모니터링이나 알림을 건너뛰려면 '기존값 건너뛰기'를 선택해주세요. '덮어쓰기'는 기존의 모든 모니터링과 알림을 삭제해요.", + "importHandleDescription": "이름이 같은 모니터나 알림을 건너뛰려면 '기존 항목 건너뛰기'를 선택하세요. '덮어쓰기'를 선택한 경우 존재하는 기존 모니터와 알림을 모두 삭제합니다.", "confirmImportMsg": "정말 백업을 가져올까요? 가져오기 옵션을 제대로 설정했는지 다시 확인해주세요.", "twoFAVerifyLabel": "토큰을 입력해 2단계 인증이 작동하는지 확인해주세요", "tokenValidSettingsMsg": "토큰이 유효해요! 이제 2단계 인증 설정을 저장할 수 있어요.", @@ -61,7 +61,7 @@ "-hour": "시간", "Response": "응답", "Ping": "핑", - "Monitor Type": "모니터링 종류", + "Monitor Type": "모니터 타입", "Keyword": "키워드", "Friendly Name": "별명", "URL": "URL", @@ -135,7 +135,7 @@ "Events": "이벤트", "Heartbeats": "하트비트", "Auto Get": "Auto Get", - "backupDescription": "모든 모니터링과 알림을 JSON 파일 형식에 저장할 수 있어요.", + "backupDescription": "모든 모니터와 알림을 JSON 파일에 백업할 수 있습니다.", "backupDescription2": "히스토리와 이벤트 데이터는 포함되어 있지 않아요.", "backupDescription3": "알림 토큰과 같은 보안 데이터가 내보내기 파일에 포함되어 있으므로 관리에 주의해주세요.", "alertNoFile": "가져올 파일을 선택하세요.", @@ -398,7 +398,7 @@ "deleteProxyMsg": "이 프록시를 모든 모니터에서 삭제하시겠습니까?", "proxyDescription": "프록시가 작동하려면 모니터에 할당되어야 합니다.", "enableProxyDescription": "이 프록시는 활성화될 때까지 모니터의 요청에 미치지 않습니다. 활성화 상태를 통해 모든 모니터에서 프록시를 일시 정지할 수 있습니다.", - "setAsDefaultProxyDescription": "새 모니터에 이 프록시를 기본으로 사용합니다. 개별 모니터에 대해 프록시를 비활성화할 수 있습니다.", + "setAsDefaultProxyDescription": "새 모니터에 이 프록시를 기본적으로 활성화합니다. 개별 모니터에 대해 프록시를 비활성화할 수 있습니다.", "Certificate Chain": "인증서 체인", "Valid": "유효함", "Invalid": "유효하지 않음", @@ -528,7 +528,7 @@ "Coming Soon": "Coming Soon", "wayToGetClickSendSMSToken": "{0}에서 API 사용자명과 키를 얻을 수 있습니다.", "Custom Monitor Type": "커스텀 모니터", - "deleteDockerHostMsg": "정말 이 도커 호스트를 모든 모니터링에서 삭제할까요?", + "deleteDockerHostMsg": "이 Docker 호스트를 모든 모니터에서 삭제하시겠습니까?", "trustProxyDescription": "'X-Forwarded-*' 헤더를 신뢰해요. 올바른 클라이언트 IP를 얻어야하고Uptime Kuma가 Nginx나 Apache 같은 프록시 뒤에 있다면 이 기능을 활성화해야 해요.", "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "프로필 이름(왼쪽 아래)을 클릭하고 아래로 스크롤한 다음 토큰 만들기를 클릭하여 장기 액세스 토큰을 만들 수 있어요. ", "Then choose an action, for example switch the scene to where an RGB light is red.": "그런 다음 동작을 선택해요, 예를 들어 장면을 RGB 조명이 빨간색인 곳으로 전환해요.", @@ -594,7 +594,7 @@ "Request Timeout": "요청 타임아웃", "Query": "쿼리", "settingsCertificateExpiry": "TLS 인증서 만료", - "certificationExpiryDescription": "HTTPS 모니터링 TLS 인증서가 만료되면 알림을 활성화해요:", + "certificationExpiryDescription": "TLS 인증서가 설정된 기간 내에 만료될 경우, HTTPS 모니터가 알림을 전송합니다:", "Setup Docker Host": "도커 호스트 설정", "Docker Daemon": "도커 데몬", "socket": "소켓", @@ -623,7 +623,7 @@ "Event data:": "이벤트 데이터:", "Frontend Version": "프론트엔드 버전", "Frontend Version do not match backend version!": "프론트엔드 버전이 백엔드 버전과 일치하지 않아요!", - "confirmDeleteTagMsg": "정말 이 태그를 삭제할까요? 이 태그와 연결된 모니터링은 삭제되지 않아요.", + "confirmDeleteTagMsg": "이 태그를 삭제하시겠습니까? 이 태그와 연결된 모니터는 삭제되지 않습니다.", "infiniteRetention": "무한히 저장하려면 0으로 설정하세요.", "backupRecommend": "대신 볼륨 또는 데이터 폴더 (./data/) 를 직접 백업하세요.", "Optional": "선택", @@ -670,10 +670,10 @@ "grpcMethodDescription": "메서드 이름은 sayHello, check와 같은 카멜 케이스로 변환되어요.", "deleteMaintenanceMsg": "정말 이 점검을 삭제할까요?", "recurringIntervalMessage": "매일 한 번 실행 | {0}일마다 한 번 실행", - "affectedMonitorsDescription": "현재 점검에 영향을 받는 모니터링 선택하기", + "affectedMonitorsDescription": "현재 유지보수에 영향을 받는 모니터를 선택하세요.", "affectedStatusPages": "점검 메시지를 표시할 상태 페이지 선택하기", "Kook": "Kook", - "atLeastOneMonitor": "최소 1개의 모니터링을 선택하세요", + "atLeastOneMonitor": "적어도 1개 이상의 모니터를 선택하세요.", "wayToGetKookBotToken": "{0} 에서 애플리케이션을 만들고 봇 토큰을 얻어요", "Help": "도움말", "Game": "게임", @@ -698,7 +698,7 @@ "telegramMessageThreadID": "(선택) 메시지 스레드 ID", "Clone": "복제", "cloneOf": "{0}의 복제본", - "Clone Monitor": "모니터링 복제", + "Clone Monitor": "모니터 복제", "telegramProtectContent": "포워딩/저장 보호", "telegramProtectContentDescription": "활성화 할경우 텔레그램 봇 메시지는 포워딩 및 저장으로부터 보호됩니다.", "telegramSendSilentlyDescription": "조용히 메시지를 보냅니다. 사용자들은 무음으로 알림을 받습니다.", @@ -797,8 +797,8 @@ "successKeywordExplanation": "성공으로 간주할 MQTT 키워드", "Reset Token": "토큰 초기화", "Check/Uncheck": "체크/체크 해제", - "pushViewCode": "푸시 모니터링는 어떻게 사용하나요? (코드 보기)", - "Search monitored sites": "모니터링중인 사이트 검색", + "pushViewCode": "푸시 모니터는 어떻게 사용하나요? (코드 보기)", + "Search monitored sites": "모니터링 중인 사이트 검색", "templateHeartbeatJSON": "하트비트를 설명하는 오브젝트", "shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에 대해 {vacuum}을(를) 트리거합니다. {auto_vacuum}이 이미 활성화되어 있지만, 이는 데이터베이스를 조각 모음하거나 {vacuum} 명령어처럼 개별 데이터베이스 페이지를 다시 정리하지는 않습니다.", "statusPageSpecialSlugDesc": "특별한 주소 {0}: 아무런 주소도 입력되지 않으면 이 페이지가 보여요", @@ -822,8 +822,8 @@ "Remove the expiry notification": "만료 알림 날짜 제거", "Refresh Interval": "새로고침 주기", "noDockerHostMsg": "사용할 수 없습니다. 먼저 도커 호스트를 설정하세요.", - "DockerHostRequired": "이 모니터링을 위한 도커 호스트를 설정해 주세요.", - "tailscalePingWarning": "Tailscale Ping 모니터링을 사용하려면 Docker 없이 Uptime Kuma를 설치하고 서버에 Tailscale 클라이언트도 설치해야 합니다.", + "DockerHostRequired": "이 모니터를 위한 Docker 호스트를 설정해 주세요.", + "tailscalePingWarning": "Tailscale Ping 모니터를 사용하려면 Docker를 사용하지 않고 Uptime Kuma를 설치해야 하며, 서버에 Tailscale 클라이언트도 설치해야 합니다.", "telegramUseTemplate": "커스텀 메시지 템플릿 사용", "telegramUseTemplateDescription": "활성화하면 메시지를 보낼 때 커스텀 템플릿을 사용해요.", "telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요.", From 00025e2a2dfb7f34eb54b248068b8811d594a11b Mon Sep 17 00:00:00 2001 From: Manuel Zavatta Date: Thu, 1 May 2025 07:03:50 +0000 Subject: [PATCH 039/133] Translated using Weblate (Italian) Currently translated at 67.4% (726 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ --- src/lang/it-IT.json | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index 3104e5fcb..e07fbd2e1 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -308,7 +308,7 @@ "clearDataOlderThan": "Mantieni lo storico per {0} giorni.", "PasswordsDoNotMatch": "Le password non corrispondono.", "records": "records", - "One record": "One record", + "One record": "Un record", "steamApiKeyDescription": "Per monitorare un server di gioco Steam è necessaria una Web-API Key di Steam. È possibile registrarne una qui: ", "Current User": "Utente corrente", "recent": "Recenti", @@ -742,5 +742,22 @@ "templateHostnameOrURL": "nome host o URL", "templateStatus": "stato", "templateServiceName": "nome del servizio", - "locally configured mail transfer agent": "agente mail configurato localmente" + "locally configured mail transfer agent": "agente mail configurato localmente", + "shrinkDatabaseDescriptionSqlite": "Un record", + "pushoversounds cashregister": "Registratore di cassa", + "Strategy": "Strategia", + "Add a domain": "Aggiungi un dominio", + "telegramServerUrl": "(Facoltativo) URL del Server", + "pushoversounds magic": "Magico", + "pushoversounds mechanical": "Meccanico", + "pushoversounds pianobar": "Piano Bar", + "pushoversounds siren": "Sirena", + "pushoversounds spacealarm": "Allarme spaziale", + "pushoversounds alien": "Allarme Alieno (lungo)", + "Remove domain": "Rimuovi il dominio '{0}'", + "Edit Tag": "Modifica il Tag", + "Server Address": "Indirizzo del Server", + "Expiry": "Scadenza", + "telegramUseTemplateDescription": "Se abilitato, il messaggio sarà spedito usando il template personalizzato.", + "high": "alto" } From fb980b106577ddafa4997173c294ce954f29df55 Mon Sep 17 00:00:00 2001 From: Pargorn Ruasijan Date: Thu, 1 May 2025 17:02:11 +0000 Subject: [PATCH 040/133] Translated using Weblate (Thai) Currently translated at 64.4% (693 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index b0a78cf92..fd0d8bf5f 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -28,20 +28,20 @@ "confirmDisableTwoFAMsg": "คุณแน่ใจหรือไม่ที่จะปิดใช้งาน 2FA?", "Settings": "การตั้งค่า", "Dashboard": "แผงควบคุม", - "New Update": "อัพเดทใหม่", + "New Update": "อัปเดตใหม่", "Language": "ภาษา", "Appearance": "หน้าตา", "Theme": "ธีม", "General": "ทั่วไป", "Primary Base URL": "URL หลัก", - "Version": "เวอร์ชั่น", + "Version": "เวอร์ชัน", "Check Update On GitHub": "ตรวจสอบการอัปเดตบน GitHub", "List": "รายการ", "Add": "เพิ่ม", "Add New Monitor": "เพิ่มมอนิเตอร์ใหม่", - "Quick Stats": "สถิติอย่างย่อ", - "Up": "ใช้งานได้", - "Down": "ไม่สามารถใช้งานได้", + "Quick Stats": "สรุปสถานะ", + "Up": "ทำงานปกติ", + "Down": "ทำงานล้มเหลว", "Pending": "รอดำเนินการ", "Unknown": "ไม่ทราบ", "Pause": "หยุดชั่วคราว", @@ -380,7 +380,7 @@ "alertaApiKey": "กุญแจ API", "alertaAlertState": "แจ้งเตือนสถานะ", "alertaRecoverState": "กู้คืนสถานะ", - "deleteStatusPageMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบหน้าสถานะนี้", + "deleteStatusPageMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบหน้าสถานะนี้?", "Proxies": "พร็อกซี", "default": "ค่าเริ่มต้น", "enabled": "เปิดใช้งานแล้ว", @@ -638,7 +638,7 @@ "lastDay3": "วันที่ 3 สุดท้ายของเดือน", "lastDay4": "วันที่ 4 สุดท้ายของเดือน", "No Maintenance": "ไม่มีการบำรุงรักษา", - "pauseMaintenanceMsg": "แน่ใจไหมว่าต้องการหยุดชั่วคราว", + "pauseMaintenanceMsg": "แน่ใจไหมว่าต้องการหยุดชั่วคราว?", "Display Timezone": "แสดงเขตเวลา", "statusPageMaintenanceEndDate": "จบ", "Server Timezone": "เขตเวลาเซิร์ฟเวอร์", @@ -676,12 +676,12 @@ "timeoutAfter": "หมดเวลาหลังจาก {0} วินาที", "Select": "เลือก", "Expected Value": "ค่าที่คาดหวัง", - "setupDatabaseChooseDatabase": "ฐานข้อมูลไหนที่ต้องการใช้งาน?", + "setupDatabaseChooseDatabase": "คุณต้องการใช้ฐานข้อมูลใด?", "setupDatabaseEmbeddedMariaDB": "คุณไม่จำเป็นต้องทำอะไร Docker image จะสร้างและตั่งค่า MariaDB ให้โดยอัตโนมัติ Uptime Kuma จะเชื่อมต่อกับฐานข้อมูลนี้ด้วย unix socket", "setupDatabaseMariaDB": "เชื่อมต่อไปยัง MariaDB ภายนอก คุณจำเป็นจะต้องตั่งค่าการเชื่อมต่อฐานข้อมูล", "setupDatabaseSQLite": "ไฟล์ฐานข้อมูลอย่างง่าย แนะนำสำหรับการปรับใช้ขนาดเล็ก ก่อนเวอร์ชัน 2.0.0 Uptime Kuma ใช้ SQLite เป็นฐานข้อมูลเริ่มต้น", "dbName": "ชื่อฐานข้อมูล", - "Passive Monitor Type": "ชนิดมอนิเตอร์แบบพาสซีฟ", + "Passive Monitor Type": "Passive Monitor Type", "documentationOf": "{0} คู่มือ", "successDeleted": "ลบสำเร็จ.", "Command": "คำสั่ง", @@ -710,5 +710,29 @@ "Request Timeout": "หมดเวลาการเชื่อมต่อ", "ignoredTLSError": "ข้อผิดพลาด TLS/SSL ถูกละเว้น", "pushOthers": "อื่น ๆ", - "pushViewCode": "วิธีใช้งาน Push monitor (ดูโค้ด)" + "pushViewCode": "วิธีใช้งาน Push monitor (ดูโค้ด)", + "templateServiceName": "ชื่อบริการ", + "templateHostnameOrURL": "ชื่อโฮสต์หรือ URL", + "templateStatus": "สถานะ", + "webhookBodyCustomOption": "เนื้อหากำหนดเอง", + "Reset Token": "รีเซ็ตโทเคน", + "apiKeyAddedMsg": "คีย์ API ของคุณถูกเพิ่มเรียบร้อยแล้ว โปรดจดบันทึกไว้ เนื่องจากจะไม่แสดงอีกครั้ง", + "wayToGetSevenIOApiKey": "ไปที่แดชบอร์ดที่ app.seven.io > develope > api key > ปุ่มเพิ่มสีเขียว", + "filterActivePaused": "หยุดชั่วคราว", + "Search monitored sites": "ค้นหาเว็บไซต์ที่ตรวจสอบ", + "liquidIntroduction": "การใช้เทมเพลตสามารถทำได้ผ่านภาษาการสร้างเทมเพลต Liquid โปรดดูที่ {0} สำหรับคำแนะนำในการใช้งาน ตัวแปรที่ใช้ได้มีดังนี้:", + "templateLimitedToUpDownCertNotifications": "ใช้ได้เฉพาะสำหรับการแจ้งเตือนสถานะ UP/DOWN/การหมดอายุของใบรับรอง", + "selectedMonitorCount": "ที่เลือกไว้: {0}", + "statusPageSpecialSlugDesc": "Slug พิเศษ {0}: หน้านี้จะแสดงเมื่อไม่มีการระบุ slug", + "Add a new expiry notification day": "เพิ่มวันแจ้งเตือนการหมดอายุใหม่", + "templateMonitorJSON": "ออบเจ็กต์ที่อธิบายเกี่ยวกับตัวตรวจสอบ", + "templateLimitedToUpDownNotifications": "ใช้ได้เฉพาะสำหรับการแจ้งเตือนสถานะ UP/DOWN", + "webhookBodyPresetOption": "ค่าที่ตั้งไว้ล่วงหน้า - {0}", + "Check/Uncheck": "เลือก/ไม่เลือก", + "Learn More": "เรียนรู้เพิ่มเติม", + "Add API Key": "เพิ่มคีย์ API", + "templateMsg": "ข้อความการแจ้งเตือน", + "Json Query Expression": "นิพจน์สำหรับดึงข้อมูล JSON", + "locally configured mail transfer agent": "ตัวส่งอีเมลในเครื่อง", + "filterActive": "กำลังทำงาน" } From 474861e1c16d089c17b58ae9ddf873f80aaf3de3 Mon Sep 17 00:00:00 2001 From: Robin Janssens Date: Thu, 1 May 2025 22:03:11 +0000 Subject: [PATCH 041/133] Translated using Weblate (Dutch) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/nl/ --- src/lang/nl-NL.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 806c921ad..8f854d01d 100644 --- a/src/lang/nl-NL.json +++ b/src/lang/nl-NL.json @@ -1108,5 +1108,12 @@ "templateStatus": "status", "telegramUseTemplate": "Gebruik aangepaste bericht sjabloon", "telegramTemplateFormatDescription": "Telegram staat het gebruik van verschillende opmaaktalen voor berichten toe, zie Telegram {0} voor specifieke details.", - "telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon." + "telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon.", + "Font Twemoji by Twitter licensed under": "Lettertype Twemoji van Twitter gelicentieerd onder", + "the smsplanet documentation": "de smsplanet documentatie", + "Phone numbers": "Telefoonnummers", + "Sender name": "Naam afzender", + "smsplanetNeedToApproveName": "Moet worden goedgekeurd in het clientpaneel", + "smsplanetApiToken": "Token voor de SMSPlanet API", + "smsplanetApiDocs": "Gedetailleerde informatie over het verkrijgen van API-tokens vindt u op {the_smsplanet_documentation}." } From 5d3d8b387db1672640d957ece1f6efbb95a5c68c Mon Sep 17 00:00:00 2001 From: Donker_Jumala Date: Fri, 2 May 2025 03:04:21 +0000 Subject: [PATCH 042/133] Translated using Weblate (Japanese) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ja/ --- src/lang/ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/ja.json b/src/lang/ja.json index 825928a43..99b0ff75d 100644 --- a/src/lang/ja.json +++ b/src/lang/ja.json @@ -29,7 +29,7 @@ "Add New Monitor": "監視の追加", "Quick Stats": "統計", "Up": "正常", - "Down": "停止", + "Down": "異常", "Pending": "待機中", "Unknown": "不明", "Pause": "一時停止", From 03065963119ef8863e0510b57ac83f381be22c0d Mon Sep 17 00:00:00 2001 From: Pargorn Ruasijan Date: Fri, 2 May 2025 04:56:30 +0000 Subject: [PATCH 043/133] Translated using Weblate (Thai) Currently translated at 81.0% (872 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 184 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 181 insertions(+), 3 deletions(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index fd0d8bf5f..1153b55fa 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -30,7 +30,7 @@ "Dashboard": "แผงควบคุม", "New Update": "อัปเดตใหม่", "Language": "ภาษา", - "Appearance": "หน้าตา", + "Appearance": "ลักษณะการแสดงผล", "Theme": "ธีม", "General": "ทั่วไป", "Primary Base URL": "URL หลัก", @@ -703,7 +703,7 @@ "ignoreTLSErrorGeneral": "ละเว้นข้อผิดพลาด TLS/SSL สำหรับการเชื่อมต่อ", "programmingLanguages": "ภาษาโปรแกรมมิ่ง", "Invert Keyword": "คำสำคัญ", - "settingUpDatabaseMSG": "กำลังตั้งค่าฐานข้อมูลอาจใช้เวลาสักครู่ โปรดอดทนรอ", + "settingUpDatabaseMSG": "การตั้งค่าฐานข้อมูล อาจต้องใช้เวลาสักระยะหนึ่ง โปรดอดใจรอ", "time ago": "{0} ที่ผ่านมา", "-year": "-ปี", "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "ป้อนชื่อโฮสต์ของเซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อหรือ {localhost} หากคุณต้องการใช้ {local_mta}", @@ -734,5 +734,183 @@ "templateMsg": "ข้อความการแจ้งเตือน", "Json Query Expression": "นิพจน์สำหรับดึงข้อมูล JSON", "locally configured mail transfer agent": "ตัวส่งอีเมลในเครื่อง", - "filterActive": "กำลังทำงาน" + "filterActive": "กำลังทำงาน", + "successKeyword": "คำสำเร็จ (Success Keyword)", + "smseagleContact": "ชื่อผู้ติดต่อในสมุดโทรศัพท์", + "smspartnerApiurl": "คุณสามารถหาคีย์ API ของคุณได้ในแดชบอร์ดที่ {0}", + "smspartnerPhoneNumber": "หมายเลขโทรศัพท์", + "smspartnerSenderName": "ชื่อผู้ส่ง SMS", + "Remove the expiry notification": "ลบวันแจ้งเตือนการหมดอายุ", + "Refresh Interval": "ช่วงเวลารีเฟรช", + "Refresh Interval Description": "หน้าสถานะจะทำการรีเฟรชเว็บไซต์ทั้งหมดทุก ๆ {0} วินาที", + "noDockerHostMsg": "ไม่พร้อมใช้งาน กรุณาตั้งค่า Docker Host ก่อน", + "tailscalePingWarning": "เพื่อที่จะใช้ตัวตรวจสอบ Tailscale Ping คุณต้องติดตั้ง Uptime Kuma โดยไม่ใช้ Docker และติดตั้ง Tailscale client บนเซิร์ฟเวอร์ของคุณด้วย", + "telegramUseTemplate": "ใช้เทมเพลต ข้อความที่กำหนดเอง", + "telegramUseTemplateDescription": "หากเปิดใช้งาน ข้อความจะถูกส่งโดยใช้เทมเพลตที่กำหนดเอง", + "telegramTemplateFormatDescription": "Telegram อนุญาตให้ใช้ภาษามาร์กอัปต่าง ๆ กับข้อความ ดูรายละเอียดเพิ่มเติมได้ที่ Telegram {0}", + "telegramServerUrl": "(ไม่บังคับ) URL ของเซิร์ฟเวอร์", + "telegramServerUrlDescription": "เพื่อยกระดับข้อจำกัดของ API ของ Telegram หรือให้เข้าถึงพื้นที่ที่ถูกบล็อก (จีน, อิหร่าน, เป็นต้น) สำหรับข้อมูลเพิ่มเติมคลิก {0}. ค่าเริ่มต้น: {1}", + "enableNSCD": "เปิดใช้งาน NSCD (Name Service Cache Daemon) สำหรับการแคชคำขอ DNS ทั้งหมด", + "emailCustomisableContent": "เนื้อหาที่ปรับแต่งได้", + "smtpLiquidIntroduction": "สองฟิลด์ต่อไปนี้สามารถใช้เทมเพลตผ่านภาษาการสร้างเทมเพลต Liquid โปรดดูที่ {0} สำหรับคำแนะนำในการใช้งาน ตัวแปรที่ใช้ได้มีดังนี้:", + "emailTemplateMsg": "ข้อความของการแจ้งเตือน", + "postToExistingThread": "โพสต์ไปยังเธรด / โพสต์ฟอรัมที่มีอยู่แล้ว", + "whatHappensAtForumPost": "สร้างโพสต์ในฟอรัมใหม่ จะไม่โพสต์ข้อความในโพสต์เดิม หากต้องการโพสต์ในโพสต์เดิมให้ใช้ “{option}”", + "wayToGetDiscordThreadId": "การรับค่า ID ของเธรดหรือโพสต์ในฟอรัมจะคล้ายกับการรับ Channel ID อ่านเพิ่มเติมเกี่ยวกับวิธีการรับ ID ได้ที่ {0}", + "infiniteRetention": "ตั้งค่าเป็น 0 เพื่อการเก็บข้อมูลตลอดไป", + "confirmDeleteTagMsg": "คุณแน่ใจหรือว่าต้องการลบแท็กนี้? มอนิเตอร์ที่ใช้กับแท็กนี้จะไม่ได้ถูกลบ", + "affectedMonitorsDescription": "เลือกมอนิเตอร์ที่ได้รับผลกระทบจากการซ่อมบำรุงปัจจุบัน", + "affectedStatusPages": "แสดงข้อความการซ่อมบำรุงนี้บนหน้าสถานะที่เลือก", + "wayToGetKookBotToken": "สร้างแอปพลิเคชันและรับโทเค็นบอตของคุณที่ {0}", + "wayToGetKookGuildID": "เปิดโหมด ‘Developer’ ในการตั้งค่าของ Kook แล้วคลิกขวาที่กิลด์เพื่อรับ ID ของมัน", + "Strategy": "กลยุทธ์", + "Economy": "เศรษฐกิจ", + "You can divide numbers with": "คุณสามารถหารตัวเลขได้ด้วย", + "Notify Channel": "ช่องทางการแจ้งเตือน", + "setup a new monitor group": "ตั้งค่ากลุ่มการมอนิเตอร์หม่", + "smseagleGroup": "ชื่อกลุ่มสมุดโทรศัพท์", + "smseagleEncoding": "ส่งเป็น Unicode", + "smseaglePriority": "ลำดับความสำคัญของข้อความ (0-9, ค่าเริ่มต้น = 0)", + "smspartnerPhoneNumberHelptext": "หมายเลขต้องอยู่ในรูปแบบสากล {0}, {1} และหากมีหลายหมายเลขต้องคั่นด้วย {2}", + "smspartnerSenderNameInfo": "ต้องอยู่ระหว่าง 3 ถึง 11 ตัวอักษรปกติ", + "Custom Monitor Type": "ประเภทการมอนิเตอร์ แบบกำหนดเอง", + "Add Another": "เพิ่มอีกหนึ่ง", + "Expires": "หมดอายุ", + "disableAPIKeyMsg": "คุณแน่ใจหรือไม่ว่าจะปิดการใช้งาน API คีย์นี้?", + "ntfyAuthenticationMethod": "วิธีการยืนยันตัวตน", + "ntfyPriorityHelptextAllEvents": "ทุกกิจกรรมจะถูกส่งด้วยลำดับความสำคัญสูงสุด", + "ntfyPriorityHelptextAllExceptDown": "เหตุการณ์ทั้งหมดจะถูกส่งด้วยลำดับความสำคัญนี้ ยกเว้นเหตุการณ์ {0} ซึ่งมีลำดับความสำคัญ {1}", + "Show Clickable Link Description": "หากทำเครื่องหมายไว้ ทุกคนที่มีสิทธิ์เข้าถึงหน้าสถานะนี้จะสามารถเข้าถึง URL ของมอนิเตอร์ได้", + "monitorToastMessagesDescription": "การแจ้งเตือนแบบ Toast สำหรับการตรวจสอบจะหายไปหลังจากเวลาที่กำหนด (เป็นวินาที) หากตั้งค่าเป็น -1 ระบบจะไม่จำกัดเวลาแสดงผล หากตั้งค่าเป็น 0 จะปิดการแสดงการแจ้งเตือนแบบ Toast ทั้งหมด", + "wayToGetFlashDutyKey": "คุณสามารถไปที่ Channel -> (เลือก Channel) -> Integrations -> Add a new integration' page, add 'Uptime Kuma' to get push address, copy the Integration Key in the address. สำหรับข้อมูลเพิ่มเติม โปรดไปที่", + "cacheBusterParamDescription": "พารามิเตอร์ที่สร้างขึ้นแบบสุ่มเพื่อหลีกเลี่ยงการใช้แคช", + "gamedigGuessPortDescription": "พอร์ตที่ใช้โดย Valve Server Query Protocol อาจแตกต่างจากพอร์ตไคลเอนต์ ลองใช้วิธีนี้หากมอนิเตอร์ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณได้", + "bitrix24SupportUserID": "กรอกรหัสผู้ใช้ของคุณลงใน Bitrix24 คุณสามารถค้นหารหัสได้จากลิงก์โดยไปที่โปรไฟล์ของผู้ใช้", + "successBackupRestored": "กู้คืนข้อมูลสำรองสำเร็จแล้ว", + "Remote Browser not found!": "ไม่พบ Remote Browse!", + "remoteBrowsersDescription": "Remote Browsers เป็นทางเลือกหนึ่งแทนการเรียกใช้ Chromium บนเครื่องของคุณโดยตรง โดยสามารถตั้งค่าใช้งานร่วมกับบริการ เช่น browserless.io หรือเชื่อมต่อกับ", + "deleteRemoteBrowserMessage": "คุณแน่ใจหรือไม่ว่าต้องการลบ Remote Browser นี้สำหรับมอนิเตอร์ทั้งหมด?", + "mongodbCommandDescription": "รันคำสั่ง MongoDB กับฐานข้อมูล สำหรับข้อมูลเกี่ยวกับคำสั่งที่มีอยู่ โปรดดูที่ {documentation}", + "goAlertInfo": "GoAlert is a An open source application for on-call scheduling, automated escalations and notifications (like SMS or voice calls). Automatically engage the right person, the right way, and at the right time! {0}", + "aboutNotifyChannel": "การแจ้งเตือนไปยังช่องทางจะทำให้เกิดการแจ้งเตือนบนเดสก์ท็อปหรือมือถือของสมาชิกทุกคนในช่องนั้น ไม่ว่าสถานะของพวกเขาจะเป็น “ใช้งาน” หรือ “ไม่อยู่” ก็ตาม", + "DockerHostRequired": "กรุณาตั้งค่า Docker Host สำหรับมอนิเตอร์นี้", + "Select message type": "เลือกประเภทข้อความ", + "dataRetentionTimeError": "ระยะเวลาเก็บข้อมูลต้องเป็น 0 หรือมากกว่า", + "promosmsAllowLongSMS": "อนุญาตให้ส่ง SMS ยาว", + "apiKey-active": "ใช้งานอยู่", + "and": "และ", + "chromeExecutable": "ไฟล์ที่ใช้รัน Chrome/Chromium", + "Maintenance Time Window of a Day": "ช่วงเวลาการซ่อมบำรุงของวัน", + "Effective Date Range": "ช่วงวันที่มีผล (ไม่บังคับ)", + "leave blank for default subject": "เว้นว่างไว้สำหรับหัวข้อเริ่มต้น", + "emailCustomBody": "เนื้อหากำหนดเอง", + "leave blank for default body": "เว้นว่างไว้สำหรับเนื้อหาพื้นฐาน", + "emailTemplateMonitorJSON": "อ็อบเจ็กต์ที่อธิบายเกี่ยวกับมอนิเตอร์", + "Send to channel": "ส่งไปยังช่องทาง", + "Create new forum post": "สร้างโพสต์ฟอรัมใหม่", + "forumPostName": "ชื่อโพสต์ในฟอรัม", + "threadForumPostID": "รหัสเธรด / โพสต์ในฟอรัม", + "e.g. {discordThreadID}": "เช่น {discordThreadID}", + "Channel access token (Long-lived)": "Channel access token (Long-lived)", + "Your User ID": "ไอดีผู้ใช้ของคุณ", + "deleteMaintenanceMsg": "คุณแน่ใจหรือว่าต้องการลบการซ่อมบำรุงนี้?", + "atLeastOneMonitor": "เลือกมอนิเตอร์ที่ได้รับผลกระทบอย่างน้อยหนึ่งมอนิเตอร์", + "invertKeywordDescription": "ค้นหาคำสำคัญที่ไม่มีอยู่ แทนที่จะมีอยู่", + "Guild ID": "กิลด์ ID", + "Proto Service Name": "ชื่อบริการ Proto", + "Proto Method": "Proto เมทอด", + "Proto Content": "เนื้อหา Proto", + "Lowcost": "ต้นทุนต่ำ", + "high": "สูง", + "SMSManager API Docs": "เอกสาร API ของ SMSManager ", + "Gateway Type": "ประเภทเกตเวย์", + "Base URL": "URL หลัก", + "pushoverMessageTtl": "ข้อความ TTL (วินาที)", + "Free Mobile User Identifier": "Free Mobile User Identifier", + "Free Mobile API Key": "Free Mobile API Key", + "SendKey": "SendKey", + "goAlertIntegrationKeyInfo": "Get generic API integration key for the service in this format \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" usually the value of token parameter of copied URL.", + "Mentioning": "การกล่าวถึง", + "Don't mention people": "อย่ากล่าวถึงบุคคล", + "Mention group": "กล่าวถึง {group}", + "Bark API Version": "เวอร์ชัน Bark API", + "openModalTo": "เปิดโมดัลไปยัง {0}", + "Add a domain": "เพิ่มโดเมน", + "Remove domain": "ลบโดเมน ‘{0}’", + "smseagleTo": "หมายเลขโทรศัพท์", + "smseagleRecipientType": "ประเภทผู้รับ", + "smseagleRecipient": "ผู้รับ (หากมีหลายคนให้แยกด้วยเครื่องหมายจุลภาค)", + "smseagleUrl": "URL ของอุปกรณ์ SMSEagle ของคุณ", + "Server URL should not contain the nfty topic": "URL ของเซิร์ฟเวอร์ไม่ควรมีหัวข้อ “nfty”", + "smseagleToken": "API Access token", + "pushDeerServerDescription": "เว้นว่างไว้เพื่อใช้เซิร์ฟเวอร์อย่างเป็นทางการ", + "Edit Tag": "แก้ไขแท็ก", + "Server Address": "ที่อยู่เซิร์ฟเวอร์", + "Expiry": "หมดอายุ", + "Expiry date": "วันที่หมดอายุ", + "Don't expire": "ไม่หมดอายุ", + "Continue": "ดำเนินการต่อ", + "Key Added": "เพิ่มคีย์แล้ว", + "No API Keys": "ไม่มี API คีย์", + "apiKey-expired": "หมดอายุแล้ว", + "apiKey-inactive": "ไม่ได้ใช้งาน", + "deleteAPIKeyMsg": "คุณแน่ใจหรือไม่ว่าต้องการลบ API คีย์นี้?", + "Generate": "สร้าง", + "pagertreeUrgency": "ด่วน", + "pagertreeLow": "ต่ำ", + "pagertreeMedium": "ปานกลาง", + "pagertreeHigh": "สูง", + "lunaseaTarget": "เป้าหมาย", + "lunaseaDeviceID": "ไอดี ของอุปกรณ์", + "lunaseaUserID": "ไอดี ของผู้ใช้", + "ntfyUsernameAndPassword": "ชื่อผู้ใช้ และ รหัสผ่าน", + "twilioAccountSID": "บัญชี SID", + "twilioApiKey": "API คีย์ (ไม่บังคับ)", + "twilioFromNumber": "จากหมายเลข", + "twilioToNumber": "ถึงหมายเลข", + "Monitor Setting": "การตั้งค่ามอนิเตอร์ของ {0}", + "PushDeer Server": "เซิร์ฟเวอร์ PushDeer", + "Google Analytics ID": "ไอดี Google Analytics", + "API Keys": "API คีย์", + "pagertreeIntegrationUrl": "URL สำหรับการเชื่อมต่อระบบ (Integration URL)", + "twilioAuthToken": "Auth Token / Api Key Secret", + "Group": "กลุ่ม", + "Monitor Group": "กลุ่มมอนิเตอร์", + "monitorToastMessagesLabel": "การแจ้งเตือนมอนิเตอร์แบบ Toast", + "Press Enter to add broker": "กด Enter เพื่อเพิ่มโบรกเกอร์", + "Mechanism": "กลไก", + "Pick a SASL Mechanism...": "เลือกกลไก SASL…", + "noGroupMonitorMsg": "ไม่พร้อมใช้งาน โปรดสร้างกลุ่มมอนิเตอร์ก่อน", + "Close": "ปิด", + "FlashDuty Severity": "ความรุนแรง", + "Show Clickable Link": "แสดงลิงก์ที่คลิกได้", + "Open Badge Generator": "เปิดเครื่องมือสร้าง Badge", + "Badge Generator": "เครื่องมือสร้าง Badge ของ {0}", + "Badge Type": "ประเภท Badge", + "Badge Duration (in hours)": "ระยะเวลา Badge (เป็นชั่วโมง)", + "Badge Label": "ป้ายกำกับ Badge", + "nostrRelays": "รีเลย์ Nostr", + "nostrRelaysHelp": "URL รีเลย์หนึ่งรายการต่อบรรทัด", + "cacheBusterParam": "เพิ่มพารามิเตอร์ {0}", + "gamedigGuessPort": "Gamedig: เดาพอร์ต", + "Message format": "รูปแบบข้อความ", + "wayToGetBitrix24Webhook": "คุณสามารถสร้างเว็บฮุกได้โดยทำตามขั้นตอนที่ {0}", + "authIncorrectCreds": "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", + "2faAlreadyEnabled": "2FA ได้รับการเปิดใช้งานแล้ว", + "2faEnabled": "เปิดใช้งาน 2FA แล้ว", + "2faDisabled": "2FA ถูกปิดการใช้งาน", + "successAdded": "เพิ่มเรียบร้อยแล้ว", + "successResumed": "ดำเนินการต่อสำเร็จแล้ว", + "successPaused": "หยุดชั่วคราวสำเร็จแล้ว", + "successEnabled": "เปิดใช้งานสำเร็จแล้ว", + "tagNotFound": "ไม่พบแท็ก", + "foundChromiumVersion": "พบ Chromium/Chrome เวอร์ชัน: {0}", + "Add a Remote Browser": "เพิ่ม Remote Browser", + "self-hosted container": "คอนเทนเนอร์ที่โฮสต์เอง (self-hosted container)", + "remoteBrowserToggle": "โดยปกติแล้ว Chromium จะทำงานภายในคอนเทนเนอร์ของ Uptime Kuma คุณสามารถใช้ remote browser ได้โดยเปิดสวิตช์นี้", + "useRemoteBrowser": "ใช้ Remote Browser", + "aboutSlackUsername": "เปลี่ยนชื่อที่แสดงของผู้ส่งข้อความ หากคุณต้องการกล่าวถึงใคร ให้รวมไว้ในชื่อที่เป็นมิตรแทน", + "grpcMethodDescription": "ชื่อเมธอดจะถูกแปลงเป็นรูปแบบ camelCase เช่น sayHello, check, เป็นต้น", + "Enable TLS": "เปิดใช้งาน TLS", + "pagertreeSilent": "เงียบ" } From f814d86dd2dcd7f542dbeddaf4215d51d9cdbe53 Mon Sep 17 00:00:00 2001 From: Rachatat Bunpat Date: Fri, 2 May 2025 03:38:47 +0000 Subject: [PATCH 044/133] Translated using Weblate (Thai) Currently translated at 81.0% (872 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index 1153b55fa..f813072e9 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -912,5 +912,6 @@ "aboutSlackUsername": "เปลี่ยนชื่อที่แสดงของผู้ส่งข้อความ หากคุณต้องการกล่าวถึงใคร ให้รวมไว้ในชื่อที่เป็นมิตรแทน", "grpcMethodDescription": "ชื่อเมธอดจะถูกแปลงเป็นรูปแบบ camelCase เช่น sayHello, check, เป็นต้น", "Enable TLS": "เปิดใช้งาน TLS", - "pagertreeSilent": "เงียบ" + "pagertreeSilent": "เงียบ", + "enableGRPCTls": "อนุญาตให้ส่งคำขอแบบ gRPC ด้วยการเชื่อมต่อ TLS" } From 4bbe61fb46880501f8ace65eb0f15d8f1fc51807 Mon Sep 17 00:00:00 2001 From: Pargorn Ruasijan Date: Fri, 2 May 2025 14:22:15 +0000 Subject: [PATCH 045/133] Translated using Weblate (Thai) Currently translated at 82.8% (892 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index f813072e9..3c1d51c89 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -913,5 +913,25 @@ "grpcMethodDescription": "ชื่อเมธอดจะถูกแปลงเป็นรูปแบบ camelCase เช่น sayHello, check, เป็นต้น", "Enable TLS": "เปิดใช้งาน TLS", "pagertreeSilent": "เงียบ", - "enableGRPCTls": "อนุญาตให้ส่งคำขอแบบ gRPC ด้วยการเชื่อมต่อ TLS" + "enableGRPCTls": "อนุญาตให้ส่งคำขอแบบ gRPC ด้วยการเชื่อมต่อ TLS", + "Sender name": "ชื่อผู้ส่ง", + "smsplanetNeedToApproveName": "ต้องได้รับการอนุมัติในแผงควบคุมของไคลเอนต์", + "Phone numbers": "หมายเลขโทรศัพท์", + "Badge Prefix": "คำนำหน้าค่าของ Badge", + "Badge Suffix": "คำตามหลังค่าของ Badge", + "Badge Label Color": "สีของป้ายข้อความ (Label) บน Badge", + "Badge Color": "สีของ Badge", + "Badge Preview": "ตัวอย่างการแสดง Badge (Preview)", + "Badge Label Suffix": "คำต่อท้ายข้อความ (Label) บน Badge", + "Badge Label Prefix": "คำนำหน้าข้อความ (Label) บน Badge", + "Badge Up Color": "สีของ Badge เมื่อสถานะเป็นปกติ (Up)", + "Badge Down Color": "สีของ Badge เมื่อสถานะเป็นออฟไลน์ (Down)", + "Badge Pending Color": "สีของ Badge ขณะรอการประมวลผล", + "Badge Maintenance Color": "สีของ Badge ในระหว่างการบำรุงรักษา", + "Badge Warn Color": "สีของ Badge เมื่อสถานะเตือน", + "Badge Warn Days": "จำนวนวันที่ Badge แสดงสถานะเตือน", + "Badge Down Days": "จำนวนวันที่ Badge แสดงสถานะออฟไลน์", + "Badge Style": "สไตล์ของ Badge", + "Badge value (For Testing only.)": "ค่าของ Badge (สำหรับการทดสอบเท่านั้น)", + "Badge URL": "URL ของ Badge" } From 36741e20234912f48a1632f6ace996ea67bc21f6 Mon Sep 17 00:00:00 2001 From: Pargorn Ruasijan Date: Fri, 2 May 2025 14:44:12 +0000 Subject: [PATCH 046/133] Translated using Weblate (Thai) Currently translated at 89.0% (958 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 66 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index 3c1d51c89..d301c1574 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -103,7 +103,7 @@ "Enable Auth": "เปิดใช้งานการตรวจสอบสิทธิ์", "disableauth.message1": "คุณต้องการที่จะ {disableAuth}?", "disable authentication": "ปิดใช้งานระบบรับรองความถูกต้องใช่หรือไม่", - "disableauth.message2": "ระบบนี้ถูกออกแบบมาเพื่อการใช้งานกับระบบรับรองความถูกต้องของบุคคลที่สามเช่น Cloudflare Access, Authelia หรือวิธีการอื่นๆ", + "disableauth.message2": "ถูกออกแบบมาสำหรับกรณีที่มี {intendThirdPartyAuth} อยู่หน้าระบบ Uptime Kuma เช่น Cloudflare Access, Authelia หรือกลไกการตรวจสอบสิทธิ์อื่น ๆ", "Please use this option carefully!": "โปรดใช้ความระมัดระวังในการเลือกใช้งานระบบนี้ !", "Logout": "ออกจากระบบ", "Leave": "ออก", @@ -300,7 +300,7 @@ "Internal Room Id": "รหัสห้องภายใน", "matrixDesc1": "คุณค้นหารหัสห้องภายในได้โดยดูในส่วนขั้นสูงของการตั้งค่าห้องในไคลเอ็นต์ Matrix มันควรจะมีลักษณะเช่น !PMdRCpsIfLwsfjIye6:kiznick.server.", "matrixDesc2": "ขอแนะนำเป็นอย่างยิ่งให้คุณสร้างผู้ใช้ใหม่และอย่าใช้โทเค็นการเข้าถึงของผู้ใช้ Matrix ของคุณเอง เนื่องจากจะทำให้สามารถเข้าถึงบัญชีของคุณและห้องทั้งหมดที่คุณเข้าร่วม ให้สร้างผู้ใช้ใหม่และเชิญเฉพาะห้องที่คุณต้องการรับการแจ้งเตือนแทน คุณสามารถรับโทเค็นเพื่อการเข้าถึงได้โดยเรียกใช้ {0}", - "Method": "วิธี", + "Method": "เมทอด", "Body": "เนื้อหา", "Headers": "ส่วนหัว", "PushUrl": "Push URL", @@ -576,7 +576,7 @@ "Frontend Version": "เวอร์ชั่น Frontend", "Frontend Version do not match backend version!": "เวอร์ชั่น Frontend ไม่ตรงกับ Backend !", "webhookAdditionalHeadersTitle": "Header เพิ่มเติม", - "webhookAdditionalHeadersDesc": "กำหนด Header ที่จะส่งไปหร้อมกับ Webhook", + "webhookAdditionalHeadersDesc": "กำหนด Header ที่จะส่งไปหร้อมกับ Webhook โดยแต่ละ header ควรระบุในรูปแบบ key/value แบบ JSON", "Start of maintenance": "เริ่มการซ่อมบำรุง", "All Status Pages": "หน้าสถานะทั้งหมด", "Custom": "กำหนดเอง", @@ -647,7 +647,7 @@ "telegramProtectContentDescription": "หากเปิดใช้งาน ข้อความบอทใน Telegram จะได้รับการปกป้องจากการส่งต่อและการบันทึก", "dnsCacheDescription": "อาจจะทำงานไม่ได้กับ IPv6, ปิดใช้งานถ้าเจอปัญหา", "IconUrl": "URL ไอคอน", - "Enable DNS Cache": "เปิดใช้งาน DNS Cache", + "Enable DNS Cache": "(เลิกใช้แล้ว) เปิดใช้งานแคช DNS สำหรับตัวตรวจสอบ HTTP(s)", "Enable": "เปิดใช้งาน", "Disable": "ปิดใช้งาน", "Single Maintenance Window": "หน้าการปรับปรุงเดี่ยว", @@ -681,7 +681,7 @@ "setupDatabaseMariaDB": "เชื่อมต่อไปยัง MariaDB ภายนอก คุณจำเป็นจะต้องตั่งค่าการเชื่อมต่อฐานข้อมูล", "setupDatabaseSQLite": "ไฟล์ฐานข้อมูลอย่างง่าย แนะนำสำหรับการปรับใช้ขนาดเล็ก ก่อนเวอร์ชัน 2.0.0 Uptime Kuma ใช้ SQLite เป็นฐานข้อมูลเริ่มต้น", "dbName": "ชื่อฐานข้อมูล", - "Passive Monitor Type": "Passive Monitor Type", + "Passive Monitor Type": "ประเภทมอนิเตอร์แบบพาสซีฟ", "documentationOf": "{0} คู่มือ", "successDeleted": "ลบสำเร็จ.", "Command": "คำสั่ง", @@ -933,5 +933,59 @@ "Badge Down Days": "จำนวนวันที่ Badge แสดงสถานะออฟไลน์", "Badge Style": "สไตล์ของ Badge", "Badge value (For Testing only.)": "ค่าของ Badge (สำหรับการทดสอบเท่านั้น)", - "Badge URL": "URL ของ Badge" + "Badge URL": "URL ของ Badge", + "rabbitmqNodesRequired": "โปรดตั้งค่าโหนดสำหรับมอนิเตอร์นี้", + "Font Twemoji by Twitter licensed under": "ฟอนต์ Twemoji โดย Twitter ที่มีลิขสิทธิ์ภายใต้", + "the smsplanet documentation": "เอกสารของ smsplanet", + "smsplanetApiToken": "โทเค็นสำหรับ API ของ SMSPlanet", + "smsplanetApiDocs": "ข้อมูลรายละเอียดเกี่ยวกับการขอ API tokens สามารถดูได้ใน {the_smsplanet_documentation}", + "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "การแจ้งเตือนที่มีความสำคัญตามเวลา จะถูกส่งทันที แม้ว่าจะอยู่ในโหมดไม่รบกวน (Do Not Disturb) ก็ตาม", + "Clear": "กระจ่าง", + "equals": "เท่ากับ", + "Go back to home page.": "กลับไปหน้าหลัก", + "conditionValuePlaceholder": "ค่า", + "not starts with": "ไม่ได้เริ่มต้นด้วย", + "Notification Channel": "ช่องทางการรับแจ้งเตือน", + "Alphanumerical string and hyphens only": "ใช้ได้เฉพาะตัวอักษรและตัวเลข (a-z, A-Z, 0-9) และขีดกลาง (-) เท่านั้น", + "Message Template": "ข้อความของเทมเพลต", + "Plain Text": "ข้อความธรรมดา", + "wayToWriteWahaChatId": "หมายเลขโทรศัพท์ที่มีรหัสประเทศ แต่ไม่มีเครื่องหมายบวกที่เริ่มต้น ({0}), หมายเลขติดต่อ ({1}) หรือ หมายเลขกลุ่ม ({2}) การแจ้งเตือนจะถูกส่งไปยัง Chat ID นี้จาก WAHA Session", + "not equals": "ไม่เท่ากับ", + "No tags found.": "ไม่พบแท็ก", + "Conditions": "เงื่อนไข", + "conditionAdd": "เพิ่มเงื่อนไข", + "conditionDelete": "ลบเงื่อนไข", + "conditionAddGroup": "เพิ่มกลุ่ม", + "conditionDeleteGroup": "ลบกลุ่ม", + "contains": "ประกอบด้วย", + "not contains": "ไม่มี", + "Template Format": "รูปแบบของเทมเพลต", + "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "ระบุรหัสผู้ส่งข้อความแบบข้อความหรือลำดับหมายเลขโทรศัพท์ในรูปแบบ E.164 หากคุณต้องการรับการตอบกลับ", + "The phone number of the recipient in E.164 format.": "หมายเลขโทรศัพท์ของผู้รับในรูปแบบ E.164", + "Can be found on:": "สามารถดูได้ที่: {0}", + "From": "จาก", + "Time Sensitive (iOS Only)": "การแจ้งเตือนที่มีความสำคัญตามเวลา (เฉพาะ iOS)", + "Custom sound to override default notification sound": "เสียงที่กำหนดเองเพื่อแทนที่เสียงการแจ้งเตือนเริ่มต้น", + "Arcade": "อาร์เคด", + "Correct": "ถูกต้อง", + "Fail": "ล้มเหลว", + "Harp": "พิณ", + "Reveal": "เปิดเผย", + "Bubble": "ฟอง", + "Flute": "ขลุ่ย", + "Scifi": "ไซไฟ", + "Sound": "เสียง", + "starts with": "เริ่มต้นด้วย", + "ends with": "ลงท้ายด้วย", + "not ends with": "ไม่ลงท้ายด้วย", + "greater than or equal to": "มากกว่าหรือเท่ากับ", + "record": "บันทึก", + "less than": "น้อยกว่า", + "greater than": "มากกว่า", + "less than or equal to": "น้อยกว่าหรือเท่ากับ", + "Pop": "พอป", + "Elevator": "ลิฟต์", + "Doorbell": "ออด", + "Money": "เงิน", + "Guitar": "กีตาร์" } From 6f0571fc30f08ed94c505f952bbd42a177cde39f Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Sat, 3 May 2025 14:28:54 +0000 Subject: [PATCH 047/133] Translated using Weblate (German) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/de/ --- src/lang/de-DE.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json index 2f3cb2136..2ffc5b199 100644 --- a/src/lang/de-DE.json +++ b/src/lang/de-DE.json @@ -944,7 +944,7 @@ "whapiRecipient": "Telefonnummer / Kontakt-ID / Gruppen-ID", "API URL": "API URL", "wayToWriteWhapiRecipient": "Die Rufnummer mit der internationalen Vorwahl, aber ohne das Pluszeichen am Anfang ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}).", - "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn ein {local_mta} verwendet werden soll.", + "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Gib entweder den Hostnamen des Servers ein, mit dem eine Verbindung hergestellt werden soll, oder {localhost}, wenn ein {local_mta} verwendet werden soll", "locally configured mail transfer agent": "Lokal konfigurierter Mail-Transfer-Agent", "Mentioning": "Erwähnung", "Don't mention people": "Keine Personen erwähnen", From e1bb3324e4f0c0b2311446afea77d3077d2819a0 Mon Sep 17 00:00:00 2001 From: Pargorn Ruasijan Date: Mon, 5 May 2025 14:46:49 +0000 Subject: [PATCH 048/133] Translated using Weblate (Thai) Currently translated at 89.0% (958 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/th/ --- src/lang/th-TH.json | 56 ++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json index d301c1574..3e1613e21 100644 --- a/src/lang/th-TH.json +++ b/src/lang/th-TH.json @@ -462,12 +462,12 @@ "PushDeer Key": "กุญแจ PushDeer", "Footer Text": "ข้อความส่วนท้าย", "Show Powered By": "แสดงข้อความ \"ขับเคลื่อนโดย\"", - "Domain Names": "Domain Names", + "Domain Names": "ชื่อโดเมน", "signedInDisp": "เข้าใช้งานในฐานะ {0}", "signedInDispDisabled": "ปิดการยืนยันตัวตน", "Certificate Expiry Notification": "แจ้งเตือนใบรับรองหมดอายุ", - "API Username": "API Username", - "API Key": "API Key", + "API Username": "ชื่อผู้ใช้ของ API", + "API Key": "API คีย์", "Recipient Number": "หมายเลขผู้รับ", "From Name/Number": "จาก ชื่อ / หมายเลข", "Leave blank to use a shared sender number.": "ไม่ต้องกรอกเพื่อใช้ชื่อผู้ส่งร่วมกัน", @@ -477,32 +477,32 @@ "octopushAPIKey": "\"API key\" จากข้อมูลยืนยันตัวตน HTTP API ในแผงควบคุม", "octopushLogin": "\"Login\" จากข้อมูลยืนยันตัวตน HTTP API ในแผงควบคุม", "promosmsLogin": "API Login Name", - "promosmsPassword": "API Password", + "promosmsPassword": "รหัสผ่าน API", "pushoversounds pushover": "Pushover (default)", - "pushoversounds bike": "Bike", - "pushoversounds bugle": "Bugle", - "pushoversounds cashregister": "Cash Register", + "pushoversounds bike": "จักรยาน", + "pushoversounds bugle": "บักเกิล", + "pushoversounds cashregister": "เครื่องคิดเงิน", "pushoversounds classical": "Classical", - "pushoversounds cosmic": "Cosmic", - "pushoversounds falling": "Falling", - "pushoversounds gamelan": "Gamelan", - "pushoversounds incoming": "Incoming", - "pushoversounds intermission": "Intermission", - "pushoversounds magic": "Magic", - "pushoversounds mechanical": "Mechanical", - "pushoversounds pianobar": "Piano Bar", - "pushoversounds siren": "Siren", - "pushoversounds spacealarm": "Space Alarm", - "pushoversounds tugboat": "Tug Boat", - "pushoversounds alien": "Alien Alarm (long)", - "pushoversounds climb": "Climb (long)", + "pushoversounds cosmic": "คอสมิก", + "pushoversounds falling": "ตก", + "pushoversounds gamelan": "ระนาด", + "pushoversounds incoming": "กำลังมา", + "pushoversounds intermission": "ช่วงพัก", + "pushoversounds magic": "แมจิก", + "pushoversounds mechanical": "เครื่องกล", + "pushoversounds pianobar": "เปียโนบาร์", + "pushoversounds siren": "ไซเรน", + "pushoversounds spacealarm": "สัญญาณเตือนอวกาศ", + "pushoversounds tugboat": "เรือโยง", + "pushoversounds alien": "แจ้งเตือน เอเลี่ยน (ยาว)", + "pushoversounds climb": "ไต่เขา (ยาว)", "pushoversounds persistent": "Persistent (long)", "pushoversounds echo": "Pushover Echo (long)", - "pushoversounds updown": "Up Down (long)", - "pushoversounds vibrate": "Vibrate Only", - "pushoversounds none": "None (silent)", + "pushoversounds updown": "ขึ้นลง (ยาว)", + "pushoversounds vibrate": "สั่นอย่างเดียว", + "pushoversounds none": "ไม่มี (เงียบ)", "pushyAPIKey": "Secret API Key", - "pushyToken": "Device token", + "pushyToken": "โทเคน ของอุปกรณ์", "Show update if available": "แสดงการอัปเดตถ้ามี", "Also check beta release": "ตรวจสอบรุ่นเบต้า", "Using a Reverse Proxy?": "ใช้ Reverse Proxy อยู่ใช่มั้ย?", @@ -534,7 +534,7 @@ "Bark Sound": "เสียงประกาศ", "Authentication": "การตรวจสอบสิทธิ์", "HTTP Headers": "HTTP Headers", - "Trust Proxy": "Trust Proxy", + "Trust Proxy": "เชื่อถือพร็อกซี", "HomeAssistant": "Home Assistant", "RadiusSecret": "Radius Secret", "RadiusSecretDescription": "แบ่งปันคีย์ลับระหว่างผู้ใช้งานและเซิร์ฟเวอร์", @@ -553,9 +553,9 @@ "socket": "Socket", "tcp": "TCP / HTTP", "Docker Container": "Docker Container", - "Container Name / ID": "Container Name / ID", - "Docker Host": "Docker Host", - "Docker Hosts": "Docker Hosts", + "Container Name / ID": "ชื่อ / ไอดี ของคอนเทนเนอร์", + "Docker Host": "โฮสต์ของ Docker", + "Docker Hosts": "โฮสต์ของ Docker", "ntfy Topic": "หัวข้อ ntfy", "Domain": "โดเมน", "Workstation": "Workstation", From edf788f97fac917e0122f828f7be76486d3b9bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20Bratovi=C4=87?= Date: Wed, 7 May 2025 08:45:49 +0000 Subject: [PATCH 049/133] Translated using Weblate (Croatian) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/hr/ --- src/lang/hr-HR.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lang/hr-HR.json b/src/lang/hr-HR.json index 164cd217f..a737b3ad8 100644 --- a/src/lang/hr-HR.json +++ b/src/lang/hr-HR.json @@ -1111,5 +1111,12 @@ "wayToGetWahaSession": "Iz ove sjednice WAHA šalje obavijesti na identifikator razgovora. Može se pronaći na WAHA nadzornoj ploči.", "wayToWriteWahaChatId": "Telefonski broj s međunarodnim prefiksom, ali bez znaka plus na početku ({0}), identifikator kontakta ({1}) ili identifikator grupe ({2}). Obavijesti se šalju na ovaj identifikator chata iz WAHA sesije.", "telegramServerUrl": "(Neobvezno) URL Poslužitelja", - "telegramServerUrlDescription": "Za ukidanje ograničenja API-ja za botove Telegrama ili dobivanje pristupa u blokiranim područjima (Kina, Iran, itd.). Za više informacija kliknite {0}. Zadano: {1}" + "telegramServerUrlDescription": "Za ukidanje ograničenja API-ja za botove Telegrama ili dobivanje pristupa u blokiranim područjima (Kina, Iran, itd.). Za više informacija kliknite {0}. Zadano: {1}", + "Font Twemoji by Twitter licensed under": "Font Twemoji tvrtke Twitter je pod licencom", + "the smsplanet documentation": "dokumentaciji usluge SMSPLANET", + "Phone numbers": "Brojevi telefona", + "Sender name": "Naziv pošiljatelja", + "smsplanetNeedToApproveName": "Potrebno je odobrenje u klijentskoj nadzornoj ploči", + "smsplanetApiToken": "Token za pristup SMSPLANET API-ju", + "smsplanetApiDocs": "Detaljne informacije o dobivanju tokena za API možete pronaći u {the_smsplanet_documentation}." } From 86b3ef9c864bb66f48fc2b87a03c675362d8081c Mon Sep 17 00:00:00 2001 From: happy-game Date: Thu, 8 May 2025 17:06:14 +0800 Subject: [PATCH 050/133] feat: Set default friendly name using hostname or the URL host (#5795) Co-authored-by: Frank Elsinga --- src/lang/en.json | 1 + src/pages/EditMonitor.vue | 25 +++++++- test/e2e/specs/fridendly-name.spec.js | 83 +++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 test/e2e/specs/fridendly-name.spec.js diff --git a/src/lang/en.json b/src/lang/en.json index 009d24ee6..23832f48d 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -64,6 +64,7 @@ "Expected Value": "Expected Value", "Json Query Expression": "Json Query Expression", "Friendly Name": "Friendly Name", + "defaultFriendlyName": "New Monitor", "URL": "URL", "Hostname": "Hostname", "Host URL": "Host URL", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index a83f91cab..10d944270 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -109,7 +109,7 @@
- +
@@ -1157,6 +1157,25 @@ export default { }, computed: { + defaultFriendlyName() { + if (this.monitor.hostname) { + return this.monitor.hostname; + } + if (this.monitor.url) { + if (this.monitor.url !== "http://" && this.monitor.url !== "https://") { + // Ensure monitor without a URL is not affected by invisible URL. + try { + const url = new URL(this.monitor.url); + return url.hostname; + } catch (e) { + return this.monitor.url.replace(/https?:\/\//, ""); + } + } + } + // Default placeholder if neither hostname nor URL is available + return this.$t("defaultFriendlyName"); + }, + ipRegex() { // Allow to test with simple dns server with port (127.0.0.1:5300) @@ -1700,6 +1719,10 @@ message HealthCheckResponse { this.processing = true; + if (!this.monitor.name) { + this.monitor.name = this.defaultFriendlyName; + } + if (!this.isInputValid()) { this.processing = false; return; diff --git a/test/e2e/specs/fridendly-name.spec.js b/test/e2e/specs/fridendly-name.spec.js new file mode 100644 index 000000000..7dbe9dd06 --- /dev/null +++ b/test/e2e/specs/fridendly-name.spec.js @@ -0,0 +1,83 @@ +import { expect, test } from "@playwright/test"; +import { login, restoreSqliteSnapshot, screenshot } from "../util-test"; + +test.describe("Friendly Name Tests", () => { + test.beforeEach(async ({ page }) => { + await restoreSqliteSnapshot(page); + }); + + test("hostname", async ({ page }, testInfo) => { + // Test DNS monitor with hostname + await page.goto("./add"); + await login(page); + await screenshot(testInfo, page); + + await page.getByTestId("monitor-type-select").selectOption("dns"); + await page.getByTestId("hostname-input").fill("example.com"); + await screenshot(testInfo, page); + + await page.getByTestId("save-button").click(); + await page.waitForURL("/dashboard/*"); + + expect(page.getByTestId("monitor-list")).toContainText("example.com"); + await screenshot(testInfo, page); + }); + + test("URL hostname", async ({ page }, testInfo) => { + // Test HTTP monitor with URL + await page.goto("./add"); + await login(page); + await screenshot(testInfo, page); + + await page.getByTestId("monitor-type-select").selectOption("http"); + await page.getByTestId("url-input").fill("https://www.example.com/"); + await screenshot(testInfo, page); + + await page.getByTestId("save-button").click(); + await page.waitForURL("/dashboard/*"); + + expect(page.getByTestId("monitor-list")).toContainText("www.example.com"); + await screenshot(testInfo, page); + }); + + test("custom friendly name", async ({ page }, testInfo) => { + // Test custom friendly name for HTTP monitor + await page.goto("./add"); + await login(page); + await screenshot(testInfo, page); + + await page.getByTestId("monitor-type-select").selectOption("http"); + await page.getByTestId("url-input").fill("https://www.example.com/"); + + // Check if the friendly name placeholder is set to the hostname + const friendlyNameInput = page.getByTestId("friendly-name-input"); + expect(friendlyNameInput).toHaveAttribute("placeholder", "www.example.com"); + await screenshot(testInfo, page); + + const customName = "Example Monitor"; + await friendlyNameInput.fill(customName); + await screenshot(testInfo, page); + + await page.getByTestId("save-button").click(); + await page.waitForURL("/dashboard/*"); + + expect(page.getByTestId("monitor-list")).toContainText(customName); + await screenshot(testInfo, page); + }); + + test("default friendly name", async ({ page }, testInfo) => { + // Test default friendly name when no custom name is provided + await page.goto("./add"); + await login(page); + await screenshot(testInfo, page); + + await page.getByTestId("monitor-type-select").selectOption("group"); + await screenshot(testInfo, page); + + await page.getByTestId("save-button").click(); + await page.waitForURL("/dashboard/*"); + + expect(page.getByTestId("monitor-list")).toContainText("New Monitor"); + await screenshot(testInfo, page); + }); +}); From 2b3f49a26653495964248b91a6631486f13abe29 Mon Sep 17 00:00:00 2001 From: Ionys <9364594+Ionys320@users.noreply.github.com> Date: Sat, 10 May 2025 19:05:37 +0200 Subject: [PATCH 051/133] Add a public URL field for monitors and uses it on the status page (#5435) Co-authored-by: Adam Stachowicz --- .../2025-05-09-0000-add-custom-url.js | 13 ++++++++++ server/model/group.js | 2 +- server/model/monitor.js | 2 +- .../status-page-socket-handler.js | 4 +++ src/components/MonitorSettingDialog.vue | 26 +++++++++++++++++-- src/components/PublicGroupList.vue | 1 + src/lang/en.json | 2 ++ test/e2e/specs/status-page.spec.js | 13 +++++++++- 8 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 db/knex_migrations/2025-05-09-0000-add-custom-url.js diff --git a/db/knex_migrations/2025-05-09-0000-add-custom-url.js b/db/knex_migrations/2025-05-09-0000-add-custom-url.js new file mode 100644 index 000000000..b3465c87f --- /dev/null +++ b/db/knex_migrations/2025-05-09-0000-add-custom-url.js @@ -0,0 +1,13 @@ +// Add column custom_url to monitor_group table +exports.up = function (knex) { + return knex.schema + .alterTable("monitor_group", function (table) { + table.text("custom_url", "text"); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor_group", function (table) { + table.dropColumn("custom_url"); + }); +}; diff --git a/server/model/group.js b/server/model/group.js index bd2c30189..16c482759 100644 --- a/server/model/group.js +++ b/server/model/group.js @@ -33,7 +33,7 @@ class Group extends BeanModel { */ async getMonitorList() { return R.convertToBeans("monitor", await R.getAll(` - SELECT monitor.*, monitor_group.send_url FROM monitor, monitor_group + SELECT monitor.*, monitor_group.send_url, monitor_group.custom_url FROM monitor, monitor_group WHERE monitor.id = monitor_group.monitor_id AND group_id = ? ORDER BY monitor_group.weight diff --git a/server/model/monitor.js b/server/model/monitor.js index 58decbcba..85293bbdc 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -53,7 +53,7 @@ class Monitor extends BeanModel { }; if (this.sendUrl) { - obj.url = this.url; + obj.url = this.customUrl ?? this.url; } if (showTags) { diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js index 1114d81fd..952ec2fa7 100644 --- a/server/socket-handlers/status-page-socket-handler.js +++ b/server/socket-handlers/status-page-socket-handler.js @@ -211,6 +211,10 @@ module.exports.statusPageSocketHandler = (socket) => { relationBean.send_url = monitor.sendUrl; } + if (monitor.url !== undefined) { + relationBean.custom_url = monitor.url; + } + await R.store(relationBean); } diff --git a/src/components/MonitorSettingDialog.vue b/src/components/MonitorSettingDialog.vue index e6b2cd1ef..8723c4862 100644 --- a/src/components/MonitorSettingDialog.vue +++ b/src/components/MonitorSettingDialog.vue @@ -10,7 +10,7 @@ + + + @@ -78,6 +88,7 @@ export default { monitor_index: monitor.index, group_index: group.index, isClickAble: this.showLink(monitor), + url: monitor.element.url, }; this.MonitorSettingDialog.show(); @@ -110,6 +121,17 @@ export default { } return monitor.element.sendUrl && monitor.element.url && monitor.element.url !== "https://" && !this.editMode; }, + + /** + * Toggle the value of sendUrl + * @param {number} groupIndex Index of group monitor is member of + * @param {number} index Index of monitor within group + * @param {string} value The new value of the url + * @returns {void} + */ + changeUrl(groupIndex, index, value) { + this.$root.publicGroupList[groupIndex].monitorList[index].url = value; + }, }, }; diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index 38aca2957..cb97ecdcd 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -58,6 +58,7 @@ v-if="editMode" :class="{'link-active': true, 'btn-link': true}" icon="cog" class="action me-3" + data-testid="monitor-settings" @click="$refs.monitorSettingDialog.show(group, monitor)" /> diff --git a/src/lang/en.json b/src/lang/en.json index 23832f48d..42ec5d9f6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1074,6 +1074,8 @@ "rabbitmqHelpText": "To use the monitor, you will need to enable the Management Plugin in your RabbitMQ setup. For more information, please consult the {rabitmq_documentation}.", "SendGrid API Key": "SendGrid API Key", "Separate multiple email addresses with commas": "Separate multiple email addresses with commas", + "Custom URL": "Custom URL", + "customUrlDescription": "Will be used as the clickable URL instead of the monitor's one.", "OneChatAccessToken": "OneChat Access Token", "OneChatUserIdOrGroupId": "OneChat User ID or Group ID", "OneChatBotId": "OneChat Bot ID", diff --git a/test/e2e/specs/status-page.spec.js b/test/e2e/specs/status-page.spec.js index f525dfc6f..0231aa225 100644 --- a/test/e2e/specs/status-page.spec.js +++ b/test/e2e/specs/status-page.spec.js @@ -12,6 +12,8 @@ test.describe("Status Page", () => { const monitorName = "Monitor for Status Page"; const tagName = "Client"; const tagValue = "Acme Inc"; + const monitorUrl = "https://www.example.com/status"; + const monitorCustomUrl = "https://www.example.com"; // Status Page const footerText = "This is footer text."; @@ -30,7 +32,7 @@ test.describe("Status Page", () => { await expect(page.getByTestId("monitor-type-select")).toBeVisible(); await page.getByTestId("monitor-type-select").selectOption("http"); await page.getByTestId("friendly-name-input").fill(monitorName); - await page.getByTestId("url-input").fill("https://www.example.com/"); + await page.getByTestId("url-input").fill(monitorUrl); await page.getByTestId("add-tag-button").click(); await page.getByTestId("tag-name-input").fill(tagName); await page.getByTestId("tag-value-input").fill(tagValue); @@ -79,6 +81,13 @@ test.describe("Status Page", () => { await page.getByTestId("monitor-select").getByRole("option", { name: monitorName }).click(); await expect(page.getByTestId("monitor")).toHaveCount(1); await expect(page.getByTestId("monitor-name")).toContainText(monitorName); + await expect(page.getByTestId("monitor-name")).not.toHaveAttribute("href"); + + // Set public url on + await page.getByTestId("monitor-settings").click(); + await page.getByTestId("show-clickable-link").check(); + await page.getByTestId("custom-url-input").fill(monitorCustomUrl); + await page.getByTestId("monitor-settings-close").click(); // Save the changes await screenshot(testInfo, page); @@ -94,6 +103,8 @@ test.describe("Status Page", () => { await expect(page.getByTestId("footer-text")).toContainText(footerText); await expect(page.getByTestId("powered-by")).toHaveCount(0); + await expect(page.getByTestId("monitor-name")).toHaveAttribute("href", monitorCustomUrl); + await expect(page.getByTestId("update-countdown-text")).toContainText("00:"); const updateCountdown = Number((await page.getByTestId("update-countdown-text").textContent()).match(/(\d+):(\d+)/)[2]); expect(updateCountdown).toBeGreaterThanOrEqual(refreshInterval); // cant be certain when the timer will start, so ensure it's within expected range From cd6dc144a7f2208a0febc92a8ccfd5a10701a315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Hj=C3=A4rtmyr?= Date: Sun, 11 May 2025 15:38:03 +0200 Subject: [PATCH 052/133] feat: add notification provider Notifery (#5832) Co-authored-by: Frank Elsinga --- server/notification-providers/notifery.js | 53 +++++++++++++++++++++++ server/notification.js | 2 + src/components/NotificationDialog.vue | 3 +- src/components/notifications/Notifery.vue | 49 +++++++++++++++++++++ src/components/notifications/index.js | 2 + 5 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 server/notification-providers/notifery.js create mode 100644 src/components/notifications/Notifery.vue diff --git a/server/notification-providers/notifery.js b/server/notification-providers/notifery.js new file mode 100644 index 000000000..772556497 --- /dev/null +++ b/server/notification-providers/notifery.js @@ -0,0 +1,53 @@ +const { getMonitorRelativeURL, UP } = require("../../src/util"); +const { setting } = require("../util-server"); +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); + +class Notifery extends NotificationProvider { + name = "notifery"; + + /** + * @inheritdoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + const okMsg = "Sent Successfully."; + const url = "https://api.notifery.com/event"; + + let data = { + title: notification.notiferyTitle || "Uptime Kuma Alert", + message: msg, + }; + + if (notification.notiferyGroup) { + data.group = notification.notiferyGroup; + } + + // Link to the monitor + const baseURL = await setting("primaryBaseURL"); + if (baseURL && monitorJSON) { + data.message += `\n\nMonitor: ${baseURL}${getMonitorRelativeURL(monitorJSON.id)}`; + } + + if (heartbeatJSON) { + data.code = heartbeatJSON.status === UP ? 0 : 1; + + if (heartbeatJSON.ping) { + data.duration = heartbeatJSON.ping; + } + } + + try { + const headers = { + "Content-Type": "application/json", + "x-api-key": notification.notiferyApiKey, + }; + + await axios.post(url, data, { headers }); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + } +} + +module.exports = Notifery; diff --git a/server/notification.js b/server/notification.js index 468d026c0..fd8c23d67 100644 --- a/server/notification.js +++ b/server/notification.js @@ -13,6 +13,7 @@ const DingDing = require("./notification-providers/dingding"); const Discord = require("./notification-providers/discord"); const Elks = require("./notification-providers/46elks"); const Feishu = require("./notification-providers/feishu"); +const Notifery = require("./notification-providers/notifery"); const FreeMobile = require("./notification-providers/freemobile"); const GoogleChat = require("./notification-providers/google-chat"); const Gorush = require("./notification-providers/gorush"); @@ -169,6 +170,7 @@ class Notification { new YZJ(), new SMSPlanet(), new SpugPush(), + new Notifery(), ]; for (let item of list) { if (! item.name) { diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue index 2e66de8e9..acfcde6a2 100644 --- a/src/components/NotificationDialog.vue +++ b/src/components/NotificationDialog.vue @@ -168,7 +168,8 @@ export default { "waha": "WhatsApp (WAHA)", "gtxmessaging": "GtxMessaging", "Cellsynt": "Cellsynt", - "SendGrid": "SendGrid" + "SendGrid": "SendGrid", + "notifery": "Notifery" }; // Put notifications here if it's not supported in most regions or its documentation is not in English diff --git a/src/components/notifications/Notifery.vue b/src/components/notifications/Notifery.vue new file mode 100644 index 000000000..ce204dc6a --- /dev/null +++ b/src/components/notifications/Notifery.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index be7feb820..933139a4a 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -4,6 +4,7 @@ import AliyunSMS from "./AliyunSms.vue"; import Apprise from "./Apprise.vue"; import Bark from "./Bark.vue"; import Bitrix24 from "./Bitrix24.vue"; +import Notifery from "./Notifery.vue"; import ClickSendSMS from "./ClickSendSMS.vue"; import CallMeBot from "./CallMeBot.vue"; import SMSC from "./SMSC.vue"; @@ -149,6 +150,7 @@ const NotificationFormList = { "ZohoCliq": ZohoCliq, "SevenIO": SevenIO, "whapi": Whapi, + "notifery": Notifery, "waha": WAHA, "gtxmessaging": GtxMessaging, "Cellsynt": Cellsynt, From 60b3fb4c18786b1019233001e8b8e9f3fefc7cf3 Mon Sep 17 00:00:00 2001 From: AnnAngela Date: Tue, 13 May 2025 01:03:38 +0000 Subject: [PATCH 053/133] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ --- src/lang/zh-CN.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 88134e3d8..903d54bc0 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1120,5 +1120,11 @@ "YZJ Robot Token": "YZJ 机器人令牌", "telegramServerUrl": "(可选) 服务器 Url", "telegramServerUrlDescription": "用以解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}", - "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权" + "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权", + "smsplanetApiDocs": "有关获取 API token 的详细信息,请参阅 {the_smsplanet_documentation}。", + "smsplanetNeedToApproveName": "需要在客户控制面板批准", + "Sender name": "发件人名称", + "Phone numbers": "手机号码", + "the smsplanet documentation": "smsplanet 文档", + "smsplanetApiToken": "SMSPlanet 的 API Token" } From 413cb08a81c86c8f076dad19b9d3d4f2d5ffe686 Mon Sep 17 00:00:00 2001 From: Matteo Morari Date: Wed, 14 May 2025 10:10:20 +0000 Subject: [PATCH 054/133] Translated using Weblate (Italian) Currently translated at 69.2% (745 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/it/ --- src/lang/it-IT.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json index e07fbd2e1..b190172f1 100644 --- a/src/lang/it-IT.json +++ b/src/lang/it-IT.json @@ -759,5 +759,25 @@ "Server Address": "Indirizzo del Server", "Expiry": "Scadenza", "telegramUseTemplateDescription": "Se abilitato, il messaggio sarà spedito usando il template personalizzato.", - "high": "alto" + "high": "alto", + "jsonQueryDescription": "Analizza ed estrai dati specifici dalla risposta JSON del server utilizzando una query JSON oppure usa \"$\" per la risposta grezza, se non ti aspetti JSON. Il risultato viene quindi confrontato con il valore previsto, sotto forma di stringhe. Consulta {0} per la documentazione e usa {1} per sperimentare con le query.", + "Free Mobile User Identifier": "Identificatore utente mobile gratuito", + "telegramServerUrlDescription": "Per rimuovere le limitazioni dell'API bot di Telegram o ottenere l'accesso in aree bloccate (Cina, Iran, ecc.), clicca su {0} per maggiori informazioni. Predefinito: {1}", + "octopushLogin": "“Accedi” dalle credenziali API HTTP nel pannello di controllo", + "promosmsLogin": "Nome di accesso API", + "pushoversounds bike": "Bicicletta", + "pushoversounds bugle": "Bugle", + "pushoversounds classical": "Classico", + "pushoversounds cosmic": "Cosmico", + "pushoversounds incoming": "In arrivo", + "pushoversounds intermission": "Intervallo", + "pushoversounds tugboat": "Rimorchiatore", + "pushoversounds climb": "Salita (lunga)", + "pushoversounds persistent": "Persistente (lungo)", + "pushoversounds vibrate": "Solo vibrazione", + "wayToGetKookGuildID": "Attivare la “Modalità sviluppatore” nelle impostazioni di Kook e fare clic con il pulsante destro del mouse sulla gilda per ottenere il suo ID.", + "Guild ID": "Guild ID", + "Free Mobile API Key": "Chiave API mobile gratuita", + "telegramUseTemplate": "Utilizza un template di messaggio personalizzato", + "telegramTemplateFormatDescription": "Telegram permette l'utilizzo di diversi linguaggi di markup, vedi Telegram {0} per maggiori dettagli." } From 0b29fd49adf74dd8680b1fe531633c98e8706eb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=C4=83ng=20Khoa?= <63006945+etnad17@users.noreply.github.com> Date: Sun, 18 May 2025 04:33:00 +0700 Subject: [PATCH 055/133] =?UTF-8?q?fix(sql):=20use=20UTC=5FTIMESTAMP=20ins?= =?UTF-8?q?tead=20of=20NOW=20for=20consistent=20time=20calcul=E2=80=A6=20(?= =?UTF-8?q?#5843)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/database.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/database.js b/server/database.js index 0e6a7405d..582f19c29 100644 --- a/server/database.js +++ b/server/database.js @@ -736,7 +736,7 @@ class Database { if (Database.dbConfig.type === "sqlite") { return "DATETIME('now', ? || ' hours')"; } else { - return "DATE_ADD(NOW(), INTERVAL ? HOUR)"; + return "DATE_ADD(UTC_TIMESTAMP(), INTERVAL ? HOUR)"; } } From 0f1547febd4e75280ed9b0dda042c77530a6fd1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9B=E6=9E=97=E6=84=8F=E5=BF=97?= Date: Sat, 17 May 2025 14:27:30 +0000 Subject: [PATCH 056/133] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/zh_Hans/ --- src/lang/zh-CN.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 903d54bc0..46b4db838 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1122,9 +1122,9 @@ "telegramServerUrlDescription": "用以解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}", "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权", "smsplanetApiDocs": "有关获取 API token 的详细信息,请参阅 {the_smsplanet_documentation}。", - "smsplanetNeedToApproveName": "需要在客户控制面板批准", + "smsplanetNeedToApproveName": "需要在客户端面板进行确认", "Sender name": "发件人名称", "Phone numbers": "手机号码", "the smsplanet documentation": "smsplanet 文档", - "smsplanetApiToken": "SMSPlanet 的 API Token" + "smsplanetApiToken": "SMSPlanet API 的 Token" } From 289e824a5dee792050bf2e87396e514cfde213f7 Mon Sep 17 00:00:00 2001 From: zhang-wei Date: Sun, 18 May 2025 06:05:48 +0800 Subject: [PATCH 057/133] Fix monitor reference in push notification logic (#5842) Co-authored-by: Frank Elsinga --- server/routers/api-router.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/routers/api-router.js b/server/routers/api-router.js index ed6db2cd1..3568f2abf 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -98,15 +98,15 @@ router.all("/api/push/:pushToken", async (request, response) => { // Reset down count bean.downCount = 0; - log.debug("monitor", `[${this.name}] sendNotification`); + log.debug("monitor", `[${monitor.name}] sendNotification`); await Monitor.sendNotification(isFirstBeat, monitor, bean); } else { - if (bean.status === DOWN && this.resendInterval > 0) { + if (bean.status === DOWN && monitor.resendInterval > 0) { ++bean.downCount; - if (bean.downCount >= this.resendInterval) { + if (bean.downCount >= monitor.resendInterval) { // Send notification again, because we are still DOWN - log.debug("monitor", `[${this.name}] sendNotification again: Down Count: ${bean.downCount} | Resend Interval: ${this.resendInterval}`); - await Monitor.sendNotification(isFirstBeat, this, bean); + log.debug("monitor", `[${monitor.name}] sendNotification again: Down Count: ${bean.downCount} | Resend Interval: ${monitor.resendInterval}`); + await Monitor.sendNotification(isFirstBeat, monitor, bean); // Reset down count bean.downCount = 0; From c67f6efe2924fa45f18faaf8372bd3b942423521 Mon Sep 17 00:00:00 2001 From: Brad Koehn Date: Sun, 18 May 2025 15:35:55 -0500 Subject: [PATCH 058/133] added SMTP monitor (#5489) Co-authored-by: Frank Elsinga --- .../2025-01-01-0000-add-smtp.js | 12 +++++++ server/model/monitor.js | 1 + server/monitor-types/smtp.js | 35 +++++++++++++++++++ server/server.js | 1 + server/uptime-kuma-server.js | 2 ++ src/lang/en.json | 1 + src/pages/EditMonitor.vue | 21 +++++++++-- 7 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 db/knex_migrations/2025-01-01-0000-add-smtp.js create mode 100644 server/monitor-types/smtp.js diff --git a/db/knex_migrations/2025-01-01-0000-add-smtp.js b/db/knex_migrations/2025-01-01-0000-add-smtp.js new file mode 100644 index 000000000..00d4835f5 --- /dev/null +++ b/db/knex_migrations/2025-01-01-0000-add-smtp.js @@ -0,0 +1,12 @@ +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.string("smtp_security").defaultTo(null); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor", function (table) { + table.dropColumn("smtp_security"); + }); +}; diff --git a/server/model/monitor.js b/server/model/monitor.js index 85293bbdc..08d666b78 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -153,6 +153,7 @@ class Monitor extends BeanModel { snmpOid: this.snmpOid, jsonPathOperator: this.jsonPathOperator, snmpVersion: this.snmpVersion, + smtpSecurity: this.smtpSecurity, rabbitmqNodes: JSON.parse(this.rabbitmqNodes), conditions: JSON.parse(this.conditions), }; diff --git a/server/monitor-types/smtp.js b/server/monitor-types/smtp.js new file mode 100644 index 000000000..f4a49e238 --- /dev/null +++ b/server/monitor-types/smtp.js @@ -0,0 +1,35 @@ +const { MonitorType } = require("./monitor-type"); +const { UP } = require("../../src/util"); +const nodemailer = require("nodemailer"); + +class SMTPMonitorType extends MonitorType { + name = "smtp"; + + /** + * @inheritdoc + */ + async check(monitor, heartbeat, _server) { + let options = { + port: monitor.port || 25, + host: monitor.hostname, + secure: monitor.smtpSecurity === "secure", // use SMTPS (not STARTTLS) + ignoreTLS: monitor.smtpSecurity === "nostarttls", // don't use STARTTLS even if it's available + requireTLS: monitor.smtpSecurity === "starttls", // use STARTTLS or fail + }; + let transporter = nodemailer.createTransport(options); + try { + await transporter.verify(); + + heartbeat.status = UP; + heartbeat.msg = "SMTP connection verifies successfully"; + } catch (e) { + throw new Error(`SMTP connection doesn't verify: ${e}`); + } finally { + transporter.close(); + } + } +} + +module.exports = { + SMTPMonitorType, +}; diff --git a/server/server.js b/server/server.js index ec5ad49f6..476ef644b 100644 --- a/server/server.js +++ b/server/server.js @@ -866,6 +866,7 @@ let needSetup = false; monitor.kafkaProducerAllowAutoTopicCreation; bean.gamedigGivenPortOnly = monitor.gamedigGivenPortOnly; bean.remote_browser = monitor.remote_browser; + bean.smtpSecurity = monitor.smtpSecurity; bean.snmpVersion = monitor.snmpVersion; bean.snmpOid = monitor.snmpOid; bean.jsonPathOperator = monitor.jsonPathOperator; diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index cdaa83dfc..1f75b72cc 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -113,6 +113,7 @@ class UptimeKumaServer { UptimeKumaServer.monitorTypeList["tailscale-ping"] = new TailscalePing(); UptimeKumaServer.monitorTypeList["dns"] = new DnsMonitorType(); UptimeKumaServer.monitorTypeList["mqtt"] = new MqttMonitorType(); + UptimeKumaServer.monitorTypeList["smtp"] = new SMTPMonitorType(); UptimeKumaServer.monitorTypeList["group"] = new GroupMonitorType(); UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType(); UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType(); @@ -552,6 +553,7 @@ const { RealBrowserMonitorType } = require("./monitor-types/real-browser-monitor const { TailscalePing } = require("./monitor-types/tailscale-ping"); const { DnsMonitorType } = require("./monitor-types/dns"); const { MqttMonitorType } = require("./monitor-types/mqtt"); +const { SMTPMonitorType } = require("./monitor-types/smtp"); const { GroupMonitorType } = require("./monitor-types/group"); const { SNMPMonitorType } = require("./monitor-types/snmp"); const { MongodbMonitorType } = require("./monitor-types/mongodb"); diff --git a/src/lang/en.json b/src/lang/en.json index 42ec5d9f6..c8555bf12 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1074,6 +1074,7 @@ "rabbitmqHelpText": "To use the monitor, you will need to enable the Management Plugin in your RabbitMQ setup. For more information, please consult the {rabitmq_documentation}.", "SendGrid API Key": "SendGrid API Key", "Separate multiple email addresses with commas": "Separate multiple email addresses with commas", + "smtpHelpText": "“SMTPS” tests that SMTP/TLS is working; “Ignore TLS” connects over plaintext; “STARTTLS” connects, issues a STARTTLS command and verifies the server certificate. None of these send an email.", "Custom URL": "Custom URL", "customUrlDescription": "Will be used as the clickable URL instead of the monitor's one.", "OneChatAccessToken": "OneChat Access Token", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 10d944270..bf4e6889d 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -24,6 +24,9 @@ + @@ -281,8 +284,8 @@ - -
+ +
-
+
@@ -329,6 +332,18 @@
+
+ + +
+ {{ $t("smtpHelpText") }} +
+
+
From 3760d8021b16cf17485779e4d6286a748e43b72f Mon Sep 17 00:00:00 2001 From: Brian Pravato Date: Sat, 17 May 2025 22:15:19 +0000 Subject: [PATCH 059/133] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pt_BR/ --- src/lang/pt-BR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index 7cdc3e772..d0d6812b4 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -978,7 +978,7 @@ "Add Remote Browser": "Adicionar Navegador Remoto", "New Group": "Novo Grupo", "Group Name": "Nome do Grupo", - "OAuth2: Client Credentials": "OAuth2: Client Credentials", + "OAuth2: Client Credentials": "OAuth2: Credenciais do Cliente", "Authentication Method": "Método de Autenticação", "Authorization Header": "Header de Autorização", "ignoredTLSError": "Erros TLS/SSL foram ignorados", From f3828262c96ab00e5b313cbefc58c52ae7164fb0 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Sun, 18 May 2025 23:01:58 +0000 Subject: [PATCH 060/133] Translated using Weblate (Polish) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/pl/ --- src/lang/pl.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lang/pl.json b/src/lang/pl.json index fd96faef6..1ede788c3 100644 --- a/src/lang/pl.json +++ b/src/lang/pl.json @@ -1117,5 +1117,12 @@ "templateStatus": "status", "telegramUseTemplate": "Użyj niestandardowego szablonu wiadomości", "telegramUseTemplateDescription": "Jeśli opcja ta jest włączona, wiadomość zostanie wysłana przy użyciu niestandardowego szablonu.", - "telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje." + "telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje.", + "Font Twemoji by Twitter licensed under": "Czcionka Twemoji autorstwa Twitter na licencji", + "smsplanetApiToken": "Token dla API SMSPlanet", + "smsplanetApiDocs": "Szczegółowe informacje na temat uzyskiwania tokenów API można znaleźć w {the_smsplanet_documentation}.", + "the smsplanet documentation": "dokumentacja smsplanet", + "Phone numbers": "Numery telefonów", + "Sender name": "Nazwa nadawcy", + "smsplanetNeedToApproveName": "Wymaga zatwierdzenia w panelu klienta" } From 49eb0ff87b1b042d33c6db105ada28a5d32c8601 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Tue, 20 May 2025 18:38:21 +0800 Subject: [PATCH 061/133] Fix: [Push Monitor] Send notifications during maintenance period (#5847) --- server/routers/api-router.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/routers/api-router.js b/server/routers/api-router.js index 3568f2abf..b00dbc02d 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -50,7 +50,7 @@ router.all("/api/push/:pushToken", async (request, response) => { let msg = request.query.msg || "OK"; let ping = parseFloat(request.query.ping) || null; let statusString = request.query.status || "up"; - let status = (statusString === "up") ? UP : DOWN; + const statusFromParam = (statusString === "up") ? UP : DOWN; let monitor = await R.findOne("monitor", " push_token = ? AND active = 1 ", [ pushToken @@ -80,7 +80,7 @@ router.all("/api/push/:pushToken", async (request, response) => { msg = "Monitor under maintenance"; bean.status = MAINTENANCE; } else { - determineStatus(status, previousHeartbeat, monitor.maxretries, monitor.isUpsideDown(), bean); + determineStatus(statusFromParam, previousHeartbeat, monitor.maxretries, monitor.isUpsideDown(), bean); } // Calculate uptime @@ -92,9 +92,9 @@ router.all("/api/push/:pushToken", async (request, response) => { log.debug("router", "PreviousStatus: " + previousHeartbeat?.status); log.debug("router", "Current Status: " + bean.status); - bean.important = Monitor.isImportantBeat(isFirstBeat, previousHeartbeat?.status, status); + bean.important = Monitor.isImportantBeat(isFirstBeat, previousHeartbeat?.status, bean.status); - if (Monitor.isImportantForNotification(isFirstBeat, previousHeartbeat?.status, status)) { + if (Monitor.isImportantForNotification(isFirstBeat, previousHeartbeat?.status, bean.status)) { // Reset down count bean.downCount = 0; From c69fcd409394a18c55f33ca3b946828cd69e6204 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 23 May 2025 01:03:37 +0800 Subject: [PATCH 062/133] Update dependencies (#5851) --- package-lock.json | 1778 ++++++++++++++++++++++----------------------- 1 file changed, 879 insertions(+), 899 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5269c088..fdd91b149 100644 --- a/package-lock.json +++ b/package-lock.json @@ -156,16 +156,19 @@ } }, "node_modules/@actions/github": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", - "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.1.tgz", + "integrity": "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==", "dev": true, "license": "MIT", "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@octokit/plugin-paginate-rest": "^9.2.2", + "@octokit/plugin-rest-endpoint-methods": "^10.4.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "undici": "^5.28.5" } }, "node_modules/@actions/http-client": { @@ -339,49 +342,49 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.782.0.tgz", - "integrity": "sha512-Zad5x3L5K+PuhdY2v8Q0tsafmVBa2SJJxNukPzXM1APxW7FpDVMxcdSzjfCfX7CvSpohR8zDIEROqMfoUisaTw==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.812.0.tgz", + "integrity": "sha512-LWkP+Vb2f6aNaway06XvFZG3altSXltAClzCz9cTFuOfKG6V2X+0VWsW9cnFRV4+MFFJW3iQAaPMQ1fBO9Rusg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-node": "3.782.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.782.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.782.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.782.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/credential-provider-node": "3.812.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.812.0", + "@aws-sdk/region-config-resolver": "3.808.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.808.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.812.0", + "@smithy/config-resolver": "^4.1.2", + "@smithy/core": "^3.3.3", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-endpoint": "^4.1.6", + "@smithy/middleware-retry": "^4.1.7", + "@smithy/middleware-serde": "^4.0.5", "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-config-provider": "^4.1.1", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", + "@smithy/smithy-client": "^4.2.6", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-defaults-mode-browser": "^4.0.14", + "@smithy/util-defaults-mode-node": "^4.0.14", + "@smithy/util-endpoints": "^3.0.4", "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -390,48 +393,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.782.0.tgz", - "integrity": "sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.812.0.tgz", + "integrity": "sha512-O//smQRj1+RXELB7xX54s5pZB0V69KHXpUZmz8V+8GAYO1FKTHfbpUgK+zyMNb+lFZxG9B69yl8pWPZ/K8bvxA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.782.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.782.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.782.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.812.0", + "@aws-sdk/region-config-resolver": "3.808.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.808.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.812.0", + "@smithy/config-resolver": "^4.1.2", + "@smithy/core": "^3.3.3", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-endpoint": "^4.1.6", + "@smithy/middleware-retry": "^4.1.7", + "@smithy/middleware-serde": "^4.0.5", "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-config-provider": "^4.1.1", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", + "@smithy/smithy-client": "^4.2.6", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-defaults-mode-browser": "^4.0.14", + "@smithy/util-defaults-mode-node": "^4.0.14", + "@smithy/util-endpoints": "^3.0.4", "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -440,19 +443,19 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.775.0.tgz", - "integrity": "sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.812.0.tgz", + "integrity": "sha512-myWA9oHMBVDObKrxG+puAkIGs8igcWInQ1PWCRTS/zN4BkhUMFjjh/JPV/4Vzvtvj5E36iujq2WtlrDLl1PpOw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/core": "^3.2.0", - "@smithy/node-config-provider": "^4.0.2", + "@aws-sdk/types": "3.804.0", + "@smithy/core": "^3.3.3", + "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", - "@smithy/signature-v4": "^5.0.2", - "@smithy/smithy-client": "^4.2.0", + "@smithy/signature-v4": "^5.1.0", + "@smithy/smithy-client": "^4.2.6", "@smithy/types": "^4.2.0", "@smithy/util-middleware": "^4.0.2", "fast-xml-parser": "4.4.1", @@ -463,14 +466,14 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.782.0.tgz", - "integrity": "sha512-rWUmO9yZUBkM2CrTN9lm5X7Ubl7bRPBKyq5hvWpVNSa6BpUcmAQ6CUwEACOc+9cXmUqmKFhP6MGT2GpVlRrzDQ==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.812.0.tgz", + "integrity": "sha512-SrEGXP1zs2Cy3jjOwM8eh+UZkr28z7rvjF+cgV4bpOti5F/mzPyVoIxDkG8BQ2sZdAwa9rgEhhOl4CcKjoJoTA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.782.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/client-cognito-identity": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -480,14 +483,14 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.775.0.tgz", - "integrity": "sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.812.0.tgz", + "integrity": "sha512-Ge7IEu06ANurGBZx39q9CNN/ncqb1K8lpKZCY969uNWO0/7YPhnplrRJGMZYIS35nD2mBm3ortEKjY/wMZZd5g==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -497,19 +500,19 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.775.0.tgz", - "integrity": "sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.812.0.tgz", + "integrity": "sha512-Vux2U42vPGXeE407Lp6v3yVA65J7hBO9rB67LXshyGVi7VZLAYWc4mrZxNJNqabEkjcDEmMQQakLPT6zc5SvFw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/node-http-handler": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", + "@smithy/smithy-client": "^4.2.6", "@smithy/types": "^4.2.0", "@smithy/util-stream": "^4.2.0", "tslib": "^2.6.2" @@ -519,21 +522,21 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.782.0.tgz", - "integrity": "sha512-wd4KdRy2YjLsE4Y7pz00470Iip06GlRHkG4dyLW7/hFMzEO2o7ixswCWp6J2VGZVAX64acknlv2Q0z02ebjmhw==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.812.0.tgz", + "integrity": "sha512-oltqGvQ488xtPY5wrNjbD+qQYYkuCjn30IDE1qKMxJ58EM6UVTQl3XV44Xq07xfF5gKwVJQkfIyOkRAguOVybg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-env": "3.775.0", - "@aws-sdk/credential-provider-http": "3.775.0", - "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.782.0", - "@aws-sdk/credential-provider-web-identity": "3.782.0", - "@aws-sdk/nested-clients": "3.782.0", - "@aws-sdk/types": "3.775.0", - "@smithy/credential-provider-imds": "^4.0.2", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/credential-provider-env": "3.812.0", + "@aws-sdk/credential-provider-http": "3.812.0", + "@aws-sdk/credential-provider-process": "3.812.0", + "@aws-sdk/credential-provider-sso": "3.812.0", + "@aws-sdk/credential-provider-web-identity": "3.812.0", + "@aws-sdk/nested-clients": "3.812.0", + "@aws-sdk/types": "3.804.0", + "@smithy/credential-provider-imds": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", @@ -544,20 +547,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.782.0.tgz", - "integrity": "sha512-HZiAF+TCEyKjju9dgysjiPIWgt/+VerGaeEp18mvKLNfgKz1d+/82A2USEpNKTze7v3cMFASx3CvL8yYyF7mJw==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.812.0.tgz", + "integrity": "sha512-SnvSWBP6cr9nqx784eETnL2Zl7ZnMB/oJgFVEG1aejAGbT1H9gTpMwuUsBXk4u/mEYe3f1lh1Wqo+HwDgNkfrg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.775.0", - "@aws-sdk/credential-provider-http": "3.775.0", - "@aws-sdk/credential-provider-ini": "3.782.0", - "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.782.0", - "@aws-sdk/credential-provider-web-identity": "3.782.0", - "@aws-sdk/types": "3.775.0", - "@smithy/credential-provider-imds": "^4.0.2", + "@aws-sdk/credential-provider-env": "3.812.0", + "@aws-sdk/credential-provider-http": "3.812.0", + "@aws-sdk/credential-provider-ini": "3.812.0", + "@aws-sdk/credential-provider-process": "3.812.0", + "@aws-sdk/credential-provider-sso": "3.812.0", + "@aws-sdk/credential-provider-web-identity": "3.812.0", + "@aws-sdk/types": "3.804.0", + "@smithy/credential-provider-imds": "^4.0.4", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", @@ -568,14 +571,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.775.0.tgz", - "integrity": "sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.812.0.tgz", + "integrity": "sha512-YI8bb153XeEOb59F9KtTZEwDAc14s2YHZz58+OFiJ2udnKsPV87mNiFhJPW6ba9nmOLXVat5XDcwtVT1b664wg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", @@ -586,16 +589,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.782.0.tgz", - "integrity": "sha512-1y1ucxTtTIGDSNSNxriQY8msinilhe9gGvQpUDYW9gboyC7WQJPDw66imy258V6osdtdi+xoHzVCbCz3WhosMQ==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.812.0.tgz", + "integrity": "sha512-ODsPcNhgiO6GOa82TVNskM97mml9rioe9Cbhemz48lkfDQPv1u06NaCR0o3FsvprX1sEhMvJTR3sE1fyEOzvJQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.782.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/token-providers": "3.782.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/client-sso": "3.812.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/token-providers": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", @@ -606,15 +609,15 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.782.0.tgz", - "integrity": "sha512-xCna0opVPaueEbJoclj5C6OpDNi0Gynj+4d7tnuXGgQhTHPyAz8ZyClkVqpi5qvHTgxROdUEDxWqEO5jqRHZHQ==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.812.0.tgz", + "integrity": "sha512-E9Bmiujvm/Hp9DM/Vc1S+D0pQbx8/x4dR/zyAEZU9EoRq0duQOQ1reWYWbebYmL1OklcVpTfKV0a/VCwuAtGSg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/nested-clients": "3.782.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/nested-clients": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -624,28 +627,28 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.782.0.tgz", - "integrity": "sha512-EP0viOqgw9hU8Lt25Rc7nPlPKMCsO7ntVGSA5TDdjaOHU9wN1LdKwRmFWYE+ii0FIPmagJmgJJoHdpq85oqsUw==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.812.0.tgz", + "integrity": "sha512-hT7Kr8Ao+NS9b8KCB/U8cmpr0DcWOZNZNRBGAOc4eq65JpsRv177QmSqjh75vhM9BzchH3VymcP4GeMoy4SuvA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.782.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-cognito-identity": "3.782.0", - "@aws-sdk/credential-provider-env": "3.775.0", - "@aws-sdk/credential-provider-http": "3.775.0", - "@aws-sdk/credential-provider-ini": "3.782.0", - "@aws-sdk/credential-provider-node": "3.782.0", - "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.782.0", - "@aws-sdk/credential-provider-web-identity": "3.782.0", - "@aws-sdk/nested-clients": "3.782.0", - "@aws-sdk/types": "3.775.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", + "@aws-sdk/client-cognito-identity": "3.812.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/credential-provider-cognito-identity": "3.812.0", + "@aws-sdk/credential-provider-env": "3.812.0", + "@aws-sdk/credential-provider-http": "3.812.0", + "@aws-sdk/credential-provider-ini": "3.812.0", + "@aws-sdk/credential-provider-node": "3.812.0", + "@aws-sdk/credential-provider-process": "3.812.0", + "@aws-sdk/credential-provider-sso": "3.812.0", + "@aws-sdk/credential-provider-web-identity": "3.812.0", + "@aws-sdk/nested-clients": "3.812.0", + "@aws-sdk/types": "3.804.0", + "@smithy/config-resolver": "^4.1.2", + "@smithy/core": "^3.3.3", + "@smithy/credential-provider-imds": "^4.0.4", + "@smithy/node-config-provider": "^4.1.1", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -655,13 +658,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz", - "integrity": "sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.804.0.tgz", + "integrity": "sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", + "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -671,13 +674,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz", - "integrity": "sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.804.0.tgz", + "integrity": "sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", + "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, @@ -686,13 +689,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz", - "integrity": "sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.804.0.tgz", + "integrity": "sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", + "@aws-sdk/types": "3.804.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -702,16 +705,16 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.782.0.tgz", - "integrity": "sha512-i32H2R6IItX+bQ2p4+v2gGO2jA80jQoJO2m1xjU9rYWQW3+ErWy4I5YIuQHTBfb6hSdAHbaRfqPDgbv9J2rjEg==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.812.0.tgz", + "integrity": "sha512-r+HFwtSvnAs6Fydp4mijylrTX0og9p/xfxOcKsqhMuk3HpZAIcf9sSjRQI6MBusYklg7pnM4sGEnPAZIrdRotA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/core": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.782.0", - "@smithy/core": "^3.2.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.808.0", + "@smithy/core": "^3.3.3", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -721,48 +724,48 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.782.0.tgz", - "integrity": "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.812.0.tgz", + "integrity": "sha512-FS/fImbEpJU3cXtBGR9fyVd+CP51eNKlvTMi3f4/6lSk3RmHjudNC9yEF/og3jtpT3O+7vsNOUW9mHco5IjdQQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.775.0", - "@aws-sdk/middleware-host-header": "3.775.0", - "@aws-sdk/middleware-logger": "3.775.0", - "@aws-sdk/middleware-recursion-detection": "3.775.0", - "@aws-sdk/middleware-user-agent": "3.782.0", - "@aws-sdk/region-config-resolver": "3.775.0", - "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.782.0", - "@aws-sdk/util-user-agent-browser": "3.775.0", - "@aws-sdk/util-user-agent-node": "3.782.0", - "@smithy/config-resolver": "^4.1.0", - "@smithy/core": "^3.2.0", + "@aws-sdk/core": "3.812.0", + "@aws-sdk/middleware-host-header": "3.804.0", + "@aws-sdk/middleware-logger": "3.804.0", + "@aws-sdk/middleware-recursion-detection": "3.804.0", + "@aws-sdk/middleware-user-agent": "3.812.0", + "@aws-sdk/region-config-resolver": "3.808.0", + "@aws-sdk/types": "3.804.0", + "@aws-sdk/util-endpoints": "3.808.0", + "@aws-sdk/util-user-agent-browser": "3.804.0", + "@aws-sdk/util-user-agent-node": "3.812.0", + "@smithy/config-resolver": "^4.1.2", + "@smithy/core": "^3.3.3", "@smithy/fetch-http-handler": "^5.0.2", "@smithy/hash-node": "^4.0.2", "@smithy/invalid-dependency": "^4.0.2", "@smithy/middleware-content-length": "^4.0.2", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-retry": "^4.1.0", - "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-endpoint": "^4.1.6", + "@smithy/middleware-retry": "^4.1.7", + "@smithy/middleware-serde": "^4.0.5", "@smithy/middleware-stack": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-config-provider": "^4.1.1", "@smithy/node-http-handler": "^4.0.4", "@smithy/protocol-http": "^5.1.0", - "@smithy/smithy-client": "^4.2.0", + "@smithy/smithy-client": "^4.2.6", "@smithy/types": "^4.2.0", "@smithy/url-parser": "^4.0.2", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.8", - "@smithy/util-defaults-mode-node": "^4.0.8", - "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-defaults-mode-browser": "^4.0.14", + "@smithy/util-defaults-mode-node": "^4.0.14", + "@smithy/util-endpoints": "^3.0.4", "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/util-retry": "^4.0.3", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -771,14 +774,14 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz", - "integrity": "sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==", + "version": "3.808.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.808.0.tgz", + "integrity": "sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", - "@smithy/node-config-provider": "^4.0.2", + "@aws-sdk/types": "3.804.0", + "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.2", @@ -789,14 +792,14 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.782.0.tgz", - "integrity": "sha512-4tPuk/3+THPrzKaXW4jE2R67UyGwHLFizZ47pcjJWbhb78IIJAy94vbeqEQ+veS84KF5TXcU7g5jGTXC0D70Wg==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.812.0.tgz", + "integrity": "sha512-dbVBaKxrxE708ub5uH3w+cmKIeRQas+2Xf6rpckhohYY+IiflGOdK6aLrp3T6dOQgr/FJ37iQtcYNonAG+yVBQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/nested-clients": "3.782.0", - "@aws-sdk/types": "3.775.0", + "@aws-sdk/nested-clients": "3.812.0", + "@aws-sdk/types": "3.804.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", "@smithy/types": "^4.2.0", @@ -807,9 +810,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz", - "integrity": "sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.804.0.tgz", + "integrity": "sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -821,15 +824,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.782.0.tgz", - "integrity": "sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw==", + "version": "3.808.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.808.0.tgz", + "integrity": "sha512-N6Lic98uc4ADB7fLWlzx+1uVnq04VgVjngZvwHoujcRg9YDhIg9dUDiTzD5VZv13g1BrPYmvYP1HhsildpGV6w==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", + "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", - "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-endpoints": "^3.0.4", "tslib": "^2.6.2" }, "engines": { @@ -837,9 +840,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz", - "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -850,28 +853,28 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz", - "integrity": "sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==", + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.804.0.tgz", + "integrity": "sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.775.0", + "@aws-sdk/types": "3.804.0", "@smithy/types": "^4.2.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.782.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.782.0.tgz", - "integrity": "sha512-dMFkUBgh2Bxuw8fYZQoH/u3H4afQ12VSkzEi//qFiDTwbKYq+u+RYjc8GLDM6JSK1BShMu5AVR7HD4ap1TYUnA==", + "version": "3.812.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.812.0.tgz", + "integrity": "sha512-8pt+OkHhS2U0LDwnzwRnFxyKn8sjSe752OIZQCNv263odud8jQu9pYO2pKqb2kRBk9h9szynjZBDLXfnvSQ7Bg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.782.0", - "@aws-sdk/types": "3.775.0", - "@smithy/node-config-provider": "^4.0.2", + "@aws-sdk/middleware-user-agent": "3.812.0", + "@aws-sdk/types": "3.804.0", + "@smithy/node-config-provider": "^4.1.1", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" }, @@ -914,14 +917,14 @@ } }, "node_modules/@azure/core-client": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.3.tgz", - "integrity": "sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.4.tgz", + "integrity": "sha512-f7IxTD15Qdux30s2qFARH+JxgwxWLG2Rlr4oSkPGuLWm+1p5y1+C04XGLA0vmX6EtqfutmjvpNmAfgwVIS5hpw==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", - "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-rest-pipeline": "^1.20.0", "@azure/core-tracing": "^1.0.0", "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", @@ -932,14 +935,14 @@ } }, "node_modules/@azure/core-http-compat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.2.0.tgz", - "integrity": "sha512-1kW8ZhN0CfbNOG6C688z5uh2yrzALE7dDXHiR9dY4vt+EbhGZQSbjDa5bQd2rf3X2pdWMsXbqbArxUyeNdvtmg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz", + "integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-client": "^1.3.0", - "@azure/core-rest-pipeline": "^1.19.0" + "@azure/core-rest-pipeline": "^1.20.0" }, "engines": { "node": ">=18.0.0" @@ -973,9 +976,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.1.tgz", - "integrity": "sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.20.0.tgz", + "integrity": "sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -983,8 +986,7 @@ "@azure/core-tracing": "^1.0.1", "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "@typespec/ts-http-runtime": "^0.2.2", "tslib": "^2.6.2" }, "engines": { @@ -1004,12 +1006,13 @@ } }, "node_modules/@azure/core-util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", - "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.12.0.tgz", + "integrity": "sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", + "@typespec/ts-http-runtime": "^0.2.2", "tslib": "^2.6.2" }, "engines": { @@ -1017,9 +1020,9 @@ } }, "node_modules/@azure/identity": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.8.0.tgz", - "integrity": "sha512-l9ALUGHtFB/JfsqmA+9iYAp2a+cCwdNO/cyIr2y7nJLJsz1aae6qVP8XxT7Kbudg0IQRSIMXj0+iivFdbD1xPA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.10.0.tgz", + "integrity": "sha512-iT53Sre2NJK6wzMWnvpjNiR3md597LZ3uK/5kQD2TkrY9vqhrY5bt2KwELNjkOWQ9n8S/92knj/QEykTtjMNqQ==", "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", @@ -1030,11 +1033,8 @@ "@azure/core-util": "^1.11.0", "@azure/logger": "^1.0.0", "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.2.3", - "events": "^3.0.0", - "jws": "^4.0.0", + "@azure/msal-node": "^3.5.0", "open": "^10.1.0", - "stoppable": "^1.1.0", "tslib": "^2.2.0" }, "engines": { @@ -1068,31 +1068,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@azure/identity/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/identity/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/@azure/identity/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "license": "MIT", "dependencies": { "default-browser": "^5.2.1", @@ -1150,11 +1129,12 @@ } }, "node_modules/@azure/logger": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", - "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.2.0.tgz", + "integrity": "sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==", "license": "MIT", "dependencies": { + "@typespec/ts-http-runtime": "^0.2.2", "tslib": "^2.6.2" }, "engines": { @@ -1162,33 +1142,33 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.10.0.tgz", - "integrity": "sha512-48X2VwOtHk8A1CI00E8tAqko0+3qQh53u5bOPySzdojL3T/Ad4GgRnN0c0oLJ1/PcTm4D4QybHYG3LBOX0l3/g==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.12.0.tgz", + "integrity": "sha512-WD1lmVWchg7wn1mI7Tr4v7QPyTwK+8Nuyje3jRpOFENLRLEBsdK8VVdTw3C+TypZmYn4cOAdj3zREnuFXgvfIA==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.5.0" + "@azure/msal-common": "15.6.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.5.0.tgz", - "integrity": "sha512-u97AJ6m4PB24/Plms9e9iydRcOaxxrHWkan1px5GeWGJfakY1D/r1DmY1+Typ8zWC/5JbNzH1GYpXrorPymz5g==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.6.0.tgz", + "integrity": "sha512-EotmBz42apYGjqiIV9rDUdptaMptpTn4TdGf3JfjLvFvinSe9BJ6ywU92K9ky+t/b0ghbeTSe9RfqlgLh8f2jA==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.5.0.tgz", - "integrity": "sha512-9cLUmcOZ5FODz3uAhS2C9A1U7xDUTCHVcaNQBYpOd5qCKdKM6ft/ydAfw27vEntuaDgnh5jytOAKsEzEbtoQ1Q==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.5.3.tgz", + "integrity": "sha512-c5mifzHX5mwm5JqMIlURUyp6LEEdKF1a8lmcNRLBo0lD7zpSYPHupa4jHyhJyg9ccLwszLguZJdk2h3ngnXwNw==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.5.0", + "@azure/msal-common": "15.6.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -1197,15 +1177,15 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -1219,9 +1199,9 @@ "license": "MIT" }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "dev": true, "license": "MIT", "engines": { @@ -1229,22 +1209,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1270,14 +1250,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -1287,27 +1267,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", + "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -1344,18 +1324,18 @@ "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "engines": { @@ -1376,43 +1356,43 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1422,22 +1402,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -1445,15 +1425,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1463,23 +1443,23 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -1487,9 +1467,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -1497,9 +1477,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -1507,27 +1487,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.27.1" }, "bin": { "parser": "bin/babel-parser.js" @@ -1537,15 +1517,15 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", - "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz", + "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-decorators": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1555,13 +1535,13 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", - "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1571,13 +1551,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1600,13 +1580,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1616,13 +1596,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1632,17 +1612,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", - "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.27.0", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1652,45 +1632,42 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "dev": true, "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1709,14 +1686,14 @@ } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2226,9 +2203,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -2397,9 +2374,9 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", @@ -3287,9 +3264,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", - "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", + "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", "cpu": [ "arm" ], @@ -3301,9 +3278,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", - "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", + "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", "cpu": [ "arm64" ], @@ -3315,9 +3292,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", - "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", + "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", "cpu": [ "arm64" ], @@ -3329,9 +3306,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", - "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", + "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", "cpu": [ "x64" ], @@ -3343,9 +3320,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", - "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", + "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", "cpu": [ "arm64" ], @@ -3357,9 +3334,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", - "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", + "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", "cpu": [ "x64" ], @@ -3371,9 +3348,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", - "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", + "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", "cpu": [ "arm" ], @@ -3385,9 +3362,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", - "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", + "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", "cpu": [ "arm" ], @@ -3399,9 +3376,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", - "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", + "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", "cpu": [ "arm64" ], @@ -3413,9 +3390,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", - "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", + "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", "cpu": [ "arm64" ], @@ -3427,9 +3404,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", - "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", + "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", "cpu": [ "loong64" ], @@ -3441,9 +3418,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", - "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", + "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", "cpu": [ "ppc64" ], @@ -3455,9 +3432,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", - "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", + "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", "cpu": [ "riscv64" ], @@ -3469,9 +3446,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", - "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", + "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", "cpu": [ "riscv64" ], @@ -3483,9 +3460,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", - "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", + "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", "cpu": [ "s390x" ], @@ -3497,9 +3474,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", - "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", + "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", "cpu": [ "x64" ], @@ -3511,9 +3488,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", - "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", + "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", "cpu": [ "x64" ], @@ -3525,9 +3502,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", - "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", + "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", "cpu": [ "arm64" ], @@ -3539,9 +3516,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", - "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", + "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", "cpu": [ "ia32" ], @@ -3553,9 +3530,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", - "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", + "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", "cpu": [ "x64" ], @@ -3674,13 +3651,13 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz", - "integrity": "sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.3.tgz", + "integrity": "sha512-AqXFf6DXnuRBXy4SoK/n1mfgHaKaq36bmkphmD1KO0nHq6xK/g9KHSW4HEsPQUBCGdIEfuJifGHwxFXPIFay9Q==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3688,16 +3665,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz", - "integrity": "sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.3.tgz", + "integrity": "sha512-N5e7ofiyYDmHxnPnqF8L4KtsbSDwyxFRfDK9bp1d9OyPO4ytRLd0/XxCqi5xVaaqB65v4woW8uey6jND6zxzxQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/types": "^4.3.0", "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.3", "tslib": "^2.6.2" }, "engines": { @@ -3705,18 +3682,18 @@ } }, "node_modules/@smithy/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz", - "integrity": "sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.4.0.tgz", + "integrity": "sha512-dDYISQo7k0Ml/rXlFIjkTmTcQze/LxhtIRAEmZ6HJ/EI0inVxVEVnrUXJ7jPx6ZP0GHUhFm40iQcCgS5apXIXA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^4.0.3", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/middleware-serde": "^4.0.6", + "@smithy/protocol-http": "^5.1.1", + "@smithy/types": "^4.3.0", "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-stream": "^4.2.0", + "@smithy/util-middleware": "^4.0.3", + "@smithy/util-stream": "^4.2.1", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, @@ -3725,16 +3702,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz", - "integrity": "sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.5.tgz", + "integrity": "sha512-saEAGwrIlkb9XxX/m5S5hOtzjoJPEK6Qw2f9pYTbIsMPOFyGSXBBTw95WbOyru8A1vIS2jVCCU1Qhz50QWG3IA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/property-provider": "^4.0.3", + "@smithy/types": "^4.3.0", + "@smithy/url-parser": "^4.0.3", "tslib": "^2.6.2" }, "engines": { @@ -3742,15 +3719,15 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz", - "integrity": "sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.3.tgz", + "integrity": "sha512-yBZwavI31roqTndNI7ONHqesfH01JmjJK6L3uUpZAhyAmr86LN5QiPzfyZGIxQmed8VEK2NRSQT3/JX5V1njfQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.1", + "@smithy/querystring-builder": "^4.0.3", + "@smithy/types": "^4.3.0", "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" }, @@ -3759,13 +3736,13 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz", - "integrity": "sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.3.tgz", + "integrity": "sha512-W5Uhy6v/aYrgtjh9y0YP332gIQcwccQ+EcfWhllL0B9rPae42JngTTUpb8W6wuxaNFzqps4xq5klHckSSOy5fw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -3775,13 +3752,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz", - "integrity": "sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.3.tgz", + "integrity": "sha512-1Bo8Ur1ZGqxvwTqBmv6DZEn0rXtwJGeqiiO2/JFcCtz3nBakOqeXbJBElXJMMzd0ghe8+eB6Dkw98nMYctgizg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3802,14 +3779,14 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz", - "integrity": "sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.3.tgz", + "integrity": "sha512-NE/Zph4BP5u16bzYq2csq9qD0T6UBLeg4AuNrwNJ7Gv9uLYaGEgelZUOdRndGdMGcUfSGvNlXGb2aA2hPCwJ6g==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.1", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3817,19 +3794,19 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz", - "integrity": "sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.7.tgz", + "integrity": "sha512-KDzM7Iajo6K7eIWNNtukykRT4eWwlHjCEsULZUaSfi/SRSBK8BPRqG5FsVfp58lUxcvre8GT8AIPIqndA0ERKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-serde": "^4.0.3", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", - "@smithy/url-parser": "^4.0.2", - "@smithy/util-middleware": "^4.0.2", + "@smithy/core": "^3.4.0", + "@smithy/middleware-serde": "^4.0.6", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/shared-ini-file-loader": "^4.0.3", + "@smithy/types": "^4.3.0", + "@smithy/url-parser": "^4.0.3", + "@smithy/util-middleware": "^4.0.3", "tslib": "^2.6.2" }, "engines": { @@ -3837,19 +3814,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz", - "integrity": "sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.8.tgz", + "integrity": "sha512-e2OtQgFzzlSG0uCjcJmi02QuFSRTrpT11Eh2EcqqDFy7DYriteHZJkkf+4AsxsrGDugAtPFcWBz1aq06sSX5fQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/service-error-classification": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", - "@smithy/util-middleware": "^4.0.2", - "@smithy/util-retry": "^4.0.2", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/protocol-http": "^5.1.1", + "@smithy/service-error-classification": "^4.0.4", + "@smithy/smithy-client": "^4.3.0", + "@smithy/types": "^4.3.0", + "@smithy/util-middleware": "^4.0.3", + "@smithy/util-retry": "^4.0.4", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -3872,13 +3849,14 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz", - "integrity": "sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.6.tgz", + "integrity": "sha512-YECyl7uNII+jCr/9qEmCu8xYL79cU0fqjo0qxpcVIU18dAPHam/iYwcknAu4Jiyw1uN+sAx7/SMf/Kmef/Jjsg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.1", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3886,13 +3864,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz", - "integrity": "sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.3.tgz", + "integrity": "sha512-baeV7t4jQfQtFxBADFmnhmqBmqR38dNU5cvEgHcMK/Kp3D3bEI0CouoX2Sr/rGuntR+Eg0IjXdxnGGTc6SbIkw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3900,15 +3878,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz", - "integrity": "sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.2.tgz", + "integrity": "sha512-SUvNup8iU1v7fmM8XPk+27m36udmGCfSz+VZP5Gb0aJ3Ne0X28K/25gnsrg3X1rWlhcnhzNUUysKW/Ied46ivQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/shared-ini-file-loader": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.3", + "@smithy/shared-ini-file-loader": "^4.0.3", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3916,16 +3894,16 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz", - "integrity": "sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.5.tgz", + "integrity": "sha512-T7QglZC1vS7SPT44/1qSIAQEx5bFKb3LfO6zw/o4Xzt1eC5HNoH1TkS4lMYA9cWFbacUhx4hRl/blLun4EOCkg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/abort-controller": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/querystring-builder": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/abort-controller": "^4.0.3", + "@smithy/protocol-http": "^5.1.1", + "@smithy/querystring-builder": "^4.0.3", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3933,13 +3911,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz", - "integrity": "sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.3.tgz", + "integrity": "sha512-Wcn17QNdawJZcZZPBuMuzyBENVi1AXl4TdE0jvzo4vWX2x5df/oMlmr/9M5XAAC6+yae4kWZlOYIsNsgDrMU9A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3947,13 +3925,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz", - "integrity": "sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.1.tgz", + "integrity": "sha512-Vsay2mzq05DwNi9jK01yCFtfvu9HimmgC7a4HTs7lhX12Sx8aWsH0mfz6q/02yspSp+lOB+Q2HJwi4IV2GKz7A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3961,13 +3939,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz", - "integrity": "sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.3.tgz", + "integrity": "sha512-UUzIWMVfPmDZcOutk2/r1vURZqavvQW0OHvgsyNV0cKupChvqg+/NKPRMaMEe+i8tP96IthMFeZOZWpV+E4RAw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "@smithy/util-uri-escape": "^4.0.0", "tslib": "^2.6.2" }, @@ -3976,13 +3954,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz", - "integrity": "sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.3.tgz", + "integrity": "sha512-K5M4ZJQpFCblOJ5Oyw7diICpFg1qhhR47m2/5Ef1PhGE19RaIZf50tjYFrxa6usqcuXyTiFPGo4d1geZdH4YcQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -3990,26 +3968,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz", - "integrity": "sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.4.tgz", + "integrity": "sha512-W5ScbQ1bTzgH91kNEE2CvOzM4gXlDOqdow4m8vMFSIXCel2scbHwjflpVNnC60Y3F1m5i7w2gQg9lSnR+JsJAA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0" + "@smithy/types": "^4.3.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz", - "integrity": "sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.3.tgz", + "integrity": "sha512-vHwlrqhZGIoLwaH8vvIjpHnloShqdJ7SUPNM2EQtEox+yEDFTVQ7E+DLZ+6OhnYEgFUwPByJyz6UZaOu2tny6A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4017,17 +3995,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz", - "integrity": "sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.1.tgz", + "integrity": "sha512-zy8Repr5zvT0ja+Tf5wjV/Ba6vRrhdiDcp/ww6cvqYbSEudIkziDe3uppNRlFoCViyJXdPnLcwyZdDLA4CHzSg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@smithy/is-array-buffer": "^4.0.0", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", + "@smithy/protocol-http": "^5.1.1", + "@smithy/types": "^4.3.0", "@smithy/util-hex-encoding": "^4.0.0", - "@smithy/util-middleware": "^4.0.2", + "@smithy/util-middleware": "^4.0.3", "@smithy/util-uri-escape": "^4.0.0", "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" @@ -4037,18 +4015,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz", - "integrity": "sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.3.0.tgz", + "integrity": "sha512-DNsRA38pN6tYHUjebmwD9e4KcgqTLldYQb2gC6K+oxXYdCTxPn6wV9+FvOa6wrU2FQEnGJoi+3GULzOTKck/tg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/core": "^3.2.0", - "@smithy/middleware-endpoint": "^4.1.0", - "@smithy/middleware-stack": "^4.0.2", - "@smithy/protocol-http": "^5.1.0", - "@smithy/types": "^4.2.0", - "@smithy/util-stream": "^4.2.0", + "@smithy/core": "^3.4.0", + "@smithy/middleware-endpoint": "^4.1.7", + "@smithy/middleware-stack": "^4.0.3", + "@smithy/protocol-http": "^5.1.1", + "@smithy/types": "^4.3.0", + "@smithy/util-stream": "^4.2.1", "tslib": "^2.6.2" }, "engines": { @@ -4056,9 +4034,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", - "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.0.tgz", + "integrity": "sha512-+1iaIQHthDh9yaLhRzaoQxRk+l9xlk+JjMFxGRhNLz+m9vKOkjNeU8QuB4w3xvzHyVR/BVlp/4AXDHjoRIkfgQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -4069,14 +4047,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz", - "integrity": "sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.3.tgz", + "integrity": "sha512-n5/DnosDu/tweOqUUNtUbu7eRIR4J/Wz9nL7V5kFYQQVb8VYdj7a4G5NJHCw6o21ul7CvZoJkOpdTnsQDLT0tQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/querystring-parser": "^4.0.3", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4152,15 +4130,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz", - "integrity": "sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==", + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.15.tgz", + "integrity": "sha512-bJJ/B8owQbHAflatSq92f9OcV8858DJBQF1Y3GRjB8psLyUjbISywszYPFw16beREHO/C3I3taW4VGH+tOuwrQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/property-provider": "^4.0.3", + "@smithy/smithy-client": "^4.3.0", + "@smithy/types": "^4.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -4169,18 +4147,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz", - "integrity": "sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==", + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.15.tgz", + "integrity": "sha512-8CUrEW2Ni5q+NmYkj8wsgkfqoP7l4ZquptFbq92yQE66xevc4SxqP2zH6tMtN158kgBqBDsZ+qlrRwXWOjCR8A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/config-resolver": "^4.1.0", - "@smithy/credential-provider-imds": "^4.0.2", - "@smithy/node-config-provider": "^4.0.2", - "@smithy/property-provider": "^4.0.2", - "@smithy/smithy-client": "^4.2.0", - "@smithy/types": "^4.2.0", + "@smithy/config-resolver": "^4.1.3", + "@smithy/credential-provider-imds": "^4.0.5", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/property-provider": "^4.0.3", + "@smithy/smithy-client": "^4.3.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4188,14 +4166,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz", - "integrity": "sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.5.tgz", + "integrity": "sha512-PjDpqLk24/vAl340tmtCA++Q01GRRNH9cwL9qh46NspAX9S+IQVcK+GOzPt0GLJ6KYGyn8uOgo2kvJhiThclJw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/node-config-provider": "^4.1.2", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4216,13 +4194,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz", - "integrity": "sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.3.tgz", + "integrity": "sha512-iIsC6qZXxkD7V3BzTw3b1uK8RVC1M8WvwNxK1PKrH9FnxntCd30CSunXjL/8iJBE8Z0J14r2P69njwIpRG4FBQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^4.2.0", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4230,14 +4208,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz", - "integrity": "sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.4.tgz", + "integrity": "sha512-Aoqr9W2jDYGrI6OxljN8VmLDQIGO4VdMAUKMf9RGqLG8hn6or+K41NEy1Y5dtum9q8F7e0obYAuKl2mt/GnpZg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^4.0.2", - "@smithy/types": "^4.2.0", + "@smithy/service-error-classification": "^4.0.4", + "@smithy/types": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -4245,15 +4223,15 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz", - "integrity": "sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.1.tgz", + "integrity": "sha512-W3IR0x5DY6iVtjj5p902oNhD+Bz7vs5S+p6tppbPa509rV9BdeXZjGuRSCtVEad9FA0Mba+tNUtUmtnSI1nwUw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.0.2", - "@smithy/node-http-handler": "^4.0.4", - "@smithy/types": "^4.2.0", + "@smithy/fetch-http-handler": "^5.0.3", + "@smithy/node-http-handler": "^4.0.5", + "@smithy/types": "^4.3.0", "@smithy/util-base64": "^4.0.0", "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-hex-encoding": "^4.0.0", @@ -4316,23 +4294,23 @@ "license": "MIT" }, "node_modules/@testcontainers/hivemq": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/@testcontainers/hivemq/-/hivemq-10.24.2.tgz", - "integrity": "sha512-5HXVaC4NXi5SSj3BpW3O7jNoPp6Z7A4ZasdZSLwgq2Ak6+9vZUJc8T1av2FcxHPr5V5B4jflyyJdsIgSTZGYcw==", + "version": "10.27.0", + "resolved": "https://registry.npmjs.org/@testcontainers/hivemq/-/hivemq-10.27.0.tgz", + "integrity": "sha512-b0GvckCama0g7CybXcSnym0PdHZSoJJhZa/OuVHbjV7oFEuqRa8POfP8DHP1vMV5j6RnPnH94Tdaw+20ccSDEg==", "dev": true, "license": "MIT", "dependencies": { - "testcontainers": "^10.24.2" + "testcontainers": "^10.27.0" } }, "node_modules/@testcontainers/rabbitmq": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/@testcontainers/rabbitmq/-/rabbitmq-10.24.2.tgz", - "integrity": "sha512-2Ks5dY22kfgyK6JezF0koHZfEilD5l5T6ntth4VhqHK8MSFvk7Jve8Y6m4kdSth7u+nHH7L++zkROCBRA26r/A==", + "version": "10.27.0", + "resolved": "https://registry.npmjs.org/@testcontainers/rabbitmq/-/rabbitmq-10.27.0.tgz", + "integrity": "sha512-IxbllNUDEX/zWUqmVnKfb6Xuw8f5S9byLCEiJhTr5miOnDPXFKHA7WTMKKb2YBO+NxN4CfMywVxGb2Bv775EQg==", "dev": true, "license": "MIT", "dependencies": { - "testcontainers": "^10.24.2" + "testcontainers": "^10.27.0" } }, "node_modules/@tootallnate/once": { @@ -4414,9 +4392,9 @@ } }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.18", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz", + "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -4434,9 +4412,9 @@ } }, "node_modules/@types/dockerode": { - "version": "3.3.37", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.37.tgz", - "integrity": "sha512-r+IoKpE5MLKaeD8CvoEh39ckWMLHR/+WBMoRQxrkL+apJqEWLMhBHh+93KIfyPWGd6gK7Q21jpoULKgNoRI0YA==", + "version": "3.3.39", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.39.tgz", + "integrity": "sha512-uMPmxehH6ofeYjaslASPtjvyH8FRJdM9fZ+hjhGzL4Jq3bGjr9D7TKmp9soSwgFncNk0HOwmyBxjqOb3ikjjsA==", "dev": true, "license": "MIT", "dependencies": { @@ -4453,9 +4431,9 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz", + "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==", "license": "MIT", "dependencies": { "@types/body-parser": "*", @@ -4555,9 +4533,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", - "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", + "version": "20.17.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.50.tgz", + "integrity": "sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -4571,9 +4549,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -4583,21 +4561,14 @@ "license": "MIT" }, "node_modules/@types/readable-stream": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", - "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.19.tgz", + "integrity": "sha512-6Tgd3lMocKwOul/kwAAgSebkhdMCLhRvcJ6CKHA6wdql2qNIwK6hw3Y4PZQxn9HcJogoC/1ZOmkFM7OZKH/VrA==", "license": "MIT", "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" + "@types/node": "*" } }, - "node_modules/@types/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/@types/responselike": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", @@ -4656,9 +4627,9 @@ } }, "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", + "version": "18.19.103", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.103.tgz", + "integrity": "sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==", "dev": true, "license": "MIT", "dependencies": { @@ -4894,6 +4865,20 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.2.tgz", + "integrity": "sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz", @@ -4942,9 +4927,9 @@ } }, "node_modules/@vue/babel-plugin-jsx/node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", + "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==", "dev": true, "license": "MIT" }, @@ -4969,63 +4954,63 @@ } }, "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz", + "integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.27.2", + "@vue/shared": "3.5.14", "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" + "source-map-js": "^1.2.1" } }, "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz", + "integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-core": "3.5.14", + "@vue/shared": "3.5.14" } }, "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz", + "integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.27.2", + "@vue/compiler-core": "3.5.14", + "@vue/compiler-dom": "3.5.14", + "@vue/compiler-ssr": "3.5.14", + "@vue/shared": "3.5.14", "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" + "magic-string": "^0.30.17", + "postcss": "^8.5.3", + "source-map-js": "^1.2.1" } }, "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz", + "integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-dom": "3.5.14", + "@vue/shared": "3.5.14" } }, "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", + "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==", "dev": true, "license": "MIT" }, @@ -5091,18 +5076,18 @@ "license": "MIT" }, "node_modules/@vue/devtools-core": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.2.tgz", - "integrity": "sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.7.6.tgz", + "integrity": "sha512-ghVX3zjKPtSHu94Xs03giRIeIWlb9M+gvDRVpIZ/cRIxKHdW6HE/sm1PT3rUYS3aV92CazirT93ne+7IOvGUWg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-kit": "^7.7.2", - "@vue/devtools-shared": "^7.7.2", + "@vue/devtools-kit": "^7.7.6", + "@vue/devtools-shared": "^7.7.6", "mitt": "^3.0.1", - "nanoid": "^5.0.9", - "pathe": "^2.0.2", - "vite-hot-client": "^0.2.4" + "nanoid": "^5.1.0", + "pathe": "^2.0.3", + "vite-hot-client": "^2.0.4" }, "peerDependencies": { "vue": "^3.0.0" @@ -5128,25 +5113,25 @@ } }, "node_modules/@vue/devtools-kit": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", - "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz", + "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-shared": "^7.7.2", - "birpc": "^0.2.19", + "@vue/devtools-shared": "^7.7.6", + "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", - "superjson": "^2.2.1" + "superjson": "^2.2.2" } }, "node_modules/@vue/devtools-shared": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", - "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz", + "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==", "dev": true, "license": "MIT", "dependencies": { @@ -5874,13 +5859,6 @@ "hasInstallScript": true, "license": "MIT" }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true, - "license": "MIT" - }, "node_modules/badge-maker": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/badge-maker/-/badge-maker-3.3.1.tgz", @@ -5913,9 +5891,9 @@ "optional": true }, "node_modules/bare-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz", - "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -6110,9 +6088,9 @@ "license": "MIT" }, "node_modules/birpc": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", - "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", + "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", "dev": true, "license": "MIT", "funding": { @@ -6246,9 +6224,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -6266,10 +6244,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -6589,9 +6567,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001713", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", - "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "dev": true, "funding": [ { @@ -6730,9 +6708,9 @@ } }, "node_modules/cheerio/node_modules/undici": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", - "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "license": "MIT", "engines": { "node": ">=18.17" @@ -7519,9 +7497,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7766,9 +7744,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -7837,9 +7815,9 @@ } }, "node_modules/dockerode": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.5.tgz", - "integrity": "sha512-ZPmKSr1k1571Mrh7oIBS/j0AqAccoecY2yH420ni5j1KyNMgnoTh4Nu4FWunh0HZIJmRSmSysJjBIpa/zyWUEA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.6.tgz", + "integrity": "sha512-FbVf3Z8fY/kALB9s+P9epCpWhfi/r0N2DgYYcYpsAUlaTxPjdsitsFobnltb+lyCgAIvf9C+4PSWlTnHlJMf1w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7856,9 +7834,9 @@ } }, "node_modules/dockerode/node_modules/@grpc/grpc-js": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.2.tgz", - "integrity": "sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8000,9 +7978,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz", - "integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", "dev": true, "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { @@ -8080,9 +8058,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.136", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", - "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", + "version": "1.5.155", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", + "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", "dev": true, "license": "ISC" }, @@ -8310,9 +8288,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.23.10", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz", + "integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==", "dev": true, "license": "MIT", "dependencies": { @@ -8320,18 +8298,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -8347,13 +8325,13 @@ "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", @@ -8366,7 +8344,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -8802,9 +8780,9 @@ } }, "node_modules/execa": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", - "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.3.tgz", + "integrity": "sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -10263,9 +10241,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-cookie-agent": { @@ -11352,12 +11330,12 @@ "license": "MIT" }, "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } @@ -11602,9 +11580,9 @@ "license": "MIT" }, "node_modules/liquidjs": { - "version": "10.21.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.0.tgz", - "integrity": "sha512-DouqxNU2jfoZzb1LinVjOc/f6ssitGIxiDJT+kEKyYqPSSSd+WmGOAhtWbVm1/n75svu4aQ+FyQ3ctd3wh1bbw==", + "version": "10.21.1", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.1.tgz", + "integrity": "sha512-NZXmCwv3RG5nire3fmIn9HsOyJX3vo+ptp0yaXUHAMzSNBhx74Hm+dAGJvscUA6lNqbLuYfXgNavRQ9UbUJhQQ==", "license": "MIT", "dependencies": { "commander": "^10.0.0" @@ -11713,9 +11691,9 @@ "license": "MIT" }, "node_modules/long": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", - "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0" }, "node_modules/lowercase-keys": { @@ -12529,9 +12507,9 @@ } }, "node_modules/net-snmp": { - "version": "3.20.0", - "resolved": "https://registry.npmjs.org/net-snmp/-/net-snmp-3.20.0.tgz", - "integrity": "sha512-4Cp8ODkzgVXjUrIQFfL9Vo6qVsz+8OuAjUvkRGsSZOKSpoxpy9YWjVgNs+/a9N4Hd9MilIy90Zhw3EZlUUZB6A==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/net-snmp/-/net-snmp-3.22.0.tgz", + "integrity": "sha512-85yuUoPnAIteMluQhGuynY/pbFuFOwsTkl3elNQ3rUxgsC3WqbVB2ghLvgCUZIEO2knCFU4dWrZExf3Q4Vu9vQ==", "license": "MIT", "dependencies": { "asn1-ber": "^1.2.1", @@ -12779,9 +12757,9 @@ } }, "node_modules/nostr-tools": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.12.0.tgz", - "integrity": "sha512-pUWEb020gTvt1XZvTa8AKNIHWFapjsv2NKyk43Ez2nnvz6WSXsrTFE0XtkNLSRBjPn6EpxumKeNiVzLz74jNSA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.13.0.tgz", + "integrity": "sha512-A1arGsvpULqVK0NmZQqK1imwaCiPm8gcG/lo+cTax2NbNqBEYsuplbqAFdVqcGHEopmkByYbTwF76x25+oEbew==", "license": "Unlicense", "dependencies": { "@noble/ciphers": "^0.5.1", @@ -13172,12 +13150,12 @@ } }, "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -13208,6 +13186,18 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13351,9 +13341,9 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.5.tgz", + "integrity": "sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==", "license": "MIT", "optional": true }, @@ -13373,18 +13363,18 @@ } }, "node_modules/pg-pool": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz", - "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.0.tgz", + "integrity": "sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz", - "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.0.tgz", + "integrity": "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==", "license": "MIT" }, "node_modules/pg-types": { @@ -14542,9 +14532,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true, "license": "MIT" }, @@ -14728,9 +14718,9 @@ } }, "node_modules/rollup": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", - "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", + "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", "dev": true, "license": "MIT", "dependencies": { @@ -14744,26 +14734,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.39.0", - "@rollup/rollup-android-arm64": "4.39.0", - "@rollup/rollup-darwin-arm64": "4.39.0", - "@rollup/rollup-darwin-x64": "4.39.0", - "@rollup/rollup-freebsd-arm64": "4.39.0", - "@rollup/rollup-freebsd-x64": "4.39.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", - "@rollup/rollup-linux-arm-musleabihf": "4.39.0", - "@rollup/rollup-linux-arm64-gnu": "4.39.0", - "@rollup/rollup-linux-arm64-musl": "4.39.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-musl": "4.39.0", - "@rollup/rollup-linux-s390x-gnu": "4.39.0", - "@rollup/rollup-linux-x64-gnu": "4.39.0", - "@rollup/rollup-linux-x64-musl": "4.39.0", - "@rollup/rollup-win32-arm64-msvc": "4.39.0", - "@rollup/rollup-win32-ia32-msvc": "4.39.0", - "@rollup/rollup-win32-x64-msvc": "4.39.0", + "@rollup/rollup-android-arm-eabi": "4.41.0", + "@rollup/rollup-android-arm64": "4.41.0", + "@rollup/rollup-darwin-arm64": "4.41.0", + "@rollup/rollup-darwin-x64": "4.41.0", + "@rollup/rollup-freebsd-arm64": "4.41.0", + "@rollup/rollup-freebsd-x64": "4.41.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", + "@rollup/rollup-linux-arm-musleabihf": "4.41.0", + "@rollup/rollup-linux-arm64-gnu": "4.41.0", + "@rollup/rollup-linux-arm64-musl": "4.41.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-gnu": "4.41.0", + "@rollup/rollup-linux-riscv64-musl": "4.41.0", + "@rollup/rollup-linux-s390x-gnu": "4.41.0", + "@rollup/rollup-linux-x64-gnu": "4.41.0", + "@rollup/rollup-linux-x64-musl": "4.41.0", + "@rollup/rollup-win32-arm64-msvc": "4.41.0", + "@rollup/rollup-win32-ia32-msvc": "4.41.0", + "@rollup/rollup-win32-x64-msvc": "4.41.0", "fsevents": "~2.3.2" } }, @@ -15713,16 +15703,6 @@ "node": ">= 0.8" } }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "license": "MIT", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -16463,9 +16443,9 @@ } }, "node_modules/testcontainers": { - "version": "10.24.2", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.24.2.tgz", - "integrity": "sha512-Don3EXEQuSw14+nFG9pj48fL9ck/jXDfR9Rb0K3acOyn/gg97+gsnfZaLzpdejl9GcPJVKxACNRe3SYVC2uWqg==", + "version": "10.27.0", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.27.0.tgz", + "integrity": "sha512-Y1A2OerjRKUDZ00tAbn1hHHHVeEH+jRgg7a41AF6mLUZPlBIkL8stSQkEzziFp1IK3Id9hPKu7Iq7rIpavkYaw==", "dev": true, "license": "MIT", "dependencies": { @@ -16483,7 +16463,7 @@ "ssh-remote-port-forward": "^1.0.4", "tar-fs": "^3.0.7", "tmp": "^0.2.3", - "undici": "^5.28.5" + "undici": "^5.29.0" } }, "node_modules/text-decoder": { @@ -17036,9 +17016,9 @@ } }, "node_modules/vite": { - "version": "5.4.18", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", - "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, "license": "MIT", "dependencies": { @@ -17096,9 +17076,9 @@ } }, "node_modules/vite-hot-client": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", - "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.0.4.tgz", + "integrity": "sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==", "dev": true, "license": "MIT", "funding": { @@ -17200,9 +17180,9 @@ } }, "node_modules/vite-plugin-inspect/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "dev": true, "license": "MIT", "dependencies": { @@ -17229,17 +17209,17 @@ } }, "node_modules/vite-plugin-vue-devtools": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.2.tgz", - "integrity": "sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.7.6.tgz", + "integrity": "sha512-L7nPVM5a7lgit/Z+36iwoqHOaP3wxqVi1UvaDJwGCfblS9Y6vNqf32ILlzJVH9c47aHu90BhDXeZc+rgzHRHcw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-core": "^7.7.2", - "@vue/devtools-kit": "^7.7.2", - "@vue/devtools-shared": "^7.7.2", - "execa": "^9.5.1", - "sirv": "^3.0.0", + "@vue/devtools-core": "^7.7.6", + "@vue/devtools-kit": "^7.7.6", + "@vue/devtools-shared": "^7.7.6", + "execa": "^9.5.2", + "sirv": "^3.0.1", "vite-plugin-inspect": "0.8.9", "vite-plugin-vue-inspector": "^5.3.1" }, @@ -17527,9 +17507,9 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "license": "MIT", "dependencies": { @@ -17805,9 +17785,9 @@ } }, "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -17899,16 +17879,16 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { From 839ead80cc998786bf4024d41d28e9a0901bcf5a Mon Sep 17 00:00:00 2001 From: Filippo Date: Sat, 24 May 2025 02:57:39 +0200 Subject: [PATCH 063/133] Enhanced ping monitor with advanced options (count, timeout, numeric) (#5588) Co-authored-by: Frank Elsinga --- .../2025-03-04-0000-ping-advanced-options.js | 24 +++ server/model/monitor.js | 48 ++++- server/server.js | 5 + server/util-server.js | 58 ++++-- src/lang/en.json | 11 +- src/pages/EditMonitor.vue | 165 ++++++++++++++++-- src/util.js | 42 ++++- src/util.ts | 20 +++ 8 files changed, 332 insertions(+), 41 deletions(-) create mode 100644 db/knex_migrations/2025-03-04-0000-ping-advanced-options.js diff --git a/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js b/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js new file mode 100644 index 000000000..e8bd03e53 --- /dev/null +++ b/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js @@ -0,0 +1,24 @@ +/* SQL: +ALTER TABLE monitor ADD ping_count INTEGER default 1 not null; +ALTER TABLE monitor ADD ping_numeric BOOLEAN default true not null; +ALTER TABLE monitor ADD ping_per_request_timeout INTEGER default 2 not null; +*/ +exports.up = function (knex) { + // Add new columns to table monitor + return knex.schema + .alterTable("monitor", function (table) { + table.integer("ping_count").defaultTo(1).notNullable(); + table.boolean("ping_numeric").defaultTo(true).notNullable(); + table.integer("ping_per_request_timeout").defaultTo(2).notNullable(); + }); + +}; + +exports.down = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.dropColumn("ping_count"); + table.dropColumn("ping_numeric"); + table.dropColumn("ping_per_request_timeout"); + }); +}; diff --git a/server/model/monitor.js b/server/model/monitor.js index 08d666b78..741fb940e 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -2,7 +2,11 @@ const dayjs = require("dayjs"); const axios = require("axios"); const { Prometheus } = require("../prometheus"); const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, - SQL_DATETIME_FORMAT, evaluateJsonQuery + SQL_DATETIME_FORMAT, evaluateJsonQuery, + PING_PACKET_SIZE_MIN, PING_PACKET_SIZE_MAX, PING_PACKET_SIZE_DEFAULT, + PING_GLOBAL_TIMEOUT_MIN, PING_GLOBAL_TIMEOUT_MAX, PING_GLOBAL_TIMEOUT_DEFAULT, + PING_COUNT_MIN, PING_COUNT_MAX, PING_COUNT_DEFAULT, + PING_PER_REQUEST_TIMEOUT_MIN, PING_PER_REQUEST_TIMEOUT_MAX, PING_PER_REQUEST_TIMEOUT_DEFAULT } = require("../../src/util"); const { tcping, ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, setSetting, httpNtlm, radius, grpcQuery, redisPingAsync, kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal @@ -156,6 +160,11 @@ class Monitor extends BeanModel { smtpSecurity: this.smtpSecurity, rabbitmqNodes: JSON.parse(this.rabbitmqNodes), conditions: JSON.parse(this.conditions), + + // ping advanced options + ping_numeric: this.isPingNumeric(), + ping_count: this.ping_count, + ping_per_request_timeout: this.ping_per_request_timeout, }; if (includeSensitiveData) { @@ -248,6 +257,14 @@ class Monitor extends BeanModel { return Boolean(this.expiryNotification); } + /** + * Check if ping should use numeric output only + * @returns {boolean} True if IP addresses will be output instead of symbolic hostnames + */ + isPingNumeric() { + return Boolean(this.ping_numeric); + } + /** * Parse to boolean * @returns {boolean} Should TLS errors be ignored? @@ -585,7 +602,7 @@ class Monitor extends BeanModel { bean.status = UP; } else if (this.type === "ping") { - bean.ping = await ping(this.hostname, this.packetSize); + bean.ping = await ping(this.hostname, this.ping_count, "", this.ping_numeric, this.packetSize, this.timeout, this.ping_per_request_timeout); bean.msg = ""; bean.status = UP; } else if (this.type === "push") { // Type: Push @@ -657,7 +674,7 @@ class Monitor extends BeanModel { bean.msg = res.data.response.servers[0].name; try { - bean.ping = await ping(this.hostname, this.packetSize); + bean.ping = await ping(this.hostname, PING_COUNT_DEFAULT, "", true, this.packetSize, PING_GLOBAL_TIMEOUT_DEFAULT, PING_PER_REQUEST_TIMEOUT_DEFAULT); } catch (_) { } } else { throw new Error("Server not found on Steam"); @@ -1469,6 +1486,31 @@ class Monitor extends BeanModel { if (this.interval < MIN_INTERVAL_SECOND) { throw new Error(`Interval cannot be less than ${MIN_INTERVAL_SECOND} seconds`); } + + if (this.type === "ping") { + // ping parameters validation + if (this.packetSize && (this.packetSize < PING_PACKET_SIZE_MIN || this.packetSize > PING_PACKET_SIZE_MAX)) { + throw new Error(`Packet size must be between ${PING_PACKET_SIZE_MIN} and ${PING_PACKET_SIZE_MAX} (default: ${PING_PACKET_SIZE_DEFAULT})`); + } + + if (this.ping_per_request_timeout && (this.ping_per_request_timeout < PING_PER_REQUEST_TIMEOUT_MIN || this.ping_per_request_timeout > PING_PER_REQUEST_TIMEOUT_MAX)) { + throw new Error(`Per-ping timeout must be between ${PING_PER_REQUEST_TIMEOUT_MIN} and ${PING_PER_REQUEST_TIMEOUT_MAX} seconds (default: ${PING_PER_REQUEST_TIMEOUT_DEFAULT})`); + } + + if (this.ping_count && (this.ping_count < PING_COUNT_MIN || this.ping_count > PING_COUNT_MAX)) { + throw new Error(`Echo requests count must be between ${PING_COUNT_MIN} and ${PING_COUNT_MAX} (default: ${PING_COUNT_DEFAULT})`); + } + + if (this.timeout) { + const pingGlobalTimeout = Math.round(Number(this.timeout)); + + if (pingGlobalTimeout < this.ping_per_request_timeout || pingGlobalTimeout < PING_GLOBAL_TIMEOUT_MIN || pingGlobalTimeout > PING_GLOBAL_TIMEOUT_MAX) { + throw new Error(`Timeout must be between ${PING_GLOBAL_TIMEOUT_MIN} and ${PING_GLOBAL_TIMEOUT_MAX} seconds (default: ${PING_GLOBAL_TIMEOUT_DEFAULT})`); + } + + this.timeout = pingGlobalTimeout; + } + } } /** diff --git a/server/server.js b/server/server.js index 476ef644b..cba02174d 100644 --- a/server/server.js +++ b/server/server.js @@ -876,6 +876,11 @@ let needSetup = false; bean.rabbitmqPassword = monitor.rabbitmqPassword; bean.conditions = JSON.stringify(monitor.conditions); + // ping advanced options + bean.ping_numeric = monitor.ping_numeric; + bean.ping_count = monitor.ping_count; + bean.ping_per_request_timeout = monitor.ping_per_request_timeout; + bean.validate(); await R.store(bean); diff --git a/server/util-server.js b/server/util-server.js index 5ebc62ac5..08df728ed 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -1,7 +1,11 @@ const tcpp = require("tcp-ping"); const ping = require("@louislam/ping"); const { R } = require("redbean-node"); -const { log, genSecret, badgeConstants } = require("../src/util"); +const { + log, genSecret, badgeConstants, + PING_PACKET_SIZE_DEFAULT, PING_GLOBAL_TIMEOUT_DEFAULT, + PING_COUNT_DEFAULT, PING_PER_REQUEST_TIMEOUT_DEFAULT +} = require("../src/util"); const passwordHash = require("./password-hash"); const { Resolver } = require("dns"); const iconv = require("iconv-lite"); @@ -118,20 +122,33 @@ exports.tcping = function (hostname, port) { /** * Ping the specified machine - * @param {string} hostname Hostname / address of machine - * @param {number} size Size of packet to send + * @param {string} destAddr Hostname / IP address of machine to ping + * @param {number} count Number of packets to send before stopping + * @param {string} sourceAddr Source address for sending/receiving echo requests + * @param {boolean} numeric If true, IP addresses will be output instead of symbolic hostnames + * @param {number} size Size (in bytes) of echo request to send + * @param {number} deadline Maximum time in seconds before ping stops, regardless of packets sent + * @param {number} timeout Maximum time in seconds to wait for each response * @returns {Promise} Time for ping in ms rounded to nearest integer */ -exports.ping = async (hostname, size = 56) => { +exports.ping = async ( + destAddr, + count = PING_COUNT_DEFAULT, + sourceAddr = "", + numeric = true, + size = PING_PACKET_SIZE_DEFAULT, + deadline = PING_GLOBAL_TIMEOUT_DEFAULT, + timeout = PING_PER_REQUEST_TIMEOUT_DEFAULT, +) => { try { - return await exports.pingAsync(hostname, false, size); + return await exports.pingAsync(destAddr, false, count, sourceAddr, numeric, size, deadline, timeout); } catch (e) { // If the host cannot be resolved, try again with ipv6 log.debug("ping", "IPv6 error message: " + e.message); // As node-ping does not report a specific error for this, try again if it is an empty message with ipv6 no matter what. if (!e.message) { - return await exports.pingAsync(hostname, true, size); + return await exports.pingAsync(destAddr, true, count, sourceAddr, numeric, size, deadline, timeout); } else { throw e; } @@ -140,18 +157,35 @@ exports.ping = async (hostname, size = 56) => { /** * Ping the specified machine - * @param {string} hostname Hostname / address of machine to ping + * @param {string} destAddr Hostname / IP address of machine to ping * @param {boolean} ipv6 Should IPv6 be used? - * @param {number} size Size of ping packet to send + * @param {number} count Number of packets to send before stopping + * @param {string} sourceAddr Source address for sending/receiving echo requests + * @param {boolean} numeric If true, IP addresses will be output instead of symbolic hostnames + * @param {number} size Size (in bytes) of echo request to send + * @param {number} deadline Maximum time in seconds before ping stops, regardless of packets sent + * @param {number} timeout Maximum time in seconds to wait for each response * @returns {Promise} Time for ping in ms rounded to nearest integer */ -exports.pingAsync = function (hostname, ipv6 = false, size = 56) { +exports.pingAsync = function ( + destAddr, + ipv6 = false, + count = PING_COUNT_DEFAULT, + sourceAddr = "", + numeric = true, + size = PING_PACKET_SIZE_DEFAULT, + deadline = PING_GLOBAL_TIMEOUT_DEFAULT, + timeout = PING_PER_REQUEST_TIMEOUT_DEFAULT, +) { return new Promise((resolve, reject) => { - ping.promise.probe(hostname, { + ping.promise.probe(destAddr, { v6: ipv6, - min_reply: 1, - deadline: 10, + min_reply: count, + sourceAddr: sourceAddr, + numeric: numeric, packetSize: size, + deadline: deadline, + timeout: timeout }).then((res) => { // If ping failed, it will set field to unknown if (res.alive) { diff --git a/src/lang/en.json b/src/lang/en.json index c8555bf12..d13cf3ae6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1074,7 +1074,16 @@ "rabbitmqHelpText": "To use the monitor, you will need to enable the Management Plugin in your RabbitMQ setup. For more information, please consult the {rabitmq_documentation}.", "SendGrid API Key": "SendGrid API Key", "Separate multiple email addresses with commas": "Separate multiple email addresses with commas", - "smtpHelpText": "“SMTPS” tests that SMTP/TLS is working; “Ignore TLS” connects over plaintext; “STARTTLS” connects, issues a STARTTLS command and verifies the server certificate. None of these send an email.", + "pingCountLabel": "Max Packets", + "pingCountDescription": "Number of packets to send before stopping", + "pingNumericLabel": "Numeric Output", + "pingNumericDescription": "If checked, IP addresses will be output instead of symbolic hostnames", + "pingGlobalTimeoutLabel": "Global Timeout", + "pingGlobalTimeoutDescription": "Total time in seconds before ping stops, regardless of packets sent", + "pingPerRequestTimeoutLabel": "Per-Ping Timeout", + "pingPerRequestTimeoutDescription": "This is the maximum waiting time (in seconds) before considering a single ping packet lost", + "pingIntervalAdjustedInfo": "Interval adjusted based on packet count, global timeout and per-ping timeout", + "smtpHelpText": "'SMTPS' tests that SMTP/TLS is working; 'Ignore TLS' connects over plaintext; 'STARTTLS' connects, issues a STARTTLS command and verifies the server certificate. None of these send an email.", "Custom URL": "Custom URL", "customUrlDescription": "Will be used as the clickable URL instead of the monitor's one.", "OneChatAccessToken": "OneChat Access Token", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index bf4e6889d..95b29aa58 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -610,10 +610,14 @@
- -
- - + +
+ + +
{{ $t("pingGlobalTimeoutDescription") }}
@@ -675,10 +679,39 @@
- + +
+ + +
+ {{ $t("pingCountDescription") }} +
+
+ + +
+ + +
+ {{ $t("pingNumericDescription") }} +
+
+ +
- + +
+ + +
+ + +
+ {{ $t("pingPerRequestTimeoutDescription") }} +
@@ -1075,7 +1108,13 @@ import DockerHostDialog from "../components/DockerHostDialog.vue"; import RemoteBrowserDialog from "../components/RemoteBrowserDialog.vue"; import ProxyDialog from "../components/ProxyDialog.vue"; import TagsManager from "../components/TagsManager.vue"; -import { genSecret, isDev, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, sleep } from "../util.ts"; +import { + genSecret, + isDev, + MAX_INTERVAL_SECOND, + MIN_INTERVAL_SECOND, + sleep, +} from "../util.ts"; import { hostNameRegexPattern } from "../util-frontend"; import HiddenInput from "../components/HiddenInput.vue"; import EditMonitorConditions from "../components/EditMonitorConditions.vue"; @@ -1097,7 +1136,6 @@ const monitorDefaults = { notificationIDList: {}, ignoreTls: false, upsideDown: false, - packetSize: 56, expiryNotification: false, maxredirects: 10, accepted_statuscodes: [ "200-299" ], @@ -1172,6 +1210,29 @@ export default { }, computed: { + timeoutStep() { + return this.monitor.type === "ping" ? 1 : 0.1; + }, + + timeoutMin() { + return this.monitor.type === "ping" ? 1 : 0; + }, + + timeoutMax() { + return this.monitor.type === "ping" ? 60 : undefined; + }, + + timeoutLabel() { + return this.monitor.type === "ping" ? this.$t("pingTimeoutLabel") : this.$t("Request Timeout"); + }, + + timeoutDescription() { + if (this.monitor.type === "ping") { + return this.$t("pingTimeoutDescription"); + } + return ""; + }, + defaultFriendlyName() { if (this.monitor.hostname) { return this.monitor.hostname; @@ -1209,6 +1270,7 @@ export default { } return this.$t(name); }, + remoteBrowsersOptions() { return this.$root.remoteBrowserList.map(browser => { return { @@ -1217,6 +1279,7 @@ export default { }; }); }, + remoteBrowsersToggle: { get() { return this.remoteBrowsersEnabled || this.monitor.remote_browser != null; @@ -1234,6 +1297,7 @@ export default { } } }, + isAdd() { return this.$route.path === "/add"; }, @@ -1284,6 +1348,7 @@ message HealthCheckResponse { } ` ]); }, + bodyPlaceholder() { if (this.monitor && this.monitor.httpBodyEncoding && this.monitor.httpBodyEncoding === "xml") { return this.$t("Example:", [ ` @@ -1449,9 +1514,25 @@ message HealthCheckResponse { }, "monitor.timeout"(value, oldValue) { - // keep timeout within 80% range - if (value && value !== oldValue) { - this.monitor.timeout = this.clampTimeout(value); + if (this.monitor.type === "ping") { + this.finishUpdateInterval(); + } else { + // keep timeout within 80% range + if (value && value !== oldValue) { + this.monitor.timeout = this.clampTimeout(value); + } + } + }, + + "monitor.ping_count"() { + if (this.monitor.type === "ping") { + this.finishUpdateInterval(); + } + }, + + "monitor.ping_per_request_timeout"() { + if (this.monitor.type === "ping") { + this.finishUpdateInterval(); } }, @@ -1480,8 +1561,10 @@ message HealthCheckResponse { // Set a default timeout if the monitor type has changed or if it's a new monitor if (oldType || this.isAdd) { if (this.monitor.type === "snmp") { - // snmp is not expected to be executed via the internet => we can choose a lower default timeout + // snmp is not expected to be executed via the internet => we can choose a lower default timeout this.monitor.timeout = 5; + } else if (this.monitor.type === "ping") { + this.monitor.timeout = 10; } else { this.monitor.timeout = 48; } @@ -1598,7 +1681,11 @@ message HealthCheckResponse { if (this.isAdd) { this.monitor = { - ...monitorDefaults + ...monitorDefaults, + ping_count: 3, + ping_numeric: true, + packetSize: 56, + ping_per_request_timeout: 2, }; if (this.$root.proxyList && !this.monitor.proxyId) { @@ -1661,7 +1748,12 @@ message HealthCheckResponse { } // Handling for monitors that are missing/zeroed timeout if (!this.monitor.timeout) { - this.monitor.timeout = ~~(this.monitor.interval * 8) / 10; + if (this.monitor.type === "ping") { + // set to default + this.monitor.timeout = 10; + } else { + this.monitor.timeout = ~~(this.monitor.interval * 8) / 10; + } } } else { this.$root.toastError(res.msg); @@ -1878,11 +1970,48 @@ message HealthCheckResponse { return Number.isFinite(clamped) ? clamped : maxTimeout; }, + calculatePingInterval() { + // If monitor.type is not "ping", simply return the configured interval + if (this.monitor.type !== "ping") { + return this.monitor.interval; + } + + // Calculate the maximum theoretical time needed if every ping request times out + const theoreticalTotal = this.monitor.ping_count * this.monitor.ping_per_request_timeout; + + // The global timeout (aka deadline) forces ping to terminate, so the effective limit + // is the smaller value between deadline and theoreticalTotal + const effectiveLimit = Math.min(this.monitor.timeout, theoreticalTotal); + + // Add a 10% margin to the effective limit to ensure proper handling + const adjustedLimit = Math.ceil(effectiveLimit * 1.1); + + // If the calculated limit is lower than the minimum allowed interval, use the minimum interval + if (adjustedLimit < this.minInterval) { + return this.minInterval; + } + + return adjustedLimit; + }, + finishUpdateInterval() { - // Update timeout if it is greater than the clamp timeout - let clampedValue = this.clampTimeout(this.monitor.interval); - if (this.monitor.timeout > clampedValue) { - this.monitor.timeout = clampedValue; + if (this.monitor.type === "ping") { + // Calculate the minimum required interval based on ping configuration + const calculatedPingInterval = this.calculatePingInterval(); + + // If the configured interval is too small, adjust it to the minimum required value + if (this.monitor.interval < calculatedPingInterval) { + this.monitor.interval = calculatedPingInterval; + + // Notify the user that the interval has been automatically adjusted + toast.info(this.$t("pingIntervalAdjustedInfo")); + } + } else { + // Update timeout if it is greater than the clamp timeout + let clampedValue = this.clampTimeout(this.monitor.interval); + if (this.monitor.timeout > clampedValue) { + this.monitor.timeout = clampedValue; + } } }, diff --git a/src/util.js b/src/util.js index df89cf92b..f094cdd63 100644 --- a/src/util.js +++ b/src/util.js @@ -8,17 +8,34 @@ // Backend uses the compiled file util.js // Frontend uses util.ts */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); -exports.sleep = exports.flipStatus = exports.badgeConstants = exports.CONSOLE_STYLE_BgGray = exports.CONSOLE_STYLE_BgWhite = exports.CONSOLE_STYLE_BgCyan = exports.CONSOLE_STYLE_BgMagenta = exports.CONSOLE_STYLE_BgBlue = exports.CONSOLE_STYLE_BgYellow = exports.CONSOLE_STYLE_BgGreen = exports.CONSOLE_STYLE_BgRed = exports.CONSOLE_STYLE_BgBlack = exports.CONSOLE_STYLE_FgPink = exports.CONSOLE_STYLE_FgBrown = exports.CONSOLE_STYLE_FgViolet = exports.CONSOLE_STYLE_FgLightBlue = exports.CONSOLE_STYLE_FgLightGreen = exports.CONSOLE_STYLE_FgOrange = exports.CONSOLE_STYLE_FgGray = exports.CONSOLE_STYLE_FgWhite = exports.CONSOLE_STYLE_FgCyan = exports.CONSOLE_STYLE_FgMagenta = exports.CONSOLE_STYLE_FgBlue = exports.CONSOLE_STYLE_FgYellow = exports.CONSOLE_STYLE_FgGreen = exports.CONSOLE_STYLE_FgRed = exports.CONSOLE_STYLE_FgBlack = exports.CONSOLE_STYLE_Hidden = exports.CONSOLE_STYLE_Reverse = exports.CONSOLE_STYLE_Blink = exports.CONSOLE_STYLE_Underscore = exports.CONSOLE_STYLE_Dim = exports.CONSOLE_STYLE_Bright = exports.CONSOLE_STYLE_Reset = exports.MIN_INTERVAL_SECOND = exports.MAX_INTERVAL_SECOND = exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = exports.SQL_DATETIME_FORMAT = exports.SQL_DATE_FORMAT = exports.STATUS_PAGE_MAINTENANCE = exports.STATUS_PAGE_PARTIAL_DOWN = exports.STATUS_PAGE_ALL_UP = exports.STATUS_PAGE_ALL_DOWN = exports.MAINTENANCE = exports.PENDING = exports.UP = exports.DOWN = exports.appName = exports.isNode = exports.isDev = void 0; -exports.evaluateJsonQuery = exports.intHash = exports.localToUTC = exports.utcToLocal = exports.utcToISODateTime = exports.isoToUTCDateTime = exports.parseTimeFromTimeObject = exports.parseTimeObject = exports.getMaintenanceRelativeURL = exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = void 0; -exports.intHash = exports.localToUTC = exports.utcToLocal = exports.utcToISODateTime = exports.isoToUTCDateTime = exports.parseTimeFromTimeObject = exports.parseTimeObject = exports.getMaintenanceRelativeURL = exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = void 0; +exports.CONSOLE_STYLE_FgPink = exports.CONSOLE_STYLE_FgBrown = exports.CONSOLE_STYLE_FgViolet = exports.CONSOLE_STYLE_FgLightBlue = exports.CONSOLE_STYLE_FgLightGreen = exports.CONSOLE_STYLE_FgOrange = exports.CONSOLE_STYLE_FgGray = exports.CONSOLE_STYLE_FgWhite = exports.CONSOLE_STYLE_FgCyan = exports.CONSOLE_STYLE_FgMagenta = exports.CONSOLE_STYLE_FgBlue = exports.CONSOLE_STYLE_FgYellow = exports.CONSOLE_STYLE_FgGreen = exports.CONSOLE_STYLE_FgRed = exports.CONSOLE_STYLE_FgBlack = exports.CONSOLE_STYLE_Hidden = exports.CONSOLE_STYLE_Reverse = exports.CONSOLE_STYLE_Blink = exports.CONSOLE_STYLE_Underscore = exports.CONSOLE_STYLE_Dim = exports.CONSOLE_STYLE_Bright = exports.CONSOLE_STYLE_Reset = exports.PING_PER_REQUEST_TIMEOUT_DEFAULT = exports.PING_PER_REQUEST_TIMEOUT_MAX = exports.PING_PER_REQUEST_TIMEOUT_MIN = exports.PING_COUNT_DEFAULT = exports.PING_COUNT_MAX = exports.PING_COUNT_MIN = exports.PING_GLOBAL_TIMEOUT_DEFAULT = exports.PING_GLOBAL_TIMEOUT_MAX = exports.PING_GLOBAL_TIMEOUT_MIN = exports.PING_PACKET_SIZE_DEFAULT = exports.PING_PACKET_SIZE_MAX = exports.PING_PACKET_SIZE_MIN = exports.MIN_INTERVAL_SECOND = exports.MAX_INTERVAL_SECOND = exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = exports.SQL_DATETIME_FORMAT = exports.SQL_DATE_FORMAT = exports.STATUS_PAGE_MAINTENANCE = exports.STATUS_PAGE_PARTIAL_DOWN = exports.STATUS_PAGE_ALL_UP = exports.STATUS_PAGE_ALL_DOWN = exports.MAINTENANCE = exports.PENDING = exports.UP = exports.DOWN = exports.appName = exports.isNode = exports.isDev = void 0; +exports.evaluateJsonQuery = exports.intHash = exports.localToUTC = exports.utcToLocal = exports.utcToISODateTime = exports.isoToUTCDateTime = exports.parseTimeFromTimeObject = exports.parseTimeObject = exports.getMaintenanceRelativeURL = exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.badgeConstants = exports.CONSOLE_STYLE_BgGray = exports.CONSOLE_STYLE_BgWhite = exports.CONSOLE_STYLE_BgCyan = exports.CONSOLE_STYLE_BgMagenta = exports.CONSOLE_STYLE_BgBlue = exports.CONSOLE_STYLE_BgYellow = exports.CONSOLE_STYLE_BgGreen = exports.CONSOLE_STYLE_BgRed = exports.CONSOLE_STYLE_BgBlack = void 0; const dayjs_1 = __importDefault(require("dayjs")); -const dayjs = require("dayjs"); -const jsonata = require("jsonata"); +const jsonata = __importStar(require("jsonata")); exports.isDev = process.env.NODE_ENV === "development"; exports.isNode = typeof process !== "undefined" && ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node); exports.appName = "Uptime Kuma"; @@ -35,6 +52,18 @@ exports.SQL_DATETIME_FORMAT = "YYYY-MM-DD HH:mm:ss"; exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm"; exports.MAX_INTERVAL_SECOND = 2073600; exports.MIN_INTERVAL_SECOND = 20; +exports.PING_PACKET_SIZE_MIN = 1; +exports.PING_PACKET_SIZE_MAX = 65500; +exports.PING_PACKET_SIZE_DEFAULT = 56; +exports.PING_GLOBAL_TIMEOUT_MIN = 1; +exports.PING_GLOBAL_TIMEOUT_MAX = 300; +exports.PING_GLOBAL_TIMEOUT_DEFAULT = 10; +exports.PING_COUNT_MIN = 1; +exports.PING_COUNT_MAX = 100; +exports.PING_COUNT_DEFAULT = 1; +exports.PING_PER_REQUEST_TIMEOUT_MIN = 1; +exports.PING_PER_REQUEST_TIMEOUT_MAX = 60; +exports.PING_PER_REQUEST_TIMEOUT_DEFAULT = 2; exports.CONSOLE_STYLE_Reset = "\x1b[0m"; exports.CONSOLE_STYLE_Bright = "\x1b[1m"; exports.CONSOLE_STYLE_Dim = "\x1b[2m"; @@ -66,7 +95,6 @@ exports.CONSOLE_STYLE_BgMagenta = "\x1b[45m"; exports.CONSOLE_STYLE_BgCyan = "\x1b[46m"; exports.CONSOLE_STYLE_BgWhite = "\x1b[47m"; exports.CONSOLE_STYLE_BgGray = "\x1b[100m"; - const consoleModuleColors = [ exports.CONSOLE_STYLE_FgCyan, exports.CONSOLE_STYLE_FgGreen, @@ -458,4 +486,4 @@ async function evaluateJsonQuery(data, jsonPath, jsonPathOperator, expectedValue throw new Error(`Error evaluating JSON query: ${err.message}. Response from server was: ${response}`); } } -exports.evaluateJsonQuery = evaluateJsonQuery; \ No newline at end of file +exports.evaluateJsonQuery = evaluateJsonQuery; diff --git a/src/util.ts b/src/util.ts index b3bab4fff..277d860f4 100644 --- a/src/util.ts +++ b/src/util.ts @@ -39,6 +39,26 @@ export const SQL_DATETIME_FORMAT_WITHOUT_SECOND = "YYYY-MM-DD HH:mm"; export const MAX_INTERVAL_SECOND = 2073600; // 24 days export const MIN_INTERVAL_SECOND = 20; // 20 seconds +// Packet Size limits +export const PING_PACKET_SIZE_MIN = 1; +export const PING_PACKET_SIZE_MAX = 65500; +export const PING_PACKET_SIZE_DEFAULT = 56; + +// Global timeout (aka deadline) limits in seconds +export const PING_GLOBAL_TIMEOUT_MIN = 1; +export const PING_GLOBAL_TIMEOUT_MAX = 300; +export const PING_GLOBAL_TIMEOUT_DEFAULT = 10; + +// Ping count limits +export const PING_COUNT_MIN = 1; +export const PING_COUNT_MAX = 100; +export const PING_COUNT_DEFAULT = 1; + +// per-request timeout (aka timeout) limits in seconds +export const PING_PER_REQUEST_TIMEOUT_MIN = 1; +export const PING_PER_REQUEST_TIMEOUT_MAX = 60; +export const PING_PER_REQUEST_TIMEOUT_DEFAULT = 2; + // Console colors // https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color export const CONSOLE_STYLE_Reset = "\x1b[0m"; From 735f4a82689d1c72e7a799179a224fab3c92aaff Mon Sep 17 00:00:00 2001 From: rainy5810 Date: Mon, 26 May 2025 11:22:11 +0000 Subject: [PATCH 064/133] Translated using Weblate (Korean) Currently translated at 75.2% (810 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/ko/ --- src/lang/ko-KR.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index 2da645dfd..b7078abc9 100644 --- a/src/lang/ko-KR.json +++ b/src/lang/ko-KR.json @@ -834,5 +834,15 @@ "Select message type": "메시지 유형 선택", "Send to channel": "채널로 전송", "Create new forum post": "새 포럼 게시물 만들기", - "Your User ID": "사용자 ID" + "Your User ID": "사용자 ID", + "emailTemplateMonitorJSON": "모니터를 설명하는 객체", + "postToExistingThread": "기존 스레드/포럼 게시물에 게시", + "forumPostName": "포럼 게시물 이름", + "threadForumPostID": "스레드 / 포럼 게시물 ID", + "e.g. {discordThreadID}": "예: {discordThreadID}", + "whatHappensAtForumPost": "새 포럼 게시물을 만드세요. 기존 게시물에는 메시지가 게시되지 않습니다. 기존 게시물에 게시하려면 \"{option}\"을 사용하세요", + "wayToGetDiscordThreadId": "스레드/포럼 게시물 ID를 얻는 것은 채널 ID를 얻는 것과 비슷합니다. ID를 얻는 방법에 대해 자세히 알아보세요. {0}", + "Channel access token (Long-lived)": "채널 액세스 토큰(장기)", + "invertKeywordDescription": "키워드가 존재하지 않는지 살펴보세요.", + "emailTemplateLimitedToUpDownNotification": "UP/DOWN 하트비트에만 사용 가능, 그렇지 않으면 null" } From 1ca035da80bfb00cd1896d4dfda7483229efba28 Mon Sep 17 00:00:00 2001 From: Ilkka Myller Date: Mon, 26 May 2025 05:29:01 +0000 Subject: [PATCH 065/133] Translated using Weblate (Finnish) Currently translated at 100.0% (1076 of 1076 strings) Translation: Uptime Kuma/Uptime Kuma Translate-URL: https://weblate.kuma.pet/projects/uptime-kuma/uptime-kuma/fi/ --- src/lang/fi.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lang/fi.json b/src/lang/fi.json index bf203a749..790565f11 100644 --- a/src/lang/fi.json +++ b/src/lang/fi.json @@ -1104,7 +1104,7 @@ "wahaChatId": "Viesti ID (Puhelinnumero / Yhteystieto ID / Ryhmä ID)", "Template Format": "Malli Muotoilu", "wayToGetWahaApiUrl": "Sinun WAHA instanssin URL.", - "YZJ Webhook URL": "YZJ Webhook URL", + "YZJ Webhook URL": "YZJ Webhook URL-osoite", "telegramServerUrl": "(Valinnainen) Palvelin Url", "telegramServerUrlDescription": "Telegramin bot-api-rajoitusten poistamiseksi tai pääsyn saamiseksi estetyille alueille (Kiina, Iran jne.). Saat lisätietoja napsauttamalla {0}. Oletus: {1}", "Message Template": "Viesti Malli", @@ -1116,5 +1116,11 @@ "templateStatus": "tila", "telegramUseTemplate": "Käytä mukautettua viesti mallia", "telegramUseTemplateDescription": "Jos aktivoitu, viesti lähetetään käyttämällä mukautettua mallia.", - "telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja." + "telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja.", + "smsplanetApiToken": "SMSPlanet API:n tunnus", + "smsplanetApiDocs": "Yksityiskohtaiset tiedot API-tunnusten hankkimisesta löytyvät osoitteesta {the_smsplanet_documentation}.", + "the smsplanet documentation": "smsplanetin dokumentaatio", + "Phone numbers": "Puhelinnumerot", + "Sender name": "Lähettäjän nimi", + "smsplanetNeedToApproveName": "On hyväksyttävä asiakaspaneelissa" } From c0598ac606ac5a6bc58fe90ae88520ab3177c928 Mon Sep 17 00:00:00 2001 From: Damon <604821528@qq.com> Date: Thu, 29 May 2025 19:54:07 +0800 Subject: [PATCH 066/133] Flashduty IntegrationKey support Endpoint URL (#5859) --- server/notification-providers/flashduty.js | 4 ++-- src/components/notifications/FlashDuty.vue | 8 +++++--- src/lang/en.json | 4 +++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/server/notification-providers/flashduty.js b/server/notification-providers/flashduty.js index c340ed06f..bac6f07ca 100644 --- a/server/notification-providers/flashduty.js +++ b/server/notification-providers/flashduty.js @@ -73,13 +73,13 @@ class FlashDuty extends NotificationProvider { } const options = { method: "POST", - url: "https://api.flashcat.cloud/event/push/alert/standard?integration_key=" + notification.flashdutyIntegrationKey, + url: notification.flashdutyIntegrationKey.startsWith("http") ? notification.flashdutyIntegrationKey : "https://api.flashcat.cloud/event/push/alert/standard?integration_key=" + notification.flashdutyIntegrationKey, headers: { "Content-Type": "application/json" }, data: { description: `[${title}] [${monitorInfo.name}] ${body}`, title, event_status: eventStatus || "Info", - alert_key: String(monitorInfo.id) || Math.random().toString(36).substring(7), + alert_key: monitorInfo.id ? String(monitorInfo.id) : Math.random().toString(36).substring(7), labels, } }; diff --git a/src/components/notifications/FlashDuty.vue b/src/components/notifications/FlashDuty.vue index a66ada013..5f61c2b84 100644 --- a/src/components/notifications/FlashDuty.vue +++ b/src/components/notifications/FlashDuty.vue @@ -1,7 +1,10 @@ @@ -1129,6 +1143,7 @@ const monitorDefaults = { parent: null, url: "https://", method: "GET", + ipFamily: null, interval: 60, retryInterval: 60, resendInterval: 0, From 18cfa901ad3457366643fd4c2071045354b6d847 Mon Sep 17 00:00:00 2001 From: warpreality <60826887+warpreality@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:38:49 +0300 Subject: [PATCH 079/133] feat: Add a "manual" (static/fixed) monitor (#5897) Co-authored-by: Maksim Kachynski Co-authored-by: Frank Elsinga --- .../2025-06-11-0000-add-manual-monitor.js | 12 +++++++ server/monitor-types/manual.js | 36 +++++++++++++++++++ server/server.js | 1 + server/uptime-kuma-server.js | 2 ++ src/lang/en.json | 3 +- src/pages/EditMonitor.vue | 15 ++++++++ 6 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 db/knex_migrations/2025-06-11-0000-add-manual-monitor.js create mode 100644 server/monitor-types/manual.js diff --git a/db/knex_migrations/2025-06-11-0000-add-manual-monitor.js b/db/knex_migrations/2025-06-11-0000-add-manual-monitor.js new file mode 100644 index 000000000..16d307eb5 --- /dev/null +++ b/db/knex_migrations/2025-06-11-0000-add-manual-monitor.js @@ -0,0 +1,12 @@ +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.string("manual_status").defaultTo(null); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor", function (table) { + table.dropColumn("manual_status"); + }); +}; diff --git a/server/monitor-types/manual.js b/server/monitor-types/manual.js new file mode 100644 index 000000000..e587b7409 --- /dev/null +++ b/server/monitor-types/manual.js @@ -0,0 +1,36 @@ +const { MonitorType } = require("./monitor-type"); +const { UP, DOWN, PENDING } = require("../../src/util"); + +class ManualMonitorType extends MonitorType { + name = "Manual"; + type = "manual"; + description = "A monitor that allows manual control of the status"; + supportsConditions = false; + conditionVariables = []; + + /** + * @inheritdoc + */ + async check(monitor, heartbeat) { + if (monitor.manual_status !== null) { + heartbeat.status = monitor.manual_status; + switch (monitor.manual_status) { + case UP: + heartbeat.msg = "Up"; + break; + case DOWN: + heartbeat.msg = "Down"; + break; + default: + heartbeat.msg = "Pending"; + } + } else { + heartbeat.status = PENDING; + heartbeat.msg = "Manual monitoring - No status set"; + } + } +} + +module.exports = { + ManualMonitorType +}; diff --git a/server/server.js b/server/server.js index 77ba695d1..e328ff470 100644 --- a/server/server.js +++ b/server/server.js @@ -876,6 +876,7 @@ let needSetup = false; bean.rabbitmqUsername = monitor.rabbitmqUsername; bean.rabbitmqPassword = monitor.rabbitmqPassword; bean.conditions = JSON.stringify(monitor.conditions); + bean.manual_status = monitor.manual_status; // ping advanced options bean.ping_numeric = monitor.ping_numeric; diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 1f75b72cc..a04e6bd49 100644 --- a/server/uptime-kuma-server.js +++ b/server/uptime-kuma-server.js @@ -118,6 +118,7 @@ class UptimeKumaServer { UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType(); UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType(); UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType(); + UptimeKumaServer.monitorTypeList["manual"] = new ManualMonitorType(); // Allow all CORS origins (polling) in development let cors = undefined; @@ -558,4 +559,5 @@ const { GroupMonitorType } = require("./monitor-types/group"); const { SNMPMonitorType } = require("./monitor-types/snmp"); const { MongodbMonitorType } = require("./monitor-types/mongodb"); const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq"); +const { ManualMonitorType } = require("./monitor-types/manual"); const Monitor = require("./model/monitor"); diff --git a/src/lang/en.json b/src/lang/en.json index e11e9e81e..a979edcc2 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1122,5 +1122,6 @@ "Add Another Tag": "Add Another Tag", "Staged Tags for Batch Add": "Staged Tags for Batch Add", "Clear Form": "Clear Form", - "pause": "Pause" + "pause": "Pause", + "Manual": "Manual" } diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 691414843..0d628895d 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -55,6 +55,9 @@ + @@ -115,6 +118,18 @@
+ +
+
+ + +
+
+
From 55817061c0aa488b3d54b29765700636f0bb072d Mon Sep 17 00:00:00 2001 From: Florian Feka <47530143+FlorianFeka@users.noreply.github.com> Date: Fri, 13 Jun 2025 15:08:11 +0200 Subject: [PATCH 080/133] fix: Properly handle the NTLM part being embedded inside other authentication headers (#5871) Co-authored-by: Frank Elsinga --- server/modules/axios-ntlm/lib/ntlmClient.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/server/modules/axios-ntlm/lib/ntlmClient.js b/server/modules/axios-ntlm/lib/ntlmClient.js index 682de5f9a..9dab32553 100644 --- a/server/modules/axios-ntlm/lib/ntlmClient.js +++ b/server/modules/axios-ntlm/lib/ntlmClient.js @@ -89,6 +89,9 @@ function NtlmClient(credentials, AxiosConfig) { switch (_b.label) { case 0: error = err.response; + // The header may look like this: `Negotiate, NTLM, Basic realm="itsahiddenrealm.example.net"`Add commentMore actions + // so extract the 'NTLM' part first + const ntlmheader = error.headers['www-authenticate'].split(',').find(_ => _.match(/ *NTLM/))?.trim() || ''; if (!(error && error.status === 401 && error.headers['www-authenticate'] && error.headers['www-authenticate'].includes('NTLM'))) return [3 /*break*/, 3]; @@ -96,12 +99,12 @@ function NtlmClient(credentials, AxiosConfig) { // include the Negotiate option when responding with the T2 message // There is nore we could do to ensure we are processing correctly, // but this is the easiest option for now - if (error.headers['www-authenticate'].length < 50) { + if (ntlmheader.length < 50) { t1Msg = ntlm.createType1Message(credentials.workstation, credentials.domain); error.config.headers["Authorization"] = t1Msg; } else { - t2Msg = ntlm.decodeType2Message((error.headers['www-authenticate'].match(/^NTLM\s+(.+?)(,|\s+|$)/) || [])[1]); + t2Msg = ntlm.decodeType2Message((ntlmheader.match(/^NTLM\s+(.+?)(,|\s+|$)/) || [])[1]); t3Msg = ntlm.createType3Message(t2Msg, credentials.username, credentials.password, credentials.workstation, credentials.domain); error.config.headers["X-retry"] = "false"; error.config.headers["Authorization"] = t3Msg; From 3b6a78bd80eb6a3067a8d4c6f2e47dbceb99f33e Mon Sep 17 00:00:00 2001 From: Maksim <60826887+warpreality@users.noreply.github.com> Date: Sun, 15 Jun 2025 11:43:09 +0300 Subject: [PATCH 081/133] Fix db coloum type for manual monitor (#5921) --- .../2025-06-15-0001-manual-monitor-fix.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 db/knex_migrations/2025-06-15-0001-manual-monitor-fix.js diff --git a/db/knex_migrations/2025-06-15-0001-manual-monitor-fix.js b/db/knex_migrations/2025-06-15-0001-manual-monitor-fix.js new file mode 100644 index 000000000..b05c1131e --- /dev/null +++ b/db/knex_migrations/2025-06-15-0001-manual-monitor-fix.js @@ -0,0 +1,13 @@ +// Fix: Change manual_status column type to smallint +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.smallint("manual_status").alter(); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor", function (table) { + table.string("manual_status").alter(); + }); +}; From 609429bd7ecc9bba72eff385d82c35bd74363096 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Sun, 15 Jun 2025 18:37:01 +0800 Subject: [PATCH 082/133] Fix dayjs (#5923) --- src/util.js | 3 ++- src/util.ts | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/util.js b/src/util.js index 38c4a22ea..9998205f9 100644 --- a/src/util.js +++ b/src/util.js @@ -12,10 +12,11 @@ var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CONSOLE_STYLE_FgPink = exports.CONSOLE_STYLE_FgBrown = exports.CONSOLE_STYLE_FgViolet = exports.CONSOLE_STYLE_FgLightBlue = exports.CONSOLE_STYLE_FgLightGreen = exports.CONSOLE_STYLE_FgOrange = exports.CONSOLE_STYLE_FgGray = exports.CONSOLE_STYLE_FgWhite = exports.CONSOLE_STYLE_FgCyan = exports.CONSOLE_STYLE_FgMagenta = exports.CONSOLE_STYLE_FgBlue = exports.CONSOLE_STYLE_FgYellow = exports.CONSOLE_STYLE_FgGreen = exports.CONSOLE_STYLE_FgRed = exports.CONSOLE_STYLE_FgBlack = exports.CONSOLE_STYLE_Hidden = exports.CONSOLE_STYLE_Reverse = exports.CONSOLE_STYLE_Blink = exports.CONSOLE_STYLE_Underscore = exports.CONSOLE_STYLE_Dim = exports.CONSOLE_STYLE_Bright = exports.CONSOLE_STYLE_Reset = exports.PING_PER_REQUEST_TIMEOUT_DEFAULT = exports.PING_PER_REQUEST_TIMEOUT_MAX = exports.PING_PER_REQUEST_TIMEOUT_MIN = exports.PING_COUNT_DEFAULT = exports.PING_COUNT_MAX = exports.PING_COUNT_MIN = exports.PING_GLOBAL_TIMEOUT_DEFAULT = exports.PING_GLOBAL_TIMEOUT_MAX = exports.PING_GLOBAL_TIMEOUT_MIN = exports.PING_PACKET_SIZE_DEFAULT = exports.PING_PACKET_SIZE_MAX = exports.PING_PACKET_SIZE_MIN = exports.MIN_INTERVAL_SECOND = exports.MAX_INTERVAL_SECOND = exports.SQL_DATETIME_FORMAT_WITHOUT_SECOND = exports.SQL_DATETIME_FORMAT = exports.SQL_DATE_FORMAT = exports.STATUS_PAGE_MAINTENANCE = exports.STATUS_PAGE_PARTIAL_DOWN = exports.STATUS_PAGE_ALL_UP = exports.STATUS_PAGE_ALL_DOWN = exports.MAINTENANCE = exports.PENDING = exports.UP = exports.DOWN = exports.appName = exports.isNode = exports.isDev = void 0; exports.evaluateJsonQuery = exports.intHash = exports.localToUTC = exports.utcToLocal = exports.utcToISODateTime = exports.isoToUTCDateTime = exports.parseTimeFromTimeObject = exports.parseTimeObject = exports.getMaintenanceRelativeURL = exports.getMonitorRelativeURL = exports.genSecret = exports.getCryptoRandomInt = exports.getRandomInt = exports.getRandomArbitrary = exports.TimeLogger = exports.polyfill = exports.log = exports.debug = exports.ucfirst = exports.sleep = exports.flipStatus = exports.badgeConstants = exports.CONSOLE_STYLE_BgGray = exports.CONSOLE_STYLE_BgWhite = exports.CONSOLE_STYLE_BgCyan = exports.CONSOLE_STYLE_BgMagenta = exports.CONSOLE_STYLE_BgBlue = exports.CONSOLE_STYLE_BgYellow = exports.CONSOLE_STYLE_BgGreen = exports.CONSOLE_STYLE_BgRed = exports.CONSOLE_STYLE_BgBlack = void 0; -const dayjs = require("dayjs"); +const dayjs_1 = require("dayjs"); const jsonata = require("jsonata"); exports.isDev = process.env.NODE_ENV === "development"; exports.isNode = typeof process !== "undefined" && ((_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node); +const dayjs = (exports.isNode) ? require("dayjs") : dayjs_1.default; exports.appName = "Uptime Kuma"; exports.DOWN = 0; exports.UP = 1; diff --git a/src/util.ts b/src/util.ts index 22a40e204..1098bec4e 100644 --- a/src/util.ts +++ b/src/util.ts @@ -9,9 +9,9 @@ // Frontend uses util.ts */ -import * as dayjs from "dayjs"; +import dayjsFrontend from "dayjs"; -// For loading dayjs plugins, don't remove event though it is not used in this file +// For dayjs plugins' type checking, don't remove event though it is not used in this file // eslint-disable-next-line @typescript-eslint/no-unused-vars import * as timezone from "dayjs/plugin/timezone"; // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -21,6 +21,13 @@ import * as jsonata from "jsonata"; export const isDev = process.env.NODE_ENV === "development"; export const isNode = typeof process !== "undefined" && process?.versions?.node; + +/** + * Smarter dayjs import that supports both frontend and backend + * @returns {dayjs.Dayjs} dayjs instance + */ +const dayjs = (isNode) ? require("dayjs") : dayjsFrontend; + export const appName = "Uptime Kuma"; export const DOWN = 0; export const UP = 1; From 443d5cf55413b13b8610df88feb55ca8afff24f8 Mon Sep 17 00:00:00 2001 From: Peak Twilight <77903714+peaktwilight@users.noreply.github.com> Date: Sun, 15 Jun 2025 20:44:28 +0200 Subject: [PATCH 083/133] Improve UI: Edit Buttons in Status Page (#5920) Co-authored-by: Frank Elsinga --- src/layouts/Layout.vue | 2 +- src/pages/StatusPage.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/layouts/Layout.vue b/src/layouts/Layout.vue index 9faedf589..e93a5159e 100644 --- a/src/layouts/Layout.vue +++ b/src/layouts/Layout.vue @@ -16,7 +16,7 @@ {{ $t("Uptime Kuma") }} - + {{ $t("New Update") }} diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index 116968282..e0df74fde 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -157,12 +157,12 @@
- - + {{ $t("Go to Dashboard") }} From 4962817795804ea7dd875f65999b528f9769a7b4 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 19 Jun 2025 14:29:43 +0800 Subject: [PATCH 084/133] [Eliminate Blocking] User related (#5928) --- server/auth.js | 2 +- server/model/user.js | 4 ++-- server/password-hash.js | 4 ++-- server/server.js | 2 +- server/socket-handlers/api-key-socket-handler.js | 2 +- server/util-server.js | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/auth.js b/server/auth.js index 597cf3d75..a4aed50b8 100644 --- a/server/auth.js +++ b/server/auth.js @@ -26,7 +26,7 @@ exports.login = async function (username, password) { // Upgrade the hash to bcrypt if (passwordHash.needRehash(user.password)) { await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [ - passwordHash.generate(password), + await passwordHash.generate(password), user.id, ]); } diff --git a/server/model/user.js b/server/model/user.js index 329402ff5..33277d485 100644 --- a/server/model/user.js +++ b/server/model/user.js @@ -14,7 +14,7 @@ class User extends BeanModel { */ static async resetPassword(userID, newPassword) { await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [ - passwordHash.generate(newPassword), + await passwordHash.generate(newPassword), userID ]); } @@ -25,7 +25,7 @@ class User extends BeanModel { * @returns {Promise} */ async resetPassword(newPassword) { - const hashedPassword = passwordHash.generate(newPassword); + const hashedPassword = await passwordHash.generate(newPassword); await R.exec("UPDATE `user` SET password = ? WHERE id = ? ", [ hashedPassword, diff --git a/server/password-hash.js b/server/password-hash.js index 83a23d9e6..19aec193b 100644 --- a/server/password-hash.js +++ b/server/password-hash.js @@ -5,10 +5,10 @@ const saltRounds = 10; /** * Hash a password * @param {string} password Password to hash - * @returns {string} Hash + * @returns {Promise} Hash */ exports.generate = function (password) { - return bcrypt.hashSync(password, saltRounds); + return bcrypt.hash(password, saltRounds); }; /** diff --git a/server/server.js b/server/server.js index e328ff470..5b2f41a2e 100644 --- a/server/server.js +++ b/server/server.js @@ -674,7 +674,7 @@ let needSetup = false; let user = R.dispense("user"); user.username = username; - user.password = passwordHash.generate(password); + user.password = await passwordHash.generate(password); await R.store(user); needSetup = false; diff --git a/server/socket-handlers/api-key-socket-handler.js b/server/socket-handlers/api-key-socket-handler.js index f76b90991..d88151294 100644 --- a/server/socket-handlers/api-key-socket-handler.js +++ b/server/socket-handlers/api-key-socket-handler.js @@ -20,7 +20,7 @@ module.exports.apiKeySocketHandler = (socket) => { checkLogin(socket); let clearKey = nanoid(40); - let hashedKey = passwordHash.generate(clearKey); + let hashedKey = await passwordHash.generate(clearKey); key["key"] = hashedKey; let bean = await APIKey.save(key, socket.userID); diff --git a/server/util-server.js b/server/util-server.js index 08df728ed..4cc833330 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -51,7 +51,7 @@ exports.initJWTSecret = async () => { jwtSecretBean.key = "jwtSecret"; } - jwtSecretBean.value = passwordHash.generate(genSecret()); + jwtSecretBean.value = await passwordHash.generate(genSecret()); await R.store(jwtSecretBean); return jwtSecretBean; }; From e0335ecfbdfc2c8009c33447f9eaa9e69eb88f34 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 19 Jun 2025 14:30:24 +0800 Subject: [PATCH 085/133] [Eliminate Blocking] Database related (#5926) --- server/database.js | 7 ++++--- server/socket-handlers/database-socket-handler.js | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/server/database.js b/server/database.js index 582f19c29..206c2ffdc 100644 --- a/server/database.js +++ b/server/database.js @@ -1,4 +1,5 @@ const fs = require("fs"); +const fsAsync = fs.promises; const { R } = require("redbean-node"); const { setSetting, setting } = require("./util-server"); const { log, sleep } = require("../src/util"); @@ -707,12 +708,12 @@ class Database { /** * Get the size of the database (SQLite only) - * @returns {number} Size of database + * @returns {Promise} Size of database */ - static getSize() { + static async getSize() { if (Database.dbConfig.type === "sqlite") { log.debug("db", "Database.getSize()"); - let stats = fs.statSync(Database.sqlitePath); + let stats = await fsAsync.stat(Database.sqlitePath); log.debug("db", stats); return stats.size; } diff --git a/server/socket-handlers/database-socket-handler.js b/server/socket-handlers/database-socket-handler.js index ee2394bf6..33f8f3195 100644 --- a/server/socket-handlers/database-socket-handler.js +++ b/server/socket-handlers/database-socket-handler.js @@ -14,7 +14,7 @@ module.exports.databaseSocketHandler = (socket) => { checkLogin(socket); callback({ ok: true, - size: Database.getSize(), + size: await Database.getSize(), }); } catch (error) { callback({ From b1e8d9b4d290a293dfef51784e87a3cb863550cd Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Thu, 19 Jun 2025 15:41:21 +0800 Subject: [PATCH 086/133] [Eliminate Blocking] Push example (#5925) --- server/socket-handlers/general-socket-handler.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/socket-handlers/general-socket-handler.js b/server/socket-handlers/general-socket-handler.js index 0c11de295..b996efe7b 100644 --- a/server/socket-handlers/general-socket-handler.js +++ b/server/socket-handlers/general-socket-handler.js @@ -4,7 +4,7 @@ const { sendInfo } = require("../client"); const { checkLogin } = require("../util-server"); const GameResolver = require("gamedig/lib/GameResolver"); const { testChrome } = require("../monitor-types/real-browser-monitor-type"); -const fs = require("fs"); +const fsAsync = require("fs").promises; const path = require("path"); let gameResolver = new GameResolver(); @@ -90,7 +90,7 @@ module.exports.generalSocketHandler = (socket, server) => { } }); - socket.on("getPushExample", (language, callback) => { + socket.on("getPushExample", async (language, callback) => { try { checkLogin(socket); if (!/^[a-z-]+$/.test(language)) { @@ -106,13 +106,13 @@ module.exports.generalSocketHandler = (socket, server) => { try { let dir = path.join("./extra/push-examples", language); - let files = fs.readdirSync(dir); + let files = await fsAsync.readdir(dir); for (let file of files) { if (file.startsWith("index.")) { callback({ ok: true, - code: fs.readFileSync(path.join(dir, file), "utf8"), + code: await fsAsync.readFile(path.join(dir, file), "utf8"), }); return; } From 5aeda2dab0cd93eb4dc989ece5fd423f17faf193 Mon Sep 17 00:00:00 2001 From: Eden Yemini Date: Fri, 20 Jun 2025 00:56:43 +0300 Subject: [PATCH 087/133] feat: render markdown in monitor descriptions (#5576) --- src/pages/Details.vue | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 17d32365c..1d068b92e 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -9,7 +9,8 @@
{{ monitor.id }}
-

{{ monitor.description }}

+ +

@@ -285,6 +286,8 @@ import Tag from "../components/Tag.vue"; import CertificateInfo from "../components/CertificateInfo.vue"; import { getMonitorRelativeURL } from "../util.ts"; import { URL } from "whatwg-url"; +import DOMPurify from "dompurify"; +import { marked } from "marked"; import { getResBaseURL } from "../util-frontend"; import { highlight, languages } from "prismjs/components/prism-core"; import "prismjs/components/prism-clike"; @@ -399,6 +402,14 @@ export default { screenshotURL() { return getResBaseURL() + this.monitor.screenshot + "?time=" + this.cacheTime; + }, + + descriptionHTML() { + if (this.monitor.description != null) { + return DOMPurify.sanitize(marked(this.monitor.description)); + } else { + return ""; + } } }, From 072226bde25616d2dafb015eb66278c6add15bf0 Mon Sep 17 00:00:00 2001 From: Ionys <9364594+Ionys320@users.noreply.github.com> Date: Sun, 22 Jun 2025 01:02:52 +0200 Subject: [PATCH 088/133] Improve i18n language matching (#5939) --- src/i18n.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/i18n.js b/src/i18n.js index bd7e3a122..3f4e98de3 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -75,11 +75,20 @@ export function currentLocale() { if (locale in messages) { return locale; } - // some locales are further specified such as "en-US". - // If we only have a generic locale for this, we can use it too - const genericLocale = locale.split("-")[0]; - if (genericLocale in messages) { - return genericLocale; + // If the locale is a 2-letter code, we can try to find a regional variant + // e.g. "fr" may not be in the messages, but "fr-FR" is + if (locale.length === 2) { + const regionalLocale = `${locale}-${locale.toUpperCase()}`; + if (regionalLocale in messages) { + return regionalLocale; + } + } else { + // Some locales are further specified such as "en-US". + // If we only have a generic locale for this, we can use it too + const genericLocale = locale.slice(0, 2); + if (genericLocale in messages) { + return genericLocale; + } } } return "en"; From 59d10062ca5957459e0cda53c0468c1514ace590 Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Sun, 22 Jun 2025 14:49:24 +0200 Subject: [PATCH 089/133] chore: remove fluff from PR-template (#5941) --- .github/ISSUE_TEMPLATE/ask_for_help.yml | 2 +- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/ISSUE_TEMPLATE/security_issue.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 55 +++++----------------- 5 files changed, 17 insertions(+), 46 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/ask_for_help.yml b/.github/ISSUE_TEMPLATE/ask_for_help.yml index 45bd046e5..2156c5be0 100644 --- a/.github/ISSUE_TEMPLATE/ask_for_help.yml +++ b/.github/ISSUE_TEMPLATE/ask_for_help.yml @@ -3,7 +3,7 @@ name: ❓ Ask for help description: | Submit any question related to Uptime Kuma #title: "[Help]" -labels: ["help", "P3-low"] +labels: ["help"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 31cd6faf6..d0330c70a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -3,7 +3,7 @@ name: 🐛 Bug Report description: | Submit a bug report to help us improve #title: "[Bug]" -labels: ["bug", "P2-medium"] +labels: ["bug"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index c9ec4d093..4e1be15e1 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -3,7 +3,7 @@ name: 🚀 Feature Request description: | Submit a proposal for a new feature # title: "[Feature]" -labels: ["feature-request", "P3-low"] +labels: ["feature-request"] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/security_issue.yml b/.github/ISSUE_TEMPLATE/security_issue.yml index d49c0aaf5..247073102 100644 --- a/.github/ISSUE_TEMPLATE/security_issue.yml +++ b/.github/ISSUE_TEMPLATE/security_issue.yml @@ -3,7 +3,7 @@ name: 🛡️ Security Issue description: | Notify Louis Lam about a security concern. Please do NOT include any sensitive details in this issue. # title: "Security Issue" -labels: ["security", "P1-high"] +labels: ["security"] assignees: [louislam] body: - type: markdown diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f639c395e..dade3e76f 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,10 +1,10 @@ -**⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we don’t waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)** - ## ❗ Important Announcement
Click here for more details:

+**⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we don’t waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)** + ### 🚧 Temporary Delay in Feature Requests and Pull Request Reviews **At this time, we may be slower to respond to new feature requests and review pull requests. Existing requests and PRs will remain in the backlog but may not be prioritized immediately.** @@ -26,16 +26,22 @@ We appreciate your patience and understanding as we continue to improve Uptime K ## 📋 Overview -Provide a clear summary of the purpose and scope of this pull request: + - **What problem does this pull request address?** - - Please provide a detailed explanation here. - - **What features or functionality does this pull request introduce or enhance?** - - Please provide a detailed explanation here. +## 🔗 Related Issues + + + +- Relates to #issue-number +- Resolves #issue-number + ## 🔄 Changes ### 🛠️ Type of change @@ -52,19 +58,7 @@ Provide a clear summary of the purpose and scope of this pull request: - [ ] 🔧 Other (please specify): - Provide additional details here. -## 🔗 Related Issues - - - -- Relates to #issue-number -- Resolves #issue-number -- Fixes #issue-number - -## 📄 Checklist * +## 📄 Checklist @@ -97,26 +91,3 @@ If not, remove this section. | `DOWN` | ![Before](image-link) | ![After](image-link) | | Certificate-expiry | ![Before](image-link) | ![After](image-link) | | Testing | ![Before](image-link) | ![After](image-link) | - -## ℹ️ Additional Context - -Provide any relevant details to assist reviewers in understanding the changes. - -
Click here for more details: -

- -**Key Considerations**: - -- **Design decisions** – Key choices or trade-offs made during development. -- **Alternative solutions** – Approaches considered but not implemented, along with reasons. -- **Relevant links** – Specifications, discussions, or resources that provide context. -- **Dependencies** – Related pull requests or issues that must be resolved before merging. -- **Additional context** – Any other details that may help reviewers understand the changes. - -Provide details here - -## 💬 Requested Feedback - - - -- `Mention documents needing feedback here` From b55d6e8911ea6ee5a7bdddc9f3106b6f5bade698 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 23 Jun 2025 15:24:49 +0800 Subject: [PATCH 090/133] Improve the experience of testing pull requests (#5942) --- docker/dockerfile | 4 ++++ extra/checkout-pr.js | 33 -------------------------------- extra/checkout-pr.mjs | 34 +++++++++++++++++++++++++++++++++ extra/kuma-pr/index.mjs | 26 +++++++++++++++++++++++++ extra/kuma-pr/package.json | 8 ++++++++ extra/kuma-pr/pr-lib.mjs | 39 ++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 7 files changed, 112 insertions(+), 34 deletions(-) delete mode 100644 extra/checkout-pr.js create mode 100644 extra/checkout-pr.mjs create mode 100644 extra/kuma-pr/index.mjs create mode 100644 extra/kuma-pr/package.json create mode 100644 extra/kuma-pr/pr-lib.mjs diff --git a/docker/dockerfile b/docker/dockerfile index d55f94f61..e2a301e7b 100644 --- a/docker/dockerfile +++ b/docker/dockerfile @@ -79,6 +79,10 @@ USER node RUN git config --global user.email "no-reply@no-reply.com" RUN git config --global user.name "PR Tester" RUN git clone https://github.com/louislam/uptime-kuma.git . + +# Hide the warning when running in detached head state +RUN git config --global advice.detachedHead false + RUN npm ci EXPOSE 3000 3001 diff --git a/extra/checkout-pr.js b/extra/checkout-pr.js deleted file mode 100644 index 0328770b1..000000000 --- a/extra/checkout-pr.js +++ /dev/null @@ -1,33 +0,0 @@ -const childProcess = require("child_process"); - -if (!process.env.UPTIME_KUMA_GH_REPO) { - console.error("Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)"); - process.exit(1); -} - -let inputArray = process.env.UPTIME_KUMA_GH_REPO.split(":"); - -if (inputArray.length !== 2) { - console.error("Invalid format. Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)"); -} - -let name = inputArray[0]; -let branch = inputArray[1]; - -console.log("Checkout pr"); - -// Checkout the pr -let result = childProcess.spawnSync("git", [ "remote", "add", name, `https://github.com/${name}/uptime-kuma` ]); - -console.log(result.stdout.toString()); -console.error(result.stderr.toString()); - -result = childProcess.spawnSync("git", [ "fetch", name, branch ]); - -console.log(result.stdout.toString()); -console.error(result.stderr.toString()); - -result = childProcess.spawnSync("git", [ "checkout", `${name}/${branch}`, "--force" ]); - -console.log(result.stdout.toString()); -console.error(result.stderr.toString()); diff --git a/extra/checkout-pr.mjs b/extra/checkout-pr.mjs new file mode 100644 index 000000000..653664477 --- /dev/null +++ b/extra/checkout-pr.mjs @@ -0,0 +1,34 @@ +import childProcess from "child_process"; +import { parsePrName } from "./kuma-pr/pr-lib.mjs"; + +let { name, branch } = parsePrName(process.env.UPTIME_KUMA_GH_REPO); + +console.log(`Checking out PR from ${name}:${branch}`); + +// Checkout the pr +let result = childProcess.spawnSync("git", [ "remote", "add", name, `https://github.com/${name}/uptime-kuma` ], { + stdio: "inherit" +}); + +if (result.status !== 0) { + console.error("Failed to add remote repository."); + process.exit(1); +} + +result = childProcess.spawnSync("git", [ "fetch", name, branch ], { + stdio: "inherit" +}); + +if (result.status !== 0) { + console.error("Failed to fetch the branch."); + process.exit(1); +} + +result = childProcess.spawnSync("git", [ "checkout", `${name}/${branch}`, "--force" ], { + stdio: "inherit" +}); + +if (result.status !== 0) { + console.error("Failed to checkout the branch."); + process.exit(1); +} diff --git a/extra/kuma-pr/index.mjs b/extra/kuma-pr/index.mjs new file mode 100644 index 000000000..bcda9d335 --- /dev/null +++ b/extra/kuma-pr/index.mjs @@ -0,0 +1,26 @@ +#!/usr/bin/env node +import { spawn } from "child_process"; +import { parsePrName } from "./pr-lib.mjs"; + +const prName = process.argv[2]; + +// Pre-check the prName here, so testers don't need to wait until the Docker image is pulled to see the error. +try { + parsePrName(prName); +} catch (error) { + console.error(error.message); + process.exit(1); +} + +spawn("docker", [ + "run", + "--rm", + "-it", + "-p", "3000:3000", + "-p", "3001:3001", + "--pull", "always", + "-e", `UPTIME_KUMA_GH_REPO=${prName}`, + "louislam/uptime-kuma:pr-test2" +], { + stdio: "inherit", +}); diff --git a/extra/kuma-pr/package.json b/extra/kuma-pr/package.json new file mode 100644 index 000000000..16f30b160 --- /dev/null +++ b/extra/kuma-pr/package.json @@ -0,0 +1,8 @@ +{ + "name": "kuma-pr", + "version": "1.0.0", + "type": "module", + "bin": { + "kuma-pr": "./index.mjs" + } +} diff --git a/extra/kuma-pr/pr-lib.mjs b/extra/kuma-pr/pr-lib.mjs new file mode 100644 index 000000000..1cb5050bf --- /dev/null +++ b/extra/kuma-pr/pr-lib.mjs @@ -0,0 +1,39 @@ +/** + * Parse : to an object. + * @param {string} prName : + * @returns {object} An object with name and branch properties. + */ +export function parsePrName(prName) { + let name = "louislam"; + let branch; + + const errorMessage = "Please set a repo to the environment variable 'UPTIME_KUMA_GH_REPO' (e.g. mhkarimi1383:goalert-notification)"; + + if (!prName) { + throw new Error(errorMessage); + } + + prName = prName.trim(); + if (prName === "") { + throw new Error(errorMessage); + } + + let inputArray = prName.split(":"); + + // Just realized that owner's prs are not prefixed with "louislam:" + if (inputArray.length === 1) { + branch = inputArray[0]; + + } else if (inputArray.length === 2) { + name = inputArray[0]; + branch = inputArray[1]; + + } else { + throw new Error("Invalid format. The format is like this: mhkarimi1383:goalert-notification"); + } + + return { + name, + branch + }; +} diff --git a/package.json b/package.json index 16837fa8a..97b7bc339 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "release-nightly": "node ./extra/release/nightly.mjs", "git-remove-tag": "git tag -d", "build-dist-and-restart": "npm run build && npm run start-server-dev", - "start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev", + "start-pr-test": "node extra/checkout-pr.mjs && npm install && npm run dev", "build-healthcheck-armv7": "cross-env GOOS=linux GOARCH=arm GOARM=7 go build -x -o ./extra/healthcheck-armv7 ./extra/healthcheck.go", "deploy-demo-server": "node extra/deploy-demo-server.js", "sort-contributors": "node extra/sort-contributors.js", From 92f2484a8d9dbce171efad6eafe922e95bb2e83d Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 23 Jun 2025 17:56:39 +0800 Subject: [PATCH 091/133] Auto reply to PRs (#5943) Co-authored-by: Frank Elsinga --- .github/workflows/pr-reply.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/pr-reply.yml diff --git a/.github/workflows/pr-reply.yml b/.github/workflows/pr-reply.yml new file mode 100644 index 000000000..553774bf3 --- /dev/null +++ b/.github/workflows/pr-reply.yml @@ -0,0 +1,30 @@ +# Replys a message to all new PRs +# The message: +# - Say hello and thanks to the contributor +# - Mention maintainers will review the PR soon +# - To other people, show the testing pr command: npx kuma-pr +# - Also show the advanced usage link: https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests +name: Reply to PRs +on: + pull_request: + types: [opened, reopened] +jobs: + reply: + runs-on: ubuntu-latest + steps: + - name: Reply to PR + uses: actions/github-script@v7 + with: + script: | + const pr = context.payload.pull_request; + const message = `Hello @${pr.user.login}, thank you for your contribution! :tada:\n` + + `The maintainers will review your PR soon.\n\n` + + `If anyone would like to help test this PR, you can use the command:\n` + + `\`\`\`bash\nnpx kuma-pr ${pr.user.login}:${pr.head.ref}\n\`\`\`\n\n` + + ` For advanced usage, please refer to our [wiki](https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests) `; + await github.rest.issues.createComment({ + issue_number: pr.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: message + }); From 9e7ea4913aa6302da7ea36175f9318913291f12f Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Mon, 23 Jun 2025 21:12:18 +0800 Subject: [PATCH 092/133] Fix auto pr reply (#5945) --- .github/workflows/pr-reply.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/pr-reply.yml b/.github/workflows/pr-reply.yml index 553774bf3..48752e641 100644 --- a/.github/workflows/pr-reply.yml +++ b/.github/workflows/pr-reply.yml @@ -8,6 +8,12 @@ name: Reply to PRs on: pull_request: types: [opened, reopened] + +permissions: + issues: write + pull-requests: write + contents: read + jobs: reply: runs-on: ubuntu-latest From 9976ef94af050f68945e1fc94620216ef3728756 Mon Sep 17 00:00:00 2001 From: mindsolo Date: Mon, 23 Jun 2025 16:38:01 +0300 Subject: [PATCH 093/133] feat: Add proxy clone functionality to settings (#5944) Co-authored-by: Frank Elsinga --- src/components/ProxyDialog.vue | 32 +++++++++++++++++++++++++++++ src/components/settings/Proxies.vue | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/ProxyDialog.vue b/src/components/ProxyDialog.vue index 2f7ed7b61..aae635469 100644 --- a/src/components/ProxyDialog.vue +++ b/src/components/ProxyDialog.vue @@ -174,6 +174,38 @@ export default { this.modal.show(); }, + /** + * Show dialog to clone a proxy + * @param {number} proxyID ID of proxy to clone + * @returns {void} + */ + showClone(proxyID) { + if (proxyID) { + for (let proxy of this.$root.proxyList) { + if (proxy.id === proxyID) { + // Create a clone of the proxy data + this.proxy = { + protocol: proxy.protocol, + host: proxy.host, + port: proxy.port, + auth: proxy.auth, + username: proxy.username, + password: proxy.password, + active: proxy.active, + default: false, // Cloned proxy should not be default + applyExisting: false, + }; + break; + } + } + } + + // Set id to null to indicate this is a new proxy (clone) + this.id = null; + + this.modal.show(); + }, + /** * Submit form data for saving * @returns {void} diff --git a/src/components/settings/Proxies.vue b/src/components/settings/Proxies.vue index 4608f3aa4..de5b8d5a0 100644 --- a/src/components/settings/Proxies.vue +++ b/src/components/settings/Proxies.vue @@ -13,7 +13,8 @@
  • {{ proxy.host }}:{{ proxy.port }} ({{ proxy.protocol }}) {{ $t("Default") }}
    - {{ $t("Edit") }} + {{ $t("Edit") }} | + {{ $t("Clone") }}
  • From 10fd6ede1e016befd3fd2656553b362a2c74fb2a Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Wed, 25 Jun 2025 13:39:00 +0800 Subject: [PATCH 094/133] [Eliminate Blocking] Docker monitor (#5927) --- server/docker.js | 18 +++++++++--------- server/model/monitor.js | 2 +- server/util-server.js | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/server/docker.js b/server/docker.js index ee6051dfa..7ca5da562 100644 --- a/server/docker.js +++ b/server/docker.js @@ -1,10 +1,10 @@ const axios = require("axios"); const { R } = require("redbean-node"); const https = require("https"); -const fs = require("fs"); +const fsAsync = require("fs").promises; const path = require("path"); const Database = require("./database"); -const { axiosAbortSignal } = require("./util-server"); +const { axiosAbortSignal, fsExists } = require("./util-server"); class DockerHost { @@ -81,7 +81,7 @@ class DockerHost { options.socketPath = dockerHost.dockerDaemon; } else if (dockerHost.dockerType === "tcp") { options.baseURL = DockerHost.patchDockerURL(dockerHost.dockerDaemon); - options.httpsAgent = new https.Agent(DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); + options.httpsAgent = new https.Agent(await DockerHost.getHttpsAgentOptions(dockerHost.dockerType, options.baseURL)); } try { @@ -141,9 +141,9 @@ class DockerHost { * File names can also be overridden via 'DOCKER_TLS_FILE_NAME_(CA|KEY|CERT)'. * @param {string} dockerType i.e. "tcp" or "socket" * @param {string} url The docker host URL rewritten to https:// - * @returns {object} HTTP agent options + * @returns {Promise} HTTP agent options */ - static getHttpsAgentOptions(dockerType, url) { + static async getHttpsAgentOptions(dockerType, url) { let baseOptions = { maxCachedSessions: 0, rejectUnauthorized: true @@ -156,10 +156,10 @@ class DockerHost { let certPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameCert); let keyPath = path.join(Database.dockerTLSDir, dirName, DockerHost.CertificateFileNameKey); - if (dockerType === "tcp" && fs.existsSync(caPath) && fs.existsSync(certPath) && fs.existsSync(keyPath)) { - let ca = fs.readFileSync(caPath); - let key = fs.readFileSync(keyPath); - let cert = fs.readFileSync(certPath); + if (dockerType === "tcp" && await fsExists(caPath) && await fsExists(certPath) && await fsExists(keyPath)) { + let ca = await fsAsync.readFile(caPath); + let key = await fsAsync.readFile(keyPath); + let cert = await fsAsync.readFile(certPath); certOptions = { ca, key, diff --git a/server/model/monitor.js b/server/model/monitor.js index c9844a55d..c1db77e8b 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -746,7 +746,7 @@ class Monitor extends BeanModel { } else if (dockerHost._dockerType === "tcp") { options.baseURL = DockerHost.patchDockerURL(dockerHost._dockerDaemon); options.httpsAgent = new https.Agent( - DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL) + await DockerHost.getHttpsAgentOptions(dockerHost._dockerType, options.baseURL) ); } diff --git a/server/util-server.js b/server/util-server.js index 4cc833330..4da4be91b 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -23,6 +23,7 @@ const radiusClient = require("node-radius-client"); const redis = require("redis"); const oidc = require("openid-client"); const tls = require("tls"); +const { exists } = require("fs"); const { dictionaries: { @@ -1096,3 +1097,17 @@ module.exports.axiosAbortSignal = (timeoutMs) => { } } }; + +/** + * Async version of fs.existsSync + * @param {PathLike} path File path + * @returns {Promise} True if file exists, false otherwise + */ +function fsExists(path) { + return new Promise(function (resolve, reject) { + exists(path, function (exists) { + resolve(exists); + }); + }); +} +module.exports.fsExists = fsExists; From 5336b05a7fd78751396444a2788abcd921d93f5d Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Sat, 28 Jun 2025 18:27:31 +0200 Subject: [PATCH 095/133] remove feature freeze messaging from templates (#5957) --- .github/ISSUE_TEMPLATE/feature_request.yml | 17 ++---------- .github/PULL_REQUEST_TEMPLATE.md | 31 +++++++--------------- 2 files changed, 11 insertions(+), 37 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 4e1be15e1..61d647a4f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -8,23 +8,10 @@ body: - type: markdown attributes: value: | - ## ❗Important Announcement - - ### 🚧 Temporary Delay in Feature Requests and Pull Request Reviews - - **At this time, we may be slower to respond to new feature requests and review pull requests. Existing requests and PRs will remain in the backlog but may not be prioritized immediately.** - - - **Reason**: Our current focus is on addressing bugs, improving system performance, and implementing essential updates. This will help stabilize the project and ensure smoother management. - - **Impact**: While no new feature requests or pull requests are being outright rejected, there may be significant delays in reviews. We encourage the community to help by reviewing PRs or assisting other users in the meantime. - - **What You Can Do**: If you're interested in contributing, reviewing open PRs by following our [Review Guidelines](https://github.com/louislam/uptime-kuma/blob/master/.github/REVIEW_GUIDELINES.md) or offering help to other users is greatly appreciated. All feature requests and PRs will be revisited once the suspension period is lifted. - - We appreciate your patience and understanding as we continue to improve Uptime Kuma. - ### 🚫 Please Avoid Unnecessary Pinging of Maintainers - **We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are reserved for critical/urgent pull requests that require immediate attention.** - - **Why**: Reserving pings for urgent matters ensures maintainers can prioritize critical tasks effectively. + We kindly ask you to refrain from pinging maintainers unless absolutely necessary. + Pings are for critical/urgent pull requests that require immediate attention. - type: textarea id: related-issues validations: diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index dade3e76f..e351aa2e2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,25 +1,13 @@ -## ❗ Important Announcement +## ❗ Important Announcements
    Click here for more details:

    **⚠️ Please Note: We do not accept all types of pull requests, and we want to ensure we don’t waste your time. Before submitting, make sure you have read our pull request guidelines: [Pull Request Rules](https://github.com/louislam/uptime-kuma/blob/master/CONTRIBUTING.md#can-i-create-a-pull-request-for-uptime-kuma)** -### 🚧 Temporary Delay in Feature Requests and Pull Request Reviews - -**At this time, we may be slower to respond to new feature requests and review pull requests. Existing requests and PRs will remain in the backlog but may not be prioritized immediately.** - -- **Reason**: Our current focus is on addressing bugs, improving system performance, and implementing essential updates. This will help stabilize the project and ensure smoother management. -- **Impact**: While no new feature requests or pull requests are being outright rejected, there may be significant delays in reviews. We encourage the community to help by reviewing PRs or assisting other users in the meantime. -- **What You Can Do**: If you're interested in contributing, reviewing open PRs by following our [Review Guidelines](https://github.com/louislam/uptime-kuma/blob/master/.github/REVIEW_GUIDELINES.md) or offering support to other users is greatly appreciated. All feature requests and PRs will be revisited once the suspension period is lifted. - -We appreciate your patience and understanding as we continue to improve Uptime Kuma. - ### 🚫 Please Avoid Unnecessary Pinging of Maintainers -**We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are reserved for critical/urgent pull requests that require immediate attention.** - -**Why**: Reserving pings for urgent matters ensures maintainers can prioritize critical tasks effectively. +We kindly ask you to refrain from pinging maintainers unless absolutely necessary. Pings are for critical/urgent pull requests that require immediate attention.

    @@ -33,18 +21,15 @@ We appreciate your patience and understanding as we continue to improve Uptime K - **What features or functionality does this pull request introduce or enhance?** - Please provide a detailed explanation here. -## 🔗 Related Issues - - Relates to #issue-number - Resolves #issue-number -## 🔄 Changes - -### 🛠️ Type of change +## 🛠️ Type of change @@ -63,6 +48,7 @@ Please link any GitHub issues or tasks that this pull request addresses. Use the - [ ] 🔍 My code adheres to the style guidelines of this project. +- [ ] 🦿 I have indicated where (if any) I used an LLM for the contributions - [ ] ✅ I ran ESLint and other code linters for modified files. - [ ] 🛠️ I have reviewed and tested my code. - [ ] 📝 I have commented my code, especially in hard-to-understand areas (e.g., using JSDoc for methods). @@ -76,10 +62,11 @@ Please link any GitHub issues or tasks that this pull request addresses. Use the ## 📷 Screenshots or Visual Changes - **UI Modifications**: Highlight any changes made to the user interface. From 9506b3a16be54334e4d2f3f683e780b92471ca87 Mon Sep 17 00:00:00 2001 From: Ryan Hartje Date: Sun, 29 Jun 2025 19:37:41 -0500 Subject: [PATCH 096/133] feat: Add optional audience for http-monitors via the oauth2 client credentials flow (#5950) Co-authored-by: Frank Elsinga --- .../2025-06-24-0000-add-audience-to-oauth.js | 12 ++++++++++++ server/model/monitor.js | 3 ++- server/server.js | 1 + server/util-server.js | 17 +++++++++++------ src/lang/en.json | 2 ++ src/pages/EditMonitor.vue | 4 ++++ 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 db/knex_migrations/2025-06-24-0000-add-audience-to-oauth.js diff --git a/db/knex_migrations/2025-06-24-0000-add-audience-to-oauth.js b/db/knex_migrations/2025-06-24-0000-add-audience-to-oauth.js new file mode 100644 index 000000000..6666ed9c8 --- /dev/null +++ b/db/knex_migrations/2025-06-24-0000-add-audience-to-oauth.js @@ -0,0 +1,12 @@ +exports.up = function (knex) { + return knex.schema + .alterTable("monitor", function (table) { + table.string("oauth_audience").nullable().defaultTo(null); + }); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("monitor", function (table) { + table.string("oauth_audience").alter(); + }); +}; diff --git a/server/model/monitor.js b/server/model/monitor.js index c1db77e8b..3be8267c9 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -181,6 +181,7 @@ class Monitor extends BeanModel { oauth_client_secret: this.oauth_client_secret, oauth_token_url: this.oauth_token_url, oauth_scopes: this.oauth_scopes, + oauth_audience: this.oauth_audience, oauth_auth_method: this.oauth_auth_method, pushToken: this.pushToken, databaseConnectionString: this.databaseConnectionString, @@ -1746,7 +1747,7 @@ class Monitor extends BeanModel { */ async makeOidcTokenClientCredentialsRequest() { log.debug("monitor", `[${this.name}] The oauth access-token undefined or expired. Requesting a new token`); - const oAuthAccessToken = await getOidcTokenClientCredentials(this.oauth_token_url, this.oauth_client_id, this.oauth_client_secret, this.oauth_scopes, this.oauth_auth_method); + const oAuthAccessToken = await getOidcTokenClientCredentials(this.oauth_token_url, this.oauth_client_id, this.oauth_client_secret, this.oauth_scopes, this.oauth_audience, this.oauth_auth_method); if (this.oauthAccessToken?.expires_at) { log.debug("monitor", `[${this.name}] Obtained oauth access-token. Expires at ${new Date(this.oauthAccessToken?.expires_at * 1000)}`); } else { diff --git a/server/server.js b/server/server.js index 5b2f41a2e..b7025464b 100644 --- a/server/server.js +++ b/server/server.js @@ -802,6 +802,7 @@ let needSetup = false; bean.oauth_auth_method = monitor.oauth_auth_method; bean.oauth_token_url = monitor.oauth_token_url; bean.oauth_scopes = monitor.oauth_scopes; + bean.oauth_audience = monitor.oauth_audience; bean.tlsCa = monitor.tlsCa; bean.tlsCert = monitor.tlsCert; bean.tlsKey = monitor.tlsKey; diff --git a/server/util-server.js b/server/util-server.js index 4da4be91b..d4a37970d 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -58,7 +58,7 @@ exports.initJWTSecret = async () => { }; /** - * Decodes a jwt and returns the payload portion without verifying the jqt. + * Decodes a jwt and returns the payload portion without verifying the jwt. * @param {string} jwt The input jwt as a string * @returns {object} Decoded jwt payload object */ @@ -67,15 +67,16 @@ exports.decodeJwt = (jwt) => { }; /** - * Gets a Access Token form a oidc/oauth2 provider - * @param {string} tokenEndpoint The token URI form the auth service provider + * Gets an Access Token from an oidc/oauth2 provider + * @param {string} tokenEndpoint The token URI from the auth service provider * @param {string} clientId The oidc/oauth application client id * @param {string} clientSecret The oidc/oauth application client secret - * @param {string} scope The scope the for which the token should be issued for - * @param {string} authMethod The method on how to sent the credentials. Default client_secret_basic + * @param {string} scope The scope(s) for which the token should be issued for + * @param {string} audience The audience for which the token should be issued for + * @param {string} authMethod The method used to send the credentials. Default client_secret_basic * @returns {Promise} TokenSet promise if the token request was successful */ -exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSecret, scope, authMethod = "client_secret_basic") => { +exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSecret, scope, audience, authMethod = "client_secret_basic") => { const oauthProvider = new oidc.Issuer({ token_endpoint: tokenEndpoint }); let client = new oauthProvider.Client({ client_id: clientId, @@ -91,6 +92,10 @@ exports.getOidcTokenClientCredentials = async (tokenEndpoint, clientId, clientSe if (scope) { grantParams.scope = scope; } + + if (audience) { + grantParams.audience = audience; + } return await client.grant(grantParams); }; diff --git a/src/lang/en.json b/src/lang/en.json index a979edcc2..b6449371b 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -1022,6 +1022,8 @@ "Client ID": "Client ID", "Client Secret": "Client Secret", "OAuth Scope": "OAuth Scope", + "OAuth Audience": "OAuth Audience", + "Optional: The audience to request the JWT for": "Optional: The audience to request the JWT for", "Optional: Space separated list of scopes": "Optional: Space separated list of scopes", "Go back to home page.": "Go back to home page.", "No tags found.": "No tags found.", diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 0d628895d..1b7af4184 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -1025,6 +1025,10 @@ +
    + + +
    + + From d490285a447c4401e9986f6dbed3995454042fb5 Mon Sep 17 00:00:00 2001 From: yumeiyin <155420652+yumeiyin@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:08:53 +0800 Subject: [PATCH 131/133] chore: fix some minor issues in comments (#5984) Signed-off-by: yumeiyin --- server/model/monitor.js | 2 +- server/notification-providers/promosms.js | 2 +- server/socket-handlers/api-key-socket-handler.js | 2 +- server/uptime-calculator.js | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 3be8267c9..0ddfa924c 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -1314,7 +1314,7 @@ class Monitor extends BeanModel { /** * Send a notification about a monitor * @param {boolean} isFirstBeat Is this beat the first of this monitor? - * @param {Monitor} monitor The monitor to send a notificaton about + * @param {Monitor} monitor The monitor to send a notification about * @param {Bean} bean Status information about monitor * @returns {void} */ diff --git a/server/notification-providers/promosms.js b/server/notification-providers/promosms.js index 05334e902..36b7ecb33 100644 --- a/server/notification-providers/promosms.js +++ b/server/notification-providers/promosms.js @@ -15,7 +15,7 @@ class PromoSMS extends NotificationProvider { notification.promosmsAllowLongSMS = false; } - //TODO: Add option for enabling special characters. It will decrese message max length from 160 to 70 chars. + //TODO: Add option for enabling special characters. It will decrease message max length from 160 to 70 chars. //Lets remove non ascii char let cleanMsg = msg.replace(/[^\x00-\x7F]/g, ""); diff --git a/server/socket-handlers/api-key-socket-handler.js b/server/socket-handlers/api-key-socket-handler.js index d88151294..d49ac086b 100644 --- a/server/socket-handlers/api-key-socket-handler.js +++ b/server/socket-handlers/api-key-socket-handler.js @@ -27,7 +27,7 @@ module.exports.apiKeySocketHandler = (socket) => { log.debug("apikeys", "Added API Key"); log.debug("apikeys", key); - // Append key ID and prefix to start of key seperated by _, used to get + // Append key ID and prefix to start of key separated by _, used to get // correct hash when validating key. let formattedKey = "uk" + bean.id + "_" + clearKey; await sendAPIKeyList(socket); diff --git a/server/uptime-calculator.js b/server/uptime-calculator.js index 71d1d458c..48f7d80ae 100644 --- a/server/uptime-calculator.js +++ b/server/uptime-calculator.js @@ -582,7 +582,7 @@ class UptimeCalculator { let totalPing = 0; let endTimestamp; - // Get the eariest timestamp of the required period based on the type + // Get the earliest timestamp of the required period based on the type switch (type) { case "day": endTimestamp = key - 86400 * (num - 1); @@ -710,7 +710,7 @@ class UptimeCalculator { let endTimestamp; - // Get the eariest timestamp of the required period based on the type + // Get the earliest timestamp of the required period based on the type switch (type) { case "day": endTimestamp = key - 86400 * (num - 1); From 7c88a38df3815130263721394afb58e8fd32524e Mon Sep 17 00:00:00 2001 From: Ionys <9364594+Ionys320@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:28:29 +0200 Subject: [PATCH 132/133] Fixing recurring maintenance start (again) (#5914) Co-authored-by: Frank Elsinga --- ...5-06-13-0000-maintenance-add-last-start.js | 34 ++++++++++++++++++ server/model/maintenance.js | 36 +++++++++++++++---- 2 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 db/knex_migrations/2025-06-13-0000-maintenance-add-last-start.js diff --git a/db/knex_migrations/2025-06-13-0000-maintenance-add-last-start.js b/db/knex_migrations/2025-06-13-0000-maintenance-add-last-start.js new file mode 100644 index 000000000..3cb28d968 --- /dev/null +++ b/db/knex_migrations/2025-06-13-0000-maintenance-add-last-start.js @@ -0,0 +1,34 @@ +// Add column last_start_date to maintenance table +exports.up = async function (knex) { + await knex.schema + .alterTable("maintenance", function (table) { + table.datetime("last_start_date"); + }); + + // Perform migration for recurring-interval strategy + const recurringMaintenances = await knex("maintenance").where({ + strategy: "recurring-interval", + cron: "* * * * *" + }).select("id", "start_time"); + + // eslint-disable-next-line camelcase + const maintenanceUpdates = recurringMaintenances.map(async ({ start_time, id }) => { + // eslint-disable-next-line camelcase + const [ hourStr, minuteStr ] = start_time.split(":"); + const hour = parseInt(hourStr, 10); + const minute = parseInt(minuteStr, 10); + + const cron = `${minute} ${hour} * * *`; + + await knex("maintenance") + .where({ id }) + .update({ cron }); + }); + await Promise.all(maintenanceUpdates); +}; + +exports.down = function (knex) { + return knex.schema.alterTable("maintenance", function (table) { + table.dropColumn("last_start_date"); + }); +}; diff --git a/server/model/maintenance.js b/server/model/maintenance.js index 0a70063ff..aa1fa0c14 100644 --- a/server/model/maintenance.js +++ b/server/model/maintenance.js @@ -202,7 +202,7 @@ class Maintenance extends BeanModel { * @returns {void} */ static validateCron(cron) { - let job = new Cron(cron, () => {}); + let job = new Cron(cron, () => { }); job.stop(); } @@ -239,6 +239,8 @@ class Maintenance extends BeanModel { apicache.clear(); }); } else if (this.cron != null) { + let current = dayjs(); + // Here should be cron or recurring try { this.beanMeta.status = "scheduled"; @@ -258,6 +260,10 @@ class Maintenance extends BeanModel { this.beanMeta.status = "scheduled"; UptimeKumaServer.getInstance().sendMaintenanceListByUserID(this.user_id); }, duration); + + // Set last start date to current time + this.last_start_date = current.toISOString(); + R.store(this); }; // Create Cron @@ -268,9 +274,25 @@ class Maintenance extends BeanModel { const startDateTime = startDate.hour(hour).minute(minute); this.beanMeta.job = new Cron(this.cron, { timezone: await this.getTimezone(), - interval: this.interval_day * 24 * 60 * 60, startAt: startDateTime.toISOString(), - }, startEvent); + }, () => { + if (!this.lastStartDate || this.interval_day === 1) { + return startEvent(); + } + + // If last start date is set, it means the maintenance has been started before + let lastStartDate = dayjs(this.lastStartDate) + .subtract(1.1, "hour"); // Subtract 1.1 hour to avoid issues with timezone differences + + // Check if the interval is enough + if (current.diff(lastStartDate, "day") < this.interval_day) { + log.debug("maintenance", "Maintenance id: " + this.id + " is still in the window, skipping start event"); + return; + } + + log.debug("maintenance", "Maintenance id: " + this.id + " is not in the window, starting event"); + return startEvent(); + }); } else { this.beanMeta.job = new Cron(this.cron, { timezone: await this.getTimezone(), @@ -279,7 +301,6 @@ class Maintenance extends BeanModel { // Continue if the maintenance is still in the window let runningTimeslot = this.getRunningTimeslot(); - let current = dayjs(); if (runningTimeslot) { let duration = dayjs(runningTimeslot.endDate).diff(current, "second") * 1000; @@ -423,8 +444,11 @@ class Maintenance extends BeanModel { } else if (!this.strategy.startsWith("recurring-")) { this.cron = ""; } else if (this.strategy === "recurring-interval") { - // For intervals, the pattern is calculated in the run function as the interval-option is set - this.cron = "* * * * *"; + // For intervals, the pattern is used to check if the execution should be started + let array = this.start_time.split(":"); + let hour = parseInt(array[0]); + let minute = parseInt(array[1]); + this.cron = `${minute} ${hour} * * *`; this.duration = this.calcDuration(); log.debug("maintenance", "Cron: " + this.cron); log.debug("maintenance", "Duration: " + this.duration); From 2fd4e1cc72a7522df87310efdd2ff75c613f5159 Mon Sep 17 00:00:00 2001 From: "Otto Richter (fnetX)" Date: Thu, 17 Jul 2025 08:47:51 +0200 Subject: [PATCH 133/133] Matrix token command hint should send JSON (#5990) Co-authored-by: Otto Richter --- src/components/notifications/Matrix.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/notifications/Matrix.vue b/src/components/notifications/Matrix.vue index 60d43cf17..49c51f9e4 100644 --- a/src/components/notifications/Matrix.vue +++ b/src/components/notifications/Matrix.vue @@ -18,7 +18,7 @@ {{ $t("matrixDesc1") }}

    - curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login". + curl -XPOST --json '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login".