diff --git a/README.md b/README.md index 6cfd4f66c..7dfd3e57a 100644 --- a/README.md +++ b/README.md @@ -148,17 +148,18 @@ Telegram Notification Sample: If you love this project, please consider giving me a ⭐. -## 🗣️ Discussion +## 🗣️ Discussion / Ask for Help -### Issues Page +⚠️ For any general or technical questions, please don't send me an email, as I am unable to provide support in that manner. I will not response if you asked such questions. -You can discuss or ask for help in [issues](https://github.com/louislam/uptime-kuma/issues). +I recommend using Google, GitHub Issues, or Uptime Kuma's Subreddit for finding answers to your question. If you cannot find the information you need, feel free to ask: -### Subreddit +- [GitHub Issues](https://github.com/louislam/uptime-kuma/issues) +- [Subreddit r/Uptime kuma](https://www.reddit.com/r/UptimeKuma/) My Reddit account: [u/louislamlam](https://reddit.com/u/louislamlam). You can mention me if you ask a question on Reddit. -[r/Uptime kuma](https://www.reddit.com/r/UptimeKuma/) + ## Contribute diff --git a/index.html b/index.html index 6a5525fb4..01f68410c 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + diff --git a/package-lock.json b/package-lock.json index 8614de0b5..88246a5e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -126,7 +126,8 @@ "vue-router": "~4.0.14", "vue-toastification": "~2.0.0-rc.5", "vuedraggable": "~4.1.0", - "wait-on": "^6.0.1" + "wait-on": "^6.0.1", + "whatwg-url": "~12.0.1" }, "engines": { "node": "14.* || >=16.*" @@ -253,12 +254,12 @@ "optional": true }, "node_modules/@aws-sdk/abort-controller": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.329.0.tgz", - "integrity": "sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.338.0.tgz", + "integrity": "sha512-/yLI32+HwFNBRJ39jMXw+/cn3AnlCuJpQd7Ax4887g32Dgte5eyrfY8sJUOL6902BUmAq4oSRI5QeBXNplO0Xw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -266,45 +267,46 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.332.0.tgz", - "integrity": "sha512-o2G3+w0Qm+jd5fnmG6+FF5KRu90PIv2Kd0mmMJIFmACVd+VtuWqsk85capX21YLcxizKe+okqaaD8/9vV7nvfw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.338.0.tgz", + "integrity": "sha512-1gu9gXJwrxGGGMlBzmM4d8mkNjD1M8tWo+vmT/Aq1EMBxGef3eN0k6SyeIruj2Jns3olC6pjTIU8zb3vVBkh5Q==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.332.0", - "@aws-sdk/config-resolver": "3.329.0", - "@aws-sdk/credential-provider-node": "3.332.0", - "@aws-sdk/fetch-http-handler": "3.329.0", - "@aws-sdk/hash-node": "3.329.0", - "@aws-sdk/invalid-dependency": "3.329.0", - "@aws-sdk/middleware-content-length": "3.329.0", - "@aws-sdk/middleware-endpoint": "3.329.0", - "@aws-sdk/middleware-host-header": "3.329.0", - "@aws-sdk/middleware-logger": "3.329.0", - "@aws-sdk/middleware-recursion-detection": "3.329.0", - "@aws-sdk/middleware-retry": "3.329.0", - "@aws-sdk/middleware-serde": "3.329.0", - "@aws-sdk/middleware-signing": "3.329.0", - "@aws-sdk/middleware-stack": "3.329.0", - "@aws-sdk/middleware-user-agent": "3.332.0", - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/node-http-handler": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/smithy-client": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", + "@aws-sdk/client-sts": "3.338.0", + "@aws-sdk/config-resolver": "3.338.0", + "@aws-sdk/credential-provider-node": "3.338.0", + "@aws-sdk/fetch-http-handler": "3.338.0", + "@aws-sdk/hash-node": "3.338.0", + "@aws-sdk/invalid-dependency": "3.338.0", + "@aws-sdk/middleware-content-length": "3.338.0", + "@aws-sdk/middleware-endpoint": "3.338.0", + "@aws-sdk/middleware-host-header": "3.338.0", + "@aws-sdk/middleware-logger": "3.338.0", + "@aws-sdk/middleware-recursion-detection": "3.338.0", + "@aws-sdk/middleware-retry": "3.338.0", + "@aws-sdk/middleware-serde": "3.338.0", + "@aws-sdk/middleware-signing": "3.338.0", + "@aws-sdk/middleware-stack": "3.338.0", + "@aws-sdk/middleware-user-agent": "3.338.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/node-http-handler": "3.338.0", + "@aws-sdk/smithy-client": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.329.0", - "@aws-sdk/util-defaults-mode-node": "3.329.0", - "@aws-sdk/util-endpoints": "3.332.0", - "@aws-sdk/util-retry": "3.329.0", - "@aws-sdk/util-user-agent-browser": "3.329.0", - "@aws-sdk/util-user-agent-node": "3.329.0", + "@aws-sdk/util-defaults-mode-browser": "3.338.0", + "@aws-sdk/util-defaults-mode-node": "3.338.0", + "@aws-sdk/util-endpoints": "3.338.0", + "@aws-sdk/util-retry": "3.338.0", + "@aws-sdk/util-user-agent-browser": "3.338.0", + "@aws-sdk/util-user-agent-node": "3.338.0", "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", "tslib": "^2.5.0" }, "engines": { @@ -312,42 +314,43 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.332.0.tgz", - "integrity": "sha512-4q1Nko8M6YVANdEiLYvdv1qb00j4xN4ppE/6d4xpGp7DxHYlm0GA762h0/TR2dun+2I+SMnwj4Fv6BxOmzBaEw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.338.0.tgz", + "integrity": "sha512-EglKsGlVph65PuFPKq1nGlxsY99XM2xHJaB1uX0bQEC94qrmS/M4a5kno5tiUnTWO1K+K4JBQiOxdGJs0GUS+w==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.329.0", - "@aws-sdk/fetch-http-handler": "3.329.0", - "@aws-sdk/hash-node": "3.329.0", - "@aws-sdk/invalid-dependency": "3.329.0", - "@aws-sdk/middleware-content-length": "3.329.0", - "@aws-sdk/middleware-endpoint": "3.329.0", - "@aws-sdk/middleware-host-header": "3.329.0", - "@aws-sdk/middleware-logger": "3.329.0", - "@aws-sdk/middleware-recursion-detection": "3.329.0", - "@aws-sdk/middleware-retry": "3.329.0", - "@aws-sdk/middleware-serde": "3.329.0", - "@aws-sdk/middleware-stack": "3.329.0", - "@aws-sdk/middleware-user-agent": "3.332.0", - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/node-http-handler": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/smithy-client": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", + "@aws-sdk/config-resolver": "3.338.0", + "@aws-sdk/fetch-http-handler": "3.338.0", + "@aws-sdk/hash-node": "3.338.0", + "@aws-sdk/invalid-dependency": "3.338.0", + "@aws-sdk/middleware-content-length": "3.338.0", + "@aws-sdk/middleware-endpoint": "3.338.0", + "@aws-sdk/middleware-host-header": "3.338.0", + "@aws-sdk/middleware-logger": "3.338.0", + "@aws-sdk/middleware-recursion-detection": "3.338.0", + "@aws-sdk/middleware-retry": "3.338.0", + "@aws-sdk/middleware-serde": "3.338.0", + "@aws-sdk/middleware-stack": "3.338.0", + "@aws-sdk/middleware-user-agent": "3.338.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/node-http-handler": "3.338.0", + "@aws-sdk/smithy-client": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.329.0", - "@aws-sdk/util-defaults-mode-node": "3.329.0", - "@aws-sdk/util-endpoints": "3.332.0", - "@aws-sdk/util-retry": "3.329.0", - "@aws-sdk/util-user-agent-browser": "3.329.0", - "@aws-sdk/util-user-agent-node": "3.329.0", + "@aws-sdk/util-defaults-mode-browser": "3.338.0", + "@aws-sdk/util-defaults-mode-node": "3.338.0", + "@aws-sdk/util-endpoints": "3.338.0", + "@aws-sdk/util-retry": "3.338.0", + "@aws-sdk/util-user-agent-browser": "3.338.0", + "@aws-sdk/util-user-agent-node": "3.338.0", "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", "tslib": "^2.5.0" }, "engines": { @@ -355,42 +358,43 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.332.0.tgz", - "integrity": "sha512-tz8k8Yqm4TScIfit0Tum2zWAq1md+gZKr747CSixd4Zwcp7Vwh75cRoL7Rz1ZHSEn1Yo983MWREevVez3SubLw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.338.0.tgz", + "integrity": "sha512-mny5Q3LWKTcMMFS8WxeOCTinl193z7vS3b+eQz09K4jb1Lq04Bpjw25cySgBnhMGZ7QHQiYBscNLyu/TfOKiHA==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.329.0", - "@aws-sdk/fetch-http-handler": "3.329.0", - "@aws-sdk/hash-node": "3.329.0", - "@aws-sdk/invalid-dependency": "3.329.0", - "@aws-sdk/middleware-content-length": "3.329.0", - "@aws-sdk/middleware-endpoint": "3.329.0", - "@aws-sdk/middleware-host-header": "3.329.0", - "@aws-sdk/middleware-logger": "3.329.0", - "@aws-sdk/middleware-recursion-detection": "3.329.0", - "@aws-sdk/middleware-retry": "3.329.0", - "@aws-sdk/middleware-serde": "3.329.0", - "@aws-sdk/middleware-stack": "3.329.0", - "@aws-sdk/middleware-user-agent": "3.332.0", - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/node-http-handler": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/smithy-client": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", + "@aws-sdk/config-resolver": "3.338.0", + "@aws-sdk/fetch-http-handler": "3.338.0", + "@aws-sdk/hash-node": "3.338.0", + "@aws-sdk/invalid-dependency": "3.338.0", + "@aws-sdk/middleware-content-length": "3.338.0", + "@aws-sdk/middleware-endpoint": "3.338.0", + "@aws-sdk/middleware-host-header": "3.338.0", + "@aws-sdk/middleware-logger": "3.338.0", + "@aws-sdk/middleware-recursion-detection": "3.338.0", + "@aws-sdk/middleware-retry": "3.338.0", + "@aws-sdk/middleware-serde": "3.338.0", + "@aws-sdk/middleware-stack": "3.338.0", + "@aws-sdk/middleware-user-agent": "3.338.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/node-http-handler": "3.338.0", + "@aws-sdk/smithy-client": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.329.0", - "@aws-sdk/util-defaults-mode-node": "3.329.0", - "@aws-sdk/util-endpoints": "3.332.0", - "@aws-sdk/util-retry": "3.329.0", - "@aws-sdk/util-user-agent-browser": "3.329.0", - "@aws-sdk/util-user-agent-node": "3.329.0", + "@aws-sdk/util-defaults-mode-browser": "3.338.0", + "@aws-sdk/util-defaults-mode-node": "3.338.0", + "@aws-sdk/util-endpoints": "3.338.0", + "@aws-sdk/util-retry": "3.338.0", + "@aws-sdk/util-user-agent-browser": "3.338.0", + "@aws-sdk/util-user-agent-node": "3.338.0", "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", "tslib": "^2.5.0" }, "engines": { @@ -398,45 +402,46 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.332.0.tgz", - "integrity": "sha512-uVobnXIzMcEhwBDyk6iOt36N/TRNI8hwq7MQugjYGj7Inma9g4vnR09hXJ24HxyKCoVUoIgMbEguQ43+/+uvDQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.338.0.tgz", + "integrity": "sha512-FBHy/G7BAPX0CdEeeGYpoAnKXVCSIIkESLU2wF6x880z+U2IqiL48Fzoa5qoLaLPQaK/30P7ytznkqm4vd1OFw==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/config-resolver": "3.329.0", - "@aws-sdk/credential-provider-node": "3.332.0", - "@aws-sdk/fetch-http-handler": "3.329.0", - "@aws-sdk/hash-node": "3.329.0", - "@aws-sdk/invalid-dependency": "3.329.0", - "@aws-sdk/middleware-content-length": "3.329.0", - "@aws-sdk/middleware-endpoint": "3.329.0", - "@aws-sdk/middleware-host-header": "3.329.0", - "@aws-sdk/middleware-logger": "3.329.0", - "@aws-sdk/middleware-recursion-detection": "3.329.0", - "@aws-sdk/middleware-retry": "3.329.0", - "@aws-sdk/middleware-sdk-sts": "3.329.0", - "@aws-sdk/middleware-serde": "3.329.0", - "@aws-sdk/middleware-signing": "3.329.0", - "@aws-sdk/middleware-stack": "3.329.0", - "@aws-sdk/middleware-user-agent": "3.332.0", - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/node-http-handler": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/smithy-client": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", + "@aws-sdk/config-resolver": "3.338.0", + "@aws-sdk/credential-provider-node": "3.338.0", + "@aws-sdk/fetch-http-handler": "3.338.0", + "@aws-sdk/hash-node": "3.338.0", + "@aws-sdk/invalid-dependency": "3.338.0", + "@aws-sdk/middleware-content-length": "3.338.0", + "@aws-sdk/middleware-endpoint": "3.338.0", + "@aws-sdk/middleware-host-header": "3.338.0", + "@aws-sdk/middleware-logger": "3.338.0", + "@aws-sdk/middleware-recursion-detection": "3.338.0", + "@aws-sdk/middleware-retry": "3.338.0", + "@aws-sdk/middleware-sdk-sts": "3.338.0", + "@aws-sdk/middleware-serde": "3.338.0", + "@aws-sdk/middleware-signing": "3.338.0", + "@aws-sdk/middleware-stack": "3.338.0", + "@aws-sdk/middleware-user-agent": "3.338.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/node-http-handler": "3.338.0", + "@aws-sdk/smithy-client": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", "@aws-sdk/util-base64": "3.310.0", "@aws-sdk/util-body-length-browser": "3.310.0", "@aws-sdk/util-body-length-node": "3.310.0", - "@aws-sdk/util-defaults-mode-browser": "3.329.0", - "@aws-sdk/util-defaults-mode-node": "3.329.0", - "@aws-sdk/util-endpoints": "3.332.0", - "@aws-sdk/util-retry": "3.329.0", - "@aws-sdk/util-user-agent-browser": "3.329.0", - "@aws-sdk/util-user-agent-node": "3.329.0", + "@aws-sdk/util-defaults-mode-browser": "3.338.0", + "@aws-sdk/util-defaults-mode-node": "3.338.0", + "@aws-sdk/util-endpoints": "3.338.0", + "@aws-sdk/util-retry": "3.338.0", + "@aws-sdk/util-user-agent-browser": "3.338.0", + "@aws-sdk/util-user-agent-node": "3.338.0", "@aws-sdk/util-utf8": "3.310.0", + "@smithy/protocol-http": "^1.0.1", + "@smithy/types": "^1.0.0", "fast-xml-parser": "4.1.2", "tslib": "^2.5.0" }, @@ -445,14 +450,14 @@ } }, "node_modules/@aws-sdk/config-resolver": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.329.0.tgz", - "integrity": "sha512-Oj6eiT3q+Jn685yvUrfRi8PhB3fb81hasJqdrsEivA8IP8qAgnVUTJzXsh8O2UX8UM2MF6A1gTgToSgneJuw2Q==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.338.0.tgz", + "integrity": "sha512-rB9WUaMfTB74Hd2mOiyPFR7Q1viT+w6SaDSR9SA1P8EeIg5H13FNdIKb736Z8/6QJhDj7whdyk1CTGV+DmXOOg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "@aws-sdk/util-config-provider": "3.310.0", - "@aws-sdk/util-middleware": "3.329.0", + "@aws-sdk/util-middleware": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -460,14 +465,14 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.332.0.tgz", - "integrity": "sha512-FJI936QVSFd49PWOgTlW7e8rKO/6Y8sMnkvTJ/APQ1K8em+jWkaAMFBl15NrpOo/jlZCzhkkQDatDHAlbSUXGw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.338.0.tgz", + "integrity": "sha512-kKkBt1qCKx+HspbMq7kd5Yz3jWRW5N1Tegs4cGbTFJH9qMJTyQMoS9GNRcFfzgNEA9sfpHxeTnBbwBw6Ca4S9g==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.332.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/client-cognito-identity": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -475,13 +480,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.329.0.tgz", - "integrity": "sha512-B4orC9hMt9hG82vAR0TAnQqjk6cFDbO2S14RdzUj2n2NPlGWW4Blkv3NTo86K0lq011VRhtqaLcuTwn5EJD5Sg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.338.0.tgz", + "integrity": "sha512-j14vApy80tpk87C3x3uBf1caQsuR8RdQ8iOW830H/AOhsa88XaZIB/NQSX7exaIKZa2RU0Vv2wIlGAA8ko7J6g==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -489,15 +494,15 @@ } }, "node_modules/@aws-sdk/credential-provider-imds": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.329.0.tgz", - "integrity": "sha512-ggPlnd7QROPTid0CwT01TYYGvstRRTpzTGsQ/B31wkh30IrRXE81W3S4xrOYuqQD3u0RnflSxnvhs+EayJEYjg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.338.0.tgz", + "integrity": "sha512-qsqeywYfJevg5pgUUUBmm7pK1bckVrl091PZB2IliFdQVnDvI5GFLf4B0oZqjaLAzPG1gVtxRvqIve+tnP/+xA==", "optional": true, "dependencies": { - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -505,19 +510,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.332.0.tgz", - "integrity": "sha512-DTW6d6rcqizPVyvcIrwvxecQ7e5GONtVc5Wyf0RTfqf41sDOVZYmn6G+zEFSpBLW0975uZbJS0lyLWtJe2VujQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.338.0.tgz", + "integrity": "sha512-UhgYgymT9sJiRm0peqP5EvtR4dXiS2Q2AuFgDUjBvDz8JaZlqafsIS4cfyGwTHV/xY6cdiMu5rCTe8hTyXsukQ==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.329.0", - "@aws-sdk/credential-provider-imds": "3.329.0", - "@aws-sdk/credential-provider-process": "3.329.0", - "@aws-sdk/credential-provider-sso": "3.332.0", - "@aws-sdk/credential-provider-web-identity": "3.329.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/credential-provider-env": "3.338.0", + "@aws-sdk/credential-provider-imds": "3.338.0", + "@aws-sdk/credential-provider-process": "3.338.0", + "@aws-sdk/credential-provider-sso": "3.338.0", + "@aws-sdk/credential-provider-web-identity": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -525,20 +530,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.332.0.tgz", - "integrity": "sha512-KkBayS9k4WyJTvC86ngeRM+RmWxNCS1BHvudkR6PLXfnsNPDzxySDVY0UgxVhbNYDYsO561fXZt9ccpKyVWjgg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.338.0.tgz", + "integrity": "sha512-nZjaMRxJqX0EXMV9LA5IbRQI1pDGGZiPYX2KDfZ1Y9Gc1Y/vIZhHKOHGb1uKMAonlR076CsXlev4/tjC8SGGuw==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.329.0", - "@aws-sdk/credential-provider-imds": "3.329.0", - "@aws-sdk/credential-provider-ini": "3.332.0", - "@aws-sdk/credential-provider-process": "3.329.0", - "@aws-sdk/credential-provider-sso": "3.332.0", - "@aws-sdk/credential-provider-web-identity": "3.329.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/credential-provider-env": "3.338.0", + "@aws-sdk/credential-provider-imds": "3.338.0", + "@aws-sdk/credential-provider-ini": "3.338.0", + "@aws-sdk/credential-provider-process": "3.338.0", + "@aws-sdk/credential-provider-sso": "3.338.0", + "@aws-sdk/credential-provider-web-identity": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -546,14 +551,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.329.0.tgz", - "integrity": "sha512-5oO220qoFc2pMdZDQa6XN/mVhp669I3+LqMbbscGtX/UgLJPSOb7YzPld9Wjv12L5rf+sD3G1PF3LZXO0vKLFA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.338.0.tgz", + "integrity": "sha512-5I1EgJxFFEg8xel2kInMpkdBKajUut0hR2fBajqCmK7Pflu8s0I2NKDots9a3YJagNrFJq38+EzoDcUvRrd2dg==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -561,16 +566,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.332.0.tgz", - "integrity": "sha512-SaKXl48af3n6LRitcaEqbeg1YDXwQ0A5QziC1xQyYPraEIj3IZ/GyTjx04Lo2jxNYHuEOE8u4aTw1+IK1GDKbg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.338.0.tgz", + "integrity": "sha512-fpzYHK17iF/uFkrm4cLg/utDVKSBTWNjAiNlE3GF6CaixBCwc0QBLKHk2nG4d1ZZeMVCbIUMS7eoqfR0LYc/yw==", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.332.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/token-providers": "3.332.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/client-sso": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/token-providers": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -578,13 +583,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.329.0.tgz", - "integrity": "sha512-lcEibZD7AlutCacpQ6DyNUqElZJDq+ylaIo5a8MH9jGh7Pg2WpDg0Sy+B6FbGCkVn4eIjdHxeX54JM245nhESg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.338.0.tgz", + "integrity": "sha512-kjT/P18jM1icwjYwr8wfY//T8lv2s81ms7OC7vgiSqckmQOxpVkdsep9d44ymSUXwopmotFP7M9gGnEHS6HwAA==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -592,24 +597,24 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.332.0.tgz", - "integrity": "sha512-UZM8hCJqBBI4yEopVnfQ7HgUCuiYuWJziPFovQpbwvZKadibzo332/n6e5IsQbJxPjymqFLgTn3PQds/+1FOlQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.338.0.tgz", + "integrity": "sha512-QQkWsR3fyq3N5eTvyKLgk1IO45SEM5+zIDqGqchG74AAhAzTHpiVZ3AOBZckaIAXKyHU3Fgy3gt/u+fdXC4xyw==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.332.0", - "@aws-sdk/client-sso": "3.332.0", - "@aws-sdk/client-sts": "3.332.0", - "@aws-sdk/credential-provider-cognito-identity": "3.332.0", - "@aws-sdk/credential-provider-env": "3.329.0", - "@aws-sdk/credential-provider-imds": "3.329.0", - "@aws-sdk/credential-provider-ini": "3.332.0", - "@aws-sdk/credential-provider-node": "3.332.0", - "@aws-sdk/credential-provider-process": "3.329.0", - "@aws-sdk/credential-provider-sso": "3.332.0", - "@aws-sdk/credential-provider-web-identity": "3.329.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/client-cognito-identity": "3.338.0", + "@aws-sdk/client-sso": "3.338.0", + "@aws-sdk/client-sts": "3.338.0", + "@aws-sdk/credential-provider-cognito-identity": "3.338.0", + "@aws-sdk/credential-provider-env": "3.338.0", + "@aws-sdk/credential-provider-imds": "3.338.0", + "@aws-sdk/credential-provider-ini": "3.338.0", + "@aws-sdk/credential-provider-node": "3.338.0", + "@aws-sdk/credential-provider-process": "3.338.0", + "@aws-sdk/credential-provider-sso": "3.338.0", + "@aws-sdk/credential-provider-web-identity": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -617,25 +622,25 @@ } }, "node_modules/@aws-sdk/fetch-http-handler": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.329.0.tgz", - "integrity": "sha512-9jfIeJhYCcTX4ScXOueRTB3S/tVce0bRsKxKDP0PnTxnGYOwKXoM9lAPmiYItzYmQ/+QzjTI8xfkA9Usz2SK/Q==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.338.0.tgz", + "integrity": "sha512-NOIQmeSa51J2nFAzl99IjxwQkq27cdNJzF59jQWzpUCGbxXfMD4WWy2NHubabSFuJ4FJU2eyoQHUNUFc6/uxXA==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/querystring-builder": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/querystring-builder": "3.338.0", + "@aws-sdk/types": "3.338.0", "@aws-sdk/util-base64": "3.310.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/hash-node": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.329.0.tgz", - "integrity": "sha512-6RmnWXNWpi7yAs0oRDQlkMn2wfXOStr/8kTCgiAiqrk1KopGSBkC2veKiKRSfv02FTd1yV/ISqYNIRqW1VLyxg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.338.0.tgz", + "integrity": "sha512-udveX3ZRO1oUbyBTQH0LJ8Ika7uk0pHuXrqapdi66GGRJB50IhmOg372zUEwZjDB7DZYXfGTCuAj2OoEalgpBA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "@aws-sdk/util-buffer-from": "3.310.0", "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" @@ -645,12 +650,12 @@ } }, "node_modules/@aws-sdk/invalid-dependency": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.329.0.tgz", - "integrity": "sha512-UXynGusDxN/HxLma5ByJ7u+XnuMd47NbHOjJgYsaAjb1CVZT7hEPXOB+mcZ+Ku7To5SCOKu2QbRn7m4bGespBg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.338.0.tgz", + "integrity": "sha512-m6r1fTTGSl0V6l8Z+Ii4Ei8VFpDmu0AT6A59ZhJaMZgxf925ywuCPydyDW9ZqTLE0e7CgxhEHEsH1+HzpVuHTw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" } }, @@ -667,13 +672,13 @@ } }, "node_modules/@aws-sdk/middleware-content-length": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.329.0.tgz", - "integrity": "sha512-7kCd+CvY/4KbyXB0uyL7jCwPjMi2yERMALFdEH9dsUciwmxIQT6eSc4aF6wImC4UrbafaqmXvvHErABKMVBTKA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.338.0.tgz", + "integrity": "sha512-m2C+yJaNmbA3ocBp/7ImUUuimymV5JsFdV7yAibpbYMX22g3q83nieOF9x0I66J0+h+/bcriz/T1ZJAPANLz/g==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -681,15 +686,15 @@ } }, "node_modules/@aws-sdk/middleware-endpoint": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.329.0.tgz", - "integrity": "sha512-hdJRoNdCM0BT4W+rrtee+kfFRgGPGXQDgtbIQlf/FuuuYz2sdef7/SYWr0mxuncnVBW5WkYSPP8h6q07whSKbg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.338.0.tgz", + "integrity": "sha512-bzL9Q8lFidg2NTjGVGDKI6yPG/XiPS+VIAMHJeihQmcv1alIy+N3IL4bEN15Fg+cwaGm+P3BevcLIHmcCOVb4w==", "optional": true, "dependencies": { - "@aws-sdk/middleware-serde": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/url-parser": "3.329.0", - "@aws-sdk/util-middleware": "3.329.0", + "@aws-sdk/middleware-serde": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/url-parser": "3.338.0", + "@aws-sdk/util-middleware": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -697,13 +702,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.329.0.tgz", - "integrity": "sha512-JrHeUdTIpTCfXDo9JpbAbZTS1x4mt63CCytJRq0mpWp+FlP9hjckBcNxWdR/wSKEzP9pDRnTri638BOwWH7O8w==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.338.0.tgz", + "integrity": "sha512-k3C7oppkrqeKrAJt9XIl45SdELtnph9BF0QypjyRfT5MNEDnMMsQkc6xy3ZMqG5dWQq6B2l8C+JL7pOvkSQP3w==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -711,12 +716,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.329.0.tgz", - "integrity": "sha512-lKeeTXsYC1NiwmxrXsZepcwNXPoQxTNNbeD1qaCELPGK2cJlrGoeAP2YRWzpwO2kNZWrDLaGAPT/EUEhqw+d1w==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.338.0.tgz", + "integrity": "sha512-btj9U0Xovq/UAu3Ur4lAfF7Q3DvvwJ/0UUWsI6GgSzzqSOFgKCz7hCP2GZIT8aXEA5hJOpBOEMkNMjWPNa91Hg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -724,13 +729,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.329.0.tgz", - "integrity": "sha512-0/TYOJwrj1Z8s+Y7thibD23hggBq/K/01NwPk32CwWG/G+1vWozs5DefknEl++w0vuV+39pkY4KHI8m/+wOCpg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.338.0.tgz", + "integrity": "sha512-fu5KwiHHSqC8KTQH6xdJ9+dua4gQcXSFLE5fVsergqd0uVdsmhiI+IDfW6QNwF/lmCqnoKDkpeasuB98eG2tow==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -738,16 +743,16 @@ } }, "node_modules/@aws-sdk/middleware-retry": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.329.0.tgz", - "integrity": "sha512-cB3D7GlhHUcHGOlygOYxD9cPhwsTYEAMcohK38An8+RHNp6VQEWezzLFCmHVKUSeCQ+wkjZfPA40jOG0rbjSgQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.338.0.tgz", + "integrity": "sha512-nw1oPFkB7TdDG4Vlz2Td47ft/2Gmx1bA18QfE9K1mMWZ4nnoAL8xnHbowlTfHo62+BbFCAPu53PzDUCncBL0iw==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/service-error-classification": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/util-middleware": "3.329.0", - "@aws-sdk/util-retry": "3.329.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/service-error-classification": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/util-middleware": "3.338.0", + "@aws-sdk/util-retry": "3.338.0", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -756,13 +761,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.329.0.tgz", - "integrity": "sha512-bqtZuhkH8pANb2Gb4FEM1p27o+BoDBmVhEWm8sWH+APsyOor3jc6eUG2GxkfoO6D5tGNIuyCC/GuvW9XDIe4Kg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.338.0.tgz", + "integrity": "sha512-aZ8eFVaot8oYQri1wOesrA3gLizeAHtlA/ELlqxoGDJtO011J4/hTHTn0iJGbktaCvc1L3TF6mgOsgXpudYqMg==", "optional": true, "dependencies": { - "@aws-sdk/middleware-signing": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/middleware-signing": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -770,12 +775,12 @@ } }, "node_modules/@aws-sdk/middleware-serde": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.329.0.tgz", - "integrity": "sha512-tvM9NdPuRPCozPjTGNOeYZeLlyx3BcEyajrkRorCRf1YzG/mXdB6I1stote7i4q1doFtYTz0sYL8bqW3LUPn9A==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.338.0.tgz", + "integrity": "sha512-AabRLrE6sk9tqQlQ7z3kn4gTHNN7Anjk/AM0ZEu96WcWjedcpgM1vVpKTBE7vjnxcTRNq0CEM3GLtQqaZ7/HjQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -783,16 +788,16 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.329.0.tgz", - "integrity": "sha512-bL1nI+EUcF5B1ipwDXxiKL+Uw02Mbt/TNX54PbzunBGZIyO6DZG/H+M3U296bYbvPlwlZhp26O830g6K7VEWsA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.338.0.tgz", + "integrity": "sha512-AprhhShMF75mOx80SABujLwrU/w2uHQIvWd6aF3BsE5JRI3uQZRqspfjFCaK52HNLQPj3sCQUw1GeiZJ8GyWCw==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/signature-v4": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/util-middleware": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/signature-v4": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/util-middleware": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -800,9 +805,9 @@ } }, "node_modules/@aws-sdk/middleware-stack": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.329.0.tgz", - "integrity": "sha512-2huFLhJ45td2nuiIOjpc9JKJbFNn5CYmw9U8YDITTcydpteRN62CzCpeqroDvF89VOLWxh0ZFtuLCGUr7liSWQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.338.0.tgz", + "integrity": "sha512-9zXyiklX9AK9ZIXuIPzWzz2vevBEcnBs9UNIxiHl4NBZ8d8oyTvaES1PtFuwL6f7ANSZ9EGVQ2rdTTnMNxMI1A==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -812,14 +817,14 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.332.0.tgz", - "integrity": "sha512-rSL1xP4QmcMOsunN1p5ZDR9GT3vvoSCnYa4iPvMSjP8Jx7l4ff/aVctwfZkMs/up12+68Jqwj4TvtaCvCFXdUA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.338.0.tgz", + "integrity": "sha512-DMqODOsDMFMPcDw2Ya6a0i34AhaBDRpp3vJ+FK3zPxUIsv6iHA+XqEcXLOxROLLoydoyxus7k2U+EWibLZrFbQ==", "optional": true, "dependencies": { - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/types": "3.329.0", - "@aws-sdk/util-endpoints": "3.332.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/types": "3.338.0", + "@aws-sdk/util-endpoints": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -827,14 +832,14 @@ } }, "node_modules/@aws-sdk/node-config-provider": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.329.0.tgz", - "integrity": "sha512-hg9rGNlkzh8aeR/sQbijrkFx2BIO53j4Z6qDxPNWwSGpl05jri1VHxHx2HZMwgbY6Zy/DSguETN/BL8vdFqyLg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.338.0.tgz", + "integrity": "sha512-YO7yWg3ipnUI5u6D+Zn2NUpjj5krwc8zNWeY79ULVIp9g7faqGX3xMSjeRSrpZ83s5jg1dOm/+bB0gw7mCrRCw==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -842,15 +847,15 @@ } }, "node_modules/@aws-sdk/node-http-handler": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.329.0.tgz", - "integrity": "sha512-OrjaHjU2ZTPfoHa5DruRvTIbeHH/cc0wvh4ml+FwDpWaPaBpOhLiluhZ3anqX1l5QjrXNiQnL8FxSM5OV/zVCA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.338.0.tgz", + "integrity": "sha512-V1BLzCruiv45tJ0vXjiamY8LncIsUFsXYJGDupomFYhWRN8L1MUB9f2vdKn5X3wXn/yKrluwTmNaryrIqd9akA==", "optional": true, "dependencies": { - "@aws-sdk/abort-controller": "3.329.0", - "@aws-sdk/protocol-http": "3.329.0", - "@aws-sdk/querystring-builder": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/abort-controller": "3.338.0", + "@aws-sdk/protocol-http": "3.338.0", + "@aws-sdk/querystring-builder": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -858,12 +863,12 @@ } }, "node_modules/@aws-sdk/property-provider": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.329.0.tgz", - "integrity": "sha512-1cHLTV6yyMGaMSWWDW/p4vTkJ1cc5BOEO+A0eHuAcoSOk+LDe9IKhUG3/ZOvvYKQYcqIj5jjGSni/noXNCl/qw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.338.0.tgz", + "integrity": "sha512-mC+ZJ738ipif6ZkH59gcipozYj1FOfpXr9pGVCA2hJGLDdaBwI2Jfpb2qCqbsTNtoCjBuIy+sQHGmUHyclgYHg==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -871,12 +876,12 @@ } }, "node_modules/@aws-sdk/protocol-http": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.329.0.tgz", - "integrity": "sha512-0rLEHY6QTHTUUcVxzGbPUSmCKlXWplxT/fcYRh0bcc5MBK4naKfcQft1O6Ajp8uqs/9YPZ7XCVCn90pDeJfeaw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.338.0.tgz", + "integrity": "sha512-JX03Q2gshdzOWtA/07kdpk0hqeOrOfwuF8TB97g66VCcIopYQkCeNH1zzkWu+RsGxfSlzQ7up+ZM6sclYXyB1A==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -884,12 +889,12 @@ } }, "node_modules/@aws-sdk/querystring-builder": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.329.0.tgz", - "integrity": "sha512-UWgMKkS5trliaDJG4nPv3onu8Y0aBuwRo7RdIgggguOiU8pU6pq1I113nH2FBNWy+Me1bwf+bcviJh0pCo6bEg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.338.0.tgz", + "integrity": "sha512-IB3YhO93Htwt2SxJx4VWsN57Rt1KEsvZ6PbneO4bcS96E04BlfBujYMZ+QxEM3EJxorhpkwbI2QnI12IjD8FhA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "@aws-sdk/util-uri-escape": "3.310.0", "tslib": "^2.5.0" }, @@ -898,12 +903,12 @@ } }, "node_modules/@aws-sdk/querystring-parser": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.329.0.tgz", - "integrity": "sha512-9mkK+FB7snJ2G7H3CqtprDwYIRhzm6jEezffCwUWrC+lbqHBbErbhE9IeU/MKxILmf0RbC2riXEY1MHGspjRrQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.338.0.tgz", + "integrity": "sha512-vtI8Gqx4yj0BZlWonRMgLz68sHt5H48HN+ClnY+fDDB/8KLnCuwZ3TGKmYIbYbshL9wjJz0A9aLzuC6nPQ5JKw==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -911,21 +916,21 @@ } }, "node_modules/@aws-sdk/service-error-classification": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.329.0.tgz", - "integrity": "sha512-TSNr0flOcCLe71aPp7MjblKNGsmxpTU4xR5772MDX9Cz9GUTNZCPFtvrcqd+wzEPP/AC7XwNXe8KjoXooZImUQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.338.0.tgz", + "integrity": "sha512-BJFr2mx/N3NbycGTlMMGRBc0tGcHXHEbMPy1H2RbejzL23zh27MchaL1WAK9SvwVMKS29hSDbhkuVR2ABRjerA==", "optional": true, "engines": { "node": ">=14.0.0" } }, "node_modules/@aws-sdk/shared-ini-file-loader": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.329.0.tgz", - "integrity": "sha512-e0hyd75fbjMd4aCoRwpP2/HR+0oScwogErVArIkq3F42c/hyNCQP3sph4JImuXIjuo6HNnpKpf20CEPPhNna8A==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.338.0.tgz", + "integrity": "sha512-MA1Sp97LFlOXcUaXgo47j86IsPRWYq1V/JqR+uu0zofZw4Xlt7Y6F+mmnDHvuuMy6R2ltzjXSwgrrW3k0bxFPA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -933,15 +938,15 @@ } }, "node_modules/@aws-sdk/signature-v4": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.329.0.tgz", - "integrity": "sha512-9EnLoyOD5nFtCRAp+QRllDgQASCfY7jLHVhwht7jzwE80wE65Z9Ym5Z/mwTd4IyTz/xXfCvcE2VwClsBt0Ybdw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.338.0.tgz", + "integrity": "sha512-EwKTe/8Iwab/v0eo27w7DRYlqp9wEZEhuRfOMwTikUVH6iuTnW6AXjcIUfcRYBRbx2zqnRSiMAZkjN6ZFYm0bQ==", "optional": true, "dependencies": { "@aws-sdk/is-array-buffer": "3.310.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "@aws-sdk/util-hex-encoding": "3.310.0", - "@aws-sdk/util-middleware": "3.329.0", + "@aws-sdk/util-middleware": "3.338.0", "@aws-sdk/util-uri-escape": "3.310.0", "@aws-sdk/util-utf8": "3.310.0", "tslib": "^2.5.0" @@ -951,13 +956,13 @@ } }, "node_modules/@aws-sdk/smithy-client": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.329.0.tgz", - "integrity": "sha512-7E0fGpBKxwFqHHAOqNbgNsHSEmCZLuvmU9yvG9DXKVzrS4P48O/PfOro123WpcFZs3STyOVgH8wjUPftHAVKmg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.338.0.tgz", + "integrity": "sha512-IpFLdLG8GwaiFdqVXf+WyU47Hfa2BMIupAU6iSkE2ZO0lBdg+efn/BBwis5WbBNTDCaaU0xH9y68SmnqqtD7pA==", "optional": true, "dependencies": { - "@aws-sdk/middleware-stack": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/middleware-stack": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -965,15 +970,15 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.332.0.tgz", - "integrity": "sha512-fccbg6OSl0l658pxl2p1MoU9gEePo5B361+JNaN0zfRMu7c5HBXCpdl4djlFxAHjltrX9f1+BKqfGHYgI3h8SQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.338.0.tgz", + "integrity": "sha512-wuiEGcWiMeq5N68M489i2iGYcCad9p1btNEOFgus+JO3DRSA6HZXizLI1wqfbUm5Ei8512AvUKB6N8PMzahQsg==", "optional": true, "dependencies": { - "@aws-sdk/client-sso-oidc": "3.332.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/shared-ini-file-loader": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/client-sso-oidc": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/shared-ini-file-loader": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -981,9 +986,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.329.0.tgz", - "integrity": "sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.338.0.tgz", + "integrity": "sha512-hrNK15o+EObLrl9oWOyxJN2dwjgbdBMGolLEVP/wR/+M9ojHgk/x1kMsCVcV82a8Vgdtqx1TyOC3UugUPT0+NA==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -993,13 +998,13 @@ } }, "node_modules/@aws-sdk/url-parser": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.329.0.tgz", - "integrity": "sha512-/VcfL7vNJKJGSjYYHVQF3bYCDFs4fSzB7j5qeVDwRdWr870gE7O1Dar+sLWBRKFF3AX+4VzplqzUfpu9t44JVA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.338.0.tgz", + "integrity": "sha512-x8a5swfZ6iWJZEA8rm99OKQ1A6xhWPP1taQUzoPavGCzPAOqyc8cd0FcXYMxvtXb3FeBhGaI8tiGKvelJro0+A==", "optional": true, "dependencies": { - "@aws-sdk/querystring-parser": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/querystring-parser": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" } }, @@ -1063,13 +1068,13 @@ } }, "node_modules/@aws-sdk/util-defaults-mode-browser": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.329.0.tgz", - "integrity": "sha512-2iSiy/pzX3OXMhtSxtAzOiEFr3viQEFnYOTeZuiheuyS+cea2L79F6SlZ1110b/nOIU/UOrxxtz83HVad8YFMQ==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.338.0.tgz", + "integrity": "sha512-Zfr5c7JKMJTfb7z+hgd0ioU5iw+wId6Cppc5V1HpZuS2YY4Mn3aJIixzyzhIoCzbmk/yIkf96981epM9eo3/TA==", "optional": true, "dependencies": { - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -1078,16 +1083,16 @@ } }, "node_modules/@aws-sdk/util-defaults-mode-node": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.329.0.tgz", - "integrity": "sha512-7A6C7YKjkZtmKtH29isYEtOCbhd7IcXPP8lftN8WAWlLOiZE4gV7PHveagUj7QserJzgRKGwwTQbBj53n18HYg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.338.0.tgz", + "integrity": "sha512-DFM3BSpSetshZTgTjueCkAYZWS0tn5zl7SjkSpFhWQZ8Tt/Df3/DEjcPvxzmC/5vgYSUXNsqcI7lLAJk9aGZAA==", "optional": true, "dependencies": { - "@aws-sdk/config-resolver": "3.329.0", - "@aws-sdk/credential-provider-imds": "3.329.0", - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/property-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/config-resolver": "3.338.0", + "@aws-sdk/credential-provider-imds": "3.338.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/property-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -1095,12 +1100,12 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.332.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.332.0.tgz", - "integrity": "sha512-nQx7AiOroMU2hj6h+umWOSZ+WECwxupaxFUK/PPKGW6NY/VdQE6LluYnXOtF5awlr8w1nPksT0Lq05PZutMDLA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.338.0.tgz", + "integrity": "sha512-0gBQcohbNcBsBR7oyaD0Dg2m6qOmfp0G1iN/NM23gwAr2H3ni8tUXfs1HsZzxikOwUr6dSLASokc30vQXBF44A==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -1132,9 +1137,9 @@ } }, "node_modules/@aws-sdk/util-middleware": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.329.0.tgz", - "integrity": "sha512-RhBOBaxzkTUghi4MSqr8S5qeeBCjgJ0XPJ6jIYkVkj1saCmqkuZCgl3zFaYdyhdxxPV6nflkFer+1HUoqT+Fqw==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.338.0.tgz", + "integrity": "sha512-oQuAmhi16HWEqVa+Nq4VD4Ymet9vS+uiW92reaagQrW2QFjAgJW9A6pU0PcIHF9sWY1iDKeNdV5b9odQ45PDJA==", "optional": true, "dependencies": { "tslib": "^2.5.0" @@ -1144,12 +1149,12 @@ } }, "node_modules/@aws-sdk/util-retry": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.329.0.tgz", - "integrity": "sha512-+3VQ9HZLinysnmryUs9Xjt1YVh4TYYHLt30ilu4iUnIHFQoamdzIbRCWseSVFPCxGroen9M9qmAleAsytHEKuA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.338.0.tgz", + "integrity": "sha512-diR6M3gJgSgBg/87L2e8iF8urG+LOW9ZGWxhntYpYX4uhiIjwNgUPUa993553C8GIOZDHez5X9ExU4asYGQ71Q==", "optional": true, "dependencies": { - "@aws-sdk/service-error-classification": "3.329.0", + "@aws-sdk/service-error-classification": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -1169,24 +1174,24 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.329.0.tgz", - "integrity": "sha512-8hLSmMCl8aw2++0Zuba8ELq8FkK6/VNyx470St201IpMn2GMbQMDl/rLolRKiTgji6wc+T3pOTidkJkz8/cIXA==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.338.0.tgz", + "integrity": "sha512-3e8D+SOtOQEtRtksOEF7EC26xPkuY6YK6biLgdtvR9JspK96rHk5eX1HEJeBJJqbxhyPaxpIw+OhWhnsrUS3hA==", "optional": true, "dependencies": { - "@aws-sdk/types": "3.329.0", + "@aws-sdk/types": "3.338.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.329.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.329.0.tgz", - "integrity": "sha512-C50Zaeodc0+psEP+L4WpElrH8epuLWJPVN4hDOTORcM0cSoU2o025Ost9mbcU7UdoHNxF9vitLnzORGN9SHolg==", + "version": "3.338.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.338.0.tgz", + "integrity": "sha512-rc+bC5KM9h25urRc+MXuViJkJ+qYG2NlCRw6xm2lSIvHFJTUjH1ZMO3mqNDYkGnQRbj0mmrVe+N77TJZGf3Q2Q==", "optional": true, "dependencies": { - "@aws-sdk/node-config-provider": "3.329.0", - "@aws-sdk/types": "3.329.0", + "@aws-sdk/node-config-provider": "3.338.0", + "@aws-sdk/types": "3.338.0", "tslib": "^2.5.0" }, "engines": { @@ -1481,9 +1486,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.7.tgz", - "integrity": "sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", + "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1538,9 +1543,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.5.tgz", - "integrity": "sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", + "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", "dev": true, "dependencies": { "@babel/types": "^7.21.5", @@ -1904,9 +1909,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz", - "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", + "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -3059,23 +3064,23 @@ } }, "node_modules/@babel/standalone": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.21.8.tgz", - "integrity": "sha512-Od6cBJ8dm9wjAt+3olvO7N3s+8UsCkX3hH41Ew3BlFJw1QQtbctplq3kuwzzfk+YcmXE95k8fJCzbnhf32+BxQ==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.21.9.tgz", + "integrity": "sha512-I9UNGZyBQgJOXdzZNeqO5NfTZhZoCCjnkR31GlEH6CDfnIWSC2D3OYSZTSGsQ2JhEwx7tbNR+1HuYHcoZd1IaQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.21.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz", + "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" }, "engines": { "node": ">=6.9.0" @@ -4652,6 +4657,31 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@smithy/protocol-http": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-1.0.1.tgz", + "integrity": "sha512-9OrEn0WfOVtBNYJUjUAn9AOiJ4lzERCJJ/JeZs8E6yajTGxBaFRxUnNBHiNqoDJVg076hY36UmEnPx7xXrvUSg==", + "optional": true, + "dependencies": { + "@smithy/types": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-1.0.0.tgz", + "integrity": "sha512-kc1m5wPBHQCTixwuaOh9vnak/iJm21DrSf9UK6yDE5S3mQQ4u11pqAUiKWnlrZnYkeLfAI9UEHj9OaMT1v5Umg==", + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -4908,9 +4938,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.1.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.7.tgz", - "integrity": "sha512-WCuw/o4GSwDGMoonES8rcvwsig77dGCMbZDrZr2x4ZZiNW4P/gcoZXe/0twgtobcTkmg9TuKflxYL/DuwDyJzg==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -6434,9 +6464,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001488", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001488.tgz", - "integrity": "sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ==", + "version": "1.0.30001489", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", + "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "dev": true, "funding": [ { @@ -7522,6 +7552,32 @@ "node": ">=10" } }, + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -7916,9 +7972,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.397", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.397.tgz", - "integrity": "sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q==", + "version": "1.4.407", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz", + "integrity": "sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==", "dev": true }, "node_modules/emittery": { @@ -8022,9 +8078,9 @@ } }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", "engines": { "node": ">=10.0.0" } @@ -13040,6 +13096,18 @@ "node": ">=6" } }, + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jsdom/node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -13049,6 +13117,20 @@ "node": ">= 4.0.0" } }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsesc": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", @@ -14513,9 +14595,9 @@ "integrity": "sha512-i3Sf6khnenl0aXumo0whAlfPWTaBqHxEnVBBxpu3dZ7q69NkPPv71rvPjlDZ5wkeKCTNNUTECljerS5kcYQxRw==" }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "node_modules/node-ssh": { @@ -16685,9 +16767,9 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -17681,15 +17763,15 @@ } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, "node_modules/tree-kill": { @@ -17711,9 +17793,9 @@ } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" }, "node_modules/tunnel": { "version": "0.0.6", @@ -18598,17 +18680,25 @@ "dev": true }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" + } + }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/which": { diff --git a/package.json b/package.json index ed7778680..793dfa584 100644 --- a/package.json +++ b/package.json @@ -185,6 +185,7 @@ "vue-router": "~4.0.14", "vue-toastification": "~2.0.0-rc.5", "vuedraggable": "~4.1.0", - "wait-on": "^6.0.1" + "wait-on": "^6.0.1", + "whatwg-url": "~12.0.1" } } diff --git a/server/model/monitor.js b/server/model/monitor.js index b5e58c574..adeb35a04 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -365,8 +365,8 @@ class Monitor extends BeanModel { tlsInfo = await this.updateTlsInfo(tlsInfoObject); if (!this.getIgnoreTls() && this.isEnabledExpiryNotification()) { - log.debug("monitor", `[${this.name}] call sendCertNotification`); - await this.sendCertNotification(tlsInfoObject); + log.debug("monitor", `[${this.name}] call checkCertExpiryNotifications`); + await this.checkCertExpiryNotifications(tlsInfoObject); } } catch (e) { @@ -1212,13 +1212,19 @@ class Monitor extends BeanModel { } /** - * Send notification about a certificate + * checks certificate chain for expiring certificates * @param {Object} tlsInfoObject Information about certificate */ - async sendCertNotification(tlsInfoObject) { + async checkCertExpiryNotifications(tlsInfoObject) { if (tlsInfoObject && tlsInfoObject.certInfo && tlsInfoObject.certInfo.daysRemaining) { const notificationList = await Monitor.getNotificationList(this); + if (! notificationList.length > 0) { + // fail fast. If no notification is set, all the following checks can be skipped. + log.debug("monitor", "No notification, no need to send cert notification"); + return; + } + let notifyDays = await setting("tlsExpiryNotifyDays"); if (notifyDays == null || !Array.isArray(notifyDays)) { // Reset Default @@ -1226,10 +1232,19 @@ class Monitor extends BeanModel { notifyDays = [ 7, 14, 21 ]; } - if (notifyDays != null && Array.isArray(notifyDays)) { - for (const day of notifyDays) { - log.debug("monitor", "call sendCertNotificationByTargetDays", day); - await this.sendCertNotificationByTargetDays(tlsInfoObject.certInfo.daysRemaining, day, notificationList); + if (Array.isArray(notifyDays)) { + for (const targetDays of notifyDays) { + let certInfo = tlsInfoObject.certInfo; + while (certInfo) { + let subjectCN = certInfo.subject["CN"]; + if (certInfo.daysRemaining > targetDays) { + log.debug("monitor", `No need to send cert notification for ${certInfo.certType} certificate "${subjectCN}" (${certInfo.daysRemaining} days valid) on ${targetDays} deadline.`); + } else { + log.debug("monitor", `call sendCertNotificationByTargetDays for ${targetDays} deadline on certificate ${subjectCN}.`); + await this.sendCertNotificationByTargetDays(subjectCN, certInfo.certType, certInfo.daysRemaining, targetDays, notificationList); + } + certInfo = certInfo.issuerCertificate; + } } } } @@ -1238,55 +1253,47 @@ class Monitor extends BeanModel { /** * Send a certificate notification when certificate expires in less * than target days - * @param {number} daysRemaining Number of days remaining on certifcate + * @param {string} certCN Common Name attribute from the certificate subject + * @param {string} certType certificate type + * @param {number} daysRemaining Number of days remaining on certificate * @param {number} targetDays Number of days to alert after * @param {LooseObject[]} notificationList List of notification providers * @returns {Promise} */ - async sendCertNotificationByTargetDays(daysRemaining, targetDays, notificationList) { + async sendCertNotificationByTargetDays(certCN, certType, daysRemaining, targetDays, notificationList) { - if (daysRemaining > targetDays) { - log.debug("monitor", `No need to send cert notification. ${daysRemaining} > ${targetDays}`); + let row = await R.getRow("SELECT * FROM notification_sent_history WHERE type = ? AND monitor_id = ? AND days <= ?", [ + "certificate", + this.id, + targetDays, + ]); + + // Sent already, no need to send again + if (row) { + log.debug("monitor", "Sent already, no need to send again"); return; } - if (notificationList.length > 0) { + let sent = false; + log.debug("monitor", "Send certificate notification"); - let row = await R.getRow("SELECT * FROM notification_sent_history WHERE type = ? AND monitor_id = ? AND days <= ?", [ + for (let notification of notificationList) { + try { + log.debug("monitor", "Sending to " + notification.name); + await Notification.send(JSON.parse(notification.config), `[${this.name}][${this.url}] ${certType} certificate ${certCN} will be expired in ${daysRemaining} days`); + sent = true; + } catch (e) { + log.error("monitor", "Cannot send cert notification to " + notification.name); + log.error("monitor", e); + } + } + + if (sent) { + await R.exec("INSERT INTO notification_sent_history (type, monitor_id, days) VALUES(?, ?, ?)", [ "certificate", this.id, targetDays, ]); - - // Sent already, no need to send again - if (row) { - log.debug("monitor", "Sent already, no need to send again"); - return; - } - - let sent = false; - log.debug("monitor", "Send certificate notification"); - - for (let notification of notificationList) { - try { - log.debug("monitor", "Sending to " + notification.name); - await Notification.send(JSON.parse(notification.config), `[${this.name}][${this.url}] Certificate will expire in ${daysRemaining} days`); - sent = true; - } catch (e) { - log.error("monitor", "Cannot send cert notification to " + notification.name); - log.error("monitor", e); - } - } - - if (sent) { - await R.exec("INSERT INTO notification_sent_history (type, monitor_id, days) VALUES(?, ?, ?)", [ - "certificate", - this.id, - targetDays, - ]); - } - } else { - log.debug("monitor", "No notification, no need to send cert notification"); } } diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js index b699228c9..37de0d364 100644 --- a/server/notification-providers/discord.js +++ b/server/notification-providers/discord.js @@ -59,8 +59,8 @@ class Discord extends NotificationProvider { value: monitorJSON["type"] === "push" ? "Heartbeat" : address, }, { - name: "Time (UTC)", - value: heartbeatJSON["time"], + name: `Time (${heartbeatJSON["timezone"]})`, + value: heartbeatJSON["localDateTime"], }, { name: "Error", @@ -94,8 +94,8 @@ class Discord extends NotificationProvider { value: monitorJSON["type"] === "push" ? "Heartbeat" : address, }, { - name: "Time (UTC)", - value: heartbeatJSON["time"], + name: `Time (${heartbeatJSON["timezone"]})`, + value: heartbeatJSON["localDateTime"], }, { name: "Ping", diff --git a/server/notification-providers/feishu.js b/server/notification-providers/feishu.js index 73781ca4e..683a3653d 100644 --- a/server/notification-providers/feishu.js +++ b/server/notification-providers/feishu.js @@ -35,8 +35,7 @@ class Feishu extends NotificationProvider { text: "[Down] " + heartbeatJSON["msg"] + - "\nTime (UTC): " + - heartbeatJSON["time"], + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` }, ], ], @@ -62,8 +61,7 @@ class Feishu extends NotificationProvider { text: "[Up] " + heartbeatJSON["msg"] + - "\nTime (UTC): " + - heartbeatJSON["time"], + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`, }, ], ], diff --git a/server/notification-providers/line.js b/server/notification-providers/line.js index e594e1742..10b7f2c9b 100644 --- a/server/notification-providers/line.js +++ b/server/notification-providers/line.js @@ -33,7 +33,10 @@ class Line extends NotificationProvider { "messages": [ { "type": "text", - "text": "UptimeKuma Alert: [🔴 Down]\n" + "Name: " + monitorJSON["name"] + " \n" + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"] + "text": "UptimeKuma Alert: [🔴 Down]\n" + + "Name: " + monitorJSON["name"] + " \n" + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` } ] }; @@ -44,7 +47,10 @@ class Line extends NotificationProvider { "messages": [ { "type": "text", - "text": "UptimeKuma Alert: [✅ Up]\n" + "Name: " + monitorJSON["name"] + " \n" + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"] + "text": "UptimeKuma Alert: [✅ Up]\n" + + "Name: " + monitorJSON["name"] + " \n" + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` } ] }; diff --git a/server/notification-providers/linenotify.js b/server/notification-providers/linenotify.js index 8454152d8..279acb7d4 100644 --- a/server/notification-providers/linenotify.js +++ b/server/notification-providers/linenotify.js @@ -24,12 +24,18 @@ class LineNotify extends NotificationProvider { await axios.post(lineAPIUrl, qs.stringify(testMessage), config); } else if (heartbeatJSON["status"] === DOWN) { let downMessage = { - "message": "\n[🔴 Down]\n" + "Name: " + monitorJSON["name"] + " \n" + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"] + "message": "\n[🔴 Down]\n" + + "Name: " + monitorJSON["name"] + " \n" + + heartbeatJSON["msg"] + "\n" + + `Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` }; await axios.post(lineAPIUrl, qs.stringify(downMessage), config); } else if (heartbeatJSON["status"] === UP) { let upMessage = { - "message": "\n[✅ Up]\n" + "Name: " + monitorJSON["name"] + " \n" + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"] + "message": "\n[✅ Up]\n" + + "Name: " + monitorJSON["name"] + " \n" + + heartbeatJSON["msg"] + "\n" + + `Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` }; await axios.post(lineAPIUrl, qs.stringify(upMessage), config); } diff --git a/server/notification-providers/lunasea.js b/server/notification-providers/lunasea.js index 4d7136f75..0a5fea7b0 100644 --- a/server/notification-providers/lunasea.js +++ b/server/notification-providers/lunasea.js @@ -28,7 +28,9 @@ class LunaSea extends NotificationProvider { if (heartbeatJSON["status"] === DOWN) { let downdata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], + "body": "[🔴 Down] " + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` }; await axios.post(lunaseaurl, downdata); return okMsg; @@ -37,7 +39,9 @@ class LunaSea extends NotificationProvider { if (heartbeatJSON["status"] === UP) { let updata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], + "body": "[✅ Up] " + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}` }; await axios.post(lunaseaurl, updata); return okMsg; diff --git a/server/notification-providers/mattermost.js b/server/notification-providers/mattermost.js index bade6c195..d4997392c 100644 --- a/server/notification-providers/mattermost.js +++ b/server/notification-providers/mattermost.js @@ -88,8 +88,8 @@ class Mattermost extends NotificationProvider { statusField, { short: true, - title: "Time (UTC)", - value: heartbeatJSON.time, + title: `Time (${heartbeatJSON["timezone"]})`, + value: heartbeatJSON.localDateTime, }, ], }, diff --git a/server/notification-providers/pushbullet.js b/server/notification-providers/pushbullet.js index 1346655d0..f3d95a85e 100644 --- a/server/notification-providers/pushbullet.js +++ b/server/notification-providers/pushbullet.js @@ -29,14 +29,18 @@ class Pushbullet extends NotificationProvider { let downData = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], + "body": "[🔴 Down] " + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`, }; await axios.post(pushbulletUrl, downData, config); } else if (heartbeatJSON["status"] === UP) { let upData = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], + "body": "[✅ Up] " + + heartbeatJSON["msg"] + + `\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`, }; await axios.post(pushbulletUrl, upData, config); } diff --git a/server/notification-providers/pushover.js b/server/notification-providers/pushover.js index e4f0ddb81..b333b476e 100644 --- a/server/notification-providers/pushover.js +++ b/server/notification-providers/pushover.js @@ -24,13 +24,16 @@ class Pushover extends NotificationProvider { if (notification.pushoverdevice) { data.device = notification.pushoverdevice; } + if (notification.pushoverttl) { + data.ttl = notification.pushoverttl; + } try { if (heartbeatJSON == null) { await axios.post(pushoverlink, data); return okMsg; } else { - data.message += "\nTime (UTC):" + heartbeatJSON["time"]; + data.message += `\nTime (${heartbeatJSON["timezone"]}):${heartbeatJSON["localDateTime"]}`; await axios.post(pushoverlink, data); return okMsg; } diff --git a/server/notification-providers/rocket-chat.js b/server/notification-providers/rocket-chat.js index fb48ce1a6..76b964a3a 100644 --- a/server/notification-providers/rocket-chat.js +++ b/server/notification-providers/rocket-chat.js @@ -22,8 +22,6 @@ class RocketChat extends NotificationProvider { return okMsg; } - const time = heartbeatJSON["time"]; - let data = { "text": "Uptime Kuma Alert", "channel": notification.rocketchannel, @@ -31,7 +29,7 @@ class RocketChat extends NotificationProvider { "icon_emoji": notification.rocketiconemo, "attachments": [ { - "title": "Uptime Kuma Alert *Time (UTC)*\n" + time, + "title": `Uptime Kuma Alert *Time (${heartbeatJSON["timezone"]})*\n${heartbeatJSON["localDateTime"]}`, "text": "*Message*\n" + msg, } ] diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js index 27bf259af..b3986b00f 100644 --- a/server/notification-providers/slack.js +++ b/server/notification-providers/slack.js @@ -44,7 +44,6 @@ class Slack extends NotificationProvider { return okMsg; } - const time = heartbeatJSON["time"]; const textMsg = "Uptime Kuma Alert"; let data = { "text": `${textMsg}\n${msg}`, @@ -70,7 +69,7 @@ class Slack extends NotificationProvider { }, { "type": "mrkdwn", - "text": "*Time (UTC)*\n" + time, + "text": `*Time (${heartbeatJSON["timezone"]})*\n${heartbeatJSON["localDateTime"]}`, }], } ], diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index a6a0cc016..aae0e46c7 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -91,7 +91,7 @@ class SMTP extends NotificationProvider { let bodyTextContent = msg; if (heartbeatJSON) { - bodyTextContent = `${msg}\nTime (UTC): ${heartbeatJSON["time"]}`; + bodyTextContent = `${msg}\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`; } // send mail with defined transport object diff --git a/server/server.js b/server/server.js index 12a711e80..ca046a017 100644 --- a/server/server.js +++ b/server/server.js @@ -19,6 +19,11 @@ const nodeVersion = parseInt(process.versions.node.split(".")[0]); const requiredVersion = 14; console.log(`Your Node.js version: ${nodeVersion}`); +// See more: https://github.com/louislam/uptime-kuma/issues/3138 +if (nodeVersion >= 20) { + console.warn("\x1b[31m%s\x1b[0m", "Warning: Uptime Kuma is currently not stable on Node.js >= 20, please use Node.js 18."); +} + if (nodeVersion < requiredVersion) { console.error(`Error: Your Node.js version is not supported, please upgrade to Node.js >= ${requiredVersion}.`); process.exit(-1); diff --git a/server/util-server.js b/server/util-server.js index 47f6bb48c..3e0306e61 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -519,12 +519,16 @@ const parseCertificateInfo = function (info) { // Move up the chain until loop is encountered if (link.issuerCertificate == null) { + link.certType = (i === 0) ? "self-signed" : "root CA"; break; } else if (link.issuerCertificate.fingerprint in existingList) { + // a root CA certificate is typically "signed by itself" (=> "self signed certificate") and thus the "issuerCertificate" is a reference to itself. log.debug("cert", `[Last] ${link.issuerCertificate.fingerprint}`); + link.certType = (i === 0) ? "self-signed" : "root CA"; link.issuerCertificate = null; break; } else { + link.certType = (i === 0) ? "server" : "intermediate CA"; link = link.issuerCertificate; } diff --git a/src/components/APIKeyDialog.vue b/src/components/APIKeyDialog.vue index 471203763..4bba69fec 100644 --- a/src/components/APIKeyDialog.vue +++ b/src/components/APIKeyDialog.vue @@ -48,15 +48,14 @@ - - + + diff --git a/src/components/BadgeGeneratorDialog.vue b/src/components/BadgeGeneratorDialog.vue new file mode 100644 index 000000000..9e073e39a --- /dev/null +++ b/src/components/BadgeGeneratorDialog.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/src/components/MonitorSettingDialog.vue b/src/components/MonitorSettingDialog.vue new file mode 100644 index 000000000..a6976853c --- /dev/null +++ b/src/components/MonitorSettingDialog.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue index 1b4d004b9..00f38c5b9 100644 --- a/src/components/PublicGroupList.vue +++ b/src/components/PublicGroupList.vue @@ -49,16 +49,15 @@ {{ monitor.element.name }}

{{ monitor.element.name }}

+ @@ -77,9 +76,11 @@ + @@ -415,6 +455,7 @@ export default { flex-direction: column; align-items: center; padding-top: 10px; + font-size: 0.9em; } a.btn { @@ -471,6 +512,18 @@ table { } } +@media (max-width: 550px) { + .stats { + .col { + margin: 10px 0 !important; + } + + h4 { + font-size: 1.1rem; + } + } +} + .keyword { color: black; }