From 6dc0f019e6ff2017362eaca94b86e3e044fa6df8 Mon Sep 17 00:00:00 2001 From: Skorpios Date: Fri, 21 Mar 2025 16:04:21 -0700 Subject: [PATCH 01/43] Add notifications to our existing monitors --- .../NotificationIntegrationModal.jsx | 89 ++++++++++++------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx index 437b1ca2e..9758c070d 100644 --- a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx +++ b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx @@ -182,43 +182,64 @@ const NotificationIntegrationModal = ({ await sendTestNotification(type, config); }; - const handleSave = () => { - //notifications array for selected integrations - const notifications = [...(monitor?.notifications || [])]; - - // Get all notification types IDs - const existingTypes = activeNotificationTypes.map(type => type.id); - - // Filter out notifications that are configurable in this modal - const filteredNotifications = notifications.filter( - notification => !existingTypes.includes(notification.type) - ); + // In NotificationIntegrationModal.jsx, update the handleSave function: - // Add each enabled notification with its configured fields - activeNotificationTypes.forEach(type => { - if (integrations[type.id]) { - const notificationObject = { - type: type.id - }; - - // Add each field value to the notification object - type.fields.forEach(field => { - const fieldKey = getFieldKey(type.id, field.id); - notificationObject[field.id] = integrations[fieldKey]; - }); - - filteredNotifications.push(notificationObject); +const handleSave = () => { + // Get existing notifications + const notifications = [...(monitor?.notifications || [])]; + + // Get all notification types IDs + const existingTypes = activeNotificationTypes.map(type => type.id); + + // Filter out notifications that are configurable in this modal + const filteredNotifications = notifications.filter( + notification => { + + if (notification.platform) { + return !existingTypes.includes(notification.platform); } - }); + + return !existingTypes.includes(notification.type); + } + ); - // Update monitor with new notifications - setMonitor(prev => ({ - ...prev, - notifications: filteredNotifications - })); - - onClose(); - }; + // Add each enabled notification with its configured fields + activeNotificationTypes.forEach(type => { + if (integrations[type.id]) { + // Create a notification object + let notificationObject = { + type: "webhook", // All platform integrations use webhook type + platform: type.id, // Set platform to identify the specific service + config: {} + }; + + // Configure based on notification type + switch(type.id) { + case "slack": + case "discord": + notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'webhook')]; + break; + case "telegram": + notificationObject.config.botToken = integrations[getFieldKey(type.id, 'token')]; + notificationObject.config.chatId = integrations[getFieldKey(type.id, 'chatId')]; + break; + case "webhook": + notificationObject.config.webhookUrl = integrations[getFieldKey(type.id, 'url')]; + break; + } + + filteredNotifications.push(notificationObject); + } + }); + + // Update monitor with new notifications + setMonitor(prev => ({ + ...prev, + notifications: filteredNotifications + })); + + onClose(); +}; return ( Date: Fri, 21 Mar 2025 16:25:06 -0700 Subject: [PATCH 02/43] Get rid of unnecessary comments. --- .../Components/NotificationIntegrationModal.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx index 9758c070d..7806ee37e 100644 --- a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx +++ b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx @@ -206,9 +206,9 @@ const handleSave = () => { // Add each enabled notification with its configured fields activeNotificationTypes.forEach(type => { if (integrations[type.id]) { - // Create a notification object + let notificationObject = { - type: "webhook", // All platform integrations use webhook type + type: "webhook", platform: type.id, // Set platform to identify the specific service config: {} }; From 6c145297988af388ec1b07ef4541b1e7b97d69df Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Fri, 21 Mar 2025 21:50:04 -0400 Subject: [PATCH 03/43] remove sidebar border and add borderRight --- src/Components/Sidebar/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Components/Sidebar/index.jsx b/src/Components/Sidebar/index.jsx index 4fbc12538..80dcdf25f 100644 --- a/src/Components/Sidebar/index.jsx +++ b/src/Components/Sidebar/index.jsx @@ -205,9 +205,9 @@ function Sidebar() { */ sx={{ position: "relative", - border: 1, + borderRight: `1px solid ${theme.palette.primary.lowContrast}`, borderColor: theme.palette.primary.lowContrast, - borderRadius: theme.shape.borderRadius, + borderRadius: 0, "& :is(p, span, .MuiListSubheader-root)": { /* Text color for unselected menu items and menu headings From c790a9282ac4e7bd5286a6f4453512c5b1a64783 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Fri, 21 Mar 2025 22:43:31 -0400 Subject: [PATCH 04/43] modify sidebar and main layout styles to fix the positions --- src/Components/Layouts/HomeLayout/index.css | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Components/Layouts/HomeLayout/index.css b/src/Components/Layouts/HomeLayout/index.css index ef6f38abd..85ac93941 100644 --- a/src/Components/Layouts/HomeLayout/index.css +++ b/src/Components/Layouts/HomeLayout/index.css @@ -1,9 +1,9 @@ .home-layout { position: relative; min-height: 100vh; - max-width: 1400px; + /* max-width: 1400px; */ margin: 0 auto; - padding: var(--env-var-spacing-2); + padding: 0; } /* TODO go for this approach for responsiveness. The aside needs to be taken care of */ @@ -15,10 +15,9 @@ .home-layout aside { position: sticky; - top: var(--env-var-spacing-2); + top: 0; left: 0; - - height: calc(100vh - var(--env-var-spacing-2) * 2); + height: 100vh; max-width: var(--env-var-side-bar-width); } @@ -26,3 +25,11 @@ min-height: calc(100vh - var(--env-var-spacing-2) * 2); flex: 1; } + +.home-layout > :nth-child(2) { + padding: var(--env-var-spacing-2); + min-height: calc(100vh - var(--env-var-spacing-2) * 2); + max-width: 1400px; + margin: 0 auto; + flex: 1; +} From 3bd48e235a0b4561680a1c304b0369887d081934 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Fri, 21 Mar 2025 22:56:34 -0400 Subject: [PATCH 05/43] center the uptime data table barchart --- .../Uptime/Monitors/Components/UptimeDataTable/index.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Pages/Uptime/Monitors/Components/UptimeDataTable/index.jsx b/src/Pages/Uptime/Monitors/Components/UptimeDataTable/index.jsx index 9b5e7571f..a6ef105b6 100644 --- a/src/Pages/Uptime/Monitors/Components/UptimeDataTable/index.jsx +++ b/src/Pages/Uptime/Monitors/Components/UptimeDataTable/index.jsx @@ -149,7 +149,11 @@ const UptimeDataTable = ({ { id: "responseTime", content: t("responseTime"), - render: (row) => , + render: (row) => ( + + + + ), }, { id: "type", From 7dde4a74c9b805b4576a98c284ac9c5285e07d59 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Fri, 21 Mar 2025 23:39:51 -0400 Subject: [PATCH 06/43] wrap outlet in stack and update the layout styles --- src/Components/Fallback/index.jsx | 1 + src/Components/Layouts/HomeLayout/index.css | 8 +++----- src/Components/Layouts/HomeLayout/index.jsx | 4 +++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Components/Fallback/index.jsx b/src/Components/Fallback/index.jsx index 3e30cd374..bdee376c5 100644 --- a/src/Components/Fallback/index.jsx +++ b/src/Components/Fallback/index.jsx @@ -35,6 +35,7 @@ const Fallback = ({ title, checks, link = "/", isAdmin, vowelStart = false }) => overflow="hidden" sx={{ borderStyle: "dashed", + minHeight: "calc(100vh - var(--env-var-spacing-2) * 2)", }} > :nth-child(2) { +.home-content-wrapper { padding: var(--env-var-spacing-2); - min-height: calc(100vh - var(--env-var-spacing-2) * 2); max-width: 1400px; margin: 0 auto; flex: 1; -} +} \ No newline at end of file diff --git a/src/Components/Layouts/HomeLayout/index.jsx b/src/Components/Layouts/HomeLayout/index.jsx index b605a0d53..55b612522 100644 --- a/src/Components/Layouts/HomeLayout/index.jsx +++ b/src/Components/Layouts/HomeLayout/index.jsx @@ -12,7 +12,9 @@ const HomeLayout = () => { gap={14} > - + + + ); }; From 112f76dbf619507d6ba0b8b68475aa60c91706ff Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Sat, 22 Mar 2025 00:15:01 -0400 Subject: [PATCH 07/43] add subtle color tint for sidebar --- src/Components/Sidebar/index.jsx | 1 + src/Utils/Theme/constants.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/Components/Sidebar/index.jsx b/src/Components/Sidebar/index.jsx index 80dcdf25f..cb2b5aafb 100644 --- a/src/Components/Sidebar/index.jsx +++ b/src/Components/Sidebar/index.jsx @@ -208,6 +208,7 @@ function Sidebar() { borderRight: `1px solid ${theme.palette.primary.lowContrast}`, borderColor: theme.palette.primary.lowContrast, borderRadius: 0, + backgroundColor: theme.palette.primary.sidebar, "& :is(p, span, .MuiListSubheader-root)": { /* Text color for unselected menu items and menu headings diff --git a/src/Utils/Theme/constants.js b/src/Utils/Theme/constants.js index 239d36e36..52623ac0c 100644 --- a/src/Utils/Theme/constants.js +++ b/src/Utils/Theme/constants.js @@ -109,6 +109,8 @@ const newColors = { red400: "#D92020", red600: "#9B4B4B", red700: "#980303", + sidebarLight: "#F9F9FB", + sidebarDark: "#1A1A1D", }; /* @@ -167,6 +169,10 @@ const newSemanticColors = { light: newColors.gray200, dark: newColors.blueGray600, }, + sidebar: { + light: newColors.sidebarLight, + dark: newColors.sidebarDark, + }, }, secondary: { main: { From 2b346cf34a0991ca351872523f6edeaee44ad4ac Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Sat, 22 Mar 2025 00:47:14 -0400 Subject: [PATCH 08/43] update background color to use predefined theme --- src/Components/Sidebar/index.jsx | 2 +- src/Utils/Theme/constants.js | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/Components/Sidebar/index.jsx b/src/Components/Sidebar/index.jsx index cb2b5aafb..2bc84ed23 100644 --- a/src/Components/Sidebar/index.jsx +++ b/src/Components/Sidebar/index.jsx @@ -208,7 +208,7 @@ function Sidebar() { borderRight: `1px solid ${theme.palette.primary.lowContrast}`, borderColor: theme.palette.primary.lowContrast, borderRadius: 0, - backgroundColor: theme.palette.primary.sidebar, + backgroundColor: theme.palette.primary.main, "& :is(p, span, .MuiListSubheader-root)": { /* Text color for unselected menu items and menu headings diff --git a/src/Utils/Theme/constants.js b/src/Utils/Theme/constants.js index 52623ac0c..239d36e36 100644 --- a/src/Utils/Theme/constants.js +++ b/src/Utils/Theme/constants.js @@ -109,8 +109,6 @@ const newColors = { red400: "#D92020", red600: "#9B4B4B", red700: "#980303", - sidebarLight: "#F9F9FB", - sidebarDark: "#1A1A1D", }; /* @@ -169,10 +167,6 @@ const newSemanticColors = { light: newColors.gray200, dark: newColors.blueGray600, }, - sidebar: { - light: newColors.sidebarLight, - dark: newColors.sidebarDark, - }, }, secondary: { main: { From 980f055d5c951fa737f16b337ff26108b95e41c5 Mon Sep 17 00:00:00 2001 From: Skorpios Date: Sun, 23 Mar 2025 21:13:49 -0700 Subject: [PATCH 09/43] Extracted strings. --- .../Components/NotificationIntegrationModal.jsx | 4 ++-- src/locales/gb.json | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx index 7806ee37e..93a4cf75b 100644 --- a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx +++ b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx @@ -49,11 +49,11 @@ const NotificationIntegrationModal = ({ // Helper to get the field state key with error handling const getFieldKey = (typeId, fieldId) => { if (typeof typeId !== 'string' || typeId === '') { - throw new Error('Invalid typeId provided to getFieldKey'); + throw new Error(t('errorInvalidTypeId')); } if (typeof fieldId !== 'string' || fieldId === '') { - throw new Error('Invalid fieldId provided to getFieldKey'); + throw new Error(t('errorInvalidFieldId')); } return `${typeId}${fieldId.charAt(0).toUpperCase() + fieldId.slice(1)}`; diff --git a/src/locales/gb.json b/src/locales/gb.json index 4bf9c4814..05a4bdc8e 100644 --- a/src/locales/gb.json +++ b/src/locales/gb.json @@ -184,6 +184,8 @@ "unsupportedType": "Unsupported notification type", "networkError": "Network error occurred" }, + "errorInvalidTypeId": "Invalid notification type provided", + "errorInvalidFieldId": "Invalid field ID provided", "testLocale": "testLocale", "add": "Add", "monitors": "monitors", From 0e63262876ed52665b0e7e60859e5a8c5622b504 Mon Sep 17 00:00:00 2001 From: Skorpios Date: Sun, 23 Mar 2025 22:57:22 -0700 Subject: [PATCH 10/43] Add proptypes. --- .../Components/NotificationIntegrationModal.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx index 93a4cf75b..16ebd130c 100644 --- a/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx +++ b/src/Components/NotificationIntegrationModal/Components/NotificationIntegrationModal.jsx @@ -1,5 +1,6 @@ import { useState, useMemo } from "react"; import { useTranslation } from "react-i18next"; +import PropTypes from "prop-types"; import { Dialog, @@ -341,4 +342,12 @@ const handleSave = () => { ); }; +NotificationIntegrationModal.propTypes = { + open: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + monitor: PropTypes.object.isRequired, + setMonitor: PropTypes.func.isRequired, + notificationTypes: PropTypes.array +}; + export default NotificationIntegrationModal; \ No newline at end of file From 5daad5ecc22fe419e712079a214595176371f5f1 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 24 Mar 2025 12:46:26 +0000 Subject: [PATCH 11/43] chore(deps): update dependency @types/react to v18.3.20 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6300c0e49..09074c2b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9152,9 +9152,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.19", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.19.tgz", - "integrity": "sha512-fcdJqaHOMDbiAwJnXv6XCzX0jDW77yI3tJqYh1Byn8EL5/S628WRx9b/y3DnNe55zTukUQKrfYxiZls2dHcUMw==", + "version": "18.3.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", + "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", "license": "MIT", "dependencies": { "@types/prop-types": "*", From 62efa2701e27d21b1106426e5f2c13f735d55229 Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Mon, 24 Mar 2025 12:46:37 +0000 Subject: [PATCH 12/43] chore(deps): update dependency vite to v5.4.15 --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6300c0e49..506b185e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19924,9 +19924,9 @@ } }, "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "version": "5.4.15", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.15.tgz", + "integrity": "sha512-6ANcZRivqL/4WtwPGTKNaosuNJr5tWiftOC7liM7G9+rMb8+oeJeyzymDu4rTN93seySBmbjSfsS3Vzr19KNtA==", "license": "MIT", "dependencies": { "esbuild": "^0.21.3", From 4d8cea2539d00dda02747224d3662f5cc7278dd3 Mon Sep 17 00:00:00 2001 From: "Gorkem Cetin (BWL)" <167266851+gorkem-bwl@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:11:06 -0400 Subject: [PATCH 13/43] Add translation link --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c4001bf27..23f33e42e 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ Usage instructions can be found [here](https://docs.checkmate.so/). It's still W See installation instructions in [Checkmate documentation portal](https://docs.checkmate.so/quickstart). Alternatively, you can also use [Coolify](https://coolify.io/) or [Elestio](https://elest.io/open-source/checkmate) for a one click Docker deployment. If you would like to monitor your server infrastructure, you'll need [Capture agent](https://github.com/bluewave-labs/capture). Capture repository also contains the installation instructions. +## 🏁 Translations + +If you would like to use Checkmate in your language, please [go to this page](https://poeditor.com/join/project/lRUoGZFCsJ) and register for the language you would like to translate Checkmate to. + ## 🚀 Performance Thanks to extensive optimizations, Checkmate operates with an exceptionally small memory footprint, requiring minimal memory and CPU resources. Here’s the memory usage of a Node.js instance running on a server that monitors 323 servers every minute: From 5c6ea20b2c5a969d0ae2153d6d6370c978fe4344 Mon Sep 17 00:00:00 2001 From: Skorpios Date: Mon, 24 Mar 2025 11:59:56 -0700 Subject: [PATCH 14/43] Comment out notification button. --- src/Pages/Uptime/Create/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Pages/Uptime/Create/index.jsx b/src/Pages/Uptime/Create/index.jsx index bc757984d..6f38a3c83 100644 --- a/src/Pages/Uptime/Create/index.jsx +++ b/src/Pages/Uptime/Create/index.jsx @@ -415,7 +415,7 @@ const CreateMonitor = () => { onChange={(event) => handleNotifications(event, "email")} /> - + {/* - + */} From 44cac7af7ce4b3c8b4248ae0f541ea3ad74f9868 Mon Sep 17 00:00:00 2001 From: "Gorkem Cetin (BWL)" <167266851+gorkem-bwl@users.noreply.github.com> Date: Mon, 24 Mar 2025 16:47:04 -0400 Subject: [PATCH 15/43] Create FUNDING.yml --- .github/FUNDING.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..471c0f27a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,15 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +polar: # Replace with a single Polar username +buy_me_a_coffee: gorkemcetin +thanks_dev: # Replace with a single thanks.dev username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] From 81fedab88ce5132a3ea50a35f0a160bf88bfc0a7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 25 Mar 2025 00:29:17 +0000 Subject: [PATCH 16/43] feat: translations updated from POEditor --- src/locales/gb.json | 6 +++--- src/locales/tr.json | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/locales/gb.json b/src/locales/gb.json index 05a4bdc8e..35b27defd 100644 --- a/src/locales/gb.json +++ b/src/locales/gb.json @@ -184,8 +184,6 @@ "unsupportedType": "Unsupported notification type", "networkError": "Network error occurred" }, - "errorInvalidTypeId": "Invalid notification type provided", - "errorInvalidFieldId": "Invalid field ID provided", "testLocale": "testLocale", "add": "Add", "monitors": "monitors", @@ -374,5 +372,7 @@ "infrastructureEditYour": "Edit your", "infrastructureEditMonitor": "Save Infrastructure Monitor", "infrastructureMonitorCreated": "Infrastructure monitor created successfully!", - "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!" + "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!", + "errorInvalidTypeId": "Invalid notification type provided", + "errorInvalidFieldId": "Invalid field ID provided" } diff --git a/src/locales/tr.json b/src/locales/tr.json index 020bcc69c..90043e861 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -372,5 +372,7 @@ "infrastructureEditYour": "", "infrastructureEditMonitor": "", "infrastructureMonitorCreated": "", - "infrastructureMonitorUpdated": "" + "infrastructureMonitorUpdated": "", + "errorInvalidTypeId": "", + "errorInvalidFieldId": "" } From 6a1dc1e2931c9b0ad447f783fac982ba6cb4a344 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 25 Mar 2025 13:30:28 -0400 Subject: [PATCH 17/43] remove top offest for sidebar --- src/Components/Layouts/HomeLayout/index.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Layouts/HomeLayout/index.css b/src/Components/Layouts/HomeLayout/index.css index 6d6ad08b8..28ac340f8 100644 --- a/src/Components/Layouts/HomeLayout/index.css +++ b/src/Components/Layouts/HomeLayout/index.css @@ -14,7 +14,7 @@ .home-layout aside { position: sticky; - top: var(--env-var-spacing-2); + top: 0; left: 0; height: 100vh; max-width: var(--env-var-side-bar-width); From a6d06fa8e0ff501848ba1491da913384620e360f Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 25 Mar 2025 15:58:26 -0400 Subject: [PATCH 18/43] add slight padding for sidebar menu items --- src/Components/Sidebar/index.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Components/Sidebar/index.jsx b/src/Components/Sidebar/index.jsx index 2bc84ed23..84fe9b33d 100644 --- a/src/Components/Sidebar/index.jsx +++ b/src/Components/Sidebar/index.jsx @@ -400,6 +400,7 @@ function Sidebar() { gap: theme.spacing(4), borderRadius: theme.shape.borderRadius, px: theme.spacing(4), + pl: theme.spacing(5), }} > {item.icon} @@ -654,6 +655,7 @@ function Sidebar() { gap: theme.spacing(4), borderRadius: theme.shape.borderRadius, px: theme.spacing(4), + pl: theme.spacing(5), }} > {item.icon} From 11b4039706478d61eea3e5ac3eee94cbabd12500 Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 25 Mar 2025 17:55:28 -0400 Subject: [PATCH 19/43] set accounts tab height to 34px --- src/Pages/Account/index.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Pages/Account/index.jsx b/src/Pages/Account/index.jsx index 48b0984f5..7ed992ef2 100644 --- a/src/Pages/Account/index.jsx +++ b/src/Pages/Account/index.jsx @@ -78,6 +78,10 @@ const Account = ({ open = "profile" }) => { onKeyDown={handleKeyDown} onFocus={() => handleFocus(label.toLowerCase())} tabIndex={index} + sx={{ + minHeight: "34px", + height: "34px", + }} /> ))} From 89d010a54bdf1fd76a4468e27603dd93d7c563d4 Mon Sep 17 00:00:00 2001 From: mohadeseh safari Date: Tue, 25 Mar 2025 18:16:11 -0400 Subject: [PATCH 20/43] uptime form improvement --- src/Pages/Uptime/Configure/index.jsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Pages/Uptime/Configure/index.jsx b/src/Pages/Uptime/Configure/index.jsx index 4a119bd0f..7434014c2 100644 --- a/src/Pages/Uptime/Configure/index.jsx +++ b/src/Pages/Uptime/Configure/index.jsx @@ -68,9 +68,9 @@ const Configure = () => { ]; const expectedValuePlaceholders = { - regex: "^[\w.-]+@gmail.com$", - equal: "janet@gmail.com", - include: "@gmail.com", + regex: "^2[0-9]{2}$", + equal: "200", + include: "success", }; useEffect(() => { @@ -479,8 +479,7 @@ const Configure = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value is used to match against response result, and - the match determines the status. + The expected value to check in the response. Examples: HTTP status code, text in response body, or specific value from JSON data. @@ -489,7 +488,7 @@ const Configure = () => { id="json-path" label="JSON Path" isOptional={true} - placeholder="data.email" + placeholder="data.status" value={monitor.jsonPath} onChange={(event) => handleChange(event, "jsonPath")} error={errors["jsonPath"] ? true : false} @@ -500,8 +499,7 @@ const Configure = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - This expression will be evaluated against the reponse JSON data - and the result will be used to match against the expected value. + Optional path to extract specific data from JSON responses. Common examples: "status", "data.status", "meta.code". Leave empty to check the entire response. See  Date: Tue, 25 Mar 2025 20:11:13 -0400 Subject: [PATCH 21/43] change tab background, update hover settings and modify borderRadius --- src/Pages/Account/index.jsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Pages/Account/index.jsx b/src/Pages/Account/index.jsx index 7ed992ef2..fee33585c 100644 --- a/src/Pages/Account/index.jsx +++ b/src/Pages/Account/index.jsx @@ -69,6 +69,20 @@ const Account = ({ open = "profile" }) => { {tabList.map((label, index) => ( { onKeyDown={handleKeyDown} onFocus={() => handleFocus(label.toLowerCase())} tabIndex={index} - sx={{ - minHeight: "34px", - height: "34px", - }} /> ))} From 79e5af12ed5810f15d6df052ab7078dbbcd9672c Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Tue, 25 Mar 2025 20:26:51 -0400 Subject: [PATCH 22/43] remove bordercolor for unselected tabs --- src/Pages/Account/index.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Pages/Account/index.jsx b/src/Pages/Account/index.jsx index fee33585c..5fe522796 100644 --- a/src/Pages/Account/index.jsx +++ b/src/Pages/Account/index.jsx @@ -77,7 +77,6 @@ const Account = ({ open = "profile" }) => { '& .MuiTab-root': { backgroundColor: theme.palette.primary.main, height: '34px', - borderColor: theme.palette.primary.lowContrast, }, '& .MuiTab-root.Mui-selected': { borderRadius: 0, From a5780efff5396a19c20f39ce00076abfefc1df33 Mon Sep 17 00:00:00 2001 From: mohadeseh safari Date: Tue, 25 Mar 2025 20:54:50 -0400 Subject: [PATCH 23/43] improve form --- src/Pages/Uptime/Create/index.jsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Pages/Uptime/Create/index.jsx b/src/Pages/Uptime/Create/index.jsx index 3b295f586..f7d0f6a4a 100644 --- a/src/Pages/Uptime/Create/index.jsx +++ b/src/Pages/Uptime/Create/index.jsx @@ -41,9 +41,9 @@ const CreateMonitor = () => { ]; const expectedValuePlaceholders = { - regex: "^[\w.-]+@gmail.com$", - equal: "janet@gmail.com", - include: "@gmail.com", + regex: "^2[0-9]{2}$", + equal: "200", + include: "success", }; const monitorTypeMaps = { @@ -465,8 +465,7 @@ const CreateMonitor = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value is used to match against response result, and the - match determines the status. + The expected value to check in the response. Examples: HTTP status code, text in response body, or specific value from JSON data. @@ -475,7 +474,7 @@ const CreateMonitor = () => { id="json-path" label="JSON Path" isOptional={true} - placeholder="data.email" + placeholder="data.status" value={monitor.jsonPath} onChange={(event) => handleChange(event, "jsonPath")} error={errors["jsonPath"] ? true : false} @@ -486,8 +485,8 @@ const CreateMonitor = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - This expression will be evaluated against the reponse JSON data and - the result will be used to match against the expected value. See  + Optional path to extract specific data from JSON responses. Common examples: "status", "data.status", "meta.code". Leave empty to check the entire response. + See  Date: Wed, 26 Mar 2025 08:36:43 -0700 Subject: [PATCH 24/43] redirect to login on invalid token --- src/Utils/NetworkService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Utils/NetworkService.js b/src/Utils/NetworkService.js index 2e4736c45..546606362 100644 --- a/src/Utils/NetworkService.js +++ b/src/Utils/NetworkService.js @@ -45,7 +45,7 @@ class NetworkService { this.axiosInstance.interceptors.response.use( (response) => response, (error) => { - if (!error.request && error.response && error.response.status === 401) { + if (error.response && error.response.status === 401) { dispatch(clearAuthState()); dispatch(clearUptimeMonitorState()); navigate("/login"); From d3941d8def07a3062bb95957655ad25d2f7f33ac Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 26 Mar 2025 16:16:36 +0000 Subject: [PATCH 25/43] fix(deps): update material-ui monorepo --- package-lock.json | 141 +++++++++++++++++++++++----------------------- package.json | 6 +- 2 files changed, 72 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index e75444580..b3c9ede40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,9 @@ "@emotion/styled": "^11.13.0", "@fontsource/roboto": "^5.0.13", "@hello-pangea/dnd": "^18.0.0", - "@mui/icons-material": "6.4.8", - "@mui/lab": "6.0.0-beta.31", - "@mui/material": "6.4.8", + "@mui/icons-material": "6.4.9", + "@mui/lab": "6.0.0-dev.240424162023-9968b4889d", + "@mui/material": "6.4.9", "@mui/x-charts": "^7.5.1", "@mui/x-data-grid": "7.28.1", "@mui/x-date-pickers": "7.28.0", @@ -4149,42 +4149,10 @@ "node": ">= 10.*" } }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.70", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.70.tgz", - "integrity": "sha512-Tb/BIhJzb0pa5zv/wu7OdokY9ZKEDqcu1BDFnohyvGCoHuSXbEr90rPq1qeNW3XvTBIbNWHEF7gqge+xpUo6tQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.26.0", - "@floating-ui/react-dom": "^2.1.1", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.8", - "@popperjs/core": "^2.11.8", - "clsx": "^2.1.1", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.8.tgz", - "integrity": "sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.9.tgz", + "integrity": "sha512-3UvsvOjqZJcokHKSzA1lskj2XMM/G5GBgge6ykwmAij2pGGxydGxAXirQlLaeoMwTKDS6BcrLqPZyPVwzri20A==", "license": "MIT", "funding": { "type": "opencollective", @@ -4192,9 +4160,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.8.tgz", - "integrity": "sha512-LKGWiLWRyoOw3dWxZQ+lV//mK+4DVTTAiLd2ljmJdD6XV0rDB8JFKjRD9nyn9cJAU5XgWnii7ZR3c93ttUnMKg==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.9.tgz", + "integrity": "sha512-a8l63VIscBteJlh31R88aVgHelCcrhl3Rk0GnN8znTsGhcam9mFeo4Xlw+gLUYQP7mxVcVt3WP9XJkwXWZflnw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -4207,7 +4175,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.8", + "@mui/material": "^6.4.9", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -4218,21 +4186,21 @@ } }, "node_modules/@mui/lab": { - "version": "6.0.0-beta.31", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-beta.31.tgz", - "integrity": "sha512-iZjchha0XznSqp5fKtgsozz/zZEjJFG8s4EeBypdlZEIcHvRKx3hUKBuaFM6B/PiC2kJrNMQSi5W2Fjio5sLKQ==", + "version": "6.0.0-dev.240424162023-9968b4889d", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-dev.240424162023-9968b4889d.tgz", + "integrity": "sha512-iKFAz7/EeWI4PaFsP4jK2FcYJmUYDBkn3XZwpQSAl5806yYq5J2U2mPQLuZBdhrH50gT2O98p95i3vwL4YBwAg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/base": "5.0.0-beta.70", - "@mui/system": "^6.4.8", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.8", - "clsx": "^2.1.1", + "@babel/runtime": "^7.24.4", + "@mui/base": "5.0.0-beta.42", + "@mui/system": "^6.0.0-dev.240424162023-9968b4889d", + "@mui/types": "^7.2.14", + "@mui/utils": "^6.0.0-alpha.3", + "clsx": "^2.1.0", "prop-types": "^15.8.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" }, "funding": { "type": "opencollective", @@ -4241,11 +4209,10 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material": "^6.4.8", - "@mui/material-pigment-css": "^6.4.8", - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + "@mui/material": "^6.0.0-dev.240424162023-9968b4889d", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4254,23 +4221,53 @@ "@emotion/styled": { "optional": true }, - "@mui/material-pigment-css": { + "@types/react": { "optional": true - }, + } + } + }, + "node_modules/@mui/lab/node_modules/@mui/base": { + "version": "5.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.42.tgz", + "integrity": "sha512-fWRiUJVCHCPF+mxd5drn08bY2qRw3jj5f1SSQdUXmaJ/yKpk23ys8MgLO2KGVTRtbks/+ctRfgffGPbXifj0Ug==", + "deprecated": "This package has been replaced by @base-ui-components/react", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.4", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^6.0.0-alpha.1", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/material": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.8.tgz", - "integrity": "sha512-5S9UTjKZZBd9GfbcYh/nYfD9cv6OXmj5Y7NgKYfk7JcSoshp8/pW5zP4wecRiroBSZX8wcrywSgogpVNO+5W0Q==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.9.tgz", + "integrity": "sha512-+5dExw9xUUFujIW889gB3qrfjeNo3YjYW7aWVZ6BlBIJnKpJ0jNcYZJpBUFoXt/FUV5Wy1V+/+XzR3Is2mXX2w==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.8", - "@mui/system": "^6.4.8", + "@mui/core-downloads-tracker": "^6.4.9", + "@mui/system": "^6.4.9", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.8", "@popperjs/core": "^2.11.8", @@ -4291,7 +4288,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.8", + "@mui/material-pigment-css": "^6.4.9", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -4345,9 +4342,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.8.tgz", - "integrity": "sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.9.tgz", + "integrity": "sha512-qZRWO0cT407NI4ZRjZcH+1SOu8f3JzLHqdMlg52GyEufM9pkSZFnf7xjpwnlvkixcGjco6wLlMD0VB43KRcBuA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -4379,14 +4376,14 @@ } }, "node_modules/@mui/system": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.8.tgz", - "integrity": "sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.9.tgz", + "integrity": "sha512-JOj7efXGtZn+NIzX8KDyMpO1QKc0DhilPBsxvci1xAvI1e5AtAtfzrEuV5ZvN+lz2BDuzngCWlllnqQ/cg40RQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", "@mui/private-theming": "^6.4.8", - "@mui/styled-engine": "^6.4.8", + "@mui/styled-engine": "^6.4.9", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.8", "clsx": "^2.1.1", diff --git a/package.json b/package.json index 9c541d025..4f312e796 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ "@mui/x-charts": "^7.5.1", "@mui/x-data-grid": "7.28.1", "@mui/x-date-pickers": "7.28.0", - "@mui/icons-material": "6.4.8", - "@mui/lab": "6.0.0-beta.31", - "@mui/material": "6.4.8", + "@mui/icons-material": "6.4.9", + "@mui/lab": "6.0.0-dev.240424162023-9968b4889d", + "@mui/material": "6.4.9", "@reduxjs/toolkit": "2.6.1", "@solana/wallet-adapter-base": "0.9.23", "@solana/wallet-adapter-material-ui": "0.16.35", From 3c1bb55b64ffcf43cd03d632be8087b0e1b2348b Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 26 Mar 2025 13:09:48 -0400 Subject: [PATCH 26/43] remove tablist borderBottom --- src/Pages/Account/index.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Pages/Account/index.jsx b/src/Pages/Account/index.jsx index 5fe522796..14fb3b62f 100644 --- a/src/Pages/Account/index.jsx +++ b/src/Pages/Account/index.jsx @@ -71,7 +71,9 @@ const Account = ({ open = "profile" }) => { aria-label="account tabs" sx={{ display: 'inline-flex', - border: 1, + borderTop: 1, + borderLeft: 1, + borderRight: 1, borderColor: theme.palette.primary.lowContrast, borderRadius: `${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0 0`, '& .MuiTab-root': { From b729214dac902cc411f2533f97cc621dec6543ce Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 26 Mar 2025 13:30:53 -0400 Subject: [PATCH 27/43] move sx styles to global theme --- src/Pages/Account/index.jsx | 15 --------------- src/Utils/Theme/globalTheme.js | 11 ++++++++++- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Pages/Account/index.jsx b/src/Pages/Account/index.jsx index 14fb3b62f..48b0984f5 100644 --- a/src/Pages/Account/index.jsx +++ b/src/Pages/Account/index.jsx @@ -69,21 +69,6 @@ const Account = ({ open = "profile" }) => { {tabList.map((label, index) => ( ({ root: ({ theme }) => ({ fontSize: theme.typography.fontSize - 1, color: theme.palette.tertiary.contrastText, - backgroundColor: theme.palette.tertiary.main, + backgroundColor: theme.palette.primary.main, + height: '34px', + borderRadius: 0, textTransform: "none", minWidth: "fit-content", padding: `${theme.spacing(6)}px ${theme.spacing(4)}px`, @@ -378,6 +380,7 @@ const baseTheme = (palette) => ({ color: theme.palette.secondary.contrastText, borderColor: theme.palette.secondary.contrastText, borderRightColor: theme.palette.primary.lowContrast, + borderRadius: 0, }, "&:hover": { borderColor: theme.palette.primary.lowContrast, @@ -428,6 +431,12 @@ const baseTheme = (palette) => ({ MuiTabs: { styleOverrides: { root: ({ theme }) => ({ + display: 'inline-flex', + borderTop: '1px solid', + borderLeft: '1px solid', + borderRight: '1px solid', + borderColor: theme.palette.primary.lowContrast, + borderRadius: `${theme.shape.borderRadius}px ${theme.shape.borderRadius}px 0 0`, "& .MuiTabs-indicator": { backgroundColor: theme.palette.tertiary.contrastText, }, From f03cc5a728a39ef75435f785ce541c14b2c97e5e Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 10:43:26 -0700 Subject: [PATCH 28/43] add separate URL for public status pages --- src/Hooks/useSubscribeToDepinDetails.js | 1 + src/Utils/NetworkService.js | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Hooks/useSubscribeToDepinDetails.js b/src/Hooks/useSubscribeToDepinDetails.js index 67b7c898f..0e8c2744f 100644 --- a/src/Hooks/useSubscribeToDepinDetails.js +++ b/src/Hooks/useSubscribeToDepinDetails.js @@ -27,6 +27,7 @@ const useSubscribeToDepinDetails = ({ monitorId, isPublic, isPublished, dateRang monitorId, dateRange: dateRange, normalize: true, + isPublic, }); const responseData = res?.data?.data; diff --git a/src/Utils/NetworkService.js b/src/Utils/NetworkService.js index 546606362..78183e24f 100644 --- a/src/Utils/NetworkService.js +++ b/src/Utils/NetworkService.js @@ -926,10 +926,15 @@ class NetworkService { getDistributedUptimeDetails(config) { const params = new URLSearchParams(); - const { monitorId, onUpdate, onOpen, onError, dateRange, normalize } = config; + const { monitorId, dateRange, normalize, isPublic } = config; if (dateRange) params.append("dateRange", dateRange); if (normalize) params.append("normalize", normalize); - const url = `${this.axiosInstance.defaults.baseURL}/distributed-uptime/monitors/details/${monitorId}/initial?${params.toString()}`; + let url; + if (isPublic) { + url = `${this.axiosInstance.defaults.baseURL}/distributed-uptime/monitors/details/public/${monitorId}/initial?${params.toString()}`; + } else { + url = `${this.axiosInstance.defaults.baseURL}/distributed-uptime/monitors/details/${monitorId}/initial?${params.toString()}`; + } return this.axiosInstance.get(url); } From fab579e90cb9f7543d4791c69bb9f15e0683dcfc Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 10:55:11 -0700 Subject: [PATCH 29/43] bump --- package-lock.json | 91 ++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index e75444580..567d43449 100644 --- a/package-lock.json +++ b/package-lock.json @@ -394,25 +394,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz", - "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.8" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1996,14 +1996,14 @@ } }, "node_modules/@babel/template": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz", - "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.8", - "@babel/types": "^7.26.8" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -2048,9 +2048,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz", - "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2466,9 +2466,9 @@ } }, "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "funding": [ { "type": "individual", @@ -2481,7 +2481,7 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/constants": { @@ -2524,9 +2524,9 @@ } }, "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "funding": [ { "type": "individual", @@ -2540,9 +2540,9 @@ "license": "MIT" }, "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { "type": "individual", @@ -2555,7 +2555,7 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/rlp": { @@ -2579,9 +2579,9 @@ } }, "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "funding": [ { "type": "individual", @@ -2594,35 +2594,14 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", - "elliptic": "6.5.4", + "elliptic": "6.6.1", "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/signing-key/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "license": "MIT" - }, "node_modules/@ethersproject/transactions": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", From 89e2a8912447895766a0fcaaf66085b77497a940 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:27:59 -0700 Subject: [PATCH 30/43] add invite hooks --- src/Hooks/inviteHooks.js | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/Hooks/inviteHooks.js diff --git a/src/Hooks/inviteHooks.js b/src/Hooks/inviteHooks.js new file mode 100644 index 000000000..9c04c6241 --- /dev/null +++ b/src/Hooks/inviteHooks.js @@ -0,0 +1,42 @@ +import { useState } from "react"; +import { networkService } from "../main"; +const CLIENT_HOST = import.meta.env.VITE_CLIENT_HOST; + +const useGetInviteToken = () => { + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(undefined); + const [token, setToken] = useState(undefined); + + const clearToken = () => { + setToken(undefined); + }; + + const getInviteToken = async ({ email, role }) => { + try { + const response = await networkService.requestInvitationToken({ + email, + role, + }); + const token = response?.data?.data?.token; + if (typeof token === "undefined") { + throw new Error("No token"); + } + + let inviteLink = token; + + if (typeof CLIENT_HOST !== "undefined") { + inviteLink = `${CLIENT_HOST}/register/${token}`; + } + + setToken(inviteLink); + } catch (error) { + setError(error); + } finally { + setIsLoading(false); + } + }; + + return [getInviteToken, clearToken, isLoading, error, token]; +}; + +export { useGetInviteToken }; From e1eceb5b8caa8c21300ac3abe97c569c66143774 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:28:48 -0700 Subject: [PATCH 31/43] Add sendInvitationToken --- src/Utils/NetworkService.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/Utils/NetworkService.js b/src/Utils/NetworkService.js index 78183e24f..11cccc979 100644 --- a/src/Utils/NetworkService.js +++ b/src/Utils/NetworkService.js @@ -530,6 +530,24 @@ class NetworkService { async requestInvitationToken(config) { return this.axiosInstance.post(`/invite`, { email: config.email, role: config.role }); } + /** + * ************************************ + * Sends an invitation token + * ************************************ + * + * @async + * @param {Object} config - The configuration object. + * @param {string} config.email - The email of the user to be invited. + * @param {string} config.role - The role of the user to be invited. + * @returns {Promise} The response from the axios POST request. + * + */ + async sendInvitationToken(config) { + return this.axiosInstance.post(`/invite/send`, { + email: config.email, + role: config.role, + }); + } /** * ************************************ From 8a9cce041d76039ba9492222af9030a880a6cecb Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:31:14 -0700 Subject: [PATCH 32/43] add no token string --- src/locales/gb.json | 753 ++++++++++++++++++++++---------------------- 1 file changed, 377 insertions(+), 376 deletions(-) diff --git a/src/locales/gb.json b/src/locales/gb.json index 35b27defd..f69cd9977 100644 --- a/src/locales/gb.json +++ b/src/locales/gb.json @@ -1,378 +1,379 @@ { - "dontHaveAccount": "Don't have account", - "email": "E-mail", - "forgotPassword": "Forgot Password", - "password": "password", - "signUp": "Sign up", - "submit": "Submit", - "title": "Title", - "continue": "Continue", - "enterEmail": "Enter your email", - "authLoginTitle": "Log In", - "authLoginEnterPassword": "Enter your password", - "commonPassword": "Password", - "commonBack": "Back", - "authForgotPasswordTitle": "Forgot password?", - "authForgotPasswordResetPassword": "Reset password", - "createPassword": "Create your password", - "createAPassword": "Create a password", - "authRegisterAlreadyHaveAccount": "Already have an account?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Enter your email", - "authRegisterTitle": "Create an account", - "authRegisterStepOneTitle": "Create your account", - "authRegisterStepOneDescription": "Enter your details to get started", - "authRegisterStepTwoTitle": "Set up your profile", - "authRegisterStepTwoDescription": "Tell us more about yourself", - "authRegisterStepThreeTitle": "Almost done!", - "authRegisterStepThreeDescription": "Review your information", - "authForgotPasswordDescription": "No worries, we'll send you reset instructions.", - "authForgotPasswordSendInstructions": "Send instructions", - "authForgotPasswordBackTo": "Back to", - "authCheckEmailTitle": "Check your email", - "authCheckEmailDescription": "We sent a password reset link to", - "authCheckEmailResendEmail": "Resend email", - "authCheckEmailBackTo": "Back to", - "goBackTo": "Go back to", - "authCheckEmailDidntReceiveEmail": "Didn't receive the email?", - "authCheckEmailClickToResend": "Click to resend", - "authSetNewPasswordTitle": "Set new password", - "authSetNewPasswordDescription": "Your new password must be different from previously used passwords.", - "authSetNewPasswordNewPassword": "New password", - "authSetNewPasswordConfirmPassword": "Confirm password", - "confirmPassword": "Confirm your password", - "authSetNewPasswordResetPassword": "Reset password", - "authSetNewPasswordBackTo": "Back to", - "authPasswordMustBeAtLeast": "Must be at least", - "authPasswordCharactersLong": "8 characters long", - "authPasswordMustContainAtLeast": "Must contain at least", - "authPasswordSpecialCharacter": "one special character", - "authPasswordOneNumber": "one number", - "authPasswordUpperCharacter": "one upper character", - "authPasswordLowerCharacter": "one lower character", - "authPasswordConfirmAndPassword": "Confirm password and password", - "authPasswordMustMatch": "must match", - "authRegisterCreateAccount": "Create your account to get started", - "authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started", - "authRegisterSignUpWithEmail": "Sign up with Email", - "authRegisterBySigningUp": "By signing up, you agree to our", - "distributedStatusHeaderText": "Real-time, real-device coverage", - "distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city", - "settingsGeneralSettings": "General settings", - "settingsDisplayTimezone": "Display timezone", - "settingsDisplayTimezoneDescription": "The timezone of the dashboard you publicly display.", - "settingsAppearance": "Appearance", - "settingsAppearanceDescription": "Switch between light and dark mode, or change user interface language", - "settingsThemeMode": "Theme Mode", - "settingsLanguage": "Language", - "settingsDistributedUptime": "Distributed uptime", - "settingsDistributedUptimeDescription": "Enable/disable distributed uptime monitoring.", - "settingsEnabled": "Enabled", - "settingsDisabled": "Disabled", - "settingsHistoryAndMonitoring": "History and monitoring", - "settingsHistoryAndMonitoringDescription": "Define here for how long you want to keep the data. You can also remove all past data.", - "settingsTTLLabel": "The days you want to keep monitoring history.", - "settingsTTLOptionalLabel": "0 for infinite", - "settingsClearAllStats": "Clear all stats. This is irreversible.", - "settingsClearAllStatsButton": "Clear all stats", - "settingsClearAllStatsDialogTitle": "Do you want to clear all stats?", - "settingsClearAllStatsDialogDescription": "Once deleted, your monitors cannot be retrieved.", - "settingsClearAllStatsDialogConfirm": "Yes, clear all stats", - "settingsDemoMonitors": "Demo monitors", - "settingsDemoMonitorsDescription": "Here you can add and remove demo monitors.", - "settingsAddDemoMonitors": "Add demo monitors", - "settingsAddDemoMonitorsButton": "Add demo monitors", - "settingsRemoveAllMonitors": "Remove all monitors", - "settingsRemoveAllMonitorsButton": "Remove all monitors", - "settingsRemoveAllMonitorsDialogTitle": "Do you want to remove all monitors?", - "settingsRemoveAllMonitorsDialogConfirm": "Yes, clear all monitors", - "settingsWallet": "Wallet", - "settingsWalletDescription": "Connect your wallet here. This is required for the Distributed Uptime monitor to connect to multiple nodes globally.", - "settingsAbout": "About", - "settingsDevelopedBy": "Developed by Bluewave Labs.", - "settingsSave": "Save", - "settingsSuccessSaved": "Settings saved successfully", - "settingsFailedToSave": "Failed to save settings", - "settingsStatsCleared": "Stats cleared successfully", - "settingsFailedToClearStats": "Failed to clear stats", - "settingsDemoMonitorsAdded": "Successfully added demo monitors", - "settingsFailedToAddDemoMonitors": "Failed to add demo monitors", - "settingsMonitorsDeleted": "Successfully deleted all monitors", - "settingsFailedToDeleteMonitors": "Failed to delete all monitors", - "starPromptTitle": "Star Checkmate", - "starPromptDescription": "See the latest releases and help grow the community on GitHub", - "https": "HTTPS", - "http": "HTTP", - "monitor": "monitor", - "aboutus": "About Us", - "signUP": "Sign Up", - "now": "Now", - "delete": "Delete", - "configure": "Configure", - "networkError": "Network error", - "responseTime": "Response time:", - "ms": "ms", - "bar": "Bar", - "area": "Area", - "country": "COUNTRY", - "city": "CITY", - "response": "RESPONSE", - "checkConnection": "Please check your connection", - "passwordreset": "Password Reset", - "authRegisterStepOnePersonalDetails": "Enter your personal details", - "authCheckEmailOpenEmailButton": "Open email app", - "authNewPasswordConfirmed": "Your password has been successfully reset. Click below to log in magically.", - "monitorStatusUp": "Monitor {name} ({url}) is now UP and responding", - "monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding", - "webhookSendSuccess": "Webhook notification sent successfully", - "webhookSendError": "Error sending webhook notification to {platform}", - "webhookUnsupportedPlatform": "Unsupported platform: {platform}", - "distributedRightCategoryTitle": "Monitor", - "distributedStatusServerMonitors": "Server Monitors", - "distributedStatusServerMonitorsDescription": "Monitor status of related servers", - "distributedUptimeCreateSelectURL": "Here you can select the URL of the host, together with the type of monitor.", - "distributedUptimeCreateChecks": "Checks to perform", - "distributedUptimeCreateChecksDescription": "You can always add or remove checks after adding your site.", - "distributedUptimeCreateIncidentNotification": "Incident notifications", - "distributedUptimeCreateIncidentDescription": "When there is an incident, notify users.", - "distributedUptimeCreateAdvancedSettings": "Advanced settings", - "distributedUptimeDetailsNoMonitorHistory": "There is no check history for this monitor yet.", - "distributedUptimeDetailsFooterHeading": "Made with ❤️ by UpRock & Bluewave Labs", - "distributedUptimeDetailsFooterBuilt": "Built on", - "distributedUptimeDetailsFooterSolana": "Solana", - "distributedUptimeDetailsMonitorHeader": "Distributed Uptime Monitoring powered by DePIN", - "distributedUptimeDetailsStatusHeaderUptime": "Uptime:", - "distributedUptimeDetailsStatusHeaderLastUpdate": "Last updated", - "notifications": { - "enableNotifications": "Enable {{platform}} notifications", - "testNotification": "Test notification", - "addOrEditNotifications": "Add or edit notifications", - "slack": { - "label": "Slack", - "description": "To enable Slack notifications, create a Slack app and enable incoming webhooks. After that, simply provide the webhook URL here.", - "webhookLabel": "Webhook URL", - "webhookPlaceholder": "https://hooks.slack.com/services/...", - "webhookRequired": "Slack webhook URL is required" - }, - "discord": { - "label": "Discord", - "description": "To send data to a Discord channel from Checkmate via Discord notifications using webhooks, you can use Discord's incoming Webhooks feature.", - "webhookLabel": "Discord Webhook URL", - "webhookPlaceholder": "https://discord.com/api/webhooks/...", - "webhookRequired": "Discord webhook URL is required" - }, - "telegram": { - "label": "Telegram", - "description": "To enable Telegram notifications, create a Telegram bot using BotFather, an official bot for creating and managing Telegram bots. Then, get the API token and chat ID and write them down here.", - "tokenLabel": "Your bot token", - "tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11", - "chatIdLabel": "Your Chat ID", - "chatIdPlaceholder": "-1001234567890", - "fieldsRequired": "Telegram token and chat ID are required" - }, - "webhook": { - "label": "Webhooks", - "description": "You can set up a custom webhook to receive notifications when incidents occur.", - "urlLabel": "Webhook URL", - "urlPlaceholder": "https://your-server.com/webhook", - "urlRequired": "Webhook URL is required" - }, - "testNotificationDevelop": "Test notification 2", - "integrationButton": "Notification Integration", - "testSuccess": "Test notification sent successfully!", - "testFailed": "Failed to send test notification", - "unsupportedType": "Unsupported notification type", - "networkError": "Network error occurred" - }, - "testLocale": "testLocale", - "add": "Add", - "monitors": "monitors", - "distributedUptimeStatusCreateStatusPage": "status page", - "distributedUptimeStatusCreateStatusPageAccess": "Access", - "distributedUptimeStatusCreateStatusPageReady": "If your status page is ready, you can mark it as published.", - "distributedUptimeStatusBasicInfoHeader": "Basic Information", - "distributedUptimeStatusBasicInfoDescription": "Define company name and the subdomain that your status page points to.", - "distributedUptimeStatusLogoHeader": "Logo", - "distributedUptimeStatusLogoDescription": "Upload a logo for your status page", - "distributedUptimeStatusLogoUploadButton": "Upload logo", - "distributedUptimeStatusStandardMonitorsHeader": "Standard Monitors", - "distributedUptimeStatusStandardMonitorsDescription": "Attach standard monitors to your status page.", - "distributedUptimeStatusCreateYour": "Create your", - "distributedUptimeStatusEditYour": "Edit your", - "distributedUptimeStatusPublishedLabel": "Published and visible to the public", - "distributedUptimeStatusCompanyNameLabel": "Company name", - "distributedUptimeStatusPageAddressLabel": "Your status page address", - "distributedUptimeStatus30Days": "30 days", - "distributedUptimeStatus60Days": "60 days", - "distributedUptimeStatus90Days": "90 days", - "distributedUptimeStatusPageNotSetUp": "A status page is not set up.", - "distributedUptimeStatusContactAdmin": "Please contact your administrator", - "distributedUptimeStatusPageNotPublic": "This status page is not public.", - "distributedUptimeStatusPageDeleteDialog": "Do you want to delete this status page?", - "distributedUptimeStatusPageDeleteConfirm": "Yes, delete status page", - "distributedUptimeStatusPageDeleteDescription": "Once deleted, your status page cannot be retrieved.", - "distributedUptimeStatusDevices": "Devices", - "distributedUptimeStatusUpt": "UPT", - "distributedUptimeStatusUptBurned": "UPT Burned", - "distributedUptimeStatusUptLogo": "Upt Logo", - "incidentsTableNoIncidents": "No incidents recorded", - "incidentsTablePaginationLabel": "incidents", - "incidentsTableMonitorName": "Monitor Name", - "incidentsTableStatus": "Status", - "incidentsTableDateTime": "Date & Time", - "incidentsTableStatusCode": "Status Code", - "incidentsTableMessage": "Message", - "incidentsOptionsHeader": "Incidents for:", - "incidentsOptionsHeaderFilterBy": "Filter by:", - "incidentsOptionsHeaderFilterAll": "All", - "incidentsOptionsHeaderFilterDown": "Down", - "incidentsOptionsHeaderFilterCannotResolve": "Cannot resolve", - "incidentsOptionsHeaderShow": "Show:", - "incidentsOptionsHeaderLastHour": "Last hour", - "incidentsOptionsHeaderLastDay": "Last day", - "incidentsOptionsHeaderLastWeek": "Last week", - "incidentsOptionsPlaceholderAllServers": "All servers", - "infrastructureCreateYour": "Create your", - "infrastructureCreateGeneralSettingsDescription": "Here you can select the URL of the host, together with the friendly name and authorization secret to connect to the server agent.", - "infrastructureServerRequirement": "The server you are monitoring must be running the", - "infrastructureCustomizeAlerts": "Customize alerts", - "infrastructureAlertNotificationDescription": "Send a notification to user(s) when thresholds exceed a specified percentage.", - "infrastructureCreateMonitor": "Create Infrastructure Monitor", - "infrastructureProtocol": "Protocol", - "infrastructureServerUrlLabel": "Server URL", - "infrastructureDisplayNameLabel": "Display name", - "infrastructureAuthorizationSecretLabel": "Authorization secret", - "gb": "GB", - "mb": "MB", - "mem": "Mem", - "memoryUsage": "Memory usage", - "cpu": "CPU", - "cpuUsage": "CPU usage", - "cpuTemperature": "CPU Temperature", - "diskUsage": "Disk Usage", - "used": "Used", - "total": "Total", - "cores": "Cores", - "frequency": "Frequency", - "status": "Status", - "cpuPhysical": "CPU (Physical)", - "cpuLogical": "CPU (Logical)", - "cpuFrequency": "CPU Frequency", - "avgCpuTemperature": "Average CPU Temperature", - "memory": "Memory", - "disk": "Disk", - "uptime": "Uptime", - "os": "OS", - "host": "Host", - "actions": "Actions", - "integrations": "Integrations", - "integrationsPrism": "Connect Prism to your favorite service.", - "integrationsSlack": "Slack", - "integrationsSlackInfo": "Connect with Slack and see incidents in a channel", - "integrationsDiscord": "Discord", - "integrationsDiscordInfo": "Connect with Discord and view incidents directly in a channel", - "integrationsZapier": "Zapier", - "integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere", - "commonSave": "Save", - "createYour": "Create your", - "createMonitor": "Create monitor", - "pause": "Pause", - "resume": "Resume", - "editing": "Editing...", - "url": "URL", - "access": "Access", - "timezone": "Timezone", - "features": "Features", - "administrator": "Administrator?", - "loginHere": "Login here", - "displayName": "Display name", - "urlMonitor": "URL to monitor", - "portToMonitor": "Port to monitor", - "websiteMonitoring": "Website monitoring", - "websiteMonitoringDescription": "Use HTTP(s) to monitor your website or API endpoint.", - "pingMonitoring": "Ping monitoring", - "pingMonitoringDescription": "Check whether your server is available or not.", - "dockerContainerMonitoring": "Docker container monitoring", - "dockerContainerMonitoringDescription": "Check whether your Docker container is running or not.", - "portMonitoring": "Port monitoring", - "portMonitoringDescription": "Check whether your port is open or not.", - "createMaintenanceWindow": "Create maintenance window", - "createMaintenance": "Create maintenance", - "editMaintenance": "Edit maintenance", - "maintenanceWindowName": "Maintenance Window Name", - "friendlyNameInput": "Friendly name", - "friendlyNamePlaceholder": "Maintenance at __ : __ for ___ minutes", - "maintenanceRepeat": "Maintenance Repeat", - "maintenance": "maintenance", - "duration": "Duration", - "addMonitors": "Add monitors", - "window": "window", - "cancel": "Cancel", - "message": "Message", - "low": "low", - "high": "high", - "statusCode": "Status code", - "date&Time": "Date & Time", - "type": "Type", - "statusPageName": "Status page name", - "publicURL": "Public URL", - "repeat": "Repeat", - "edit": "Edit", - "createA": "Create a", - "remove": "Remove", - "maintenanceWindowDescription": "Your pings won't be sent during this time frame", - "startTime": "Start time", - "timeZoneInfo": "All dates and times are in GMT+0 time zone.", - "monitorsToApply": "Monitors to apply maintenance window to", - "nextWindow": "Next window", - "notFoundButton": "Go to the main dashboard", - "pageSpeedConfigureSettingsDescription": "Here you can select the URL of the host, together with the type of monitor.", - "monitorDisplayName": "Monitor display name", - "whenNewIncident": "When there is a new incident,", - "notifySMS": "Notify via SMS (coming soon)", - "notifyEmails": "Also notify via email to multiple addresses (coming soon)", - "seperateEmails": "You can separate multiple emails with a comma", - "checkFrequency": "Check frequency", - "matchMethod": "Match Method", - "expectedValue": "Expected value", - "deleteDialogTitle": "Do you really want to delete this monitor?", - "deleteDialogDescription": "Once deleted, this monitor cannot be retrieved.", - "pageSpeedMonitor": "PageSpeed monitor", - "shown": "Shown", - "ago": "ago", - "companyName": "Company name", - "pageSpeedDetailsPerformanceReport": "Values are estimated and may vary.", - "pageSpeedDetailsPerformanceReportCalculator": "See calculator", - "checkingEvery": "Checking every", - "statusPageCreateSettings": "If your status page is ready, you can mark it as published.", - "basicInformation": "Basic Information", - "statusPageCreateBasicInfoDescription": "Define company name and the subdomain that your status page points to.", - "statusPageCreateSelectTimeZoneDescription": "Select the timezone that your status page will be displayed in.", - "statusPageCreateAppearanceDescription": "Define the default look and feel of your public status page.", - "statusPageCreateSettingsCheckboxLabel": "Published and visible to the public", - "statusPageCreateBasicInfoStatusPageAddress": "Your status page address", - "statusPageCreateTabsContent": "Status page servers", - "statusPageCreateTabsContentDescription": "You can add any number of servers that you monitor to your status page. You can also reorder them for the best viewing experience.", - "statusPageCreateTabsContentFeaturesDescription": "Show more details on the status page", - "showCharts": "Show charts", - "showUptimePercentage": "Show uptime percentage", - "removeLogo": "Remove Logo", - "statusPageStatus": "A public status page is not set up.", - "statusPageStatusContactAdmin": "Please contact to your administrator", - "statusPageStatusNotPublic": "This status page is not public.", - "statusPageStatusNoPage": "There's no status page here.", - "statusPageStatusServiceStatus": "Service status", - "deleteStatusPage": "Do you want to delete this status page?", - "deleteStatusPageConfirm": "Yes, delete status page", - "deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.", - "uptimeCreate": "The expected value is used to match against response result, and the match determines the status.", - "uptimeCreateJsonPath": "This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See", - "uptimeCreateJsonPathQuery": "for query language documentation.", - "maintenanceTableActionMenuDialogTitle": "Do you really want to remove this maintenance window?", - "infrastructureEditYour": "Edit your", - "infrastructureEditMonitor": "Save Infrastructure Monitor", - "infrastructureMonitorCreated": "Infrastructure monitor created successfully!", - "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!", - "errorInvalidTypeId": "Invalid notification type provided", - "errorInvalidFieldId": "Invalid field ID provided" + "dontHaveAccount": "Don't have account", + "email": "E-mail", + "forgotPassword": "Forgot Password", + "password": "password", + "signUp": "Sign up", + "submit": "Submit", + "title": "Title", + "continue": "Continue", + "enterEmail": "Enter your email", + "authLoginTitle": "Log In", + "authLoginEnterPassword": "Enter your password", + "commonPassword": "Password", + "commonBack": "Back", + "authForgotPasswordTitle": "Forgot password?", + "authForgotPasswordResetPassword": "Reset password", + "createPassword": "Create your password", + "createAPassword": "Create a password", + "authRegisterAlreadyHaveAccount": "Already have an account?", + "commonAppName": "Checkmate", + "authLoginEnterEmail": "Enter your email", + "authRegisterTitle": "Create an account", + "authRegisterStepOneTitle": "Create your account", + "authRegisterStepOneDescription": "Enter your details to get started", + "authRegisterStepTwoTitle": "Set up your profile", + "authRegisterStepTwoDescription": "Tell us more about yourself", + "authRegisterStepThreeTitle": "Almost done!", + "authRegisterStepThreeDescription": "Review your information", + "authForgotPasswordDescription": "No worries, we'll send you reset instructions.", + "authForgotPasswordSendInstructions": "Send instructions", + "authForgotPasswordBackTo": "Back to", + "authCheckEmailTitle": "Check your email", + "authCheckEmailDescription": "We sent a password reset link to", + "authCheckEmailResendEmail": "Resend email", + "authCheckEmailBackTo": "Back to", + "goBackTo": "Go back to", + "authCheckEmailDidntReceiveEmail": "Didn't receive the email?", + "authCheckEmailClickToResend": "Click to resend", + "authSetNewPasswordTitle": "Set new password", + "authSetNewPasswordDescription": "Your new password must be different from previously used passwords.", + "authSetNewPasswordNewPassword": "New password", + "authSetNewPasswordConfirmPassword": "Confirm password", + "confirmPassword": "Confirm your password", + "authSetNewPasswordResetPassword": "Reset password", + "authSetNewPasswordBackTo": "Back to", + "authPasswordMustBeAtLeast": "Must be at least", + "authPasswordCharactersLong": "8 characters long", + "authPasswordMustContainAtLeast": "Must contain at least", + "authPasswordSpecialCharacter": "one special character", + "authPasswordOneNumber": "one number", + "authPasswordUpperCharacter": "one upper character", + "authPasswordLowerCharacter": "one lower character", + "authPasswordConfirmAndPassword": "Confirm password and password", + "authPasswordMustMatch": "must match", + "authRegisterCreateAccount": "Create your account to get started", + "authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started", + "authRegisterSignUpWithEmail": "Sign up with Email", + "authRegisterBySigningUp": "By signing up, you agree to our", + "distributedStatusHeaderText": "Real-time, real-device coverage", + "distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city", + "settingsGeneralSettings": "General settings", + "settingsDisplayTimezone": "Display timezone", + "settingsDisplayTimezoneDescription": "The timezone of the dashboard you publicly display.", + "settingsAppearance": "Appearance", + "settingsAppearanceDescription": "Switch between light and dark mode, or change user interface language", + "settingsThemeMode": "Theme Mode", + "settingsLanguage": "Language", + "settingsDistributedUptime": "Distributed uptime", + "settingsDistributedUptimeDescription": "Enable/disable distributed uptime monitoring.", + "settingsEnabled": "Enabled", + "settingsDisabled": "Disabled", + "settingsHistoryAndMonitoring": "History and monitoring", + "settingsHistoryAndMonitoringDescription": "Define here for how long you want to keep the data. You can also remove all past data.", + "settingsTTLLabel": "The days you want to keep monitoring history.", + "settingsTTLOptionalLabel": "0 for infinite", + "settingsClearAllStats": "Clear all stats. This is irreversible.", + "settingsClearAllStatsButton": "Clear all stats", + "settingsClearAllStatsDialogTitle": "Do you want to clear all stats?", + "settingsClearAllStatsDialogDescription": "Once deleted, your monitors cannot be retrieved.", + "settingsClearAllStatsDialogConfirm": "Yes, clear all stats", + "settingsDemoMonitors": "Demo monitors", + "settingsDemoMonitorsDescription": "Here you can add and remove demo monitors.", + "settingsAddDemoMonitors": "Add demo monitors", + "settingsAddDemoMonitorsButton": "Add demo monitors", + "settingsRemoveAllMonitors": "Remove all monitors", + "settingsRemoveAllMonitorsButton": "Remove all monitors", + "settingsRemoveAllMonitorsDialogTitle": "Do you want to remove all monitors?", + "settingsRemoveAllMonitorsDialogConfirm": "Yes, clear all monitors", + "settingsWallet": "Wallet", + "settingsWalletDescription": "Connect your wallet here. This is required for the Distributed Uptime monitor to connect to multiple nodes globally.", + "settingsAbout": "About", + "settingsDevelopedBy": "Developed by Bluewave Labs.", + "settingsSave": "Save", + "settingsSuccessSaved": "Settings saved successfully", + "settingsFailedToSave": "Failed to save settings", + "settingsStatsCleared": "Stats cleared successfully", + "settingsFailedToClearStats": "Failed to clear stats", + "settingsDemoMonitorsAdded": "Successfully added demo monitors", + "settingsFailedToAddDemoMonitors": "Failed to add demo monitors", + "settingsMonitorsDeleted": "Successfully deleted all monitors", + "settingsFailedToDeleteMonitors": "Failed to delete all monitors", + "starPromptTitle": "Star Checkmate", + "starPromptDescription": "See the latest releases and help grow the community on GitHub", + "https": "HTTPS", + "http": "HTTP", + "monitor": "monitor", + "aboutus": "About Us", + "signUP": "Sign Up", + "now": "Now", + "delete": "Delete", + "configure": "Configure", + "networkError": "Network error", + "responseTime": "Response time:", + "ms": "ms", + "bar": "Bar", + "area": "Area", + "country": "COUNTRY", + "city": "CITY", + "response": "RESPONSE", + "checkConnection": "Please check your connection", + "passwordreset": "Password Reset", + "authRegisterStepOnePersonalDetails": "Enter your personal details", + "authCheckEmailOpenEmailButton": "Open email app", + "authNewPasswordConfirmed": "Your password has been successfully reset. Click below to log in magically.", + "monitorStatusUp": "Monitor {name} ({url}) is now UP and responding", + "monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding", + "webhookSendSuccess": "Webhook notification sent successfully", + "webhookSendError": "Error sending webhook notification to {platform}", + "webhookUnsupportedPlatform": "Unsupported platform: {platform}", + "distributedRightCategoryTitle": "Monitor", + "distributedStatusServerMonitors": "Server Monitors", + "distributedStatusServerMonitorsDescription": "Monitor status of related servers", + "distributedUptimeCreateSelectURL": "Here you can select the URL of the host, together with the type of monitor.", + "distributedUptimeCreateChecks": "Checks to perform", + "distributedUptimeCreateChecksDescription": "You can always add or remove checks after adding your site.", + "distributedUptimeCreateIncidentNotification": "Incident notifications", + "distributedUptimeCreateIncidentDescription": "When there is an incident, notify users.", + "distributedUptimeCreateAdvancedSettings": "Advanced settings", + "distributedUptimeDetailsNoMonitorHistory": "There is no check history for this monitor yet.", + "distributedUptimeDetailsFooterHeading": "Made with ❤️ by UpRock & Bluewave Labs", + "distributedUptimeDetailsFooterBuilt": "Built on", + "distributedUptimeDetailsFooterSolana": "Solana", + "distributedUptimeDetailsMonitorHeader": "Distributed Uptime Monitoring powered by DePIN", + "distributedUptimeDetailsStatusHeaderUptime": "Uptime:", + "distributedUptimeDetailsStatusHeaderLastUpdate": "Last updated", + "notifications": { + "enableNotifications": "Enable {{platform}} notifications", + "testNotification": "Test notification", + "addOrEditNotifications": "Add or edit notifications", + "slack": { + "label": "Slack", + "description": "To enable Slack notifications, create a Slack app and enable incoming webhooks. After that, simply provide the webhook URL here.", + "webhookLabel": "Webhook URL", + "webhookPlaceholder": "https://hooks.slack.com/services/...", + "webhookRequired": "Slack webhook URL is required" + }, + "discord": { + "label": "Discord", + "description": "To send data to a Discord channel from Checkmate via Discord notifications using webhooks, you can use Discord's incoming Webhooks feature.", + "webhookLabel": "Discord Webhook URL", + "webhookPlaceholder": "https://discord.com/api/webhooks/...", + "webhookRequired": "Discord webhook URL is required" + }, + "telegram": { + "label": "Telegram", + "description": "To enable Telegram notifications, create a Telegram bot using BotFather, an official bot for creating and managing Telegram bots. Then, get the API token and chat ID and write them down here.", + "tokenLabel": "Your bot token", + "tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11", + "chatIdLabel": "Your Chat ID", + "chatIdPlaceholder": "-1001234567890", + "fieldsRequired": "Telegram token and chat ID are required" + }, + "webhook": { + "label": "Webhooks", + "description": "You can set up a custom webhook to receive notifications when incidents occur.", + "urlLabel": "Webhook URL", + "urlPlaceholder": "https://your-server.com/webhook", + "urlRequired": "Webhook URL is required" + }, + "testNotificationDevelop": "Test notification 2", + "integrationButton": "Notification Integration", + "testSuccess": "Test notification sent successfully!", + "testFailed": "Failed to send test notification", + "unsupportedType": "Unsupported notification type", + "networkError": "Network error occurred" + }, + "testLocale": "testLocale", + "add": "Add", + "monitors": "monitors", + "distributedUptimeStatusCreateStatusPage": "status page", + "distributedUptimeStatusCreateStatusPageAccess": "Access", + "distributedUptimeStatusCreateStatusPageReady": "If your status page is ready, you can mark it as published.", + "distributedUptimeStatusBasicInfoHeader": "Basic Information", + "distributedUptimeStatusBasicInfoDescription": "Define company name and the subdomain that your status page points to.", + "distributedUptimeStatusLogoHeader": "Logo", + "distributedUptimeStatusLogoDescription": "Upload a logo for your status page", + "distributedUptimeStatusLogoUploadButton": "Upload logo", + "distributedUptimeStatusStandardMonitorsHeader": "Standard Monitors", + "distributedUptimeStatusStandardMonitorsDescription": "Attach standard monitors to your status page.", + "distributedUptimeStatusCreateYour": "Create your", + "distributedUptimeStatusEditYour": "Edit your", + "distributedUptimeStatusPublishedLabel": "Published and visible to the public", + "distributedUptimeStatusCompanyNameLabel": "Company name", + "distributedUptimeStatusPageAddressLabel": "Your status page address", + "distributedUptimeStatus30Days": "30 days", + "distributedUptimeStatus60Days": "60 days", + "distributedUptimeStatus90Days": "90 days", + "distributedUptimeStatusPageNotSetUp": "A status page is not set up.", + "distributedUptimeStatusContactAdmin": "Please contact your administrator", + "distributedUptimeStatusPageNotPublic": "This status page is not public.", + "distributedUptimeStatusPageDeleteDialog": "Do you want to delete this status page?", + "distributedUptimeStatusPageDeleteConfirm": "Yes, delete status page", + "distributedUptimeStatusPageDeleteDescription": "Once deleted, your status page cannot be retrieved.", + "distributedUptimeStatusDevices": "Devices", + "distributedUptimeStatusUpt": "UPT", + "distributedUptimeStatusUptBurned": "UPT Burned", + "distributedUptimeStatusUptLogo": "Upt Logo", + "incidentsTableNoIncidents": "No incidents recorded", + "incidentsTablePaginationLabel": "incidents", + "incidentsTableMonitorName": "Monitor Name", + "incidentsTableStatus": "Status", + "incidentsTableDateTime": "Date & Time", + "incidentsTableStatusCode": "Status Code", + "incidentsTableMessage": "Message", + "incidentsOptionsHeader": "Incidents for:", + "incidentsOptionsHeaderFilterBy": "Filter by:", + "incidentsOptionsHeaderFilterAll": "All", + "incidentsOptionsHeaderFilterDown": "Down", + "incidentsOptionsHeaderFilterCannotResolve": "Cannot resolve", + "incidentsOptionsHeaderShow": "Show:", + "incidentsOptionsHeaderLastHour": "Last hour", + "incidentsOptionsHeaderLastDay": "Last day", + "incidentsOptionsHeaderLastWeek": "Last week", + "incidentsOptionsPlaceholderAllServers": "All servers", + "infrastructureCreateYour": "Create your", + "infrastructureCreateGeneralSettingsDescription": "Here you can select the URL of the host, together with the friendly name and authorization secret to connect to the server agent.", + "infrastructureServerRequirement": "The server you are monitoring must be running the", + "infrastructureCustomizeAlerts": "Customize alerts", + "infrastructureAlertNotificationDescription": "Send a notification to user(s) when thresholds exceed a specified percentage.", + "infrastructureCreateMonitor": "Create Infrastructure Monitor", + "infrastructureProtocol": "Protocol", + "infrastructureServerUrlLabel": "Server URL", + "infrastructureDisplayNameLabel": "Display name", + "infrastructureAuthorizationSecretLabel": "Authorization secret", + "gb": "GB", + "mb": "MB", + "mem": "Mem", + "memoryUsage": "Memory usage", + "cpu": "CPU", + "cpuUsage": "CPU usage", + "cpuTemperature": "CPU Temperature", + "diskUsage": "Disk Usage", + "used": "Used", + "total": "Total", + "cores": "Cores", + "frequency": "Frequency", + "status": "Status", + "cpuPhysical": "CPU (Physical)", + "cpuLogical": "CPU (Logical)", + "cpuFrequency": "CPU Frequency", + "avgCpuTemperature": "Average CPU Temperature", + "memory": "Memory", + "disk": "Disk", + "uptime": "Uptime", + "os": "OS", + "host": "Host", + "actions": "Actions", + "integrations": "Integrations", + "integrationsPrism": "Connect Prism to your favorite service.", + "integrationsSlack": "Slack", + "integrationsSlackInfo": "Connect with Slack and see incidents in a channel", + "integrationsDiscord": "Discord", + "integrationsDiscordInfo": "Connect with Discord and view incidents directly in a channel", + "integrationsZapier": "Zapier", + "integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere", + "commonSave": "Save", + "createYour": "Create your", + "createMonitor": "Create monitor", + "pause": "Pause", + "resume": "Resume", + "editing": "Editing...", + "url": "URL", + "access": "Access", + "timezone": "Timezone", + "features": "Features", + "administrator": "Administrator?", + "loginHere": "Login here", + "displayName": "Display name", + "urlMonitor": "URL to monitor", + "portToMonitor": "Port to monitor", + "websiteMonitoring": "Website monitoring", + "websiteMonitoringDescription": "Use HTTP(s) to monitor your website or API endpoint.", + "pingMonitoring": "Ping monitoring", + "pingMonitoringDescription": "Check whether your server is available or not.", + "dockerContainerMonitoring": "Docker container monitoring", + "dockerContainerMonitoringDescription": "Check whether your Docker container is running or not.", + "portMonitoring": "Port monitoring", + "portMonitoringDescription": "Check whether your port is open or not.", + "createMaintenanceWindow": "Create maintenance window", + "createMaintenance": "Create maintenance", + "editMaintenance": "Edit maintenance", + "maintenanceWindowName": "Maintenance Window Name", + "friendlyNameInput": "Friendly name", + "friendlyNamePlaceholder": "Maintenance at __ : __ for ___ minutes", + "maintenanceRepeat": "Maintenance Repeat", + "maintenance": "maintenance", + "duration": "Duration", + "addMonitors": "Add monitors", + "window": "window", + "cancel": "Cancel", + "message": "Message", + "low": "low", + "high": "high", + "statusCode": "Status code", + "date&Time": "Date & Time", + "type": "Type", + "statusPageName": "Status page name", + "publicURL": "Public URL", + "repeat": "Repeat", + "edit": "Edit", + "createA": "Create a", + "remove": "Remove", + "maintenanceWindowDescription": "Your pings won't be sent during this time frame", + "startTime": "Start time", + "timeZoneInfo": "All dates and times are in GMT+0 time zone.", + "monitorsToApply": "Monitors to apply maintenance window to", + "nextWindow": "Next window", + "notFoundButton": "Go to the main dashboard", + "pageSpeedConfigureSettingsDescription": "Here you can select the URL of the host, together with the type of monitor.", + "monitorDisplayName": "Monitor display name", + "whenNewIncident": "When there is a new incident,", + "notifySMS": "Notify via SMS (coming soon)", + "notifyEmails": "Also notify via email to multiple addresses (coming soon)", + "seperateEmails": "You can separate multiple emails with a comma", + "checkFrequency": "Check frequency", + "matchMethod": "Match Method", + "expectedValue": "Expected value", + "deleteDialogTitle": "Do you really want to delete this monitor?", + "deleteDialogDescription": "Once deleted, this monitor cannot be retrieved.", + "pageSpeedMonitor": "PageSpeed monitor", + "shown": "Shown", + "ago": "ago", + "companyName": "Company name", + "pageSpeedDetailsPerformanceReport": "Values are estimated and may vary.", + "pageSpeedDetailsPerformanceReportCalculator": "See calculator", + "checkingEvery": "Checking every", + "statusPageCreateSettings": "If your status page is ready, you can mark it as published.", + "basicInformation": "Basic Information", + "statusPageCreateBasicInfoDescription": "Define company name and the subdomain that your status page points to.", + "statusPageCreateSelectTimeZoneDescription": "Select the timezone that your status page will be displayed in.", + "statusPageCreateAppearanceDescription": "Define the default look and feel of your public status page.", + "statusPageCreateSettingsCheckboxLabel": "Published and visible to the public", + "statusPageCreateBasicInfoStatusPageAddress": "Your status page address", + "statusPageCreateTabsContent": "Status page servers", + "statusPageCreateTabsContentDescription": "You can add any number of servers that you monitor to your status page. You can also reorder them for the best viewing experience.", + "statusPageCreateTabsContentFeaturesDescription": "Show more details on the status page", + "showCharts": "Show charts", + "showUptimePercentage": "Show uptime percentage", + "removeLogo": "Remove Logo", + "statusPageStatus": "A public status page is not set up.", + "statusPageStatusContactAdmin": "Please contact to your administrator", + "statusPageStatusNotPublic": "This status page is not public.", + "statusPageStatusNoPage": "There's no status page here.", + "statusPageStatusServiceStatus": "Service status", + "deleteStatusPage": "Do you want to delete this status page?", + "deleteStatusPageConfirm": "Yes, delete status page", + "deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.", + "uptimeCreate": "The expected value is used to match against response result, and the match determines the status.", + "uptimeCreateJsonPath": "This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See", + "uptimeCreateJsonPathQuery": "for query language documentation.", + "maintenanceTableActionMenuDialogTitle": "Do you really want to remove this maintenance window?", + "infrastructureEditYour": "Edit your", + "infrastructureEditMonitor": "Save Infrastructure Monitor", + "infrastructureMonitorCreated": "Infrastructure monitor created successfully!", + "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!", + "errorInvalidTypeId": "Invalid notification type provided", + "errorInvalidFieldId": "Invalid field ID provided", + "inviteNoTokenFound": "No invite token found" } From e19be6b1b8f1f2497b60d4649025ac98a25c49a5 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:31:38 -0700 Subject: [PATCH 33/43] i18n --- src/Hooks/inviteHooks.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Hooks/inviteHooks.js b/src/Hooks/inviteHooks.js index 9c04c6241..f8b44f0fd 100644 --- a/src/Hooks/inviteHooks.js +++ b/src/Hooks/inviteHooks.js @@ -1,8 +1,12 @@ import { useState } from "react"; import { networkService } from "../main"; +import { useTranslation } from "react-i18next"; + const CLIENT_HOST = import.meta.env.VITE_CLIENT_HOST; const useGetInviteToken = () => { + const { t } = useTranslation(); + const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(undefined); const [token, setToken] = useState(undefined); @@ -19,7 +23,7 @@ const useGetInviteToken = () => { }); const token = response?.data?.data?.token; if (typeof token === "undefined") { - throw new Error("No token"); + throw new Error(t("inviteNoTokenFound")); } let inviteLink = token; From 4d56e716912db566483e5892bc19a93e20524c2c Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:32:09 -0700 Subject: [PATCH 34/43] allow dialog to expans --- src/Components/Dialog/genericDialog.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Dialog/genericDialog.jsx b/src/Components/Dialog/genericDialog.jsx index 871b3f329..b2cbe1299 100644 --- a/src/Components/Dialog/genericDialog.jsx +++ b/src/Components/Dialog/genericDialog.jsx @@ -21,7 +21,7 @@ const GenericDialog = ({ title, description, open, onClose, theme, children }) = top: "50%", left: "50%", transform: "translate(-50%, -50%)", - width: 400, + minWidth: 400, bgcolor: theme.palette.primary.main, border: 1, borderColor: theme.palette.primary.lowContrast, From 3181598aeb1062dc91557ae2973454b3e3fc0b49 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Wed, 26 Mar 2025 15:32:33 -0700 Subject: [PATCH 35/43] add fetching token functionality --- .../TabPanels/Account/TeamPanel.jsx | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Components/TabPanels/Account/TeamPanel.jsx b/src/Components/TabPanels/Account/TeamPanel.jsx index eef7b6421..950f0ea69 100644 --- a/src/Components/TabPanels/Account/TeamPanel.jsx +++ b/src/Components/TabPanels/Account/TeamPanel.jsx @@ -10,6 +10,7 @@ import { useSelector } from "react-redux"; import Select from "../../Inputs/Select"; import { GenericDialog } from "../../Dialog/genericDialog"; import DataTable from "../../Table/"; +import { useGetInviteToken } from "../../../Hooks/inviteHooks"; /** * TeamPanel component manages the organization and team members, * providing functionalities like renaming the organization, managing team members, @@ -20,7 +21,6 @@ import DataTable from "../../Table/"; const TeamPanel = () => { const theme = useTheme(); - const SPACING_GAP = theme.spacing(12); const [toInvite, setToInvite] = useState({ @@ -34,6 +34,8 @@ const TeamPanel = () => { const [errors, setErrors] = useState({}); const [isSendingInvite, setIsSendingInvite] = useState(false); + const [getInviteToken, clearToken, isLoading, error, token] = useGetInviteToken(); + const headers = [ { id: "name", @@ -124,6 +126,10 @@ const TeamPanel = () => { }); }; + const handleGetToken = async () => { + await getInviteToken({ email: toInvite.email, role: toInvite.role }); + }; + const handleInviteMember = async () => { if (!toInvite.email) { setErrors((prev) => ({ ...prev, email: "Email is required." })); @@ -146,7 +152,7 @@ const TeamPanel = () => { } try { - await networkService.requestInvitationToken({ + await networkService.sendInvitationToken({ email: toInvite.email, role: toInvite.role, }); @@ -165,6 +171,7 @@ const TeamPanel = () => { const closeInviteModal = () => { setIsOpen(false); + clearToken(); setToInvite({ email: "", role: ["0"] }); setErrors({}); }; @@ -275,6 +282,13 @@ const TeamPanel = () => { { _id: "user", name: "User" }, ]} /> + {token && Invite link} + {token && ( + + )} { > Cancel + From 5bae0318080af1ff5022d4536215c61e2b5a01ac Mon Sep 17 00:00:00 2001 From: Vishnu Sreekumaran Nair <200557136@student.georgianc.on.ca> Date: Wed, 26 Mar 2025 18:35:03 -0400 Subject: [PATCH 36/43] update text color in perfomance report --- .../PageSpeed/Details/Components/PerformanceReport/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Pages/PageSpeed/Details/Components/PerformanceReport/index.jsx b/src/Pages/PageSpeed/Details/Components/PerformanceReport/index.jsx index 942933a19..c83f77294 100644 --- a/src/Pages/PageSpeed/Details/Components/PerformanceReport/index.jsx +++ b/src/Pages/PageSpeed/Details/Components/PerformanceReport/index.jsx @@ -32,7 +32,7 @@ const PerformanceReport = ({ shouldRender, audits }) => { component="span" fontSize="inherit" sx={{ - color: theme.palette.primary.main, + color: theme.palette.primary.contrastTextTertiary, fontWeight: 500, textDecoration: "underline", textUnderlineOffset: 2, From 3c7ccd1ddfed73d10ad71e69b11fc8d560a81cbd Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Wed, 26 Mar 2025 23:34:00 +0000 Subject: [PATCH 37/43] fix(deps): update dependency maplibre-gl to v5.3.0 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28af202d4..03a40368f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "immutability-helper": "^3.1.1", "joi": "17.13.3", "jwt-decode": "^4.0.0", - "maplibre-gl": "5.2.0", + "maplibre-gl": "5.3.0", "mui-color-input": "^6.0.0", "react": "18.3.1", "react-dnd": "^16.0.1", @@ -15519,9 +15519,9 @@ } }, "node_modules/maplibre-gl": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.2.0.tgz", - "integrity": "sha512-9zZKD0M80qtDsqBet+EDuAhoCeA/cnAuZAA0p3hcGKGbyjM/SH+R6wQvnBEgvJz9UhDynnkoKdUwhI+fUkHoXQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-5.3.0.tgz", + "integrity": "sha512-qru6B6jHlDPR4Q9/P4W1zEPbPofR4wwYbrrjiHKWI7yLtyXmpJ1/G1KaIYDr5uNdFbPZ7uiZAWdqtfdNLmIhGg==", "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", diff --git a/package.json b/package.json index 4f312e796..c89539231 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "i18next": "^24.2.2", "immutability-helper": "^3.1.1", "joi": "17.13.3", - "maplibre-gl": "5.2.0", + "maplibre-gl": "5.3.0", "mui-color-input": "^6.0.0", "react": "18.3.1", "react-dnd": "^16.0.1", From 543c07d701f4e77fc6181d96e7e23053a4982d5e Mon Sep 17 00:00:00 2001 From: "Gorkem Cetin (BWL)" <167266851+gorkem-bwl@users.noreply.github.com> Date: Thu, 27 Mar 2025 10:35:28 -0400 Subject: [PATCH 38/43] Add Aryaman as the core contributor --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23f33e42e..eb85dae4c 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ If you have any questions, suggestions or comments, please use our [Discord chan ## 🤝 Contributing -We are [@ajhollid](http://github.com/ajhollid) (team lead), [@vishnusn77](http://github.com/vishnusn77), [@mohicody](http://github.com/mohicody), [@gorkem-bwl](http://github.com/gorkem-bwl/) and [@Owaiseimdad](http://github.com/Owaiseimdad), helping individuals and businesses monitor their infra and servers. +We are [Alex](http://github.com/ajhollid) (team lead), [Vishnu](http://github.com/vishnusn77), [Mohadeseh](http://github.com/mohicody), [Gorkem](http://github.com/gorkem-bwl/), [Owaise](http://github.com/Owaiseimdad), and [Aryaman](https://github.com/Br0wnHammer) helping individuals and businesses monitor their infra and servers. We pride ourselves on building strong connections with contributors at every level. Despite being a young project, Checkmate has already earned 4.6K+ stars and attracted 60 contributors from around the globe. From 8cda1833f24ffb1b0e0972640706c63f90a7204b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Fri, 28 Mar 2025 00:28:57 +0000 Subject: [PATCH 39/43] feat: translations updated from POEditor --- src/locales/gb.json | 754 ++++++++++++++++++++++---------------------- src/locales/tr.json | 3 +- 2 files changed, 379 insertions(+), 378 deletions(-) diff --git a/src/locales/gb.json b/src/locales/gb.json index f69cd9977..5dfe9b4ca 100644 --- a/src/locales/gb.json +++ b/src/locales/gb.json @@ -1,379 +1,379 @@ { - "dontHaveAccount": "Don't have account", - "email": "E-mail", - "forgotPassword": "Forgot Password", - "password": "password", - "signUp": "Sign up", - "submit": "Submit", - "title": "Title", - "continue": "Continue", - "enterEmail": "Enter your email", - "authLoginTitle": "Log In", - "authLoginEnterPassword": "Enter your password", - "commonPassword": "Password", - "commonBack": "Back", - "authForgotPasswordTitle": "Forgot password?", - "authForgotPasswordResetPassword": "Reset password", - "createPassword": "Create your password", - "createAPassword": "Create a password", - "authRegisterAlreadyHaveAccount": "Already have an account?", - "commonAppName": "Checkmate", - "authLoginEnterEmail": "Enter your email", - "authRegisterTitle": "Create an account", - "authRegisterStepOneTitle": "Create your account", - "authRegisterStepOneDescription": "Enter your details to get started", - "authRegisterStepTwoTitle": "Set up your profile", - "authRegisterStepTwoDescription": "Tell us more about yourself", - "authRegisterStepThreeTitle": "Almost done!", - "authRegisterStepThreeDescription": "Review your information", - "authForgotPasswordDescription": "No worries, we'll send you reset instructions.", - "authForgotPasswordSendInstructions": "Send instructions", - "authForgotPasswordBackTo": "Back to", - "authCheckEmailTitle": "Check your email", - "authCheckEmailDescription": "We sent a password reset link to", - "authCheckEmailResendEmail": "Resend email", - "authCheckEmailBackTo": "Back to", - "goBackTo": "Go back to", - "authCheckEmailDidntReceiveEmail": "Didn't receive the email?", - "authCheckEmailClickToResend": "Click to resend", - "authSetNewPasswordTitle": "Set new password", - "authSetNewPasswordDescription": "Your new password must be different from previously used passwords.", - "authSetNewPasswordNewPassword": "New password", - "authSetNewPasswordConfirmPassword": "Confirm password", - "confirmPassword": "Confirm your password", - "authSetNewPasswordResetPassword": "Reset password", - "authSetNewPasswordBackTo": "Back to", - "authPasswordMustBeAtLeast": "Must be at least", - "authPasswordCharactersLong": "8 characters long", - "authPasswordMustContainAtLeast": "Must contain at least", - "authPasswordSpecialCharacter": "one special character", - "authPasswordOneNumber": "one number", - "authPasswordUpperCharacter": "one upper character", - "authPasswordLowerCharacter": "one lower character", - "authPasswordConfirmAndPassword": "Confirm password and password", - "authPasswordMustMatch": "must match", - "authRegisterCreateAccount": "Create your account to get started", - "authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started", - "authRegisterSignUpWithEmail": "Sign up with Email", - "authRegisterBySigningUp": "By signing up, you agree to our", - "distributedStatusHeaderText": "Real-time, real-device coverage", - "distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city", - "settingsGeneralSettings": "General settings", - "settingsDisplayTimezone": "Display timezone", - "settingsDisplayTimezoneDescription": "The timezone of the dashboard you publicly display.", - "settingsAppearance": "Appearance", - "settingsAppearanceDescription": "Switch between light and dark mode, or change user interface language", - "settingsThemeMode": "Theme Mode", - "settingsLanguage": "Language", - "settingsDistributedUptime": "Distributed uptime", - "settingsDistributedUptimeDescription": "Enable/disable distributed uptime monitoring.", - "settingsEnabled": "Enabled", - "settingsDisabled": "Disabled", - "settingsHistoryAndMonitoring": "History and monitoring", - "settingsHistoryAndMonitoringDescription": "Define here for how long you want to keep the data. You can also remove all past data.", - "settingsTTLLabel": "The days you want to keep monitoring history.", - "settingsTTLOptionalLabel": "0 for infinite", - "settingsClearAllStats": "Clear all stats. This is irreversible.", - "settingsClearAllStatsButton": "Clear all stats", - "settingsClearAllStatsDialogTitle": "Do you want to clear all stats?", - "settingsClearAllStatsDialogDescription": "Once deleted, your monitors cannot be retrieved.", - "settingsClearAllStatsDialogConfirm": "Yes, clear all stats", - "settingsDemoMonitors": "Demo monitors", - "settingsDemoMonitorsDescription": "Here you can add and remove demo monitors.", - "settingsAddDemoMonitors": "Add demo monitors", - "settingsAddDemoMonitorsButton": "Add demo monitors", - "settingsRemoveAllMonitors": "Remove all monitors", - "settingsRemoveAllMonitorsButton": "Remove all monitors", - "settingsRemoveAllMonitorsDialogTitle": "Do you want to remove all monitors?", - "settingsRemoveAllMonitorsDialogConfirm": "Yes, clear all monitors", - "settingsWallet": "Wallet", - "settingsWalletDescription": "Connect your wallet here. This is required for the Distributed Uptime monitor to connect to multiple nodes globally.", - "settingsAbout": "About", - "settingsDevelopedBy": "Developed by Bluewave Labs.", - "settingsSave": "Save", - "settingsSuccessSaved": "Settings saved successfully", - "settingsFailedToSave": "Failed to save settings", - "settingsStatsCleared": "Stats cleared successfully", - "settingsFailedToClearStats": "Failed to clear stats", - "settingsDemoMonitorsAdded": "Successfully added demo monitors", - "settingsFailedToAddDemoMonitors": "Failed to add demo monitors", - "settingsMonitorsDeleted": "Successfully deleted all monitors", - "settingsFailedToDeleteMonitors": "Failed to delete all monitors", - "starPromptTitle": "Star Checkmate", - "starPromptDescription": "See the latest releases and help grow the community on GitHub", - "https": "HTTPS", - "http": "HTTP", - "monitor": "monitor", - "aboutus": "About Us", - "signUP": "Sign Up", - "now": "Now", - "delete": "Delete", - "configure": "Configure", - "networkError": "Network error", - "responseTime": "Response time:", - "ms": "ms", - "bar": "Bar", - "area": "Area", - "country": "COUNTRY", - "city": "CITY", - "response": "RESPONSE", - "checkConnection": "Please check your connection", - "passwordreset": "Password Reset", - "authRegisterStepOnePersonalDetails": "Enter your personal details", - "authCheckEmailOpenEmailButton": "Open email app", - "authNewPasswordConfirmed": "Your password has been successfully reset. Click below to log in magically.", - "monitorStatusUp": "Monitor {name} ({url}) is now UP and responding", - "monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding", - "webhookSendSuccess": "Webhook notification sent successfully", - "webhookSendError": "Error sending webhook notification to {platform}", - "webhookUnsupportedPlatform": "Unsupported platform: {platform}", - "distributedRightCategoryTitle": "Monitor", - "distributedStatusServerMonitors": "Server Monitors", - "distributedStatusServerMonitorsDescription": "Monitor status of related servers", - "distributedUptimeCreateSelectURL": "Here you can select the URL of the host, together with the type of monitor.", - "distributedUptimeCreateChecks": "Checks to perform", - "distributedUptimeCreateChecksDescription": "You can always add or remove checks after adding your site.", - "distributedUptimeCreateIncidentNotification": "Incident notifications", - "distributedUptimeCreateIncidentDescription": "When there is an incident, notify users.", - "distributedUptimeCreateAdvancedSettings": "Advanced settings", - "distributedUptimeDetailsNoMonitorHistory": "There is no check history for this monitor yet.", - "distributedUptimeDetailsFooterHeading": "Made with ❤️ by UpRock & Bluewave Labs", - "distributedUptimeDetailsFooterBuilt": "Built on", - "distributedUptimeDetailsFooterSolana": "Solana", - "distributedUptimeDetailsMonitorHeader": "Distributed Uptime Monitoring powered by DePIN", - "distributedUptimeDetailsStatusHeaderUptime": "Uptime:", - "distributedUptimeDetailsStatusHeaderLastUpdate": "Last updated", - "notifications": { - "enableNotifications": "Enable {{platform}} notifications", - "testNotification": "Test notification", - "addOrEditNotifications": "Add or edit notifications", - "slack": { - "label": "Slack", - "description": "To enable Slack notifications, create a Slack app and enable incoming webhooks. After that, simply provide the webhook URL here.", - "webhookLabel": "Webhook URL", - "webhookPlaceholder": "https://hooks.slack.com/services/...", - "webhookRequired": "Slack webhook URL is required" - }, - "discord": { - "label": "Discord", - "description": "To send data to a Discord channel from Checkmate via Discord notifications using webhooks, you can use Discord's incoming Webhooks feature.", - "webhookLabel": "Discord Webhook URL", - "webhookPlaceholder": "https://discord.com/api/webhooks/...", - "webhookRequired": "Discord webhook URL is required" - }, - "telegram": { - "label": "Telegram", - "description": "To enable Telegram notifications, create a Telegram bot using BotFather, an official bot for creating and managing Telegram bots. Then, get the API token and chat ID and write them down here.", - "tokenLabel": "Your bot token", - "tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11", - "chatIdLabel": "Your Chat ID", - "chatIdPlaceholder": "-1001234567890", - "fieldsRequired": "Telegram token and chat ID are required" - }, - "webhook": { - "label": "Webhooks", - "description": "You can set up a custom webhook to receive notifications when incidents occur.", - "urlLabel": "Webhook URL", - "urlPlaceholder": "https://your-server.com/webhook", - "urlRequired": "Webhook URL is required" - }, - "testNotificationDevelop": "Test notification 2", - "integrationButton": "Notification Integration", - "testSuccess": "Test notification sent successfully!", - "testFailed": "Failed to send test notification", - "unsupportedType": "Unsupported notification type", - "networkError": "Network error occurred" - }, - "testLocale": "testLocale", - "add": "Add", - "monitors": "monitors", - "distributedUptimeStatusCreateStatusPage": "status page", - "distributedUptimeStatusCreateStatusPageAccess": "Access", - "distributedUptimeStatusCreateStatusPageReady": "If your status page is ready, you can mark it as published.", - "distributedUptimeStatusBasicInfoHeader": "Basic Information", - "distributedUptimeStatusBasicInfoDescription": "Define company name and the subdomain that your status page points to.", - "distributedUptimeStatusLogoHeader": "Logo", - "distributedUptimeStatusLogoDescription": "Upload a logo for your status page", - "distributedUptimeStatusLogoUploadButton": "Upload logo", - "distributedUptimeStatusStandardMonitorsHeader": "Standard Monitors", - "distributedUptimeStatusStandardMonitorsDescription": "Attach standard monitors to your status page.", - "distributedUptimeStatusCreateYour": "Create your", - "distributedUptimeStatusEditYour": "Edit your", - "distributedUptimeStatusPublishedLabel": "Published and visible to the public", - "distributedUptimeStatusCompanyNameLabel": "Company name", - "distributedUptimeStatusPageAddressLabel": "Your status page address", - "distributedUptimeStatus30Days": "30 days", - "distributedUptimeStatus60Days": "60 days", - "distributedUptimeStatus90Days": "90 days", - "distributedUptimeStatusPageNotSetUp": "A status page is not set up.", - "distributedUptimeStatusContactAdmin": "Please contact your administrator", - "distributedUptimeStatusPageNotPublic": "This status page is not public.", - "distributedUptimeStatusPageDeleteDialog": "Do you want to delete this status page?", - "distributedUptimeStatusPageDeleteConfirm": "Yes, delete status page", - "distributedUptimeStatusPageDeleteDescription": "Once deleted, your status page cannot be retrieved.", - "distributedUptimeStatusDevices": "Devices", - "distributedUptimeStatusUpt": "UPT", - "distributedUptimeStatusUptBurned": "UPT Burned", - "distributedUptimeStatusUptLogo": "Upt Logo", - "incidentsTableNoIncidents": "No incidents recorded", - "incidentsTablePaginationLabel": "incidents", - "incidentsTableMonitorName": "Monitor Name", - "incidentsTableStatus": "Status", - "incidentsTableDateTime": "Date & Time", - "incidentsTableStatusCode": "Status Code", - "incidentsTableMessage": "Message", - "incidentsOptionsHeader": "Incidents for:", - "incidentsOptionsHeaderFilterBy": "Filter by:", - "incidentsOptionsHeaderFilterAll": "All", - "incidentsOptionsHeaderFilterDown": "Down", - "incidentsOptionsHeaderFilterCannotResolve": "Cannot resolve", - "incidentsOptionsHeaderShow": "Show:", - "incidentsOptionsHeaderLastHour": "Last hour", - "incidentsOptionsHeaderLastDay": "Last day", - "incidentsOptionsHeaderLastWeek": "Last week", - "incidentsOptionsPlaceholderAllServers": "All servers", - "infrastructureCreateYour": "Create your", - "infrastructureCreateGeneralSettingsDescription": "Here you can select the URL of the host, together with the friendly name and authorization secret to connect to the server agent.", - "infrastructureServerRequirement": "The server you are monitoring must be running the", - "infrastructureCustomizeAlerts": "Customize alerts", - "infrastructureAlertNotificationDescription": "Send a notification to user(s) when thresholds exceed a specified percentage.", - "infrastructureCreateMonitor": "Create Infrastructure Monitor", - "infrastructureProtocol": "Protocol", - "infrastructureServerUrlLabel": "Server URL", - "infrastructureDisplayNameLabel": "Display name", - "infrastructureAuthorizationSecretLabel": "Authorization secret", - "gb": "GB", - "mb": "MB", - "mem": "Mem", - "memoryUsage": "Memory usage", - "cpu": "CPU", - "cpuUsage": "CPU usage", - "cpuTemperature": "CPU Temperature", - "diskUsage": "Disk Usage", - "used": "Used", - "total": "Total", - "cores": "Cores", - "frequency": "Frequency", - "status": "Status", - "cpuPhysical": "CPU (Physical)", - "cpuLogical": "CPU (Logical)", - "cpuFrequency": "CPU Frequency", - "avgCpuTemperature": "Average CPU Temperature", - "memory": "Memory", - "disk": "Disk", - "uptime": "Uptime", - "os": "OS", - "host": "Host", - "actions": "Actions", - "integrations": "Integrations", - "integrationsPrism": "Connect Prism to your favorite service.", - "integrationsSlack": "Slack", - "integrationsSlackInfo": "Connect with Slack and see incidents in a channel", - "integrationsDiscord": "Discord", - "integrationsDiscordInfo": "Connect with Discord and view incidents directly in a channel", - "integrationsZapier": "Zapier", - "integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere", - "commonSave": "Save", - "createYour": "Create your", - "createMonitor": "Create monitor", - "pause": "Pause", - "resume": "Resume", - "editing": "Editing...", - "url": "URL", - "access": "Access", - "timezone": "Timezone", - "features": "Features", - "administrator": "Administrator?", - "loginHere": "Login here", - "displayName": "Display name", - "urlMonitor": "URL to monitor", - "portToMonitor": "Port to monitor", - "websiteMonitoring": "Website monitoring", - "websiteMonitoringDescription": "Use HTTP(s) to monitor your website or API endpoint.", - "pingMonitoring": "Ping monitoring", - "pingMonitoringDescription": "Check whether your server is available or not.", - "dockerContainerMonitoring": "Docker container monitoring", - "dockerContainerMonitoringDescription": "Check whether your Docker container is running or not.", - "portMonitoring": "Port monitoring", - "portMonitoringDescription": "Check whether your port is open or not.", - "createMaintenanceWindow": "Create maintenance window", - "createMaintenance": "Create maintenance", - "editMaintenance": "Edit maintenance", - "maintenanceWindowName": "Maintenance Window Name", - "friendlyNameInput": "Friendly name", - "friendlyNamePlaceholder": "Maintenance at __ : __ for ___ minutes", - "maintenanceRepeat": "Maintenance Repeat", - "maintenance": "maintenance", - "duration": "Duration", - "addMonitors": "Add monitors", - "window": "window", - "cancel": "Cancel", - "message": "Message", - "low": "low", - "high": "high", - "statusCode": "Status code", - "date&Time": "Date & Time", - "type": "Type", - "statusPageName": "Status page name", - "publicURL": "Public URL", - "repeat": "Repeat", - "edit": "Edit", - "createA": "Create a", - "remove": "Remove", - "maintenanceWindowDescription": "Your pings won't be sent during this time frame", - "startTime": "Start time", - "timeZoneInfo": "All dates and times are in GMT+0 time zone.", - "monitorsToApply": "Monitors to apply maintenance window to", - "nextWindow": "Next window", - "notFoundButton": "Go to the main dashboard", - "pageSpeedConfigureSettingsDescription": "Here you can select the URL of the host, together with the type of monitor.", - "monitorDisplayName": "Monitor display name", - "whenNewIncident": "When there is a new incident,", - "notifySMS": "Notify via SMS (coming soon)", - "notifyEmails": "Also notify via email to multiple addresses (coming soon)", - "seperateEmails": "You can separate multiple emails with a comma", - "checkFrequency": "Check frequency", - "matchMethod": "Match Method", - "expectedValue": "Expected value", - "deleteDialogTitle": "Do you really want to delete this monitor?", - "deleteDialogDescription": "Once deleted, this monitor cannot be retrieved.", - "pageSpeedMonitor": "PageSpeed monitor", - "shown": "Shown", - "ago": "ago", - "companyName": "Company name", - "pageSpeedDetailsPerformanceReport": "Values are estimated and may vary.", - "pageSpeedDetailsPerformanceReportCalculator": "See calculator", - "checkingEvery": "Checking every", - "statusPageCreateSettings": "If your status page is ready, you can mark it as published.", - "basicInformation": "Basic Information", - "statusPageCreateBasicInfoDescription": "Define company name and the subdomain that your status page points to.", - "statusPageCreateSelectTimeZoneDescription": "Select the timezone that your status page will be displayed in.", - "statusPageCreateAppearanceDescription": "Define the default look and feel of your public status page.", - "statusPageCreateSettingsCheckboxLabel": "Published and visible to the public", - "statusPageCreateBasicInfoStatusPageAddress": "Your status page address", - "statusPageCreateTabsContent": "Status page servers", - "statusPageCreateTabsContentDescription": "You can add any number of servers that you monitor to your status page. You can also reorder them for the best viewing experience.", - "statusPageCreateTabsContentFeaturesDescription": "Show more details on the status page", - "showCharts": "Show charts", - "showUptimePercentage": "Show uptime percentage", - "removeLogo": "Remove Logo", - "statusPageStatus": "A public status page is not set up.", - "statusPageStatusContactAdmin": "Please contact to your administrator", - "statusPageStatusNotPublic": "This status page is not public.", - "statusPageStatusNoPage": "There's no status page here.", - "statusPageStatusServiceStatus": "Service status", - "deleteStatusPage": "Do you want to delete this status page?", - "deleteStatusPageConfirm": "Yes, delete status page", - "deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.", - "uptimeCreate": "The expected value is used to match against response result, and the match determines the status.", - "uptimeCreateJsonPath": "This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See", - "uptimeCreateJsonPathQuery": "for query language documentation.", - "maintenanceTableActionMenuDialogTitle": "Do you really want to remove this maintenance window?", - "infrastructureEditYour": "Edit your", - "infrastructureEditMonitor": "Save Infrastructure Monitor", - "infrastructureMonitorCreated": "Infrastructure monitor created successfully!", - "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!", - "errorInvalidTypeId": "Invalid notification type provided", - "errorInvalidFieldId": "Invalid field ID provided", - "inviteNoTokenFound": "No invite token found" + "dontHaveAccount": "Don't have account", + "email": "E-mail", + "forgotPassword": "Forgot Password", + "password": "password", + "signUp": "Sign up", + "submit": "Submit", + "title": "Title", + "continue": "Continue", + "enterEmail": "Enter your email", + "authLoginTitle": "Log In", + "authLoginEnterPassword": "Enter your password", + "commonPassword": "Password", + "commonBack": "Back", + "authForgotPasswordTitle": "Forgot password?", + "authForgotPasswordResetPassword": "Reset password", + "createPassword": "Create your password", + "createAPassword": "Create a password", + "authRegisterAlreadyHaveAccount": "Already have an account?", + "commonAppName": "Checkmate", + "authLoginEnterEmail": "Enter your email", + "authRegisterTitle": "Create an account", + "authRegisterStepOneTitle": "Create your account", + "authRegisterStepOneDescription": "Enter your details to get started", + "authRegisterStepTwoTitle": "Set up your profile", + "authRegisterStepTwoDescription": "Tell us more about yourself", + "authRegisterStepThreeTitle": "Almost done!", + "authRegisterStepThreeDescription": "Review your information", + "authForgotPasswordDescription": "No worries, we'll send you reset instructions.", + "authForgotPasswordSendInstructions": "Send instructions", + "authForgotPasswordBackTo": "Back to", + "authCheckEmailTitle": "Check your email", + "authCheckEmailDescription": "We sent a password reset link to", + "authCheckEmailResendEmail": "Resend email", + "authCheckEmailBackTo": "Back to", + "goBackTo": "Go back to", + "authCheckEmailDidntReceiveEmail": "Didn't receive the email?", + "authCheckEmailClickToResend": "Click to resend", + "authSetNewPasswordTitle": "Set new password", + "authSetNewPasswordDescription": "Your new password must be different from previously used passwords.", + "authSetNewPasswordNewPassword": "New password", + "authSetNewPasswordConfirmPassword": "Confirm password", + "confirmPassword": "Confirm your password", + "authSetNewPasswordResetPassword": "Reset password", + "authSetNewPasswordBackTo": "Back to", + "authPasswordMustBeAtLeast": "Must be at least", + "authPasswordCharactersLong": "8 characters long", + "authPasswordMustContainAtLeast": "Must contain at least", + "authPasswordSpecialCharacter": "one special character", + "authPasswordOneNumber": "one number", + "authPasswordUpperCharacter": "one upper character", + "authPasswordLowerCharacter": "one lower character", + "authPasswordConfirmAndPassword": "Confirm password and password", + "authPasswordMustMatch": "must match", + "authRegisterCreateAccount": "Create your account to get started", + "authRegisterCreateSuperAdminAccount": "Create your Super admin account to get started", + "authRegisterSignUpWithEmail": "Sign up with Email", + "authRegisterBySigningUp": "By signing up, you agree to our", + "distributedStatusHeaderText": "Real-time, real-device coverage", + "distributedStatusSubHeaderText": "Powered by millions devices worldwide, view a system performance by global region, country or city", + "settingsGeneralSettings": "General settings", + "settingsDisplayTimezone": "Display timezone", + "settingsDisplayTimezoneDescription": "The timezone of the dashboard you publicly display.", + "settingsAppearance": "Appearance", + "settingsAppearanceDescription": "Switch between light and dark mode, or change user interface language", + "settingsThemeMode": "Theme Mode", + "settingsLanguage": "Language", + "settingsDistributedUptime": "Distributed uptime", + "settingsDistributedUptimeDescription": "Enable/disable distributed uptime monitoring.", + "settingsEnabled": "Enabled", + "settingsDisabled": "Disabled", + "settingsHistoryAndMonitoring": "History and monitoring", + "settingsHistoryAndMonitoringDescription": "Define here for how long you want to keep the data. You can also remove all past data.", + "settingsTTLLabel": "The days you want to keep monitoring history.", + "settingsTTLOptionalLabel": "0 for infinite", + "settingsClearAllStats": "Clear all stats. This is irreversible.", + "settingsClearAllStatsButton": "Clear all stats", + "settingsClearAllStatsDialogTitle": "Do you want to clear all stats?", + "settingsClearAllStatsDialogDescription": "Once deleted, your monitors cannot be retrieved.", + "settingsClearAllStatsDialogConfirm": "Yes, clear all stats", + "settingsDemoMonitors": "Demo monitors", + "settingsDemoMonitorsDescription": "Here you can add and remove demo monitors.", + "settingsAddDemoMonitors": "Add demo monitors", + "settingsAddDemoMonitorsButton": "Add demo monitors", + "settingsRemoveAllMonitors": "Remove all monitors", + "settingsRemoveAllMonitorsButton": "Remove all monitors", + "settingsRemoveAllMonitorsDialogTitle": "Do you want to remove all monitors?", + "settingsRemoveAllMonitorsDialogConfirm": "Yes, clear all monitors", + "settingsWallet": "Wallet", + "settingsWalletDescription": "Connect your wallet here. This is required for the Distributed Uptime monitor to connect to multiple nodes globally.", + "settingsAbout": "About", + "settingsDevelopedBy": "Developed by Bluewave Labs.", + "settingsSave": "Save", + "settingsSuccessSaved": "Settings saved successfully", + "settingsFailedToSave": "Failed to save settings", + "settingsStatsCleared": "Stats cleared successfully", + "settingsFailedToClearStats": "Failed to clear stats", + "settingsDemoMonitorsAdded": "Successfully added demo monitors", + "settingsFailedToAddDemoMonitors": "Failed to add demo monitors", + "settingsMonitorsDeleted": "Successfully deleted all monitors", + "settingsFailedToDeleteMonitors": "Failed to delete all monitors", + "starPromptTitle": "Star Checkmate", + "starPromptDescription": "See the latest releases and help grow the community on GitHub", + "https": "HTTPS", + "http": "HTTP", + "monitor": "monitor", + "aboutus": "About Us", + "signUP": "Sign Up", + "now": "Now", + "delete": "Delete", + "configure": "Configure", + "networkError": "Network error", + "responseTime": "Response time:", + "ms": "ms", + "bar": "Bar", + "area": "Area", + "country": "COUNTRY", + "city": "CITY", + "response": "RESPONSE", + "checkConnection": "Please check your connection", + "passwordreset": "Password Reset", + "authRegisterStepOnePersonalDetails": "Enter your personal details", + "authCheckEmailOpenEmailButton": "Open email app", + "authNewPasswordConfirmed": "Your password has been successfully reset. Click below to log in magically.", + "monitorStatusUp": "Monitor {name} ({url}) is now UP and responding", + "monitorStatusDown": "Monitor {name} ({url}) is DOWN and not responding", + "webhookSendSuccess": "Webhook notification sent successfully", + "webhookSendError": "Error sending webhook notification to {platform}", + "webhookUnsupportedPlatform": "Unsupported platform: {platform}", + "distributedRightCategoryTitle": "Monitor", + "distributedStatusServerMonitors": "Server Monitors", + "distributedStatusServerMonitorsDescription": "Monitor status of related servers", + "distributedUptimeCreateSelectURL": "Here you can select the URL of the host, together with the type of monitor.", + "distributedUptimeCreateChecks": "Checks to perform", + "distributedUptimeCreateChecksDescription": "You can always add or remove checks after adding your site.", + "distributedUptimeCreateIncidentNotification": "Incident notifications", + "distributedUptimeCreateIncidentDescription": "When there is an incident, notify users.", + "distributedUptimeCreateAdvancedSettings": "Advanced settings", + "distributedUptimeDetailsNoMonitorHistory": "There is no check history for this monitor yet.", + "distributedUptimeDetailsFooterHeading": "Made with ❤️ by UpRock & Bluewave Labs", + "distributedUptimeDetailsFooterBuilt": "Built on", + "distributedUptimeDetailsFooterSolana": "Solana", + "distributedUptimeDetailsMonitorHeader": "Distributed Uptime Monitoring powered by DePIN", + "distributedUptimeDetailsStatusHeaderUptime": "Uptime:", + "distributedUptimeDetailsStatusHeaderLastUpdate": "Last updated", + "notifications": { + "enableNotifications": "Enable {{platform}} notifications", + "testNotification": "Test notification", + "addOrEditNotifications": "Add or edit notifications", + "slack": { + "label": "Slack", + "description": "To enable Slack notifications, create a Slack app and enable incoming webhooks. After that, simply provide the webhook URL here.", + "webhookLabel": "Webhook URL", + "webhookPlaceholder": "https://hooks.slack.com/services/...", + "webhookRequired": "Slack webhook URL is required" + }, + "discord": { + "label": "Discord", + "description": "To send data to a Discord channel from Checkmate via Discord notifications using webhooks, you can use Discord's incoming Webhooks feature.", + "webhookLabel": "Discord Webhook URL", + "webhookPlaceholder": "https://discord.com/api/webhooks/...", + "webhookRequired": "Discord webhook URL is required" + }, + "telegram": { + "label": "Telegram", + "description": "To enable Telegram notifications, create a Telegram bot using BotFather, an official bot for creating and managing Telegram bots. Then, get the API token and chat ID and write them down here.", + "tokenLabel": "Your bot token", + "tokenPlaceholder": "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11", + "chatIdLabel": "Your Chat ID", + "chatIdPlaceholder": "-1001234567890", + "fieldsRequired": "Telegram token and chat ID are required" + }, + "webhook": { + "label": "Webhooks", + "description": "You can set up a custom webhook to receive notifications when incidents occur.", + "urlLabel": "Webhook URL", + "urlPlaceholder": "https://your-server.com/webhook", + "urlRequired": "Webhook URL is required" + }, + "testNotificationDevelop": "Test notification 2", + "integrationButton": "Notification Integration", + "testSuccess": "Test notification sent successfully!", + "testFailed": "Failed to send test notification", + "unsupportedType": "Unsupported notification type", + "networkError": "Network error occurred" + }, + "testLocale": "testLocale", + "add": "Add", + "monitors": "monitors", + "distributedUptimeStatusCreateStatusPage": "status page", + "distributedUptimeStatusCreateStatusPageAccess": "Access", + "distributedUptimeStatusCreateStatusPageReady": "If your status page is ready, you can mark it as published.", + "distributedUptimeStatusBasicInfoHeader": "Basic Information", + "distributedUptimeStatusBasicInfoDescription": "Define company name and the subdomain that your status page points to.", + "distributedUptimeStatusLogoHeader": "Logo", + "distributedUptimeStatusLogoDescription": "Upload a logo for your status page", + "distributedUptimeStatusLogoUploadButton": "Upload logo", + "distributedUptimeStatusStandardMonitorsHeader": "Standard Monitors", + "distributedUptimeStatusStandardMonitorsDescription": "Attach standard monitors to your status page.", + "distributedUptimeStatusCreateYour": "Create your", + "distributedUptimeStatusEditYour": "Edit your", + "distributedUptimeStatusPublishedLabel": "Published and visible to the public", + "distributedUptimeStatusCompanyNameLabel": "Company name", + "distributedUptimeStatusPageAddressLabel": "Your status page address", + "distributedUptimeStatus30Days": "30 days", + "distributedUptimeStatus60Days": "60 days", + "distributedUptimeStatus90Days": "90 days", + "distributedUptimeStatusPageNotSetUp": "A status page is not set up.", + "distributedUptimeStatusContactAdmin": "Please contact your administrator", + "distributedUptimeStatusPageNotPublic": "This status page is not public.", + "distributedUptimeStatusPageDeleteDialog": "Do you want to delete this status page?", + "distributedUptimeStatusPageDeleteConfirm": "Yes, delete status page", + "distributedUptimeStatusPageDeleteDescription": "Once deleted, your status page cannot be retrieved.", + "distributedUptimeStatusDevices": "Devices", + "distributedUptimeStatusUpt": "UPT", + "distributedUptimeStatusUptBurned": "UPT Burned", + "distributedUptimeStatusUptLogo": "Upt Logo", + "incidentsTableNoIncidents": "No incidents recorded", + "incidentsTablePaginationLabel": "incidents", + "incidentsTableMonitorName": "Monitor Name", + "incidentsTableStatus": "Status", + "incidentsTableDateTime": "Date & Time", + "incidentsTableStatusCode": "Status Code", + "incidentsTableMessage": "Message", + "incidentsOptionsHeader": "Incidents for:", + "incidentsOptionsHeaderFilterBy": "Filter by:", + "incidentsOptionsHeaderFilterAll": "All", + "incidentsOptionsHeaderFilterDown": "Down", + "incidentsOptionsHeaderFilterCannotResolve": "Cannot resolve", + "incidentsOptionsHeaderShow": "Show:", + "incidentsOptionsHeaderLastHour": "Last hour", + "incidentsOptionsHeaderLastDay": "Last day", + "incidentsOptionsHeaderLastWeek": "Last week", + "incidentsOptionsPlaceholderAllServers": "All servers", + "infrastructureCreateYour": "Create your", + "infrastructureCreateGeneralSettingsDescription": "Here you can select the URL of the host, together with the friendly name and authorization secret to connect to the server agent.", + "infrastructureServerRequirement": "The server you are monitoring must be running the", + "infrastructureCustomizeAlerts": "Customize alerts", + "infrastructureAlertNotificationDescription": "Send a notification to user(s) when thresholds exceed a specified percentage.", + "infrastructureCreateMonitor": "Create Infrastructure Monitor", + "infrastructureProtocol": "Protocol", + "infrastructureServerUrlLabel": "Server URL", + "infrastructureDisplayNameLabel": "Display name", + "infrastructureAuthorizationSecretLabel": "Authorization secret", + "gb": "GB", + "mb": "MB", + "mem": "Mem", + "memoryUsage": "Memory usage", + "cpu": "CPU", + "cpuUsage": "CPU usage", + "cpuTemperature": "CPU Temperature", + "diskUsage": "Disk Usage", + "used": "Used", + "total": "Total", + "cores": "Cores", + "frequency": "Frequency", + "status": "Status", + "cpuPhysical": "CPU (Physical)", + "cpuLogical": "CPU (Logical)", + "cpuFrequency": "CPU Frequency", + "avgCpuTemperature": "Average CPU Temperature", + "memory": "Memory", + "disk": "Disk", + "uptime": "Uptime", + "os": "OS", + "host": "Host", + "actions": "Actions", + "integrations": "Integrations", + "integrationsPrism": "Connect Prism to your favorite service.", + "integrationsSlack": "Slack", + "integrationsSlackInfo": "Connect with Slack and see incidents in a channel", + "integrationsDiscord": "Discord", + "integrationsDiscordInfo": "Connect with Discord and view incidents directly in a channel", + "integrationsZapier": "Zapier", + "integrationsZapierInfo": "Send all incidents to Zapier, and then see them everywhere", + "commonSave": "Save", + "createYour": "Create your", + "createMonitor": "Create monitor", + "pause": "Pause", + "resume": "Resume", + "editing": "Editing...", + "url": "URL", + "access": "Access", + "timezone": "Timezone", + "features": "Features", + "administrator": "Administrator?", + "loginHere": "Login here", + "displayName": "Display name", + "urlMonitor": "URL to monitor", + "portToMonitor": "Port to monitor", + "websiteMonitoring": "Website monitoring", + "websiteMonitoringDescription": "Use HTTP(s) to monitor your website or API endpoint.", + "pingMonitoring": "Ping monitoring", + "pingMonitoringDescription": "Check whether your server is available or not.", + "dockerContainerMonitoring": "Docker container monitoring", + "dockerContainerMonitoringDescription": "Check whether your Docker container is running or not.", + "portMonitoring": "Port monitoring", + "portMonitoringDescription": "Check whether your port is open or not.", + "createMaintenanceWindow": "Create maintenance window", + "createMaintenance": "Create maintenance", + "editMaintenance": "Edit maintenance", + "maintenanceWindowName": "Maintenance Window Name", + "friendlyNameInput": "Friendly name", + "friendlyNamePlaceholder": "Maintenance at __ : __ for ___ minutes", + "maintenanceRepeat": "Maintenance Repeat", + "maintenance": "maintenance", + "duration": "Duration", + "addMonitors": "Add monitors", + "window": "window", + "cancel": "Cancel", + "message": "Message", + "low": "low", + "high": "high", + "statusCode": "Status code", + "date&Time": "Date & Time", + "type": "Type", + "statusPageName": "Status page name", + "publicURL": "Public URL", + "repeat": "Repeat", + "edit": "Edit", + "createA": "Create a", + "remove": "Remove", + "maintenanceWindowDescription": "Your pings won't be sent during this time frame", + "startTime": "Start time", + "timeZoneInfo": "All dates and times are in GMT+0 time zone.", + "monitorsToApply": "Monitors to apply maintenance window to", + "nextWindow": "Next window", + "notFoundButton": "Go to the main dashboard", + "pageSpeedConfigureSettingsDescription": "Here you can select the URL of the host, together with the type of monitor.", + "monitorDisplayName": "Monitor display name", + "whenNewIncident": "When there is a new incident,", + "notifySMS": "Notify via SMS (coming soon)", + "notifyEmails": "Also notify via email to multiple addresses (coming soon)", + "seperateEmails": "You can separate multiple emails with a comma", + "checkFrequency": "Check frequency", + "matchMethod": "Match Method", + "expectedValue": "Expected value", + "deleteDialogTitle": "Do you really want to delete this monitor?", + "deleteDialogDescription": "Once deleted, this monitor cannot be retrieved.", + "pageSpeedMonitor": "PageSpeed monitor", + "shown": "Shown", + "ago": "ago", + "companyName": "Company name", + "pageSpeedDetailsPerformanceReport": "Values are estimated and may vary.", + "pageSpeedDetailsPerformanceReportCalculator": "See calculator", + "checkingEvery": "Checking every", + "statusPageCreateSettings": "If your status page is ready, you can mark it as published.", + "basicInformation": "Basic Information", + "statusPageCreateBasicInfoDescription": "Define company name and the subdomain that your status page points to.", + "statusPageCreateSelectTimeZoneDescription": "Select the timezone that your status page will be displayed in.", + "statusPageCreateAppearanceDescription": "Define the default look and feel of your public status page.", + "statusPageCreateSettingsCheckboxLabel": "Published and visible to the public", + "statusPageCreateBasicInfoStatusPageAddress": "Your status page address", + "statusPageCreateTabsContent": "Status page servers", + "statusPageCreateTabsContentDescription": "You can add any number of servers that you monitor to your status page. You can also reorder them for the best viewing experience.", + "statusPageCreateTabsContentFeaturesDescription": "Show more details on the status page", + "showCharts": "Show charts", + "showUptimePercentage": "Show uptime percentage", + "removeLogo": "Remove Logo", + "statusPageStatus": "A public status page is not set up.", + "statusPageStatusContactAdmin": "Please contact to your administrator", + "statusPageStatusNotPublic": "This status page is not public.", + "statusPageStatusNoPage": "There's no status page here.", + "statusPageStatusServiceStatus": "Service status", + "deleteStatusPage": "Do you want to delete this status page?", + "deleteStatusPageConfirm": "Yes, delete status page", + "deleteStatusPageDescription": "Once deleted, your status page cannot be retrieved.", + "uptimeCreate": "The expected value is used to match against response result, and the match determines the status.", + "uptimeCreateJsonPath": "This expression will be evaluated against the reponse JSON data and the result will be used to match against the expected value. See", + "uptimeCreateJsonPathQuery": "for query language documentation.", + "maintenanceTableActionMenuDialogTitle": "Do you really want to remove this maintenance window?", + "infrastructureEditYour": "Edit your", + "infrastructureEditMonitor": "Save Infrastructure Monitor", + "infrastructureMonitorCreated": "Infrastructure monitor created successfully!", + "infrastructureMonitorUpdated": "Infrastructure monitor updated successfully!", + "errorInvalidTypeId": "Invalid notification type provided", + "errorInvalidFieldId": "Invalid field ID provided", + "inviteNoTokenFound": "No invite token found" } diff --git a/src/locales/tr.json b/src/locales/tr.json index 90043e861..3dd4f168a 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -374,5 +374,6 @@ "infrastructureMonitorCreated": "", "infrastructureMonitorUpdated": "", "errorInvalidTypeId": "", - "errorInvalidFieldId": "" + "errorInvalidFieldId": "", + "inviteNoTokenFound": "" } From 30f0f53fcd052f42cf1e0e530dd0c02aae63bbab Mon Sep 17 00:00:00 2001 From: Mend Renovate Date: Fri, 28 Mar 2025 15:58:00 +0000 Subject: [PATCH 40/43] fix(deps): update material-ui monorepo to v7.28.2 --- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03a40368f..cb0cf91fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,8 @@ "@mui/lab": "6.0.0-dev.240424162023-9968b4889d", "@mui/material": "6.4.9", "@mui/x-charts": "^7.5.1", - "@mui/x-data-grid": "7.28.1", - "@mui/x-date-pickers": "7.28.0", + "@mui/x-data-grid": "7.28.2", + "@mui/x-date-pickers": "7.28.2", "@reduxjs/toolkit": "2.6.1", "@solana/wallet-adapter-base": "0.9.23", "@solana/wallet-adapter-material-ui": "0.16.35", @@ -4503,9 +4503,9 @@ } }, "node_modules/@mui/x-data-grid": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.28.1.tgz", - "integrity": "sha512-uDJcjRB7zfRoquZb4G8iw0NWbhziVVPsHisi/EIzvOPHP+a1ZUnG0bLEnY+cy6eEwDrO1dNzYpwGFCcjl8ZKfA==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.28.2.tgz", + "integrity": "sha512-ac/CPZ/zOeHjCvv3LwTUSFy+dofELP/Cl2nXLYWrqVHUgFAkkWxhk85kiI/N1G+Rf4WiKw+oJfeyGe8ZSeY4tg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -4541,9 +4541,9 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.28.0.tgz", - "integrity": "sha512-m1bfkZLOw3cMogeh6q92SjykVmLzfptnz3ZTgAlFKV7UBnVFuGUITvmwbgTZ1Mz3FmLVnGUQYUpZWw0ZnoghNA==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.28.2.tgz", + "integrity": "sha512-py8u0iOShM8m/Ocs/giS8MwTNFn+iRFG6m5L6YJ/JmKzNfQfkVJOjpbdSIWxdCJ8plJn95oar1nKUhDdwn88HA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", diff --git a/package.json b/package.json index c89539231..da40b2cc4 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@fontsource/roboto": "^5.0.13", "@hello-pangea/dnd": "^18.0.0", "@mui/x-charts": "^7.5.1", - "@mui/x-data-grid": "7.28.1", - "@mui/x-date-pickers": "7.28.0", + "@mui/x-data-grid": "7.28.2", + "@mui/x-date-pickers": "7.28.2", "@mui/icons-material": "6.4.9", "@mui/lab": "6.0.0-dev.240424162023-9968b4889d", "@mui/material": "6.4.9", From d58150df6b350f05db529a5d0454c91abd4ecd3b Mon Sep 17 00:00:00 2001 From: mohadeseh safari Date: Fri, 28 Mar 2025 11:59:10 -0400 Subject: [PATCH 41/43] modify --- src/Pages/Uptime/Configure/index.jsx | 2 +- src/Pages/Uptime/Create/index.jsx | 2 +- src/Utils/NetworkService.js | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Pages/Uptime/Configure/index.jsx b/src/Pages/Uptime/Configure/index.jsx index 7434014c2..5b58bf8be 100644 --- a/src/Pages/Uptime/Configure/index.jsx +++ b/src/Pages/Uptime/Configure/index.jsx @@ -479,7 +479,7 @@ const Configure = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value to check in the response. Examples: HTTP status code, text in response body, or specific value from JSON data. + The expected value to check in the response body content. Examples: specific text, HTML elements, or JSON values in the response. diff --git a/src/Pages/Uptime/Create/index.jsx b/src/Pages/Uptime/Create/index.jsx index f7d0f6a4a..2e264086f 100644 --- a/src/Pages/Uptime/Create/index.jsx +++ b/src/Pages/Uptime/Create/index.jsx @@ -465,7 +465,7 @@ const CreateMonitor = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value to check in the response. Examples: HTTP status code, text in response body, or specific value from JSON data. + The expected value to check in the response body content. Examples: specific text, HTML elements, or JSON values in the response. diff --git a/src/Utils/NetworkService.js b/src/Utils/NetworkService.js index ec8a10abf..30f447761 100644 --- a/src/Utils/NetworkService.js +++ b/src/Utils/NetworkService.js @@ -263,6 +263,9 @@ class NetworkService { description: monitor.description, interval: monitor.interval, notifications: monitor.notifications, + matchMethod: monitor.matchMethod, + expectedValue: monitor.expectedValue, + jsonPath: monitor.jsonPath, }; return this.axiosInstance.put(`/monitors/${monitorId}`, updatedFields, { headers: { From 5908b4457b0ea28b895e43c02e727a942bc0fe3e Mon Sep 17 00:00:00 2001 From: mohadeseh safari Date: Fri, 28 Mar 2025 13:06:40 -0400 Subject: [PATCH 42/43] change placeholders --- src/Pages/Uptime/Configure/index.jsx | 12 +++++++----- src/Pages/Uptime/Create/index.jsx | 13 +++++++------ src/Utils/NetworkService.js | 3 --- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Pages/Uptime/Configure/index.jsx b/src/Pages/Uptime/Configure/index.jsx index 5b58bf8be..e88f12441 100644 --- a/src/Pages/Uptime/Configure/index.jsx +++ b/src/Pages/Uptime/Configure/index.jsx @@ -68,9 +68,9 @@ const Configure = () => { ]; const expectedValuePlaceholders = { - regex: "^2[0-9]{2}$", - equal: "200", - include: "success", + regex: "^(success|ok)$", + equal: "success", + include: "ok", }; useEffect(() => { @@ -479,7 +479,8 @@ const Configure = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value to check in the response body content. Examples: specific text, HTML elements, or JSON values in the response. + The expected value is used to match against response result, and + the match determines the status. @@ -499,7 +500,8 @@ const Configure = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - Optional path to extract specific data from JSON responses. Common examples: "status", "data.status", "meta.code". Leave empty to check the entire response. + This expression will be evaluated against the reponse JSON data + and the result will be used to match against the expected value. See  { ]; const expectedValuePlaceholders = { - regex: "^2[0-9]{2}$", - equal: "200", - include: "success", + regex: "^(success|ok)$", + equal: "success", + include: "ok", }; const monitorTypeMaps = { @@ -465,7 +465,8 @@ const CreateMonitor = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - The expected value to check in the response body content. Examples: specific text, HTML elements, or JSON values in the response. + The expected value is used to match against response result, and the + match determines the status. @@ -485,8 +486,8 @@ const CreateMonitor = () => { color={theme.palette.primary.contrastTextTertiary} opacity={0.8} > - Optional path to extract specific data from JSON responses. Common examples: "status", "data.status", "meta.code". Leave empty to check the entire response. - See  + This expression will be evaluated against the reponse JSON data and + the result will be used to match against the expected value. See  Date: Fri, 28 Mar 2025 13:11:48 -0400 Subject: [PATCH 43/43] fix: save monitor configuration changes --- src/Utils/NetworkService.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Utils/NetworkService.js b/src/Utils/NetworkService.js index ec8a10abf..30f447761 100644 --- a/src/Utils/NetworkService.js +++ b/src/Utils/NetworkService.js @@ -263,6 +263,9 @@ class NetworkService { description: monitor.description, interval: monitor.interval, notifications: monitor.notifications, + matchMethod: monitor.matchMethod, + expectedValue: monitor.expectedValue, + jsonPath: monitor.jsonPath, }; return this.axiosInstance.put(`/monitors/${monitorId}`, updatedFields, { headers: {