diff --git a/extra/reset-password.js b/extra/reset-password.js index b87d90f16..e66173af1 100644 --- a/extra/reset-password.js +++ b/extra/reset-password.js @@ -3,6 +3,7 @@ console.log("== Uptime Kuma Reset Password Tool =="); const Database = require("../server/database"); const { R } = require("redbean-node"); const readline = require("readline"); +const { passwordStrength } = require("check-password-strength"); const { initJWTSecret } = require("../server/util-server"); const User = require("../server/model/user"); const { io } = require("socket.io-client"); @@ -42,8 +43,15 @@ const main = async () => { console.log("Using password from argument"); console.warn("\x1b[31m%s\x1b[0m", "Warning: the password might be stored, in plain text, in your shell's history"); password = confirmPassword = args["new-password"] + ""; + if (passwordStrength(password).value === "Too weak") { + throw new Error("Password is too weak, please use a stronger password."); + } } else { password = await question("New Password: "); + if (passwordStrength(password).value === "Too weak") { + console.log("Password is too weak, please try again."); + continue; + } confirmPassword = await question("Confirm New Password: "); } diff --git a/package-lock.json b/package-lock.json index 70640c26f..c5269c088 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "2.0.0-beta.1", + "version": "2.0.0-beta.2", "license": "MIT", "dependencies": { "@grpc/grpc-js": "~1.8.22", @@ -14,7 +14,7 @@ "@louislam/sqlite3": "15.1.6", "@vvo/tzdb": "^6.125.0", "args-parser": "~1.3.0", - "axios": "~0.29.0", + "axios": "~0.30.0", "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "chardet": "~1.4.0", @@ -24,6 +24,7 @@ "command-exists": "~1.2.9", "compare-versions": "~3.6.0", "compression": "~1.7.4", + "country-flag-emoji-polyfill": "^0.1.8", "croner": "~8.1.0", "dayjs": "~1.11.5", "dev-null": "^0.1.1", @@ -338,25 +339,25 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.775.0.tgz", - "integrity": "sha512-AMGywI8C+kcSTWjftq9jgzkospF1A/QNd/h6zN+3uuS+3rZhkPIoPCpaQ0NSTYD49FTq8ALZzNKTqTEOnp+txA==", + "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==", "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.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.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.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.775.0", + "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", @@ -389,9 +390,9 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.775.0.tgz", - "integrity": "sha512-vqG1S2ap77WP4D5qt4bEPE0duQ4myN+cDr1NeP8QpSTajetbkDGVo7h1VViYMcUoFUVWBj6Qf1X1VfOq+uaxbA==", + "version": "3.782.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.782.0.tgz", + "integrity": "sha512-5GlJBejo8wqMpSSEKb45WE82YxI2k73YuebjLH/eWDNQeE6VI5Bh9lA1YQ7xNkLLH8hIsb0pSfKVuwh0VEzVrg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -401,12 +402,12 @@ "@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.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.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.775.0", + "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", @@ -462,13 +463,13 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.775.0.tgz", - "integrity": "sha512-fcyZzoCFp2u4NWXW8INA81kEEsWC7ZFzy5m/6t2RF1Gjt+1n2AlFQVqF73LeyEcaN+biNKq87kh94Btk0QdfHA==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.775.0", + "@aws-sdk/client-cognito-identity": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", @@ -518,9 +519,9 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.775.0.tgz", - "integrity": "sha512-0gJc6cALsgrjeC5U3qDjbz4myIC/j49+gPz9nkvY+C0OYWt1KH1tyfiZUuCRGfuFHhQ+3KMMDSL229TkBP3E7g==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -528,9 +529,9 @@ "@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.775.0", - "@aws-sdk/credential-provider-web-identity": "3.775.0", - "@aws-sdk/nested-clients": "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", "@smithy/property-provider": "^4.0.2", @@ -543,18 +544,18 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.775.0.tgz", - "integrity": "sha512-D8Zre5W2sXC/ANPqCWPqwYpU1cKY9DF6ckFZyDrqlcBC0gANgpY6fLrBtYo2fwJsbj+1A24iIpBINV7erdprgA==", + "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==", "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.775.0", + "@aws-sdk/credential-provider-ini": "3.782.0", "@aws-sdk/credential-provider-process": "3.775.0", - "@aws-sdk/credential-provider-sso": "3.775.0", - "@aws-sdk/credential-provider-web-identity": "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", "@smithy/property-provider": "^4.0.2", @@ -585,15 +586,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.775.0.tgz", - "integrity": "sha512-du06V7u9HDmRuwZnRjf85shO3dffeKOkQplV5/2vf3LgTPNEI9caNomi/cCGyxKGOeSUHAKrQ1HvpPfOaI6t5Q==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.775.0", + "@aws-sdk/client-sso": "3.782.0", "@aws-sdk/core": "3.775.0", - "@aws-sdk/token-providers": "3.775.0", + "@aws-sdk/token-providers": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", @@ -605,14 +606,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.775.0.tgz", - "integrity": "sha512-z4XLYui5aHsr78mbd5BtZfm55OM5V55qK/X17OPrEqjYDDk3GlI8Oe2ZjTmOVrKwMpmzXKhsakeFHKfDyOvv1A==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-sdk/core": "3.775.0", - "@aws-sdk/nested-clients": "3.775.0", + "@aws-sdk/nested-clients": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", @@ -623,26 +624,28 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.775.0.tgz", - "integrity": "sha512-THvyeStdvd0z8Dv1lJ7KrMRiZkFfUktYQUvvFT45ph14jHC5oRoPColtLHz4JjuDN5QEQ5EGrbc6USADZu1k/w==", + "version": "3.782.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.782.0.tgz", + "integrity": "sha512-EP0viOqgw9hU8Lt25Rc7nPlPKMCsO7ntVGSA5TDdjaOHU9wN1LdKwRmFWYE+ii0FIPmagJmgJJoHdpq85oqsUw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.775.0", + "@aws-sdk/client-cognito-identity": "3.782.0", "@aws-sdk/core": "3.775.0", - "@aws-sdk/credential-provider-cognito-identity": "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.775.0", - "@aws-sdk/credential-provider-node": "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.775.0", - "@aws-sdk/credential-provider-web-identity": "3.775.0", - "@aws-sdk/nested-clients": "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", "@smithy/property-provider": "^4.0.2", "@smithy/types": "^4.2.0", "tslib": "^2.6.2" @@ -699,15 +702,15 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.775.0.tgz", - "integrity": "sha512-7Lffpr1ptOEDE1ZYH1T78pheEY1YmeXWBfFt/amZ6AGsKSLG+JPXvof3ltporTGR2bhH/eJPo7UHCglIuXfzYg==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-sdk/core": "3.775.0", "@aws-sdk/types": "3.775.0", - "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-endpoints": "3.782.0", "@smithy/core": "^3.2.0", "@smithy/protocol-http": "^5.1.0", "@smithy/types": "^4.2.0", @@ -718,9 +721,9 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.775.0.tgz", - "integrity": "sha512-f37jmAzkuIhKyhtA6s0LGpqQvm218vq+RNMUDkGm1Zz2fxJ5pBIUTDtygiI3vXTcmt9DTIB8S6JQhjrgtboktw==", + "version": "3.782.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.782.0.tgz", + "integrity": "sha512-QOYC8q7luzHFXrP0xYAqBctoPkynjfV0r9dqntFu4/IWMTyC1vlo1UTxFAjIPyclYw92XJyEkVCVg9v/nQnsUA==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -730,12 +733,12 @@ "@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.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.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.775.0", + "@aws-sdk/util-user-agent-node": "3.782.0", "@smithy/config-resolver": "^4.1.0", "@smithy/core": "^3.2.0", "@smithy/fetch-http-handler": "^5.0.2", @@ -786,13 +789,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.775.0.tgz", - "integrity": "sha512-Q6MtbEhkOggVSz/dN89rIY/ry80U3v89o0Lrrc+Rpvaiaaz8pEN0DsfEcg0IjpzBQ8Owoa6lNWyglHbzPhaJpA==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/nested-clients": "3.775.0", + "@aws-sdk/nested-clients": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/property-provider": "^4.0.2", "@smithy/shared-ini-file-loader": "^4.0.2", @@ -818,9 +821,9 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.775.0.tgz", - "integrity": "sha512-yjWmUgZC9tUxAo8Uaplqmq0eUh0zrbZJdwxGRKdYxfm4RG6fMw1tj52+KkatH7o+mNZvg1GDcVp/INktxonJLw==", + "version": "3.782.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.782.0.tgz", + "integrity": "sha512-/RJOAO7o7HI6lEa4ASbFFLHGU9iPK876BhsVfnl54MvApPVYWQ9sHO0anOUim2S5lQTwd/6ghuH3rFYSq/+rdw==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -860,13 +863,13 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.775.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.775.0.tgz", - "integrity": "sha512-N9yhTevbizTOMo3drH7Eoy6OkJ3iVPxhV7dwb6CMAObbLneS36CSfA6xQXupmHWcRvZPTz8rd1JGG3HzFOau+g==", + "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==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.782.0", "@aws-sdk/types": "3.775.0", "@smithy/node-config-provider": "^4.0.2", "@smithy/types": "^4.2.0", @@ -1159,33 +1162,33 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.9.1.tgz", - "integrity": "sha512-GTKj/2xvgD918xULWRwoJ3kiCCZNzeopxa/nDfMC4o6KzrnuWbT3K1AtIFUxok9yC6VrUOgIZXMygky06xDA1g==", + "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==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.4.0" + "@azure/msal-common": "15.5.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.4.0.tgz", - "integrity": "sha512-reeIUDXt6Xc+FpCBDEbUFQWvJ6SjE0JwsGYIfa3ZCR6Tpzjc9J1v+/InQgfCeJzfTRd7PDJVxI6TSzOmOd7+Ag==", + "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==", "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.4.1.tgz", - "integrity": "sha512-VlW6ygnKBIqUKIHnA/ubQ+F3rZ8aW3K6VA1bpZ90Ln0vlE4XaA6yGB/FibPJxet7gWinAG1oSpQqPN/PL9AqIw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.5.0.tgz", + "integrity": "sha512-9cLUmcOZ5FODz3uAhS2C9A1U7xDUTCHVcaNQBYpOd5qCKdKM6ft/ydAfw27vEntuaDgnh5jytOAKsEzEbtoQ1Q==", "license": "MIT", "dependencies": { - "@azure/msal-common": "15.4.0", + "@azure/msal-common": "15.5.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -2477,14 +2480,14 @@ "license": "BSD-3-Clause" }, "node_modules/@intlify/core-base": { - "version": "9.14.3", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.3.tgz", - "integrity": "sha512-nbJ7pKTlXFnaXPblyfiH6awAx1C0PWNNuqXAR74yRwgi5A/Re/8/5fErLY0pv4R8+EHj3ZaThMHdnuC/5OBa6g==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.4.tgz", + "integrity": "sha512-vtZCt7NqWhKEtHa3SD/322DlgP5uR9MqWxnE0y8Q0tjDs9H5Lxhss+b5wv8rmuXRoHKLESNgw9d+EN9ybBbj9g==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/message-compiler": "9.14.3", - "@intlify/shared": "9.14.3" + "@intlify/message-compiler": "9.14.4", + "@intlify/shared": "9.14.4" }, "engines": { "node": ">= 16" @@ -2494,13 +2497,13 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.14.3", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.3.tgz", - "integrity": "sha512-ANwC226BQdd+MpJ36rOYkChSESfPwu3Ss2Faw0RHTOknYLoHTX6V6e/JjIKVDMbzs0/H/df/rO6yU0SPiWHqNg==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.4.tgz", + "integrity": "sha512-vcyCLiVRN628U38c3PbahrhbbXrckrM9zpy0KZVlDk2Z0OnGwv8uQNNXP3twwGtfLsCf4gu3ci6FMIZnPaqZsw==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/shared": "9.14.3", + "@intlify/shared": "9.14.4", "source-map-js": "^1.0.2" }, "engines": { @@ -2511,9 +2514,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.14.3", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.3.tgz", - "integrity": "sha512-hJXz9LA5VG7qNE00t50bdzDv8Z4q9fpcL81wj4y4duKavrv0KM8YNLTwXNEFINHjTsfrG9TXvPuEjVaAvZ7yWg==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.4.tgz", + "integrity": "sha512-P9zv6i1WvMc9qDBWvIgKkymjY2ptIiQ065PjDv7z7fDqH3J/HBRBN5IoiR46r/ujRcU7hCuSIZWvCAFCyuOYZA==", "dev": true, "license": "MIT", "engines": { @@ -2684,9 +2687,9 @@ } }, "node_modules/@js-joda/core": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.4.tgz", - "integrity": "sha512-ChdLDTYMEoYoiKZMT90wZMEdGvZ2/QZMnhvjvEqeO5oLoxUfSiLzfe6Lhf3g88+MhZ+utbAu7PAxX1sZkLo5pA==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.5.tgz", + "integrity": "sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ==", "license": "BSD-3-Clause" }, "node_modules/@js-sdsl/ordered-map": { @@ -2789,9 +2792,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.0.tgz", - "integrity": "sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.2.tgz", + "integrity": "sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==", "license": "MIT", "optional": true, "dependencies": { @@ -3107,9 +3110,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, @@ -3284,9 +3287,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", - "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "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==", "cpu": [ "arm" ], @@ -3298,9 +3301,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", - "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "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==", "cpu": [ "arm64" ], @@ -3312,9 +3315,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", - "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "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==", "cpu": [ "arm64" ], @@ -3326,9 +3329,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", - "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", + "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", "cpu": [ "x64" ], @@ -3340,9 +3343,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", - "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "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==", "cpu": [ "arm64" ], @@ -3354,9 +3357,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", - "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "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==", "cpu": [ "x64" ], @@ -3368,9 +3371,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", - "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "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==", "cpu": [ "arm" ], @@ -3382,9 +3385,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", - "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "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==", "cpu": [ "arm" ], @@ -3396,9 +3399,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", - "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "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==", "cpu": [ "arm64" ], @@ -3410,9 +3413,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", - "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "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==", "cpu": [ "arm64" ], @@ -3424,9 +3427,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", - "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "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==", "cpu": [ "loong64" ], @@ -3438,9 +3441,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", - "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "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==", "cpu": [ "ppc64" ], @@ -3452,9 +3455,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", - "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "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==", "cpu": [ "riscv64" ], @@ -3466,9 +3469,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.37.0.tgz", - "integrity": "sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==", + "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==", "cpu": [ "riscv64" ], @@ -3480,9 +3483,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", - "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "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==", "cpu": [ "s390x" ], @@ -3494,9 +3497,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", - "integrity": "sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==", + "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==", "cpu": [ "x64" ], @@ -3508,9 +3511,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", - "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "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==", "cpu": [ "x64" ], @@ -3522,9 +3525,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", - "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "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==", "cpu": [ "arm64" ], @@ -3536,9 +3539,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", - "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "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==", "cpu": [ "ia32" ], @@ -3550,9 +3553,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", - "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "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==", "cpu": [ "x64" ], @@ -4313,23 +4316,23 @@ "license": "MIT" }, "node_modules/@testcontainers/hivemq": { - "version": "10.23.0", - "resolved": "https://registry.npmjs.org/@testcontainers/hivemq/-/hivemq-10.23.0.tgz", - "integrity": "sha512-e55T7tkqJ+FZ3eWIGew7bR2iO/Flsc9LjnqoKzGtpLjNLEnxptEuQkDLJYlzYNlroRXz8K72swN2gsFswaTOBA==", + "version": "10.24.2", + "resolved": "https://registry.npmjs.org/@testcontainers/hivemq/-/hivemq-10.24.2.tgz", + "integrity": "sha512-5HXVaC4NXi5SSj3BpW3O7jNoPp6Z7A4ZasdZSLwgq2Ak6+9vZUJc8T1av2FcxHPr5V5B4jflyyJdsIgSTZGYcw==", "dev": true, "license": "MIT", "dependencies": { - "testcontainers": "^10.23.0" + "testcontainers": "^10.24.2" } }, "node_modules/@testcontainers/rabbitmq": { - "version": "10.23.0", - "resolved": "https://registry.npmjs.org/@testcontainers/rabbitmq/-/rabbitmq-10.23.0.tgz", - "integrity": "sha512-XD8RcNBr/Eo5sHctOtLRzYKGmQdfO3LT3FAEyR8unAVJs4OKujrmESnfK5xnsbgot+zs3wp5mPlfTSZEJy+KEg==", + "version": "10.24.2", + "resolved": "https://registry.npmjs.org/@testcontainers/rabbitmq/-/rabbitmq-10.24.2.tgz", + "integrity": "sha512-2Ks5dY22kfgyK6JezF0koHZfEilD5l5T6ntth4VhqHK8MSFvk7Jve8Y6m4kdSth7u+nHH7L++zkROCBRA26r/A==", "dev": true, "license": "MIT", "dependencies": { - "testcontainers": "^10.23.0" + "testcontainers": "^10.24.2" } }, "node_modules/@tootallnate/once": { @@ -4431,9 +4434,9 @@ } }, "node_modules/@types/dockerode": { - "version": "3.3.35", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.35.tgz", - "integrity": "sha512-P+DCMASlsH+QaKkDpekKrP5pLls767PPs+/LrlVbKnEnY5tMpEUa2C6U4gRsdFZengOqxdCIqy16R22Q3pLB6Q==", + "version": "3.3.37", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.37.tgz", + "integrity": "sha512-r+IoKpE5MLKaeD8CvoEh39ckWMLHR/+WBMoRQxrkL+apJqEWLMhBHh+93KIfyPWGd6gK7Q21jpoULKgNoRI0YA==", "dev": true, "license": "MIT", "dependencies": { @@ -4443,9 +4446,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -4552,9 +4555,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.28.tgz", - "integrity": "sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==", + "version": "20.17.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", + "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" @@ -4633,9 +4636,9 @@ } }, "node_modules/@types/ssh2": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.4.tgz", - "integrity": "sha512-9JTQgVBWSgq6mAen6PVnrAmty1lqgCMvpfN+1Ck5WRUsyMYPa6qd50/vMJ0y1zkGpOEgLzm8m8Dx/Y5vRouLaA==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz", + "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4653,9 +4656,9 @@ } }, "node_modules/@types/ssh2/node_modules/@types/node": { - "version": "18.19.84", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.84.tgz", - "integrity": "sha512-ACYy2HGcZPHxEeWTqowTF7dhXN+JU1o7Gr4b41klnn6pj2LD6rsiGqSZojMdk1Jh2ys3m76ap+ae1vvE4+5+vg==", + "version": "18.19.86", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", + "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5827,9 +5830,9 @@ } }, "node_modules/axios": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.29.0.tgz", - "integrity": "sha512-Kjsq1xisgO5DjjNQwZFsy0gpcU1P2j36dZeQDXVhpIU26GVgkDUnROaHLSuluhMqtDE7aKA2hbKXG5yu5DN8Tg==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.30.0.tgz", + "integrity": "sha512-Z4F3LjCgfjZz8BMYalWdMgAQUnEtKDmpwNHjh/C8pQZWde32TF64cqnSeyL3xD/aTIASRU30RHTNzRiV/NpGMg==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.4", @@ -5910,9 +5913,9 @@ "optional": true }, "node_modules/bare-fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz", - "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.2.tgz", + "integrity": "sha512-8wSeOia5B7LwD4+h465y73KOdj5QHsbbuoUfPBi+pXgFJIPuG7SsiOdJuijWMyfid49eD+WivpfY7KT8gbAzBA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -6586,9 +6589,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "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==", "dev": true, "funding": [ { @@ -7202,6 +7205,12 @@ } } }, + "node_modules/country-flag-emoji-polyfill": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/country-flag-emoji-polyfill/-/country-flag-emoji-polyfill-0.1.8.tgz", + "integrity": "sha512-Mbah52sADS3gshUYhK5142gtUuJpHYOXlXtLFI3Ly4RqgkmPMvhX9kMZSTqDM8P7UqtSW99eHKFphhQSGXA3Cg==", + "license": "MIT" + }, "node_modules/cpu-features": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", @@ -7828,9 +7837,9 @@ } }, "node_modules/dockerode": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.4.tgz", - "integrity": "sha512-6GYP/EdzEY50HaOxTVTJ2p+mB5xDHTMJhS+UoGrVyS6VC+iQRh7kZ4FRpUYq6nziby7hPqWhOrFFUFTMUZJJ5w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.5.tgz", + "integrity": "sha512-ZPmKSr1k1571Mrh7oIBS/j0AqAccoecY2yH420ni5j1KyNMgnoTh4Nu4FWunh0HZIJmRSmSysJjBIpa/zyWUEA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7839,7 +7848,7 @@ "@grpc/proto-loader": "^0.7.13", "docker-modem": "^5.0.6", "protobufjs": "^7.3.2", - "tar-fs": "~2.0.1", + "tar-fs": "~2.1.2", "uuid": "^10.0.0" }, "engines": { @@ -7893,16 +7902,16 @@ } }, "node_modules/dockerode/node_modules/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", + "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", "dev": true, "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" } }, "node_modules/dockerode/node_modules/tar-stream": { @@ -7991,9 +8000,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", - "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.5.tgz", + "integrity": "sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ==", "dev": true, "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { @@ -8071,9 +8080,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.126", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.126.tgz", - "integrity": "sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==", + "version": "1.5.136", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", + "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", "dev": true, "license": "ISC" }, @@ -10355,9 +10364,9 @@ } }, "node_modules/human-signals": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", - "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -12770,9 +12779,9 @@ } }, "node_modules/nostr-tools": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.11.0.tgz", - "integrity": "sha512-kRtXI9j5f45NvIcdJacQ0UEAfEb7p/jhZqhAGLQWtUd5idZJPYdSyR8hdw+MmpGH4TCMH5plZrXzFltIIZrkEA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.12.0.tgz", + "integrity": "sha512-pUWEb020gTvt1XZvTa8AKNIHWFapjsv2NKyk43Ez2nnvz6WSXsrTFE0XtkNLSRBjPn6EpxumKeNiVzLz74jNSA==", "license": "Unlicense", "dependencies": { "@noble/ciphers": "^0.5.1", @@ -14719,13 +14728,13 @@ } }, "node_modules/rollup": { - "version": "4.37.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.37.0.tgz", - "integrity": "sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", + "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -14735,26 +14744,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.37.0", - "@rollup/rollup-android-arm64": "4.37.0", - "@rollup/rollup-darwin-arm64": "4.37.0", - "@rollup/rollup-darwin-x64": "4.37.0", - "@rollup/rollup-freebsd-arm64": "4.37.0", - "@rollup/rollup-freebsd-x64": "4.37.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.37.0", - "@rollup/rollup-linux-arm-musleabihf": "4.37.0", - "@rollup/rollup-linux-arm64-gnu": "4.37.0", - "@rollup/rollup-linux-arm64-musl": "4.37.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.37.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-gnu": "4.37.0", - "@rollup/rollup-linux-riscv64-musl": "4.37.0", - "@rollup/rollup-linux-s390x-gnu": "4.37.0", - "@rollup/rollup-linux-x64-gnu": "4.37.0", - "@rollup/rollup-linux-x64-musl": "4.37.0", - "@rollup/rollup-win32-arm64-msvc": "4.37.0", - "@rollup/rollup-win32-ia32-msvc": "4.37.0", - "@rollup/rollup-win32-x64-msvc": "4.37.0", + "@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", "fsevents": "~2.3.2" } }, @@ -16454,9 +16463,9 @@ } }, "node_modules/testcontainers": { - "version": "10.23.0", - "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.23.0.tgz", - "integrity": "sha512-sZeij9mAyR9ixlaAmxU/DNb5LQ2duGCBDVjLaI975QGsX3sWatsBMDr4rqnP3IBemLynp+azZBMEfw75YsXMMg==", + "version": "10.24.2", + "resolved": "https://registry.npmjs.org/testcontainers/-/testcontainers-10.24.2.tgz", + "integrity": "sha512-Don3EXEQuSw14+nFG9pj48fL9ck/jXDfR9Rb0K3acOyn/gg97+gsnfZaLzpdejl9GcPJVKxACNRe3SYVC2uWqg==", "dev": true, "license": "MIT", "dependencies": { @@ -16467,12 +16476,12 @@ "byline": "^5.0.0", "debug": "^4.3.5", "docker-compose": "^0.24.8", - "dockerode": "^4.0.4", + "dockerode": "^4.0.5", "get-port": "^7.1.0", "proper-lockfile": "^4.1.2", "properties-reader": "^2.3.0", "ssh-remote-port-forward": "^1.0.4", - "tar-fs": "^3.0.6", + "tar-fs": "^3.0.7", "tmp": "^0.2.3", "undici": "^5.28.5" } @@ -17027,9 +17036,9 @@ } }, "node_modules/vite": { - "version": "5.4.15", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.15.tgz", - "integrity": "sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==", + "version": "5.4.18", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", + "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", "dev": true, "license": "MIT", "dependencies": { @@ -17383,14 +17392,14 @@ } }, "node_modules/vue-i18n": { - "version": "9.14.3", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.3.tgz", - "integrity": "sha512-C+E0KE8ihKjdYCQx8oUkXX+8tBItrYNMnGJuzEPevBARQFUN2tKez6ZVOvBrWH0+KT5wEk3vOWjNk7ygb2u9ig==", + "version": "9.14.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.4.tgz", + "integrity": "sha512-B934C8yUyWLT0EMud3DySrwSUJI7ZNiWYsEEz2gknTthqKiG4dzWE/WSa8AzCuSQzwBEv4HtG1jZDhgzPfWSKQ==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/core-base": "9.14.3", - "@intlify/shared": "9.14.3", + "@intlify/core-base": "9.14.4", + "@intlify/shared": "9.14.4", "@vue/devtools-api": "^6.5.0" }, "engines": { @@ -17890,9 +17899,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index ce6710163..4a5aefd0d 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@louislam/sqlite3": "15.1.6", "@vvo/tzdb": "^6.125.0", "args-parser": "~1.3.0", - "axios": "~0.29.0", + "axios": "~0.30.0", "badge-maker": "~3.3.1", "bcryptjs": "~2.4.3", "chardet": "~1.4.0", @@ -82,6 +82,7 @@ "command-exists": "~1.2.9", "compare-versions": "~3.6.0", "compression": "~1.7.4", + "country-flag-emoji-polyfill": "^0.1.8", "croner": "~8.1.0", "dayjs": "~1.11.5", "dev-null": "^0.1.1", diff --git a/server/model/monitor.js b/server/model/monitor.js index 5999d93e7..58decbcba 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -380,39 +380,6 @@ class Monitor extends BeanModel { if (await Monitor.isUnderMaintenance(this.id)) { bean.msg = "Monitor under maintenance"; bean.status = MAINTENANCE; - } else if (this.type === "group") { - const children = await Monitor.getChildren(this.id); - - if (children.length > 0) { - bean.status = UP; - bean.msg = "All children up and running"; - for (const child of children) { - if (!child.active) { - // Ignore inactive childs - continue; - } - const lastBeat = await Monitor.getPreviousHeartbeat(child.id); - - // Only change state if the monitor is in worse conditions then the ones before - // lastBeat.status could be null - if (!lastBeat) { - bean.status = PENDING; - } else if (bean.status === UP && (lastBeat.status === PENDING || lastBeat.status === DOWN)) { - bean.status = lastBeat.status; - } else if (bean.status === PENDING && lastBeat.status === DOWN) { - bean.status = lastBeat.status; - } - } - - if (bean.status !== UP) { - bean.msg = "Child inaccessible"; - } - } else { - // Set status pending if group is empty - bean.status = PENDING; - bean.msg = "Group empty"; - } - } else if (this.type === "http" || this.type === "keyword" || this.type === "json-query") { // Do not do any queries/high loading things before the "bean.ping" let startTime = dayjs().valueOf(); @@ -1327,7 +1294,8 @@ class Monitor extends BeanModel { try { const heartbeatJSON = bean.toJSON(); const monitorData = [{ id: monitor.id, - active: monitor.active + active: monitor.active, + name: monitor.name }]; const preloadData = await Monitor.preparePreloadData(monitorData); // Prevent if the msg is undefined, notifications such as Discord cannot send out. @@ -1625,7 +1593,7 @@ class Monitor extends BeanModel { /** * Gets all Children of the monitor * @param {number} monitorID ID of monitor to get - * @returns {Promise>} Children + * @returns {Promise[]>} Children */ static async getChildren(monitorID) { return await R.getAll(` diff --git a/server/monitor-types/dns.js b/server/monitor-types/dns.js index 8b87932fe..5a47e4591 100644 --- a/server/monitor-types/dns.js +++ b/server/monitor-types/dns.js @@ -34,12 +34,16 @@ class DnsMonitorType extends MonitorType { switch (monitor.dns_resolve_type) { case "A": case "AAAA": - case "TXT": case "PTR": dnsMessage = `Records: ${dnsRes.join(" | ")}`; conditionsResult = dnsRes.some(record => handleConditions({ record })); break; + case "TXT": + dnsMessage = `Records: ${dnsRes.join(" | ")}`; + conditionsResult = dnsRes.flat().some(record => handleConditions({ record })); + break; + case "CNAME": dnsMessage = dnsRes[0]; conditionsResult = handleConditions({ record: dnsRes[0] }); diff --git a/server/monitor-types/group.js b/server/monitor-types/group.js new file mode 100644 index 000000000..28d0443d4 --- /dev/null +++ b/server/monitor-types/group.js @@ -0,0 +1,49 @@ +const { UP, PENDING, DOWN } = require("../../src/util"); +const { MonitorType } = require("./monitor-type"); +const Monitor = require("../model/monitor"); + +class GroupMonitorType extends MonitorType { + name = "group"; + + /** + * @inheritdoc + */ + async check(monitor, heartbeat, _server) { + const children = await Monitor.getChildren(monitor.id); + + if (children.length > 0) { + heartbeat.status = UP; + heartbeat.msg = "All children up and running"; + for (const child of children) { + if (!child.active) { + // Ignore inactive childs + continue; + } + const lastBeat = await Monitor.getPreviousHeartbeat(child.id); + + // Only change state if the monitor is in worse conditions then the ones before + // lastBeat.status could be null + if (!lastBeat) { + heartbeat.status = PENDING; + } else if (heartbeat.status === UP && (lastBeat.status === PENDING || lastBeat.status === DOWN)) { + heartbeat.status = lastBeat.status; + } else if (heartbeat.status === PENDING && lastBeat.status === DOWN) { + heartbeat.status = lastBeat.status; + } + } + + if (heartbeat.status !== UP) { + heartbeat.msg = "Child inaccessible"; + } + } else { + // Set status pending if group is empty + heartbeat.status = PENDING; + heartbeat.msg = "Group empty"; + } + } +} + +module.exports = { + GroupMonitorType, +}; + diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js index 6a52f8f3e..9ea260410 100644 --- a/server/notification-providers/discord.js +++ b/server/notification-providers/discord.js @@ -46,10 +46,10 @@ class Discord extends NotificationProvider { name: "Service Name", value: monitorJSON["name"], }, - { + ...(!notification.disableUrl ? [{ name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL", value: this.extractAddress(monitorJSON), - }, + }] : []), { name: `Time (${heartbeatJSON["timezone"]})`, value: heartbeatJSON["localDateTime"], @@ -83,10 +83,10 @@ class Discord extends NotificationProvider { name: "Service Name", value: monitorJSON["name"], }, - { + ...(!notification.disableUrl ? [{ name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL", value: this.extractAddress(monitorJSON), - }, + }] : []), { name: `Time (${heartbeatJSON["timezone"]})`, value: heartbeatJSON["localDateTime"], diff --git a/server/notification-providers/onechat.js b/server/notification-providers/onechat.js new file mode 100644 index 000000000..2d6ea1d5b --- /dev/null +++ b/server/notification-providers/onechat.js @@ -0,0 +1,73 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { DOWN, UP } = require("../../src/util"); + +class OneChat extends NotificationProvider { + name = "OneChat"; + + /** + * @inheritdoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + const okMsg = "Sent Successfully."; + const url = "https://chat-api.one.th/message/api/v1/push_message"; + + try { + const config = { + headers: { + "Content-Type": "application/json", + Authorization: "Bearer " + notification.accessToken, + }, + }; + if (heartbeatJSON == null) { + const testMessage = { + to: notification.recieverId, + bot_id: notification.botId, + type: "text", + message: "Test Successful!", + }; + await axios.post(url, testMessage, config); + } else if (heartbeatJSON["status"] === DOWN) { + const downMessage = { + to: notification.recieverId, + bot_id: notification.botId, + type: "text", + message: + `UptimeKuma Alert: +[🔴 Down] +Name: ${monitorJSON["name"]} +${heartbeatJSON["msg"]} +Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`, + }; + await axios.post(url, downMessage, config); + } else if (heartbeatJSON["status"] === UP) { + const upMessage = { + to: notification.recieverId, + bot_id: notification.botId, + type: "text", + message: + `UptimeKuma Alert: +[🟢 Up] +Name: ${monitorJSON["name"]} +${heartbeatJSON["msg"]} +Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`, + }; + await axios.post(url, upMessage, config); + } + + return okMsg; + } catch (error) { + // Handle errors and throw a descriptive message + if (error.response) { + const errorMessage = + error.response.data?.message || + "Unknown API error occurred."; + throw new Error(`OneChat API Error: ${errorMessage}`); + } else { + this.throwGeneralAxiosError(error); + } + } + } +} + +module.exports = OneChat; diff --git a/server/notification-providers/pumble.js b/server/notification-providers/pumble.js new file mode 100644 index 000000000..e1731c0ab --- /dev/null +++ b/server/notification-providers/pumble.js @@ -0,0 +1,48 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { UP } = require("../../src/util"); + +class Pumble extends NotificationProvider { + name = "pumble"; + + /** + * @inheritDoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + const okMsg = "Sent Successfully."; + + try { + if (heartbeatJSON === null && monitorJSON === null) { + let data = { + "attachments": [ + { + "title": "Uptime Kuma Alert", + "text": msg, + "color": "#5BDD8B" + } + ] + }; + + await axios.post(notification.webhookURL, data); + return okMsg; + } + + let data = { + "attachments": [ + { + "title": `${monitorJSON["name"]} is ${heartbeatJSON["status"] === UP ? "up" : "down"}`, + "text": heartbeatJSON["msg"], + "color": (heartbeatJSON["status"] === UP ? "#5BDD8B" : "#DC3645"), + } + ] + }; + + await axios.post(notification.webhookURL, data); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + } +} + +module.exports = Pumble; diff --git a/server/notification-providers/pushover.js b/server/notification-providers/pushover.js index 8422b64c2..fdceeaa44 100644 --- a/server/notification-providers/pushover.js +++ b/server/notification-providers/pushover.js @@ -1,5 +1,6 @@ const { getMonitorRelativeURL } = require("../../src/util"); const { setting } = require("../util-server"); +const { UP } = require("../../src/util"); const NotificationProvider = require("./notification-provider"); const axios = require("axios"); @@ -43,15 +44,20 @@ class Pushover extends NotificationProvider { if (heartbeatJSON == null) { await axios.post(url, data); return okMsg; - } else { - data.message += `\nTime (${heartbeatJSON["timezone"]}):${heartbeatJSON["localDateTime"]}`; - await axios.post(url, data); - return okMsg; } + + if (heartbeatJSON.status === UP && notification.pushoversounds_up) { + // default = DOWN => DOWN-sound is also played for non-UP/DOWN notiifcations + data.sound = notification.pushoversounds_up; + } + + data.message += `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`; + await axios.post(url, data); + return okMsg; + } catch (error) { this.throwGeneralAxiosError(error); } - } } diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js index 5e25a1fbc..455d787c7 100644 --- a/server/notification-providers/slack.js +++ b/server/notification-providers/slack.js @@ -145,6 +145,7 @@ class Slack extends NotificationProvider { const title = "Uptime Kuma Alert"; let data = { + "text": msg, "channel": notification.slackchannel, "username": notification.slackusername, "icon_emoji": notification.slackiconemo, diff --git a/server/notification-providers/sms-planet.js b/server/notification-providers/sms-planet.js new file mode 100644 index 000000000..97e9e715e --- /dev/null +++ b/server/notification-providers/sms-planet.js @@ -0,0 +1,40 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); + +class SMSPlanet extends NotificationProvider { + name = "SMSPlanet"; + + /** + * @inheritdoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + const okMsg = "Sent Successfully."; + const url = "https://api2.smsplanet.pl/sms"; + + try { + let config = { + headers: { + "Authorization": "Bearer " + notification.smsplanetApiToken, + "content-type": "multipart/form-data" + } + }; + + let data = { + "from": notification.smsplanetSenderName, + "to": notification.smsplanetPhoneNumbers, + "msg": msg.replace(/🔴/, "❌") + }; + + let response = await axios.post(url, data, config); + if (!response.data?.messageId) { + throw new Error(response.data?.errorMsg ?? "SMSPlanet server did not respond with the expected result"); + } + + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + } +} + +module.exports = SMSPlanet; diff --git a/server/notification-providers/smseagle.js b/server/notification-providers/smseagle.js index 4e897006c..a123243a4 100644 --- a/server/notification-providers/smseagle.js +++ b/server/notification-providers/smseagle.js @@ -11,59 +11,127 @@ class SMSEagle extends NotificationProvider { const okMsg = "Sent Successfully."; try { - let config = { - headers: { - "Content-Type": "application/json", + if (notification.smseagleApiType === "smseagle-apiv1") { // according to https://www.smseagle.eu/apiv1/ + let config = { + headers: { + "Content-Type": "application/x-www-form-urlencoded", + } + }; + + let sendMethod; + let recipientType; + let duration; + let voiceId; + + if (notification.smseagleRecipientType === "smseagle-contact") { + recipientType = "contactname"; + sendMethod = "/send_tocontact"; + } else if (notification.smseagleRecipientType === "smseagle-group") { + recipientType = "groupname"; + sendMethod = "/send_togroup"; + } else if (notification.smseagleRecipientType === "smseagle-to") { + recipientType = "to"; + sendMethod = "/send_sms"; + if (notification.smseagleMsgType !== "smseagle-sms") { + duration = notification.smseagleDuration ?? 10; + + if (notification.smseagleMsgType === "smseagle-ring") { + sendMethod = "/ring_call"; + } else if (notification.smseagleMsgType === "smseagle-tts") { + sendMethod = "/tts_call"; + } else if (notification.smseagleMsgType === "smseagle-tts-advanced") { + sendMethod = "/tts_adv_call"; + voiceId = notification.smseagleTtsModel ? notification.smseagleTtsModel : 1; + } + } } - }; - let postData; - let sendMethod; - let recipientType; + const url = new URL(notification.smseagleUrl + "/http_api" + sendMethod); - let encoding = (notification.smseagleEncoding) ? "1" : "0"; - let priority = (notification.smseaglePriority) ? notification.smseaglePriority : "0"; - - if (notification.smseagleRecipientType === "smseagle-contact") { - recipientType = "contactname"; - sendMethod = "sms.send_tocontact"; - } - if (notification.smseagleRecipientType === "smseagle-group") { - recipientType = "groupname"; - sendMethod = "sms.send_togroup"; - } - if (notification.smseagleRecipientType === "smseagle-to") { - recipientType = "to"; - sendMethod = "sms.send_sms"; - } - - let params = { - access_token: notification.smseagleToken, - [recipientType]: notification.smseagleRecipient, - message: msg, - responsetype: "extended", - unicode: encoding, - highpriority: priority - }; - - postData = { - method: sendMethod, - params: params - }; - - let resp = await axios.post(notification.smseagleUrl + "/jsonrpc/sms", postData, config); - - if ((JSON.stringify(resp.data)).indexOf("message_id") === -1) { - let error = ""; - if (resp.data.result && resp.data.result.error_text) { - error = `SMSEagle API returned error: ${JSON.stringify(resp.data.result.error_text)}`; + url.searchParams.append("access_token", notification.smseagleToken); + url.searchParams.append(recipientType, notification.smseagleRecipient); + if (!notification.smseagleRecipientType || notification.smseagleRecipientType === "smseagle-sms") { + url.searchParams.append("unicode", (notification.smseagleEncoding) ? "1" : "0"); + url.searchParams.append("highpriority", notification.smseaglePriority ?? "0"); } else { - error = "SMSEagle API returned an unexpected response"; + url.searchParams.append("duration", duration); + } + if (notification.smseagleRecipientType !== "smseagle-ring") { + url.searchParams.append("message", msg); + } + if (voiceId) { + url.searchParams.append("voice_id", voiceId); } - throw new Error(error); - } - return okMsg; + let resp = await axios.get(url.toString(), config); + + if (resp.data.indexOf("OK") === -1) { + let error = `SMSEagle API returned error: ${resp.data}`; + throw new Error(error); + } + + return okMsg; + } else if (notification.smseagleApiType === "smseagle-apiv2") { // according to https://www.smseagle.eu/docs/apiv2/ + let config = { + headers: { + "access-token": notification.smseagleToken, + "Content-Type": "application/json", + } + }; + + let encoding = (notification.smseagleEncoding) ? "unicode" : "standard"; + let priority = (notification.smseaglePriority) ?? 0; + + let postData = { + text: msg, + encoding: encoding, + priority: priority + }; + + if (notification.smseagleRecipientContact) { + postData["contacts"] = notification.smseagleRecipientContact.split(",").map(Number); + } + if (notification.smseagleRecipientGroup) { + postData["groups"] = notification.smseagleRecipientGroup.split(",").map(Number); + } + if (notification.smseagleRecipientTo) { + postData["to"] = notification.smseagleRecipientTo.split(","); + } + + let endpoint = "/messages/sms"; + + if (notification.smseagleMsgType !== "smseagle-sms") { + + postData["duration"] = notification.smseagleDuration ?? 10; + + if (notification.smseagleMsgType === "smseagle-ring") { + endpoint = "/calls/ring"; + } else if (notification.smseagleMsgType === "smseagle-tts") { + endpoint = "/calls/tts"; + } else if (notification.smseagleMsgType === "smseagle-tts-advanced") { + endpoint = "/calls/tts_advanced"; + postData["voice_id"] = notification.smseagleTtsModel ?? 1; + } + } + + let resp = await axios.post(notification.smseagleUrl + "/api/v2" + endpoint, postData, config); + + const queuedCount = resp.data.filter(x => x.status === "queued").length; + const unqueuedCount = resp.data.length - queuedCount; + + if (resp.status !== 200 || queuedCount === 0) { + if (!resp.data.length) { + throw new Error("SMSEagle API returned an empty response"); + } + throw new Error(`SMSEagle API returned error: ${JSON.stringify(resp.data)}`); + } + + if (unqueuedCount) { + return `Sent ${queuedCount}/${resp.data.length} Messages Successfully.`; + } + + return okMsg; + } } catch (error) { this.throwGeneralAxiosError(error); } diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index 980c7dfd3..d0ad5b728 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -42,6 +42,7 @@ class SMTP extends NotificationProvider { // default values in case the user does not want to template let subject = msg; let body = msg; + let useHTMLBody = false; if (heartbeatJSON) { body = `${msg}\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`; } @@ -50,11 +51,11 @@ class SMTP extends NotificationProvider { // cannot end with whitespace as this often raises spam scores const customSubject = notification.customSubject?.trim() || ""; const customBody = notification.customBody?.trim() || ""; - if (customSubject !== "") { subject = await this.renderTemplate(customSubject, msg, monitorJSON, heartbeatJSON); } if (customBody !== "") { + useHTMLBody = notification.htmlBody || false; body = await this.renderTemplate(customBody, msg, monitorJSON, heartbeatJSON); } } @@ -67,7 +68,8 @@ class SMTP extends NotificationProvider { bcc: notification.smtpBCC, to: notification.smtpTo, subject: subject, - text: body, + // If the email body is custom, and the user wants it, set the email body as HTML + [useHTMLBody ? "html" : "text"]: body }); return okMsg; diff --git a/server/notification-providers/spugpush.js b/server/notification-providers/spugpush.js new file mode 100644 index 000000000..b04a20cac --- /dev/null +++ b/server/notification-providers/spugpush.js @@ -0,0 +1,37 @@ +const NotificationProvider = require("./notification-provider"); +const axios = require("axios"); +const { DOWN, UP } = require("../../src/util"); + +class SpugPush extends NotificationProvider { + + name = "SpugPush"; + + /** + * @inheritdoc + */ + async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + let okMsg = "Sent Successfully."; + try { + let formData = { + title: "Uptime Kuma Message", + content: msg + }; + if (heartbeatJSON) { + if (heartbeatJSON["status"] === UP) { + formData.title = `UptimeKuma 「${monitorJSON["name"]}」 is Up`; + formData.content = `[✅ Up] ${heartbeatJSON["msg"]}`; + } else if (heartbeatJSON["status"] === DOWN) { + formData.title = `UptimeKuma 「${monitorJSON["name"]}」 is Down`; + formData.content = `[🔴 Down] ${heartbeatJSON["msg"]}`; + } + } + const apiUrl = `https://push.spug.cc/send/${notification.templateKey}`; + await axios.post(apiUrl, formData); + return okMsg; + } catch (error) { + this.throwGeneralAxiosError(error); + } + } +} + +module.exports = SpugPush; diff --git a/server/notification.js b/server/notification.js index 0c222d932..468d026c0 100644 --- a/server/notification.js +++ b/server/notification.js @@ -30,9 +30,11 @@ const Mattermost = require("./notification-providers/mattermost"); const Nostr = require("./notification-providers/nostr"); const Ntfy = require("./notification-providers/ntfy"); const Octopush = require("./notification-providers/octopush"); +const OneChat = require("./notification-providers/onechat"); const OneBot = require("./notification-providers/onebot"); const Opsgenie = require("./notification-providers/opsgenie"); const PagerDuty = require("./notification-providers/pagerduty"); +const Pumble = require("./notification-providers/pumble"); const FlashDuty = require("./notification-providers/flashduty"); const PagerTree = require("./notification-providers/pagertree"); const PromoSMS = require("./notification-providers/promosms"); @@ -72,6 +74,8 @@ const Onesender = require("./notification-providers/onesender"); const Wpush = require("./notification-providers/wpush"); const SendGrid = require("./notification-providers/send-grid"); const YZJ = require("./notification-providers/yzj"); +const SMSPlanet = require("./notification-providers/sms-planet"); +const SpugPush = require("./notification-providers/spugpush"); class Notification { @@ -119,6 +123,7 @@ class Notification { new Nostr(), new Ntfy(), new Octopush(), + new OneChat(), new OneBot(), new Onesender(), new Opsgenie(), @@ -126,6 +131,7 @@ class Notification { new FlashDuty(), new PagerTree(), new PromoSMS(), + new Pumble(), new Pushbullet(), new PushDeer(), new Pushover(), @@ -160,7 +166,9 @@ class Notification { new Cellsynt(), new Wpush(), new SendGrid(), - new YZJ() + new YZJ(), + new SMSPlanet(), + new SpugPush(), ]; for (let item of list) { if (! item.name) { diff --git a/server/routers/status-page-router.js b/server/routers/status-page-router.js index 893f57564..6e57451f1 100644 --- a/server/routers/status-page-router.js +++ b/server/routers/status-page-router.js @@ -89,7 +89,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques SELECT * FROM heartbeat WHERE monitor_id = ? ORDER BY time DESC - LIMIT 50 + LIMIT 100 `, [ monitorID, ]); diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js index 062f098d7..cdaa83dfc 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["group"] = new GroupMonitorType(); UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType(); UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType(); UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType(); @@ -551,6 +552,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 { GroupMonitorType } = require("./monitor-types/group"); const { SNMPMonitorType } = require("./monitor-types/snmp"); const { MongodbMonitorType } = require("./monitor-types/mongodb"); const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq"); diff --git a/src/App.vue b/src/App.vue index f102360c1..a7bb69b42 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,9 +4,11 @@ diff --git a/src/assets/app.scss b/src/assets/app.scss index 6ddc99dec..fd43a7bee 100644 --- a/src/assets/app.scss +++ b/src/assets/app.scss @@ -3,7 +3,7 @@ @import "node_modules/bootstrap/scss/bootstrap"; #app { - font-family: BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji; + font-family: "Twemoji Country Flags", BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji; } h1 { diff --git a/src/components/CreateGroupDialog.vue b/src/components/CreateGroupDialog.vue index ba7fe6eb7..8bac1ccd0 100644 --- a/src/components/CreateGroupDialog.vue +++ b/src/components/CreateGroupDialog.vue @@ -42,6 +42,9 @@ export default { mounted() { this.modal = new Modal(this.$refs.modal); }, + beforeUnmount() { + this.cleanupModal(); + }, methods: { /** * Show the confirm dialog @@ -58,6 +61,19 @@ export default { this.$emit("added", this.groupName); this.modal.hide(); }, + /** + * Clean up modal and restore scroll behavior + * @returns {void} + */ + cleanupModal() { + if (this.modal) { + try { + this.modal.hide(); + } catch (e) { + console.warn("Modal hide failed:", e); + } + } + } }, }; diff --git a/src/components/MonitorListItem.vue b/src/components/MonitorListItem.vue index 74ba4835c..ce38086b9 100644 --- a/src/components/MonitorListItem.vue +++ b/src/components/MonitorListItem.vue @@ -14,7 +14,7 @@
-
+
@@ -22,11 +22,11 @@ {{ monitor.name }}
-
+
-
+
diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue index bed841fa5..2e66de8e9 100644 --- a/src/components/NotificationDialog.vue +++ b/src/components/NotificationDialog.vue @@ -135,11 +135,13 @@ export default { "nostr": "Nostr", "ntfy": "Ntfy", "octopush": "Octopush", + "OneChat": "OneChat", "OneBot": "OneBot", "Onesender": "Onesender", "Opsgenie": "Opsgenie", "PagerDuty": "PagerDuty", "PagerTree": "PagerTree", + "pumble": "Pumble", "pushbullet": "Pushbullet", "PushByTechulus": "Push by Techulus", "pushover": "Pushover", @@ -183,9 +185,11 @@ export default { "WeCom": "WeCom (企业微信群机器人)", "ServerChan": "ServerChan (Server酱)", "PushPlus": "PushPlus (推送加)", + "SpugPush": "SpugPush(Spug推送助手)", "smsc": "SMSC", "WPush": "WPush(wpush.cn)", - "YZJ": "YZJ (云之家自定义机器人)" + "YZJ": "YZJ (云之家自定义机器人)", + "SMSPlanet": "SMSPlanet.pl" }; // Sort by notification name @@ -235,6 +239,9 @@ export default { mounted() { this.modal = new Modal(this.$refs.modal); }, + beforeUnmount() { + this.cleanupModal(); + }, methods: { /** @@ -339,6 +346,20 @@ export default { }); } while (this.$root.notificationList.find(it => it.name === name)); return name; + }, + + /** + * Clean up modal and restore scroll behavior + * @returns {void} + */ + cleanupModal() { + if (this.modal) { + try { + this.modal.hide(); + } catch (e) { + console.warn("Modal hide failed:", e); + } + } } }, }; diff --git a/src/components/ProxyDialog.vue b/src/components/ProxyDialog.vue index fc92359b9..2f7ed7b61 100644 --- a/src/components/ProxyDialog.vue +++ b/src/components/ProxyDialog.vue @@ -125,11 +125,12 @@ export default { } }; }, - mounted() { this.modal = new Modal(this.$refs.modal); }, - + beforeUnmount() { + this.cleanupModal(); + }, methods: { /** * Show dialog to confirm deletion @@ -209,6 +210,20 @@ export default { } }); }, + + /** + * Clean up modal and restore scroll behavior + * @returns {void} + */ + cleanupModal() { + if (this.modal) { + try { + this.modal.hide(); + } catch (e) { + console.warn("Modal hide failed:", e); + } + } + } }, }; diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index 4f1d67e37..8e1e69515 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -111,7 +111,7 @@ diff --git a/src/components/notifications/Matrix.vue b/src/components/notifications/Matrix.vue index a9fd63403..60d43cf17 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/r0/login". + curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login".
diff --git a/src/components/notifications/OneChat.vue b/src/components/notifications/OneChat.vue new file mode 100644 index 000000000..b954d338b --- /dev/null +++ b/src/components/notifications/OneChat.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/components/notifications/Pumble.vue b/src/components/notifications/Pumble.vue new file mode 100644 index 000000000..c577e0404 --- /dev/null +++ b/src/components/notifications/Pumble.vue @@ -0,0 +1,9 @@ + diff --git a/src/components/notifications/Pushover.vue b/src/components/notifications/Pushover.vue index 7ee0eafb6..e2fecd29f 100644 --- a/src/components/notifications/Pushover.vue +++ b/src/components/notifications/Pushover.vue @@ -16,34 +16,24 @@ - - + + + + + +
*{{ $t("Required") }} @@ -66,5 +56,34 @@ export default { components: { HiddenInput, }, + data() { + return { + soundOptions: [ + "pushover", + "bike", + "bugle", + "cashregister", + "classical", + "cosmic", + "falling", + "gamelan", + "incoming", + "intermission", + "magic", + "mechanical", + "pianobar", + "siren", + "spacealarm", + "tugboat", + "alien", + "climb", + "persistent", + "echo", + "updown", + "vibrate", + "none", + ], + }; + }, }; diff --git a/src/components/notifications/SMSEagle.vue b/src/components/notifications/SMSEagle.vue index ec781313a..16277a6ef 100644 --- a/src/components/notifications/SMSEagle.vue +++ b/src/components/notifications/SMSEagle.vue @@ -1,31 +1,123 @@ @@ -36,5 +128,16 @@ export default { components: { HiddenInput, }, + mounted() { + if (!this.$parent.notification.smseagleApiType) { + this.$parent.notification.smseagleApiType = "smseagle-apiv1"; + } + if (!this.$parent.notification.smseagleMsgType) { + this.$parent.notification.smseagleMsgType = "smseagle-sms"; + } + if (!this.$parent.notification.smseagleRecipientType) { + this.$parent.notification.smseagleRecipientType = "smseagle-to"; + } + } }; diff --git a/src/components/notifications/SMSPlanet.vue b/src/components/notifications/SMSPlanet.vue new file mode 100644 index 000000000..bbf070461 --- /dev/null +++ b/src/components/notifications/SMSPlanet.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/components/notifications/SMTP.vue b/src/components/notifications/SMTP.vue index 4e0fb4b57..8f0e1501d 100644 --- a/src/components/notifications/SMTP.vue +++ b/src/components/notifications/SMTP.vue @@ -79,6 +79,15 @@
{{ $t("leave blank for default body") }}
+
+
+ + +
+
+ {{ $t("documentation") }} diff --git a/src/components/notifications/SpugPush.vue b/src/components/notifications/SpugPush.vue new file mode 100644 index 000000000..37dffccf3 --- /dev/null +++ b/src/components/notifications/SpugPush.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js index cbd6f2b68..be7feb820 100644 --- a/src/components/notifications/index.js +++ b/src/components/notifications/index.js @@ -29,6 +29,7 @@ import Mattermost from "./Mattermost.vue"; import Nostr from "./Nostr.vue"; import Ntfy from "./Ntfy.vue"; import Octopush from "./Octopush.vue"; +import OneChat from "./OneChat.vue"; import OneBot from "./OneBot.vue"; import Onesender from "./Onesender.vue"; import Opsgenie from "./Opsgenie.vue"; @@ -36,6 +37,7 @@ import PagerDuty from "./PagerDuty.vue"; import FlashDuty from "./FlashDuty.vue"; import PagerTree from "./PagerTree.vue"; import PromoSMS from "./PromoSMS.vue"; +import Pumble from "./Pumble.vue"; import Pushbullet from "./Pushbullet.vue"; import PushDeer from "./PushDeer.vue"; import Pushover from "./Pushover.vue"; @@ -62,6 +64,7 @@ import WeCom from "./WeCom.vue"; import GoAlert from "./GoAlert.vue"; import ZohoCliq from "./ZohoCliq.vue"; import Splunk from "./Splunk.vue"; +import SpugPush from "./SpugPush.vue"; import SevenIO from "./SevenIO.vue"; import Whapi from "./Whapi.vue"; import WAHA from "./WAHA.vue"; @@ -70,6 +73,7 @@ import WPush from "./WPush.vue"; import SIGNL4 from "./SIGNL4.vue"; import SendGrid from "./SendGrid.vue"; import YZJ from "./YZJ.vue"; +import SMSPlanet from "./SMSPlanet.vue"; /** * Manage all notification form. @@ -106,6 +110,7 @@ const NotificationFormList = { "nostr": Nostr, "ntfy": Ntfy, "octopush": Octopush, + "OneChat": OneChat, "OneBot": OneBot, "Onesender": Onesender, "Opsgenie": Opsgenie, @@ -113,6 +118,7 @@ const NotificationFormList = { "FlashDuty": FlashDuty, "PagerTree": PagerTree, "promosms": PromoSMS, + "pumble": Pumble, "pushbullet": Pushbullet, "PushByTechulus": TechulusPush, "PushDeer": PushDeer, @@ -135,6 +141,7 @@ const NotificationFormList = { "threema": Threema, "twilio": Twilio, "Splunk": Splunk, + "SpugPush": SpugPush, "webhook": Webhook, "WeCom": WeCom, "GoAlert": GoAlert, @@ -148,6 +155,7 @@ const NotificationFormList = { "WPush": WPush, "SendGrid": SendGrid, "YZJ": YZJ, + "SMSPlanet": SMSPlanet, }; export default NotificationFormList; diff --git a/src/components/settings/About.vue b/src/components/settings/About.vue index 3ef9e6d78..b8049d8bd 100644 --- a/src/components/settings/About.vue +++ b/src/components/settings/About.vue @@ -21,6 +21,9 @@
+
+

{{ $t("Font Twemoji by Twitter licensed under") }} CC-BY 4.0

+
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, лицензиран под" } 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." } 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" } diff --git a/src/lang/en.json b/src/lang/en.json index cb704b0fe..009d24ee6 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -517,6 +517,7 @@ "Clone": "Clone", "cloneOf": "Clone of {0}", "smtp": "Email (SMTP)", + "Use HTML for custom E-mail body": "Use HTML for custom E-mail body", "secureOptionNone": "None / STARTTLS (25, 587)", "secureOptionTLS": "TLS (465)", "Ignore TLS Error": "Ignore TLS Error", @@ -757,12 +758,26 @@ "smseagleTo": "Phone number(s)", "smseagleGroup": "Phonebook group name(s)", "smseagleContact": "Phonebook contact name(s)", + "smseagleGroupV2": "Phonebook group ID(s)", + "smseagleContactV2": "Phonebook contact ID(s)", "smseagleRecipientType": "Recipient type", "smseagleRecipient": "Recipient(s) (multiple must be separated with comma)", "smseagleToken": "API Access token", "smseagleUrl": "Your SMSEagle device URL", - "smseagleEncoding": "Send as Unicode", - "smseaglePriority": "Message priority (0-9, default = 0)", + "smseagleEncoding": "Send as Unicode (default=GSM-7)", + "smseaglePriority": "Message priority (0-9, highest priority = 9)", + "smseagleMsgType": "Message type", + "smseagleMsgSms": "Sms message (default)", + "smseagleMsgRing": "Ring call", + "smseagleMsgTts": "Text-to-speech call", + "smseagleMsgTtsAdvanced": "Text-to-speech Advanced call", + "smseagleDuration": "Duration (in seconds)", + "smseagleTtsModel": "Text-to-speech model ID", + "smseagleApiType": "API version", + "smseagleApiv1": "APIv1 (for existing projects and backward compatibility)", + "smseagleApiv2": "APIv2 (recommended for new integrations)", + "smseagleDocs": "Check documentation or APIv2 availability: {0}", + "smseagleComma": "Multiple must be separated with comma", "smspartnerApiurl": "You can find your API key in your dashboard at {0}", "smspartnerPhoneNumber": "Phone number(s)", "smspartnerPhoneNumberHelptext": "The number must be in the international format {0}, {1}. Multiple numbers must be separated by {2}", @@ -784,6 +799,7 @@ "PushDeer Server": "PushDeer Server", "pushDeerServerDescription": "Leave blank to use the official server", "PushDeer Key": "PushDeer Key", + "SpugPush Template Code": "Template Code", "wayToGetClickSendSMSToken": "You can get API Username and API Key from {0} .", "Custom Monitor Type": "Custom Monitor Type", "Google Analytics ID": "Google Analytics ID", @@ -1057,6 +1073,9 @@ "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", + "OneChatAccessToken": "OneChat Access Token", + "OneChatUserIdOrGroupId": "OneChat User ID or Group ID", + "OneChatBotId": "OneChat Bot ID", "wahaSession": "Session", "wahaChatId": "Chat ID (Phone Number / Contact ID / Group ID)", "wayToGetWahaApiUrl": "Your WAHA Instance URL.", @@ -1067,5 +1086,13 @@ "YZJ Robot Token": "YZJ Robot token", "Plain Text": "Plain Text", "Message Template": "Message Template", - "Template Format": "Template Format" + "Template Format": "Template Format", + "Font Twemoji by Twitter licensed under": "Font Twemoji by Twitter licensed under", + "smsplanetApiToken": "Token for the SMSPlanet API", + "smsplanetApiDocs": "Detailed information on obtaining API tokens can be found in {the_smsplanet_documentation}.", + "the smsplanet documentation": "the smsplanet documentation", + "Phone numbers": "Phone numbers", + "Sender name": "Sender name", + "smsplanetNeedToApproveName": "Needs to be approved in the client panel", + "Disable URL in Notification": "Disable URL in Notification" } 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." } 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" } 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}." } 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" } 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ライセンス下でライセンスされています" } diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json index c8601efbe..be43aad89 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,42 @@ "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}을 참조하세요.", + "RabbitMQ Username": "RabbitMQ 사용자명", + "RabbitMQ Password": "RabbitMQ 비밀번호", + "wahaSession": "세션", + "emailTemplateMsg": "알림 메시지", + "Select message type": "메시지 유형 선택", + "Send to channel": "채널로 전송", + "Create new forum post": "새 포럼 게시물 만들기", + "Your User ID": "사용자 ID" } 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." +} 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" } diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json index 4ddb77624..806c921ad 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.", @@ -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", @@ -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": "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", @@ -1039,36 +1039,36 @@ "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 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.", - "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", + "aboutSlackUsername": "Verandert de weergavenaam van de afzender. Als je iemand wil vermelden, voeg dit dan aan de vriendelijke naam toe.", + "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": "Berichtformaat", - "Send rich messages": "Stuur rijke berichten", - "OAuth Scope": "OAuth Reikwijdte", - "equals": "gelijk aan", + "Message format": "Bericht opmaak", + "Send rich messages": "Verstuur berichten met opmaak", + "OAuth Scope": "OAuth bereik", + "equals": "hetzelfde als", "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", + "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", - "Correct": "Juist", + "Correct": "Goed", "Fail": "Mislukt", "Harp": "Harp", "Reveal": "Laat zien", @@ -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" + "Community String": "Gemeenschapsreeks", + "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." } 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." } diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json index e6953ebfa..0764d1173 100644 --- a/src/lang/pt-BR.json +++ b/src/lang/pt-BR.json @@ -1068,5 +1068,19 @@ "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", + "Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob" } 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": "Формат шаблона" } 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" } 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 ліцензований під" } diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json index 5b473b071..88134e3d8 100644 --- a/src/lang/zh-CN.json +++ b/src/lang/zh-CN.json @@ -1117,5 +1117,8 @@ "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}", + "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权" }