new notification providers
-
-
- To set up a new notification provider these files need to be modified/created:
- - `server/notification-providers/PROVIDER_NAME.js` is where the heart of the notification provider lives.
- - Both `monitorJSON` and `heartbeatJSON` can be `null` for some events.
- If both are `null`, this is a general testing message, but if just `heartbeatJSON` is `null` this is a certificate expiry.
- - Please wrap the axios call into a
- ```js
- try {
- let result = await axios.post(...);
- if (result.status === ...) ...
- } catch (error) {
- this.throwGeneralAxiosError(error);
- }
- ```
- - `server/notification.js` is where the backend of the notification provider needs to be registered.
- *If you have an idea how we can skip this step, we would love to hear about it ^^*
- - `src/components/NotificationDialog.vue` you need to decide if the provider is a regional or a global one and add it with a name to the respective list
- - `src/components/notifications/PROVIDER_NAME.vue` is where the frontend of each provider lives.
- Please make sure that you have:
- - used `HiddenInput` for secret credentials
- - included all the necessary helptexts/placeholder/.. to make sure the notification provider is simple to setup for new users.
- - include all translations (`{{ $t("Translation key") }}`, [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html)) in `src/lang/en.json` to enable our translators to translate this
- - `src/components/notifications/index.js` is where the frontend of the provider needs to be registered.
- *If you have an idea how we can skip this step, we would love to hear about it ^^*
- Offering notifications is close to the core of what we are as an uptime monitor.
- Therefore, making sure that they work is also really important.
- Because testing notification providers is quite time intensive, we mostly offload this onto the person contributing a notification provider.
-
- To make shure you have tested the notification provider, please include screenshots of the following events in the pull-request description:
- - `UP`/`DOWN`
- - Certificate Expiry via https://expired.badssl.com/
- - Testing (the test button on the notification provider setup page)
-
- Using the following way to format this is encouraged:
- ```md
- | Event | Before | After |
- ------------------
- | `UP` | paste-image-here | paste-image-here |
- | `DOWN` | paste-image-here | paste-image-here |
- | Certificate-expiry | paste-image-here | paste-image-here |
- | Testing | paste-image-here | paste-image-here |
+- Small, Non-Breaking Bug Fixes (click to expand)
+
+
+ If you come across a bug and think you can solve, we appreciate your work.
+ Please make sure that you follow these rules:
+
+ - keep the PR as small as possible, fix only one thing at a time => keeping it
+ reviewable
+ - test that your code does what you claim it does.
+
+ Because maintainer time is precious, junior maintainers may merge
+ uncontroversial PRs in this area.
+
+
+
+
+- Translations / Internationalisation (i18n) (click to expand)
+
+
+ We use weblate to localise this project into many languages. If you are
+ unhappy with a translation this is the best start. On how to translate using
+ weblate, please see
+ [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
+
+ There are two cases in which a change cannot be done in weblate and requires a
+ PR:
+
+ - A text may not be currently localisable. In this case, **adding a new
+ language key** via `$t("languageKey")` might be nessesary
+ - language keys need to be **added to `en.json`** to be visible in weblate. If
+ this has not happened, a PR is appreciated.
+ - **Adding a new language** requires a new file see
+ [these instructions](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md)
+
+ Because maintainer time is precious, junior maintainers may merge
+ uncontroversial PRs in this area.
+
+
+
+
+- New Notification Providers (click to expand)
+
+
+ To set up a new notification provider these files need to be modified/created:
+
+ - `server/notification-providers/PROVIDER_NAME.js` is where the heart of the
+ notification provider lives.
+
+ - Both `monitorJSON` and `heartbeatJSON` can be `null` for some events. If
+
+ both are `null`, this is a general testing message, but if just
+ `heartbeatJSON` is `null` this is a certificate expiry.
+
+ - Please wrap the axios call into a
+
+ ```js
+ try {
+ let result = await axios.post(...);
+ if (result.status === ...) ...
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
```
- Because maintainer time is precious junior maintainers may merge uncontroversial PRs in this area.
+ - `server/notification.js` is where the backend of the notification provider
+ needs to be registered. _If you have an idea how we can skip this step, we
+ would love to hear about it ^^_
+
+ - `src/components/NotificationDialog.vue` you need to decide if the provider
+ is a regional or a global one and add it with a name to the respective list
+
+ - `src/components/notifications/PROVIDER_NAME.vue` is where the frontend of
+ each provider lives. Please make sure that you have:
+
+ - used `HiddenInput` for secret credentials
+ - included all the necessary helptexts/placeholder/.. to make sure the
+
+ notification provider is simple to setup for new users. - include all
+ translations (`{{ $t("Translation key") }}`,
+ [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html))
+ in `src/lang/en.json` to enable our translators to translate this
+
+ - `src/components/notifications/index.js` is where the frontend of the
+ provider needs to be registered. _If you have an idea how we can skip this
+ step, we would love to hear about it ^^_
+
+ Offering notifications is close to the core of what we are as an uptime
+ monitor. Therefore, making sure that they work is also really important.
+ Because testing notification providers is quite time intensive, we mostly
+ offload this onto the person contributing a notification provider.
+
+ To make sure you have tested the notification provider, please include
+ screenshots of the following events in the pull-request description:
+
+ - `UP`/`DOWN`
+ - Certificate Expiry via
+ - Testing (the test button on the notification provider setup page)
+
+
+
+ Using the following way to format this is encouraged:
+
+ ```md
+ | Event | Before | After |
+ | ------------------ | --------------------- | -------------------- |
+ | `UP` |  |  |
+ | `DOWN` |  |  |
+ | Certificate-expiry |  |  |
+ | Testing |  |  |
+ ```
+
+ Because maintainer time is precious, junior maintainers may merge
+ uncontroversial PRs in this area.
+
-- new monitoring types
+
+- New Monitoring Types (click to expand)
To set up a new notification provider these files need to be modified/created:
- - `server/monitor-types/MONITORING_TYPE.js` is the core of each monitor.
- the `async check(...)`-function should:
- - throw an error for each fault that is detected with an actionable error message
- - in the happy-path, you should set `heartbeat.msg` to a successful message and set `heartbeat.status = UP`
- - `server/uptime-kuma-server.js` is where the monitoring backend needs to be registered.
- *If you have an idea how we can skip this step, we would love to hear about it ^^*
+
+ - `server/monitor-types/MONITORING_TYPE.js` is the core of each monitor. the
+ `async check(...)`-function should:
+
+ - throw an error for each fault that is detected with an actionable error
+
+ message - in the happy-path, you should set `heartbeat.msg` to a successful
+ message and set `heartbeat.status = UP`
+
+ - `server/uptime-kuma-server.js` is where the monitoring backend needs to be
+ registered. _If you have an idea how we can skip this step, we would love to
+ hear about it ^^_
+
- `src/pages/EditMonitor.vue` is the shared frontend users interact with.
- Please make sure that you have:
- - used `HiddenInput` for secret credentials
- - included all the necessary helptexts/placeholder/.. to make sure the notification provider is simple to setup for new users.
- - include all translations (`{{ $t("Translation key") }}`, [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html)) in `src/lang/en.json` to enable our translators to translate this
- -
+ Please make sure that you have: - used `HiddenInput` for secret
+ credentials - included all the necessary helptexts/placeholder/.. to make
+ sure the notification provider is simple to setup for new users. - include
+ all translations (`{{ $t("Translation key") }}`,
+ [`i18n-t keypath="Translation key">`](https://vue-i18n.intlify.dev/guide/advanced/component.html))
+ in `src/lang/en.json` to enable our translators to translate this
+ Because maintainer time is precious, junior maintainers may merge
+ uncontroversial PRs in this area.
- Because maintainer time is precious junior maintainers may merge uncontroversial PRs in this area.
-
-
-- new features/ major changes / breaking bugfixes
-
-
- be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**.
- This is especially important for a large pull request or you don't know if it will be merged or not.
-
- Because of the large impact of this work, only senior maintainers may merge PRs in this area.
-The following rules are essential for making your PR mergable:
-- Merging multiple issues by a huge PR is more difficult to review and causes conflicts with other PRs. Please
+- New Features / Major Changes / Breaking Bugfixes (click to expand)
+
+
+ be sure to **create an empty draft pull request or open an issue, so we can
+ have a discussion first**. This is especially important for a large pull
+ request or when you don't know if it will be merged or not.
+
+ Because of the large impact of this work, only senior maintainers may
+ merge PRs in this area.
+
+
+
+
+- Pull Request Guidelines (click to expand)
+
+
+ ## Steps to Submit a Pull Request
+
+ 1. **Fork** the [Uptime-Kuma repository].
+
+ [Uptime-Kuma repository]: https://github.com/louislam/uptime-kuma/
+
+ 2. **Clone** your forked repository to your local machine.
+ 3. **Create a new branch** for your changes (e.g.,
+ `feature/add-new-notification-provider-signal`).
+ 4. **Initiate a discussion before making major changes** by creating an empty
+ commit:
+
+ ```sh
+ git commit -m "" --allow-empty
+ ```
+
+ 5. **Push** your branch to your forked repository.
+ 6. **Open a pull request** using this link: [Compare & Pull Request].
+
+ [Compare & Pull Request]: https://github.com/louislam/uptime-kuma/compare/
+
+ 7. **Select the correct source and target branches**.
+ 8. **Link to related issues** for context.
+ 9. **Provide a clear and concise description** explaining the changes and
+ their purpose.
+
+ - **Type of changes**
+
+ - Bugfix (a non-breaking change that resolves an issue)
+ - New feature (a non-breaking change that adds new functionality)
+ - Breaking change (a fix or feature that alters existing functionality in a
+ way that could cause issues)
+ - User Interface (UI) updates
+ - New Documentation (addition of new documentation)
+ - Documentation Update (modification of existing documentation)
+ - Documentation Update Required (the change requires updates to related
+ documentation)
+ - Other (please specify):
+ - Provide additional details here.
+
+ - **Checklist**
+
+ - My code adheres to the style guidelines of this project.
+ - I ran ESLint and other code linters for modified files.
+ - I have reviewed and tested my code.
+ - I have commented my code, especially in hard-to-understand areas (e.g.,
+ using JSDoc for methods).
+ - My changes generate no new warnings.
+ - My code needed automated testing. I have added them (this is an optional
+ task).
+ - Documentation updates are included (if applicable).
+ - I have considered potential security impacts and mitigated risks.
+ - Dependency updates are listed and explained.
+ - I have read and understood the
+ [Pull Request guidelines](#recommended-pull-request-guideline).
+
+ 10. **When publishing your PR, set it as a** `Draft pull request` **to allow
+ for review and prevent automatic merging.**
+ 11. **Maintainers will assign relevant labels** (e.g., `A:maintenance`,
+ `A:notifications`).
+ 12. **Complete the PR checklist**, ensuring that:
+
+ - Documentation is updated if necessary.
+ - Tests are written or updated.
+ - CI/CD checks pass successfully.
+
+ 13. **Request feedback** from team members to refine your changes before the
+ final review.
+
+ ## When Can You Change the PR Status to "Ready for Review"?
+
+ A PR should remain in **draft status** until all tasks are completed. Only
+ change the status to **Ready for Review** when:
+
+ - You have implemented all planned changes.
+ - You have addressed all feedback.
+ - Your code is fully tested and ready for integration.
+ - You have updated or created the necessary tests.
+ - You have verified that CI/CD checks pass successfully.
+
+
+
+ A **work-in-progress (WIP) PR** must stay in **draft status** until everything
+ is finalized.
+
+ Since maintainer time is valuable, junior maintainers may merge
+ uncontroversial PRs.
+
+
+
+
+## The following rules are essential for making your PR mergable
+
+- Merging multiple issues by a huge PR is more difficult to review and causes
+ conflicts with other PRs. Please
+
- (if possible) **create one PR for one issue** or
- - (if not possible) **explain which issues a PR addresses and why this PR should not be broken apart**
-- Make sure your **PR passes our continuous integration**.
- PRs will not be merged unless all CI-Checks are green.
-- **Breaking changes** (unless for a good reason and discussed beforehand) will not get merged / not get merged quickly.
- Such changes require a major version release.
-- **Test your code** before submitting a PR.
- Buggy PRs will not be merged.
+ - (if not possible) **explain which issues a PR addresses and why this PR
+ should not be broken apart**
+
+- Make sure your **PR passes our continuous integration**. PRs will not be
+ merged unless all CI-Checks are green.
+- **Breaking changes** (unless for a good reason and discussed beforehand) will
+ not get merged / not get merged quickly. Such changes require a major version
+ release.
+- **Test your code** before submitting a PR. Buggy PRs will not be merged.
- Make sure the **UI/UX is close to Uptime Kuma**.
-- **Think about the maintainability**:
- Don't add functionality that is completely **out of scope**.
- Keep in mind that we need to be able to maintain the functionality.
+- **Think about the maintainability**: Don't add functionality that is
+ completely **out of scope**. Keep in mind that we need to be able to maintain
+ the functionality.
- Don't modify or delete existing logic without a valid reason.
- Don't convert existing code into other programming languages for no reason.
-I ([@louislam](https://github.com/louislam)) have the final say.
-If your pull request does not meet my expectations, I will reject it, no matter how much time you spent on it.
-Therefore, it is essential to have a discussion beforehand.
+I ([@louislam](https://github.com/louislam)) have the final say. If your pull
+request does not meet my expectations, I will reject it, no matter how much time
+you spent on it. Therefore, it is essential to have a discussion beforehand.
-I will assign your pull request to a [milestone](https://github.com/louislam/uptime-kuma/milestones), if I plan to review and merge it.
+I will assign your pull request to a [milestone], if I plan to review and merge
+it.
-Please don't rush or ask for an ETA.
-We have to understand the pull request, make sure it has no breaking changes and stick to the vision of this project, especially for large pull requests.
+[milestone]: https://github.com/louislam/uptime-kuma/milestones
+Please don't rush or ask for an ETA. We have to understand the pull request,
+make sure it has no breaking changes and stick to the vision of this project,
+especially for large pull requests.
-## I'd like to work on an issue. How do I do that?
+## I'd Like to Work on an Issue. How Do I Do That?
-We have found that assigning people to issues is management-overhead that we don't need.
-A short comment that you want to try your hand at this issue is appreciated to save other devs time.
-If you come across any problem during development, feel free to leave a comment with what you are stuck on.
+We have found that assigning people to issues is unnecessary management
+overhead. Instead, a short comment stating that you want to work on an issue is
+appreciated, as it saves time for other developers. If you encounter any
+problems during development, feel free to leave a comment describing what you
+are stuck on.
### Recommended Pull Request Guideline
-Before diving deep into coding, having a discussion first by creating an empty pull request for discussion is preferred.
-The rationale behind this is that we can align the direction and scope of the feature to eliminate any conflicts with existing and planned work, and can help by pointing out any potential pitfalls.
+Before jumping into coding, it's recommended to initiate a discussion by
+creating an empty pull request. This approach allows us to align on the
+direction and scope of the feature, ensuring it doesn't conflict with existing
+or planned work. It also provides an opportunity to identify potential pitfalls
+early on, helping to avoid issues down the line.
-1. Fork the project
-2. Clone your fork repo to local
-3. Create a new branch
-4. Create an empty commit: `git commit -m "" --allow-empty`
-5. Push to your fork repo
-6. Prepare a pull request: https://github.com/louislam/uptime-kuma/compare
-7. Write a proper description. You can mention @louislam in it, so @louislam will get the notification.
-8. Create your pull request as a Draft
-9. Wait for the discussion
+1. **Fork** the [Uptime-Kuma repository].
+2. **Clone** your forked repository to your local machine.
+3. **Create a new branch** for your changes (e.g.,
+ `feature/add-new-notification-provider-signal`).
+4. **Initiate a discussion before making major changes** by creating an empty
+ commit:
+
+ ```sh
+ git commit -m "" --allow-empty
+ ```
+
+5. **Push** your branch to your forked repository.
+6. **Open a pull request** using this link: [Compare & Pull Request].
+7. **Select the correct source and target branches**.
+8. **Link to related issues** for context.
+9. **Provide a clear and concise description** explaining the changes and their
+ purpose.
+
+ - **Type of changes**
+
+ - Bugfix (a non-breaking change that resolves an issue)
+ - New feature (a non-breaking change that adds new functionality)
+ - Breaking change (a fix or feature that alters existing functionality in a
+ way that could cause issues)
+ - User Interface (UI) updates
+ - New Documentation (addition of new documentation)
+ - Documentation Update (modification of existing documentation)
+ - Documentation Update Required (the change requires updates to related
+ documentation)
+ - Other (please specify):
+ - Provide additional details here.
+
+ - **Checklist**
+
+ - My code adheres to the style guidelines of this project.
+ - I ran ESLint and other code linters for modified files.
+ - I have reviewed and tested my code.
+ - I have commented my code, especially in hard-to-understand areas (e.g.,
+ using JSDoc for methods).
+ - My changes generate no new warnings.
+ - My code needed automated testing. I have added them (this is an optional
+ task).
+ - Documentation updates are included (if applicable).
+ - I have considered potential security impacts and mitigated risks.
+ - Dependency updates are listed and explained.
+ - I have read and understood the
+ [Pull Request guidelines](#recommended-pull-request-guideline).
+
+10. **When publishing your PR, set it as a** `Draft pull request` **to allow for
+ review and prevent automatic merging.**
+11. **Maintainers will assign relevant labels** (e.g., `A:maintenance`,
+ `A:notifications`).
+12. **Complete the PR checklist**, ensuring that:
+
+ - Documentation is updated if necessary.
+ - Tests are written or updated.
+ - CI/CD checks pass successfully.
+
+13. **Request feedback** from team members to refine your changes before the
+ final review.
+
+### When Can You Change the PR Status to "Ready for Review"?
+
+A PR should remain in **draft status** until all tasks are completed. Only
+change the status to **Ready for Review** when:
+
+- You have implemented all planned changes.
+- You have addressed all feedback.
+- Your code is fully tested and ready for integration.
+- You have updated or created the necessary tests.
+- You have verified that CI/CD checks pass successfully.
+
+A **work-in-progress (WIP) PR** must stay in **draft status** until everything
+is finalized.
## Project Styles
-I personally do not like something that requires so many configurations before you can finally start the app.
-The goal is to make the Uptime Kuma installation as easy as installing a mobile app.
+I personally do not like something that requires a lot of configuration before
+you can finally start the app. The goal is to make the Uptime Kuma installation
+as easy as installing a mobile app.
- Easy to install for non-Docker users
+
- no native build dependency is needed (for `x86_64`/`armv7`/`arm64`)
- no extra configuration and
- no extra effort required to get it running
+
- Single container for Docker users
+
- no complex docker-compose file
- mapping the volume and exposing the port should be the only requirements
-- Settings should be configurable in the frontend. Environment variables are discouraged, unless it is related to startup such as `DATA_DIR`
+
+- Settings should be configurable in the frontend. Environment variables are
+ discouraged, unless it is related to startup such as `DATA_DIR`
- Easy to use
- The web UI styling should be consistent and nice
@@ -233,19 +479,18 @@ The goal is to make the Uptime Kuma installation as easy as installing a mobile
- [`Node.js`](https://nodejs.org/) >= 18
- [`npm`](https://www.npmjs.com/) >= 9.3
- [`git`](https://git-scm.com/)
-- IDE that supports [`ESLint`](https://eslint.org/) and EditorConfig (I am using [`IntelliJ IDEA`](https://www.jetbrains.com/idea/))
-- A SQLite GUI tool (f.ex. [`SQLite Expert Personal`](https://www.sqliteexpert.com/download.html) or [`DBeaver Community`](https://dbeaver.io/download/))
-
-### GitHub Codespaces
-
-If you don't want to setup an local environment, you can now develop on GitHub Codespaces, read more:
-
-https://github.com/louislam/uptime-kuma/tree/master/.devcontainer
+- IDE that supports [`ESLint`](https://eslint.org/) and EditorConfig (I am using
+ [`IntelliJ IDEA`](https://www.jetbrains.com/idea/))
+- A SQLite GUI tool (f.ex.
+ [`SQLite Expert Personal`](https://www.sqliteexpert.com/download.html) or
+ [`DBeaver Community`](https://dbeaver.io/download/))
## Git Branches
-- `master`: 2.X.X development. If you want to add a new feature, your pull request should base on this.
-- `1.23.X`: 1.23.X development. If you want to fix a bug for v1 and v2, your pull request should base on this.
+- `master`: 2.X.X development. If you want to add a new feature, your pull
+ request should base on this.
+- `1.23.X`: 1.23.X development. If you want to fix a bug for v1 and v2, your
+ pull request should base on this.
- All other branches are unused, outdated or for dev.
## Install Dependencies for Development
@@ -266,7 +511,8 @@ Port `3000` and port `3001` will be used.
npm run dev
```
-But sometimes, you would like to restart the server, but not the frontend, you can run these commands in two terminals:
+But sometimes you may want to restart the server without restarting the
+frontend. In that case, you can run these commands in two terminals:
```bash
npm run start-frontend-dev
@@ -277,9 +523,9 @@ npm run start-server-dev
It binds to `0.0.0.0:3001` by default.
-The backend is an `express.js` server with `socket.io` integrated.
-It uses `socket.io` to communicate with clients, and most server logic is encapsulated in the `socket.io` handlers.
-`express.js` is also used to serve:
+The backend is an `express.js` server with `socket.io` integrated. It uses
+`socket.io` to communicate with clients, and most server logic is encapsulated
+in the `socket.io` handlers. `express.js` is also used to serve:
- as an entry point for redirecting to a status page or the dashboard
- the frontend built files (`index.html`, `*.js`, `*.css`, etc.)
@@ -295,11 +541,13 @@ It uses `socket.io` to communicate with clients, and most server logic is encaps
- `routers/` (Express Routers)
- `socket-handler/` (Socket.io Handlers)
- `server.js` (Server entry point)
-- `uptime-kuma-server.js` (UptimeKumaServer class, main logic should be here, but some still in `server.js`)
+- `uptime-kuma-server.js` (UptimeKumaServer class, main logic should be here,
+ but some still in `server.js`)
## Frontend Dev Server
-It binds to `0.0.0.0:3000` by default. The frontend dev server is used for development only.
+It binds to `0.0.0.0:3000` by default. The frontend dev server is used for
+development only.
For production, it is not used. It will be compiled to `dist` directory instead.
@@ -313,17 +561,19 @@ npm run build
### Frontend Details
-Uptime Kuma Frontend is a single page application (SPA). Most paths are handled by Vue Router.
+Uptime Kuma Frontend is a single page application (SPA). Most paths are handled
+by Vue Router.
The router is in `src/router.js`
-As you can see, most data in the frontend is stored at the root level, even though you changed the current router to any other pages.
+As you can see, most data in the frontend is stored at the root level, even
+though you changed the current router to any other pages.
The data and socket logic are in `src/mixins/socket.js`.
## Database Migration
-See: https://github.com/louislam/uptime-kuma/tree/master/db/knex_migrations
+See:
## Unit Test
@@ -334,11 +584,12 @@ npm test
## Dependencies
-Both frontend and backend share the same `package.json`.
-However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into `dist` files. So:
+Both frontend and backend share the same `package.json`. However, the frontend
+dependencies are eventually not used in the production environment, because it
+is usually also baked into `dist` files. So:
- Frontend dependencies = "devDependencies"
- - Examples: `vue`, `chart.js`
+ - Examples: - `vue`, `chart.js`
- Backend dependencies = "dependencies"
- Examples: `socket.io`, `sqlite3`
- Development dependencies = "devDependencies"
@@ -346,31 +597,41 @@ However, the frontend dependencies are eventually not used in the production env
### Update Dependencies
-Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely, from now on, it should update the patch release version only.
+Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely,
+from now on, it should update the patch release version only.
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
-If for security / bug / other reasons, a library must be updated, breaking changes need to be checked by the person proposing the change.
+If for security / bug / other reasons, a library must be updated, breaking
+changes need to be checked by the person proposing the change.
## Translations
-Please add **all** the strings which are translatable to `src/lang/en.json` (if translation keys are omitted, they can not be translated.)
+Please add **all** the strings which are translatable to `src/lang/en.json` (if
+translation keys are omitted, they can not be translated.)
-**Don't include any other languages in your initial pull request** (even if this is your mother tongue), to avoid merge-conflicts between weblate and `master`.
-The translations can then (after merging a PR into `master`) be translated by awesome people donating their language skills.
+**Don't include any other languages in your initial pull request** (even if this
+is your mother tongue), to avoid merge-conflicts between weblate and `master`.
+The translations can then (after merging a PR into `master`) be translated by
+awesome people donating their language skills.
-If you want to help by translating Uptime Kuma into your language, please visit the [instructions on how to translate using weblate](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
+If you want to help by translating Uptime Kuma into your language, please visit
+the [instructions on how to translate using weblate].
+
+[instructions on how to translate using weblate]:
+ https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md
## Spelling & Grammar
-Feel free to correct the grammar in the documentation or code.
-My mother language is not English and my grammar is not that great.
+Feel free to correct the grammar in the documentation or code. My mother
+language is not English and my grammar is not that great.
## Wiki
-Since there is no way to make a pull request to the wiki, I have set up another repo to do that.
+Since there is no way to make a pull request to the wiki, I have set up another
+repo to do that.
-https://github.com/louislam/uptime-kuma-wiki
+
## Docker
@@ -411,15 +672,15 @@ https://github.com/louislam/uptime-kuma-wiki
## Maintainer
Check the latest issues and pull requests:
-https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
+
### What is a maintainer and what are their roles?
-This project has multiple maintainers which specialise in different areas.
+This project has multiple maintainers who specialise in different areas.
Currently, there are 3 maintainers:
| Person | Role | Main Area |
-|-------------------|-------------------|------------------|
+| ----------------- | ----------------- | ---------------- |
| `@louislam` | senior maintainer | major features |
| `@chakflying` | junior maintainer | fixing bugs |
| `@commanderstorm` | junior maintainer | issue-management |
@@ -427,39 +688,49 @@ Currently, there are 3 maintainers:
### Procedures
We have a few procedures we follow. These are documented here:
-- Set up a Docker Builder
+
+- Set up a Docker Builder (click to expand)
- amd64, armv7 using local.
- - arm64 using remote arm64 cpu, as the emulator is too slow and can no longer pass the `npm ci` command.
- 1. Add the public key to the remote server.
- 2. Add the remote context. The remote machine must be arm64 and installed Docker CE.
- ```
- docker context create oracle-arm64-jp --docker "host=ssh://root@100.107.174.88"
- ```
- 3. Create a new builder.
- ```
- docker buildx create --name kuma-builder --platform linux/amd64,linux/arm/v7
- docker buildx use kuma-builder
- docker buildx inspect --bootstrap
- ```
- 4. Append the remote context to the builder.
- ```
- docker buildx create --append --name kuma-builder --platform linux/arm64 oracle-arm64-jp
- ```
- 5. Verify the builder and check if the builder is using `kuma-builder`.
- ```
- docker buildx inspect kuma-builder
- docker buildx ls
- ```
+ - arm64 using remote arm64 cpu, as the emulator is too slow and can no longer
+ pass the `npm ci` command.
+
+ 1. Add the public key to the remote server.
+ 2. Add the remote context. The remote machine must be arm64 and installed
+ Docker CE.
+
+ ```bash
+ docker context create oracle-arm64-jp --docker "host=ssh://root@100.107.174.88"
+ ```
+
+ 3. Create a new builder.
+
+ ```bash
+ docker buildx create --name kuma-builder --platform linux/amd64,linux/arm/v7
+ docker buildx use kuma-builder
+ docker buildx inspect --bootstrap
+ ```
+
+ 4. Append the remote context to the builder.
+
+ ```bash
+ docker buildx create --append --name kuma-builder --platform linux/arm64 oracle-arm64-jp
+ ```
+
+ 5. Verify the builder and check if the builder is using `kuma-builder`.
+ `docker buildx inspect kuma-builder docker buildx ls`
+
-- Release
+
+- Release (click to expand)
1. Draft a release note
2. Make sure the repo is cleared
- 3. If the healthcheck is updated, remember to re-compile it: `npm run build-docker-builder-go`
+ 3. If the healthcheck is updated, remember to re-compile it:
+ `npm run build-docker-builder-go`
4. `npm run release-final` with env vars: `VERSION` and `GITHUB_TOKEN`
5. Wait until the `Press any key to continue`
6. `git push`
@@ -469,13 +740,16 @@ We have a few procedures we follow. These are documented here:
These Items need to be checked:
- - [ ] Check all tags is fine on https://hub.docker.com/r/louislam/uptime-kuma/tags
- - [ ] Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 / armv7)
+ - [ ] Check all tags is fine on
+
+ - [ ] Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 /
+ armv7)
- [ ] Try clean installation with Node.js
-
+
-- Release Beta
+
+- Release Beta (click to expand)
1. Draft a release note, check `This is a pre-release`
@@ -484,35 +758,37 @@ We have a few procedures we follow. These are documented here:
4. Wait until the `Press any key to continue`
5. Publish the release note as `1.X.X-beta.X`
6. Press any key to continue
-
+
-- Release Wiki
+
+- Release Wiki (click to expand)
**Setup Repo**
-
+
```bash
git clone https://github.com/louislam/uptime-kuma-wiki.git
cd uptime-kuma-wiki
git remote add production https://github.com/louislam/uptime-kuma.wiki.git
```
-
+
**Push to Production Wiki**
-
+
```bash
git pull
git push production master
```
-
+
-- Change the base of a pull request such as master
to 1.23.X
+
+- Change the base of a pull request such as master
to 1.23.X
(click to expand)
-
+
```bash
git rebase --onto
```
-
+
diff --git a/README.md b/README.md
index 1b4c885d0..34e34020f 100644
--- a/README.md
+++ b/README.md
@@ -62,6 +62,7 @@ Requirements:
- Platform
- ✅ Major Linux distros such as Debian, Ubuntu, CentOS, Fedora and ArchLinux etc.
- ✅ Windows 10 (x64), Windows Server 2012 R2 (x64) or higher
+ - ❌ FreeBSD / OpenBSD / NetBSD
- ❌ Replit / Heroku
- [Node.js](https://nodejs.org/en/download/) 18 / 20.4
- [npm](https://docs.npmjs.com/cli/) 9
diff --git a/SECURITY.md b/SECURITY.md
index 72b4fc0f1..a7de9e997 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -2,29 +2,37 @@
## Reporting a Vulnerability
-1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
-2. Please also create an empty security issue to alert me, as GitHub Advisories do not send a notification, I probably will miss it without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md
+1. Please report security issues to
+ .
+2. Please also create an empty security issue to alert me, as GitHub Advisories
+ do not send a notification, I probably will miss it without this.
+
-Do not use the public issue tracker or discuss it in public as it will cause more damage.
+Do not use the public issue tracker or discuss it in public as it will cause
+more damage.
## Do you accept other 3rd-party bug bounty platforms?
-At this moment, I DO NOT accept other bug bounty platforms, because I am not familiar with these platforms and someone has tried to send a phishing link to me by doing this already. To minimize my own risk, please report through GitHub Advisories only. I will ignore all 3rd-party bug bounty platforms emails.
+At this moment, I DO NOT accept other bug bounty platforms, because I am not
+familiar with these platforms and someone has tried to send a phishing link to
+me by doing this already. To minimize my own risk, please report through GitHub
+Advisories only. I will ignore all 3rd-party bug bounty platforms emails.
## Supported Versions
### Uptime Kuma Versions
-You should use or upgrade to the latest version of Uptime Kuma. All `1.X.X` versions are upgradable to the latest version.
+You should use or upgrade to the latest version of Uptime Kuma. All `1.X.X`
+versions are upgradable to the latest version.
### Upgradable Docker Tags
-| Tag | Supported |
-|-|-|
-| 1 | :white_check_mark: |
-| 1-debian | :white_check_mark: |
-| latest | :white_check_mark: |
-| debian | :white_check_mark: |
-| 1-alpine | ⚠️ Deprecated |
-| alpine | ⚠️ Deprecated |
-| All other tags | ❌ |
+| Tag | Supported |
+| -------------- | ------------------ |
+| 1 | :white_check_mark: |
+| 1-debian | :white_check_mark: |
+| latest | :white_check_mark: |
+| debian | :white_check_mark: |
+| 1-alpine | ⚠️ Deprecated |
+| alpine | ⚠️ Deprecated |
+| All other tags | ❌ |
diff --git a/config/playwright.config.js b/config/playwright.config.js
index 94239d2dd..5c574eecc 100644
--- a/config/playwright.config.js
+++ b/config/playwright.config.js
@@ -1,11 +1,11 @@
import { defineConfig, devices } from "@playwright/test";
const port = 30001;
-const url = `http://localhost:${port}`;
+export const url = `http://localhost:${port}`;
export default defineConfig({
// Look for test files in the "tests" directory, relative to this configuration file.
- testDir: "../test/e2e",
+ testDir: "../test/e2e/specs",
outputDir: "../private/playwright-test-results",
fullyParallel: false,
locale: "en-US",
@@ -40,9 +40,15 @@ export default defineConfig({
// Configure projects for major browsers.
projects: [
{
- name: "chromium",
+ name: "run-once setup",
+ testMatch: /setup-process\.once\.js/,
use: { ...devices["Desktop Chrome"] },
},
+ {
+ name: "specs",
+ use: { ...devices["Desktop Chrome"] },
+ dependencies: [ "run-once setup" ],
+ },
/*
{
name: "firefox",
@@ -52,7 +58,7 @@ export default defineConfig({
// Run your local dev server before starting the tests.
webServer: {
- command: `node extra/remove-playwright-test-data.js && node server/server.js --port=${port} --data-dir=./data/playwright-test`,
+ command: `node extra/remove-playwright-test-data.js && cross-env NODE_ENV=development node server/server.js --port=${port} --data-dir=./data/playwright-test`,
url,
reuseExistingServer: false,
cwd: "../",
diff --git a/config/vite.config.js b/config/vite.config.js
index 7b30df945..7f2dfb6ff 100644
--- a/config/vite.config.js
+++ b/config/vite.config.js
@@ -16,9 +16,7 @@ export default defineConfig({
},
define: {
"FRONTEND_VERSION": JSON.stringify(process.env.npm_package_version),
- "DEVCONTAINER": JSON.stringify(process.env.DEVCONTAINER),
- "GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN": JSON.stringify(process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN),
- "CODESPACE_NAME": JSON.stringify(process.env.CODESPACE_NAME),
+ "process.env": {},
},
plugins: [
vue(),
diff --git a/db/knex_migrations/2024-08-24-000-add-cache-bust.js b/db/knex_migrations/2024-08-24-000-add-cache-bust.js
new file mode 100644
index 000000000..3644377c4
--- /dev/null
+++ b/db/knex_migrations/2024-08-24-000-add-cache-bust.js
@@ -0,0 +1,13 @@
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.boolean("cache_bust").notNullable().defaultTo(false);
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.dropColumn("cache_bust");
+ });
+};
diff --git a/db/knex_migrations/2024-08-24-0000-conditions.js b/db/knex_migrations/2024-08-24-0000-conditions.js
new file mode 100644
index 000000000..96352fdc4
--- /dev/null
+++ b/db/knex_migrations/2024-08-24-0000-conditions.js
@@ -0,0 +1,12 @@
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.text("conditions").notNullable().defaultTo("[]");
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("monitor", function (table) {
+ table.dropColumn("conditions");
+ });
+};
diff --git a/db/knex_migrations/2024-10-1315-rabbitmq-monitor.js b/db/knex_migrations/2024-10-1315-rabbitmq-monitor.js
new file mode 100644
index 000000000..6a17f3366
--- /dev/null
+++ b/db/knex_migrations/2024-10-1315-rabbitmq-monitor.js
@@ -0,0 +1,17 @@
+exports.up = function (knex) {
+ return knex.schema.alterTable("monitor", function (table) {
+ table.text("rabbitmq_nodes");
+ table.string("rabbitmq_username");
+ table.string("rabbitmq_password");
+ });
+
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("monitor", function (table) {
+ table.dropColumn("rabbitmq_nodes");
+ table.dropColumn("rabbitmq_username");
+ table.dropColumn("rabbitmq_password");
+ });
+
+};
diff --git a/db/knex_migrations/2024-10-31-0000-fix-snmp-monitor.js b/db/knex_migrations/2024-10-31-0000-fix-snmp-monitor.js
new file mode 100644
index 000000000..0a605d38f
--- /dev/null
+++ b/db/knex_migrations/2024-10-31-0000-fix-snmp-monitor.js
@@ -0,0 +1,7 @@
+exports.up = function (knex) {
+ return knex("monitor").whereNull("json_path_operator").update("json_path_operator", "==");
+};
+exports.down = function (knex) {
+ // changing the json_path_operator back to null for all "==" is not possible anymore
+ // we have lost the context which fields have been set explicitely in >= v2.0 and which would need to be reverted
+};
diff --git a/db/knex_migrations/2024-11-27-1927-fix-info-json-data-type.js b/db/knex_migrations/2024-11-27-1927-fix-info-json-data-type.js
new file mode 100644
index 000000000..0f3f75e5b
--- /dev/null
+++ b/db/knex_migrations/2024-11-27-1927-fix-info-json-data-type.js
@@ -0,0 +1,13 @@
+// Update info_json column to LONGTEXT mainly for MariaDB
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("monitor_tls_info", function (table) {
+ table.text("info_json", "longtext").alter();
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("monitor_tls_info", function (table) {
+ table.text("info_json", "text").alter();
+ });
+};
diff --git a/db/knex_migrations/2025-01-01-0000-add-smtp.js b/db/knex_migrations/2025-01-01-0000-add-smtp.js
new file mode 100644
index 000000000..00d4835f5
--- /dev/null
+++ b/db/knex_migrations/2025-01-01-0000-add-smtp.js
@@ -0,0 +1,12 @@
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.string("smtp_security").defaultTo(null);
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("monitor", function (table) {
+ table.dropColumn("smtp_security");
+ });
+};
diff --git a/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js b/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js
new file mode 100644
index 000000000..e8bd03e53
--- /dev/null
+++ b/db/knex_migrations/2025-03-04-0000-ping-advanced-options.js
@@ -0,0 +1,24 @@
+/* SQL:
+ALTER TABLE monitor ADD ping_count INTEGER default 1 not null;
+ALTER TABLE monitor ADD ping_numeric BOOLEAN default true not null;
+ALTER TABLE monitor ADD ping_per_request_timeout INTEGER default 2 not null;
+*/
+exports.up = function (knex) {
+ // Add new columns to table monitor
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.integer("ping_count").defaultTo(1).notNullable();
+ table.boolean("ping_numeric").defaultTo(true).notNullable();
+ table.integer("ping_per_request_timeout").defaultTo(2).notNullable();
+ });
+
+};
+
+exports.down = function (knex) {
+ return knex.schema
+ .alterTable("monitor", function (table) {
+ table.dropColumn("ping_count");
+ table.dropColumn("ping_numeric");
+ table.dropColumn("ping_per_request_timeout");
+ });
+};
diff --git a/db/knex_migrations/2025-03-25-0127-fix-5721.js b/db/knex_migrations/2025-03-25-0127-fix-5721.js
new file mode 100644
index 000000000..d94282b13
--- /dev/null
+++ b/db/knex_migrations/2025-03-25-0127-fix-5721.js
@@ -0,0 +1,13 @@
+// Fix #5721: Change proxy port column type to integer to support larger port numbers
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("proxy", function (table) {
+ table.integer("port").alter();
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("proxy", function (table) {
+ table.smallint("port").alter();
+ });
+};
diff --git a/db/knex_migrations/2025-05-09-0000-add-custom-url.js b/db/knex_migrations/2025-05-09-0000-add-custom-url.js
new file mode 100644
index 000000000..b3465c87f
--- /dev/null
+++ b/db/knex_migrations/2025-05-09-0000-add-custom-url.js
@@ -0,0 +1,13 @@
+// Add column custom_url to monitor_group table
+exports.up = function (knex) {
+ return knex.schema
+ .alterTable("monitor_group", function (table) {
+ table.text("custom_url", "text");
+ });
+};
+
+exports.down = function (knex) {
+ return knex.schema.alterTable("monitor_group", function (table) {
+ table.dropColumn("custom_url");
+ });
+};
diff --git a/docker/debian-base.dockerfile b/docker/debian-base.dockerfile
index 805504127..a17174371 100644
--- a/docker/debian-base.dockerfile
+++ b/docker/debian-base.dockerfile
@@ -1,3 +1,13 @@
+# Download Apprise deb package
+FROM node:20-bookworm-slim AS download-apprise
+WORKDIR /app
+COPY ./extra/download-apprise.mjs ./download-apprise.mjs
+RUN apt update && \
+ apt --yes --no-install-recommends install curl && \
+ npm install cheerio semver && \
+ node ./download-apprise.mjs
+
+# Base Image (Slim)
# If the image changed, the second stage image should be changed too
FROM node:20-bookworm-slim AS base2-slim
ARG TARGETPLATFORM
@@ -27,8 +37,9 @@ RUN apt update && \
# apprise = for notifications (Install from the deb package, as the stable one is too old) (workaround for #4867)
# Switching to testing repo is no longer working, as the testing repo is not bookworm anymore.
# python3-paho-mqtt (#4859)
-RUN curl http://ftp.debian.org/debian/pool/main/a/apprise/apprise_1.8.0-2_all.deb --output apprise.deb && \
- apt update && \
+# TODO: no idea how to delete the deb file after installation as it becomes a layer already
+COPY --from=download-apprise /app/apprise.deb ./apprise.deb
+RUN apt update && \
apt --yes --no-install-recommends install ./apprise.deb python3-paho-mqtt && \
rm -rf /var/lib/apt/lists/* && \
rm -f apprise.deb && \
diff --git a/docker/dockerfile b/docker/dockerfile
index 572c732e0..d55f94f61 100644
--- a/docker/dockerfile
+++ b/docker/dockerfile
@@ -27,7 +27,6 @@ RUN mkdir ./data
# ⭐ Main Image
############################################
FROM $BASE_IMAGE AS release
-USER node
WORKDIR /app
LABEL org.opencontainers.image.source="https://github.com/louislam/uptime-kuma"
@@ -46,6 +45,7 @@ CMD ["node", "server/server.js"]
# Rootless Image
############################################
FROM release AS rootless
+USER node
############################################
# Mark as Nightly
diff --git a/extra/beta/update-version.js b/extra/beta/update-version.js
index d8e626d03..9ab00155b 100644
--- a/extra/beta/update-version.js
+++ b/extra/beta/update-version.js
@@ -5,7 +5,7 @@ const util = require("../../src/util");
util.polyfill();
-const version = process.env.VERSION;
+const version = process.env.RELEASE_BETA_VERSION;
console.log("Beta Version: " + version);
diff --git a/extra/check-knex-filenames.mjs b/extra/check-knex-filenames.mjs
new file mode 100644
index 000000000..4911fc562
--- /dev/null
+++ b/extra/check-knex-filenames.mjs
@@ -0,0 +1,72 @@
+import fs from "fs";
+const dir = "./db/knex_migrations";
+
+// Get the file list (ending with .js) from the directory
+const files = fs.readdirSync(dir).filter((file) => file !== "README.md");
+
+// They are wrong, but they had been merged, so allowed.
+const exceptionList = [
+ "2024-08-24-000-add-cache-bust.js",
+ "2024-10-1315-rabbitmq-monitor.js",
+];
+
+// Correct format: YYYY-MM-DD-HHmm-description.js
+
+for (const file of files) {
+ if (exceptionList.includes(file)) {
+ continue;
+ }
+
+ // Check ending with .js
+ if (!file.endsWith(".js")) {
+ console.error(`It should end with .js: ${file}`);
+ process.exit(1);
+ }
+
+ const parts = file.split("-");
+
+ // Should be at least 5 parts
+ if (parts.length < 5) {
+ console.error(`Invalid format: ${file}`);
+ process.exit(1);
+ }
+
+ // First part should be a year >= 2024
+ const year = parseInt(parts[0], 10);
+ if (isNaN(year) || year < 2023) {
+ console.error(`Invalid year: ${file}`);
+ process.exit(1);
+ }
+
+ // Second part should be a month
+ const month = parseInt(parts[1], 10);
+ if (isNaN(month) || month < 1 || month > 12) {
+ console.error(`Invalid month: ${file}`);
+ process.exit(1);
+ }
+
+ // Third part should be a day
+ const day = parseInt(parts[2], 10);
+ if (isNaN(day) || day < 1 || day > 31) {
+ console.error(`Invalid day: ${file}`);
+ process.exit(1);
+ }
+
+ // Fourth part should be HHmm
+ const time = parts[3];
+
+ // Check length is 4
+ if (time.length !== 4) {
+ console.error(`Invalid time: ${file}`);
+ process.exit(1);
+ }
+
+ const hour = parseInt(time.substring(0, 2), 10);
+ const minute = parseInt(time.substring(2), 10);
+ if (isNaN(hour) || hour < 0 || hour > 23 || isNaN(minute) || minute < 0 || minute > 59) {
+ console.error(`Invalid time: ${file}`);
+ process.exit(1);
+ }
+}
+
+console.log("All knex filenames are correct.");
diff --git a/extra/check-lang-json.js b/extra/check-lang-json.js
new file mode 100644
index 000000000..dfda34892
--- /dev/null
+++ b/extra/check-lang-json.js
@@ -0,0 +1,27 @@
+// For #5231
+
+const fs = require("fs");
+
+let path = "./src/lang";
+
+// list directories in the lang directory
+let jsonFileList = fs.readdirSync(path);
+
+for (let jsonFile of jsonFileList) {
+ if (!jsonFile.endsWith(".json")) {
+ continue;
+ }
+
+ let jsonPath = path + "/" + jsonFile;
+ let originalContent = fs.readFileSync(jsonPath, "utf8");
+ let langData = JSON.parse(originalContent);
+
+ let formattedContent = JSON.stringify(langData, null, 4) + "\n";
+
+ if (originalContent !== formattedContent) {
+ console.error(`File ${jsonFile} is not formatted correctly.`);
+ process.exit(1);
+ }
+}
+
+console.log("All lang json files are formatted correctly.");
diff --git a/extra/download-apprise.mjs b/extra/download-apprise.mjs
new file mode 100644
index 000000000..3d31f7cf4
--- /dev/null
+++ b/extra/download-apprise.mjs
@@ -0,0 +1,57 @@
+// Go to http://ftp.debian.org/debian/pool/main/a/apprise/ using fetch api, where it is a apache directory listing page
+// Use cheerio to parse the html and get the latest version of Apprise
+// call curl to download the latest version of Apprise
+// Target file: the latest version of Apprise, which the format is apprise_{VERSION}_all.deb
+
+import * as cheerio from "cheerio";
+import semver from "semver";
+import * as childProcess from "child_process";
+
+const baseURL = "http://ftp.debian.org/debian/pool/main/a/apprise/";
+const response = await fetch(baseURL);
+
+if (!response.ok) {
+ throw new Error("Failed to fetch page of Apprise Debian repository.");
+}
+
+const html = await response.text();
+
+const $ = cheerio.load(html);
+
+// Get all the links in the page
+const linkElements = $("a");
+
+// Filter the links which match apprise_{VERSION}_all.deb
+const links = [];
+const pattern = /apprise_(.*?)_all.deb/;
+
+for (let i = 0; i < linkElements.length; i++) {
+ const link = linkElements[i];
+ if (link.attribs.href.match(pattern) && !link.attribs.href.includes("~")) {
+ links.push({
+ filename: link.attribs.href,
+ version: link.attribs.href.match(pattern)[1],
+ });
+ }
+}
+
+console.log(links);
+
+// semver compare and download
+let latestLink = {
+ filename: "",
+ version: "0.0.0",
+};
+
+for (const link of links) {
+ if (semver.gt(link.version, latestLink.version)) {
+ latestLink = link;
+ }
+}
+
+const downloadURL = baseURL + latestLink.filename;
+console.log(`Downloading ${downloadURL}...`);
+let result = childProcess.spawnSync("curl", [ downloadURL, "--output", "apprise.deb" ]);
+console.log(result.stdout?.toString());
+console.error(result.stderr?.toString());
+process.exit(result.status !== null ? result.status : 1);
diff --git a/extra/download-dist.js b/extra/download-dist.js
index b8be5eb8a..b339ac930 100644
--- a/extra/download-dist.js
+++ b/extra/download-dist.js
@@ -4,7 +4,6 @@ const tar = require("tar");
const packageJSON = require("../package.json");
const fs = require("fs");
-const rmSync = require("./fs-rmSync.js");
const version = packageJSON.version;
const filename = "dist.tar.gz";
@@ -29,8 +28,9 @@ function download(url) {
if (fs.existsSync("./dist")) {
if (fs.existsSync("./dist-backup")) {
- rmSync("./dist-backup", {
- recursive: true
+ fs.rmSync("./dist-backup", {
+ recursive: true,
+ force: true,
});
}
@@ -43,8 +43,9 @@ function download(url) {
tarStream.on("close", () => {
if (fs.existsSync("./dist-backup")) {
- rmSync("./dist-backup", {
- recursive: true
+ fs.rmSync("./dist-backup", {
+ recursive: true,
+ force: true,
});
}
console.log("Done");
diff --git a/extra/env2arg.js b/extra/env2arg.js
deleted file mode 100644
index f89a91e43..000000000
--- a/extra/env2arg.js
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env node
-
-const childProcess = require("child_process");
-let env = process.env;
-
-let cmd = process.argv[2];
-let args = process.argv.slice(3);
-let replacedArgs = [];
-
-for (let arg of args) {
- for (let key in env) {
- arg = arg.replaceAll(`$${key}`, env[key]);
- }
- replacedArgs.push(arg);
-}
-
-let child = childProcess.spawn(cmd, replacedArgs);
-child.stdout.pipe(process.stdout);
-child.stderr.pipe(process.stderr);
diff --git a/extra/exe-builder/.gitignore b/extra/exe-builder/.gitignore
deleted file mode 100644
index d52874b6c..000000000
--- a/extra/exe-builder/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-packages/
diff --git a/extra/exe-builder/App.config b/extra/exe-builder/App.config
deleted file mode 100644
index 97eb34aff..000000000
--- a/extra/exe-builder/App.config
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/extra/exe-builder/DownloadForm.Designer.cs b/extra/exe-builder/DownloadForm.Designer.cs
deleted file mode 100644
index 26a474e9c..000000000
--- a/extra/exe-builder/DownloadForm.Designer.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System.ComponentModel;
-
-namespace UptimeKuma {
- partial class DownloadForm {
- ///
- /// Required designer variable.
- ///
- private IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing) {
- if (disposing && (components != null)) {
- components.Dispose();
- }
-
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent() {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloadForm));
- this.progressBar = new System.Windows.Forms.ProgressBar();
- this.label = new System.Windows.Forms.Label();
- this.labelData = new System.Windows.Forms.Label();
- this.SuspendLayout();
- //
- // progressBar
- //
- this.progressBar.Location = new System.Drawing.Point(12, 12);
- this.progressBar.Name = "progressBar";
- this.progressBar.Size = new System.Drawing.Size(472, 41);
- this.progressBar.TabIndex = 0;
- //
- // label
- //
- this.label.Location = new System.Drawing.Point(12, 59);
- this.label.Name = "label";
- this.label.Size = new System.Drawing.Size(472, 23);
- this.label.TabIndex = 1;
- this.label.Text = "Preparing...";
- //
- // labelData
- //
- this.labelData.Location = new System.Drawing.Point(12, 82);
- this.labelData.Name = "labelData";
- this.labelData.Size = new System.Drawing.Size(472, 23);
- this.labelData.TabIndex = 2;
- //
- // DownloadForm
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(496, 117);
- this.Controls.Add(this.labelData);
- this.Controls.Add(this.label);
- this.Controls.Add(this.progressBar);
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.MaximizeBox = false;
- this.Name = "DownloadForm";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "Uptime Kuma";
- this.Load += new System.EventHandler(this.DownloadForm_Load);
- this.ResumeLayout(false);
- }
-
- private System.Windows.Forms.Label labelData;
-
- private System.Windows.Forms.Label label;
-
- private System.Windows.Forms.ProgressBar progressBar;
-
- #endregion
- }
-}
-
diff --git a/extra/exe-builder/DownloadForm.cs b/extra/exe-builder/DownloadForm.cs
deleted file mode 100644
index 28a57c527..000000000
--- a/extra/exe-builder/DownloadForm.cs
+++ /dev/null
@@ -1,204 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.IO;
-using System.IO.Compression;
-using System.Net;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Newtonsoft.Json;
-
-namespace UptimeKuma {
- public partial class DownloadForm : Form {
- private readonly Queue downloadQueue = new();
- private readonly WebClient webClient = new();
- private DownloadItem currentDownloadItem;
-
- public DownloadForm() {
- InitializeComponent();
- }
-
- private void DownloadForm_Load(object sender, EventArgs e) {
- webClient.DownloadProgressChanged += DownloadProgressChanged;
- webClient.DownloadFileCompleted += DownloadFileCompleted;
-
- label.Text = "Reading latest version...";
-
- // Read json from https://uptime.kuma.pet/version
- var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
- var versionObj = JsonConvert.DeserializeObject(versionJson);
-
- var nodeVersion = versionObj.nodejs;
- var uptimeKumaVersion = versionObj.latest;
- var hasUpdateFile = File.Exists("update");
-
- if (!Directory.Exists("node")) {
- downloadQueue.Enqueue(new DownloadItem {
- URL = $"https://nodejs.org/dist/v{nodeVersion}/node-v{nodeVersion}-win-x64.zip",
- Filename = "node.zip",
- TargetFolder = "node"
- });
- }
-
- if (!Directory.Exists("core") || hasUpdateFile) {
-
- // It is update, rename the core folder to core.old
- if (Directory.Exists("core")) {
- // Remove the old core.old folder
- if (Directory.Exists("core.old")) {
- Directory.Delete("core.old", true);
- }
-
- Directory.Move("core", "core.old");
- }
-
- downloadQueue.Enqueue(new DownloadItem {
- URL = $"https://github.com/louislam/uptime-kuma/archive/refs/tags/{uptimeKumaVersion}.zip",
- Filename = "core.zip",
- TargetFolder = "core"
- });
-
- File.WriteAllText("version.json", versionJson);
-
- // Delete the update file
- if (hasUpdateFile) {
- File.Delete("update");
- }
- }
-
- DownloadNextFile();
- }
-
- void DownloadNextFile() {
- if (downloadQueue.Count > 0) {
- var item = downloadQueue.Dequeue();
-
- currentDownloadItem = item;
-
- // Download if the zip file is not existing
- if (!File.Exists(item.Filename)) {
- label.Text = item.URL;
- webClient.DownloadFileAsync(new Uri(item.URL), item.Filename);
- } else {
- progressBar.Value = 100;
- label.Text = "Use local " + item.Filename;
- DownloadFileCompleted(null, null);
- }
- } else {
- npmSetup();
- }
- }
-
- void npmSetup() {
- labelData.Text = "";
-
- var npm = "..\\node\\npm.cmd";
- var cmd = $"{npm} ci --production & {npm} run download-dist & exit";
-
- var startInfo = new ProcessStartInfo {
- FileName = "cmd.exe",
- Arguments = $"/k \"{cmd}\"",
- RedirectStandardOutput = false,
- RedirectStandardError = false,
- RedirectStandardInput = true,
- UseShellExecute = false,
- CreateNoWindow = false,
- WorkingDirectory = "core"
- };
-
- var process = new Process();
- process.StartInfo = startInfo;
- process.EnableRaisingEvents = true;
- process.Exited += (_, e) => {
- progressBar.Value = 100;
-
- if (process.ExitCode == 0) {
- Task.Delay(2000).ContinueWith(_ => {
- Application.Restart();
- });
- label.Text = "Done";
- } else {
- label.Text = "Failed, exit code: " + process.ExitCode;
- }
-
- };
- process.Start();
- label.Text = "Installing dependencies and download dist files";
- progressBar.Value = 50;
- process.WaitForExit();
- }
-
- void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
- progressBar.Value = e.ProgressPercentage;
- var total = e.TotalBytesToReceive / 1024;
- var current = e.BytesReceived / 1024;
-
- if (total > 0) {
- labelData.Text = $"{current}KB/{total}KB";
- }
- }
-
- void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
- Extract(currentDownloadItem);
- DownloadNextFile();
- }
-
- void Extract(DownloadItem item) {
- if (Directory.Exists(item.TargetFolder)) {
- var dir = new DirectoryInfo(item.TargetFolder);
- dir.Delete(true);
- }
-
- if (Directory.Exists("temp")) {
- var dir = new DirectoryInfo("temp");
- dir.Delete(true);
- }
-
- labelData.Text = $"Extracting {item.Filename}...";
-
- ZipFile.ExtractToDirectory(item.Filename, "temp");
-
- string[] dirList;
-
- // Move to the correct level
- dirList = Directory.GetDirectories("temp");
-
-
-
- if (dirList.Length > 0) {
- var dir = dirList[0];
-
- // As sometime ExtractToDirectory is still locking the directory, loop until ok
- while (true) {
- try {
- Directory.Move(dir, item.TargetFolder);
- break;
- } catch (Exception exception) {
- Thread.Sleep(1000);
- }
- }
-
- } else {
- MessageBox.Show("Unexcepted Error: Cannot move extracted files, folder not found.");
- }
-
- labelData.Text = $"Extracted";
-
- if (Directory.Exists("temp")) {
- var dir = new DirectoryInfo("temp");
- dir.Delete(true);
- }
-
- File.Delete(item.Filename);
- }
- }
-
- public class DownloadItem {
- public string URL { get; set; }
- public string Filename { get; set; }
- public string TargetFolder { get; set; }
- }
-}
-
diff --git a/extra/exe-builder/DownloadForm.resx b/extra/exe-builder/DownloadForm.resx
deleted file mode 100644
index e87e0c0d4..000000000
--- a/extra/exe-builder/DownloadForm.resx
+++ /dev/null
@@ -1,377 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
-
- AAABAAMAMDAAAAEAIACoJQAANgAAACAgAAABACAAqBAAAN4lAAAQEAAAAQAgAGgEAACGNgAAKAAAADAA
- AABgAAAAAQAgAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA////BPT09Bfu7u4e8fHxJPPz8yv19fUy9fX1M/Pz8yvx8fEk9vb2HPPz8xXMzMwFAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
- /wHv7+8f7u7uPPPz81Tx8fFs8fHxgPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGB8fHxcfHx8V3x8fFI9PT0MOvr6w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AADy8vIU8fHxS/Dw8Hbx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fFr9PT0R/Dw8CIAAAABAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA8vLyFPHx8Vnx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fFs9fX1Mb+/vwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAICAgALy8vI88fHxfvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy8nby8vI8gICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAzMzMBfHx8Vrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyYf///wwAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8vLyYPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8W/z8/MWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+9R8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLw8PB26urqDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8ijx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu7w7Ifj79ud2u7PtNLrw83P677dzeu85c3r
- u+rM67rwzOu68c7rverQ68Dj0uvD3NbuyM3b7c+64u7apujv5ZPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxXgAAAAEAAAAAAAAAAAAAAAAAAAAA4+PjCfDw
- 8Hfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLd7tSmzeu92MbqsvvG6bH/xumy/8fq
- s//H6rP/yOq0/8jqtf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//Q7MDx1u7Kz9/t
- 163s8OuJ8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgu/v7y8AAAAAAAAAAAAA
- AAAAAAAA7u7uPfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC5PDdl8jqtuTE6a7/xOmv/8Xp
- sP/G6bH/xumx/8bpsv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zr
- u//N67v/zey8/87svf/P67742e3Mx+jv5ZLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw
- 8HWAgIACAAAAAAAAAACqqqoD8vLyc/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLf7degxOiu+cPo
- rf/D6a7/xOmu/8Xpr//F6bD/xumx/8bpsf/G6bL/x+qz/8fqs//I6rT/yOq1/8nqtv/J6rb/yuu3/8rr
- uP/L67j/y+u5/8zruv/M67v/zeu7/83svP/O7L3/zuy9/87svfzc7tK28fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fEkAAAAAAAAAADz8/Mq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgunv
- 5o3D6a/0wuis/8Lorf/D6K3/xOmu/8Tprv/F6a//xemw/8bpsf/G6bH/xumy/8fqs//H6rP/yOq0/8jq
- tf/J6rb/yeq2/8rrt//K67j/y+u4/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/87svf/O7L3/3e/TtPHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAADy8vJM8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgszqutDB6Kv/weir/8LorP/D6K3/w+it/8Tprv/E6a7/xemv/8XpsP/G6bH/xumx/8bp
- sv/H6rP/x+qz/8jqtP/I6rX/yeq2/8nqtv/K67f/yuu4/8vruP/L67n/zOu6/8zru//N67v/zey8/87s
- vf/O7L3/zuy++u3w6Yzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJ1AAAAAAAAAADx8fFr8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC6O/kjsDoqvzA6Kr/weir/8Loq//C6Kz/w+it/8Porf/E6a7/xOmu/8Xp
- r//F6bD/xumx/8bpsf/G6bL/x+qz/8fqtP/I6rT/yOq1/8nqtv/J6rb/yuu3/8rruP/L67n/y+u5/8zr
- uv/M67v/zeu7/83svP/O7L3/zuy9/93u07Xx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC////Bv//
- /wfx8fGB8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1ezJsr/nqf/A56n/weiq/8Hoq//C6Kv/wuis/8Po
- rf/D6K3/xOmu/8Pprv+856T/uOed/7bmmv+05Zf/teWZ/7jnnf+86KP/wOio/8fqs//J6rb/yeq2/8rr
- t//K67j/y+u5/8vruf/M67r/zOu7/83ru//N7Lz/zuy9/9buyNLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8vLyE/Ly8hPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCy+q6zr/nqP/A56n/wOep/8Ho
- qv/B6Kv/wuir/8LorP+u5Y//neF2/5bgav+V4Gr/luBr/5fhbP+Y4W7/meFv/5rhcf+b4nL/nOJ0/53i
- dv+j5H//reaM/7nnnf/E6q//y+y4/8vruf/L67n/zOu6/8zru//N67v/zey8/9Lsxd/x8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC7+/vIPb29hzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/n
- qP+/56j/wOep/8Dnqf/B6Kr/weir/7nmn/+R32T/kt9l/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nh
- b/+a4XH/m+Jy/5zidP+d4nX/nuN3/5/jeP+f4nn/weqq/8rruP/L67n/y+u5/8zruv/M67v/zeu7/9Ls
- w+Lx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwI/Hx8SXx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGCxeix5L/nqP+/56j/v+eo/8Dnqf/A56n/weiq/7Pllv+Q3mP/kd9k/5LfZf+T32f/lOBo/5Xg
- av+W4Gv/l+Ft/5jhbv+Z4W//muFx/5vicv+c4nT/neJ1/57jd/+f43j/xOmu/8rrt//K67j/y+u5/8vr
- uf/M67r/zOu7/9Tsxtfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC9PT0GO/v7yDx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGCx+m037/nqP+/56j/v+eo/7/nqP/A56n/wOip/7TmmP+P3mH/kN5j/5Hf
- ZP+S32b/k99n/5TgaP+V4Gr/luBr/5fhbf+Y4W7/meFw/5rhcf+b4nL/nOJ0/53idf+h5Hz/yuu2/8nq
- t//K67f/yuu4/8vruf/L67n/zOu6/9ftysrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7e3tDvT0
- 9Bfx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCyOq117/nqP+/56j/v+eo/7/nqP+/56j/wOep/7vn
- of+O3mD/j95h/5DeY/+R32T/kt9m/5PfZ/+U4Gj/leBq/5bga/+X4W3/mOFu/5nhcP+a4nH/m+Jy/5zi
- dP+r5Yr/yOq1/8nqtv/J6rf/yuu3/8rruP/L67n/y+u5/9zu1LHx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLz8/OA////A+7u7g/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCz+q+xb/nqP+/56j/v+eo/7/n
- qP+/56j/v+eo/8Dnqf+S4Gb/jt5g/4/eYf+Q3mP/kd9k/5LfZv+T32f/lOBo/5Xgav+W4Gv/l+Ft/5jh
- bv+Z4XD/muJx/5vic/+4553/yOq0/8jqtf/J6rb/yeq3/8rrt//K67j/y+u5/+bw4Zfx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fFrAAAAAP///wHz8/N88fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC1+zMrr/n
- qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+f4Xn/jd5f/47eYP+P3mH/kN5j/5HfZP+S32b/k99n/5Tg
- af+V4Gr/luBr/5fhbf+Y4W7/meFw/5vic//F6rD/x+q0/8jqtP/I6rX/yeq2/8nqt//K67f/zOu88u/x
- 74Px8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLv7+9QAAAAAAAAAADw8PBm8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC5e7gk7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//jN1d/43eX/+O3mD/j95h/5De
- Y/+R32T/kt9m/5PfZ/+U4Gn/leBq/5bga/+X4W3/mOFu/6rliP/G6rL/x+qz/8fqtP/I6rT/yOq1/8nq
- tv/J6rf/1OzGy/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YL19fUzAAAAAAAAAADy8vJO8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgsPoru2/56j/v+eo/7/nqP+/56j/v+eo/7/nqP++6Kf/j95i/4zd
- Xf+N3l//jt5g/4/eYv+Q3mP/kd9k/5LfZv+T32f/lOBp/5Xgav+W4Gz/l+Ft/7voov/G6bL/xuqy/8fq
- s//H6rT/yOq1/8jqtf/J6rb/4e/Zo/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PARAAAAAAAA
- AADu7u4u8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgszpvMm/56j/v+eo/7/nqP+/56j/v+eo/7/n
- qP+/56j/q+SL/4vdXP+M3V3/jd5f/47eYP+P3mL/kN9j/5HfZP+S32b/k99n/5Tgaf+V4Gr/qOOH/8Xp
- sP/G6bH/xumy/8bqsv/H6rP/x+q0/8jqtf/K67jy8PHwhPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8WoAAAAAAAAAAAAAAADo6OgL8fHxgfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguDv2J2/56j/v+eo/7/n
- qP+/56j/v+eo/7/nqP+/56j/v+eo/6Xjgv+L3Vz/jN1d/43eX/+O3mD/j95i/5DfY/+R32T/kt9m/5Pf
- Z/+k44D/xOmu/8XpsP/F6bD/xumx/8bpsv/G6rL/x+qz/8fqtP/W7cnB8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvPz80AAAAAAAAAAAAAAAAAAAAAA8PDwZ/Hx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLD6K/rv+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+u5I//kt5n/4zdXf+N3l//jt5g/4/e
- Yv+Q32P/luFs/67kj//D6K3/xOmu/8Tpr//F6bD/xemw/8bpsf/G6bL/xuqy/8fqtP7o7+WR8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xYAAAAAAAAAAAAAAAAAAAAA8vLyPPHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLV7ci0v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOio/7Xl
- mv+u5I7/rOSM/67kj/+35pz/wumr/8Lorf/D6K3/w+it/8Tprv/E6a//xemw/8XpsP/G6bH/xumy/9Ds
- wNPx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyZQAAAAAAAAAAAAAAAAAAAAAAAAAA////DPHx
- 8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGCx+m03L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n
- qP+/56j/v+eo/7/nqP+/56j/wOep/8Doqv/B6Kr/weir/8LorP/C6K3/w+it/8Porv/E6a7/xOmv/8Xp
- sP/F6bD/yOq18uvw6Yvx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC7+/vMQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAPHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6O/ij8LorPG/56j/v+eo/7/n
- qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weiq/8Hoq//C6Kz/wuit/8Po
- rf/D6K7/xOmu/8Tpr//F6bH74u/anvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLw8PB6////BQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz8yrx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxguHu
- 2pnB56v2v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/wOiq/8Ho
- q//B6Kv/wuis/8Lorf/D6K3/w+mu/8Tprv3b7dKq8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fFJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHy8vJf8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLi7tyXwumt8L/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/n
- qP+/56j/wOep/8Doqv/B6Kv/weir/8LorP/C6K3/xOiv+d7u1aTx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvLy8nb///8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv7+8Q8/Pze/Hx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC6/Dpiszqu82/56j/v+eo/7/nqP+/56j/v+eo/7/n
- qP+/56j/v+eo/7/nqP+/56j/v+eo/8Dnqf/A6Kr/weir/8Hoq//H6bTj5e7elfHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8yoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA9fX1MvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLe7tShx+mz3r/n
- qP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/v+eo/7/nqP/A56n/xumy5drtz6rv8e+D8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8vLyTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHx8Unx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgubv45DU68e2y+q6z8XoseTD6a7uweir9MPpru7F6bHly+q50tLsxLrl796U8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLy8vJh////AwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHx8fFZ8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8Wzf398IAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D8/PzVfHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8PDwZujo
- 6AsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA////AfHx8Ujx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fFa////BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/Mp8vLydvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8/PzfPHx8TcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CvLy8lDz8/N/8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvPz84Hx8fFa8PDwEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AADw8PAR8vLyTvHx8X3x8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fF/8/PzVvT09BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wXz8/Mq8/PzU/Hx8XDx8fGB8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLy8vJz8fHxWO/v7y////8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G7e3tHfLy
- 8ifu7u4u8PDwNPT09C/y8vIo7+/vH+Pj4wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAP///////wAA////////AAD///////8AAP//gAf//wAA//gAAD//AAD/wAAAB/8AAP+A
- AAAB/wAA/gAAAAB/AAD8AAAAAD8AAPgAAAAAHwAA8AAAAAAPAADwAAAAAAcAAOAAAAAABwAA4AAAAAAD
- AADAAAAAAAMAAMAAAAAAAwAAwAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA
- AAAAAQAAgAAAAAABAACAAAAAAAMAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAMAAAAAABwAAwAAAAAAH
- AADgAAAAAAcAAOAAAAAADwAA4AAAAAAPAADwAAAAAB8AAPAAAAAAHwAA+AAAAAA/AAD8AAAAAD8AAPwA
- AAAAfwAA/gAAAAD/AAD/AAAAAf8AAP+AAAAD/wAA/8AAAAf/AAD/8AAAH/8AAP/8AAA//wAA//8AAf//
- AAD//+AP//8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAgICAAu/v7xD09PQX7u7uHvDw8CP29vYb8vLyFOrq6gwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICA
- gALy8vIm7+/vT/Pz82fz8/N98fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvDw8Hrw8PBm7+/vUPT0
- 9C3o6OgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj
- 4wnz8/NC8vLydPHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YHy8vJj8/PzKoCAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AADx8fEl8vLydfHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxcfHx8SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA9PT0LfHx8YDx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8/PzgPLy8j0AAAABAAAAAAAA
- AAAAAAAAAAAAAO3t7Rzx8fGA8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLr8OmM5O7emeTv
- 3Z7h79mj5fDem+nv45Tu8u6H8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvLy
- 8joAAAAAAAAAAAAAAAD///8E8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC7vDshtns0K7N67zayeq288fq
- s//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/P7L7w0+zF29vv0Lrn8OKX8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8/PzfvPz8xUAAAAAAAAAAPX19TLx8fGC8fHxgvHx8YLx8fGC8fHxgt3u1KXF6rHzxOmv/8Xp
- sP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruf/M67v/zey8/87svf/S7MPj4u7Zp/Hx
- 8YLx8fGC8fHxgvHx8YLx8fGC8/PzVQAAAAAAAAAA8fHxavHx8YLx8fGC8fHxgvHx8YLf7defwuis/cPo
- rf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vruv/M67v/zey8/87s
- vf/N67z/3e7SufHx8YLx8fGC8fHxgvHx8YLz8/N8////Bf///w3x8fGC8fHxgvHx8YLx8fGC8fHxgsXp
- sOnB6Kv/wuis/8Porf/E6a7/xOmv/8XpsP/G6bH/xumy/8fqs//I6rT/yOq1/8nqtv/K67f/y+u4/8vr
- uv/M67v/zey8/87svf/O67z96/Hoj/Hx8YLx8fGC8fHxgvHx8YLy8vIm8/PzK/Hx8YLx8fGC8fHxgvHx
- 8YLg79icwOep/8Hoqv/B6Kv/wuis/8Porf/E6a7/wuit/73opP+76KL/u+eh/77opv/D6a3/yeu1/8nq
- tv/K67f/y+u5/8zruv/M67v/zey8/87svf/d7tSz8fHxgvHx8YLx8fGC8fHxgvHx8Tby8vI68fHxgvHx
- 8YLx8fGC8fHxgtTrxre/56j/wOep/8Hoqv/B6Kv/uOad/53idv+V4Gn/leBq/5fhbP+Y4W//muFx/5vi
- c/+e4Xb/puWD/7PmlP/D6a3/y+u5/8zruv/M67v/zey8/9rtzsHx8fGC8fHxgvHx8YLx8fGC8/PzQfPz
- 80Lx8fGC8fHxgvHx8YLx8fGC0OvAwr/nqP+/56j/wOep/8Hoqv+o44b/kd9k/5LfZv+U4Gj/leBq/5fh
- bf+Y4W//muFx/5vic/+d4nX/n+N3/7fnm//K67j/y+u5/8zruv/M67v/2u3QvPHx8YLx8fGC8fHxgvHx
- 8YLy8vI98/PzP/Hx8YLx8fGC8fHxgvHx8YLQ6sK/v+eo/7/nqP+/56j/wOep/6jjhv+P3mL/kd9k/5Lf
- Zv+U4Gj/leBr/5fhbf+Y4W//muFx/5zic/+d4nX/v+mm/8nqt//K67j/y+u5/8zruv/f79au8fHxgvHx
- 8YLx8fGC8fHxgvX19TLx8fE38fHxgvHx8YLx8fGC8fHxgtTrybO/56j/v+eo/7/nqP+/56j/sOSS/47e
- YP+P3mL/kd9k/5LfZv+U4Gj/leBr/5fhbf+Z4W//muJx/5/jd//H6bP/yeq2/8nqt//K67j/y+u5/+nv
- 45Tx8fGC8fHxgvHx8YLx8fGC7+/vIPHx8SXx8fGC8fHxgvHx8YLx8fGC4e/Zm7/nqP+/56j/v+eo/7/n
- qP+956X/jt5h/47eYP+P3mL/kd9k/5LfZv+U4Gn/luBr/5fhbf+Z4W//q+aK/8fqs//I6rT/yeq2/8nq
- t//N7Lvw8fHxgvHx8YLx8fGC8fHxgvPz84D///8G6+vrDfHx8YLx8fGC8fHxgvHx8YLv8e+Dweis87/n
- qP+/56j/v+eo/7/nqP+d4XX/jN1e/47eYP+P3mL/kd9k/5PfZ/+U4Gn/luBr/5fhbf+86KP/xuqy/8fq
- s//I6rX/yeq2/9Tsx8nx8fGC8fHxgvHx8YLx8fGC8PDwaAAAAAAAAAAA8fHxbPHx8YLx8fGC8fHxgvHx
- 8YLM6rrMv+eo/7/nqP+/56j/v+eo/7blmv+N3V//jN1e/47eYP+Q3mL/kd9k/5PfZ/+U4Gn/qeSH/8Xp
- sP/G6bH/xuqy/8fqs//I6rX/5fDem/Hx8YLx8fGC8fHxgvHx8YLz8/M/AAAAAAAAAADz8/NB8fHxgvHx
- 8YLx8fGC8fHxgt3s06O/56j/v+eo/7/nqP+/56j/v+eo/7Xmmf+U32n/jN1e/47eYP+Q3mL/k99o/6zk
- i//D6a7/xemv/8XpsP/G6bH/xuqy/8vqu+jx8fGC8fHxgvHx8YLx8fGC8fHxgvPz8xUAAAAAAAAAAPT0
- 9Bfx8fGC8fHxgvHx8YLx8fGC8fHvg8Tpsee/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+35pz/suWV/7Xm
- mf/A6Kj/wuit/8Porf/E6a7/xemv/8XpsP/G6bH/3e3UqvHx8YLx8fGC8fHxgvHx8YLw8PBmAAAAAAAA
- AAAAAAAAAAAAAPHx8W7x8fGC8fHxgvHx8YLx8fGC4u7cmMHnqvm/56j/v+eo/7/nqP+/56j/v+eo/7/n
- qP+/56j/wOep/8Hoqv/C6Kz/wuit/8Porf/E6a7/xemv/9Hrwszx8fGC8fHxgvHx8YLx8fGC8fHxgvX1
- 9TEAAAAAAAAAAAAAAAAAAAAA7u7uO/Hx8YLx8fGC8fHxgvHx8YLx8fGC3e7SpMHoqfq/56j/v+eo/7/n
- qP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz/wuit/8Porf/O67zV8PHwhPHx8YLx8fGC8fHxgvHx
- 8YLy8vJ2////BQAAAAAAAAAAAAAAAAAAAACqqqoD8PDwafHx8YLx8fGC8fHxgvHx8YLx8fGC4O/YnMTo
- ruy/56j/v+eo/7/nqP+/56j/v+eo/7/nqP+/56j/wOip/8Hoq//C6Kz90uvEwe/x74Px8fGC8fHxgvHx
- 8YLx8fGC8fHxgvPz8ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/MW8fHxfPHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8PLuhdXtyLXF6bHlv+eo/7/nqP+/56j/v+eo/7/nqP/B6Kv0zeq8zOXv4JTx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLy8vJNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vIm8fHxgPHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLs8OmJ4e/Zm93u06Pf7def5+/hkvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxXf///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AADy8vIo8/PzffHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8VnMzMwFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAD29vYb8fHxbvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz83/v7+9BgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMwF8/PzQPLy8nnx8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgvPz84Hx8fFc9PT0GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////B/X19TLx8fFc8PDwevHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8fHxgPHx8Wv09PRE9PT0FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAA7+/vEPb29hvw8PAj7+/vH/T09Be/v78EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////8B///wAA//wAAD/wAAAP4AAAB+AA
- AAfAAAADwAAAA4AAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAADwAAAA8AAAAPAAAAH4AAAB+AA
- AA/wAAAP+AAAH/gAAD/+AAB//wAB///AA///+B////////////8oAAAAEAAAACAAAAABACAAAAAAAAAE
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CfDw8BH///8GAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAAu7u7i7x8fFe8PDwevHx8YLx8fGC8fHxgvDw
- 8Hvx8fFs7+/vT/Dw8CMAAAABAAAAAAAAAAAAAAAA5ubmCvLy8l/x8fGC8fHxgvHx8YLx8fGC8fHxgvHx
- 8YLx8fGC8fHxgvHx8YLx8fGC8/PzZu7u7g8AAAAAAAAAAPHx8V3x8fGC8fHxgunv5o7Z7c200+vFytTs
- xc7W7cnH2+7QueLu2qbu8OyH8fHxgvHx8YLx8fFu////BfHx8STx8fGC8fHxgtrtzq3D6a/8xemw/8bp
- sv/I6rT/yeq2/8vruP/M67v/z+u++Nzu0bjx8fGC8fHxgu/v7zDx8fFI8fHxguzw6ojC56z3wuis/8Tp
- rv/E6q3/weiq/8fqsv/J6rb/y+u5/8zru//N67z/6/HpjfHx8YLy8vJN8fHxXPHx8YLg79icv+eo/8Ho
- qv+k4n//lOBo/5fhbf+a4XH/n+J5/7Pmlv/L67n/zOu7/+Xw353x8fGC8fHxXvHx8Vrx8fGC4O3Zm7/n
- qP+/56j/nuF3/5HfZP+U4Gj/l+Ft/5ricf+x5pL/yeq3/8vruf/r8emN8fHxgu/v70/x8fFK8fHxguzw
- 6ojA6Kn8v+eo/6njiP+O3mD/kd9k/5Tgaf+X4W3/vuim/8jqtP/N67zr8fHxgvHx8YLy8vI68/PzK/Hx
- 8YLx8fGCx+m03L/nqP++6Kb/meBw/47eYP+S32X/q+SL/8XpsP/G6rL/1+zLvvHx8YLz8/OB8PDwEdXV
- 1Qbx8fF98fHxgt/t1Z/A56j9v+eo/7/nqP+656H/vuim/8Lorf/E6a7/yOq18Ovw6Yvx8fGC8vLyYwAA
- AAAAAAAA8fHxR/Hx8YLx8fGC2O3NrMDnqfq/56j/v+eo/7/nqP/B6Kv/xumy7OTu3Zfx8fGC8/PzgfLy
- 8icAAAAAAAAAAP///wPz8/Nm8fHxgvHx8YLo7+SO0+zFuczquszM6bzJ1+zMru7w7Ibx8fGC8fHxgvHx
- 8UcAAAAAAAAAAAAAAAAAAAAA4+PjCfHx8Vzx8fGC8fHxgvHx8YLx8fGC8fHxgvHx8YLx8fGC8fHxgfPz
- 80D///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8/PzK/Ly8mDz8/N+8fHxgvHx8YLy8vJ68vLyUezs
- 7BsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAevr6w3j4+MJAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD8fwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIAB
- AADAAwAAwAMAAOAHAADwDwAA/n8AAP//AAA=
-
-
-
\ No newline at end of file
diff --git a/extra/exe-builder/FodyWeavers.xml b/extra/exe-builder/FodyWeavers.xml
deleted file mode 100644
index 0b37e4ef4..000000000
--- a/extra/exe-builder/FodyWeavers.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/extra/exe-builder/FodyWeavers.xsd b/extra/exe-builder/FodyWeavers.xsd
deleted file mode 100644
index ff119f713..000000000
--- a/extra/exe-builder/FodyWeavers.xsd
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
-
-
-
-
- A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
-
-
-
-
- A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
-
-
-
-
- A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
-
-
-
-
- A list of unmanaged 32 bit assembly names to include, delimited with line breaks.
-
-
-
-
- A list of unmanaged 64 bit assembly names to include, delimited with line breaks.
-
-
-
-
- The order of preloaded assemblies, delimited with line breaks.
-
-
-
-
-
- This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.
-
-
-
-
- Controls if .pdbs for reference assemblies are also embedded.
-
-
-
-
- Controls if runtime assemblies are also embedded.
-
-
-
-
- Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.
-
-
-
-
- Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.
-
-
-
-
- As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.
-
-
-
-
- Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.
-
-
-
-
- Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.
-
-
-
-
- A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
-
-
-
-
- A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.
-
-
-
-
- A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
-
-
-
-
- A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.
-
-
-
-
- A list of unmanaged 32 bit assembly names to include, delimited with |.
-
-
-
-
- A list of unmanaged 64 bit assembly names to include, delimited with |.
-
-
-
-
- The order of preloaded assemblies, delimited with |.
-
-
-
-
-
-
-
- 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
-
-
-
-
- A comma-separated list of error codes that can be safely ignored in assembly verification.
-
-
-
-
- 'false' to turn off automatic generation of the XML Schema file.
-
-
-
-
-
\ No newline at end of file
diff --git a/extra/exe-builder/Program.cs b/extra/exe-builder/Program.cs
deleted file mode 100644
index d9db4d001..000000000
--- a/extra/exe-builder/Program.cs
+++ /dev/null
@@ -1,262 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using System.Net;
-using System.Net.Sockets;
-using System.Reflection;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Microsoft.Win32;
-using Newtonsoft.Json;
-using UptimeKuma.Properties;
-
-namespace UptimeKuma {
- static class Program {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main(string[] args) {
- var cwd = Path.GetDirectoryName(Application.ExecutablePath);
-
- if (cwd != null) {
- Environment.CurrentDirectory = cwd;
- }
-
- bool isIntranet = args.Contains("--intranet");
-
- if (isIntranet) {
- Console.WriteLine("The --intranet argument was provided, so we will not try to access the internet. The first time this application runs you'll need to run it without the --intranet param or copy the result from another machine to the intranet server.");
- }
-
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new UptimeKumaApplicationContext(isIntranet));
- }
- }
-
- public class UptimeKumaApplicationContext : ApplicationContext
- {
- private static Mutex mutex = null;
-
- const string appName = "Uptime Kuma";
-
- private NotifyIcon trayIcon;
- private Process process;
-
- private MenuItem statusMenuItem;
- private MenuItem runWhenStarts;
- private MenuItem openMenuItem;
-
- private RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
-
- private readonly bool intranetOnly;
-
- public UptimeKumaApplicationContext(bool intranetOnly) {
-
- // Single instance only
- bool createdNew;
- mutex = new Mutex(true, appName, out createdNew);
- if (!createdNew) {
- return;
- }
-
- this.intranetOnly = intranetOnly;
-
- var startingText = "Starting server...";
- trayIcon = new NotifyIcon();
- trayIcon.Text = startingText;
-
- runWhenStarts = new MenuItem("Run when system starts", RunWhenStarts);
- runWhenStarts.Checked = registryKey.GetValue(appName) != null;
-
- statusMenuItem = new MenuItem(startingText);
- statusMenuItem.Enabled = false;
-
- openMenuItem = new MenuItem("Open", Open);
- openMenuItem.Enabled = false;
-
- trayIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location);
- trayIcon.ContextMenu = new ContextMenu(new MenuItem[] {
- statusMenuItem,
- openMenuItem,
- //new("Debug Console", DebugConsole),
- runWhenStarts,
- new("Check for Update...", CheckForUpdate),
- new("Visit GitHub...", VisitGitHub),
- new("About", About),
- new("Exit", Exit),
- });
-
- trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
- trayIcon.Visible = true;
-
- var hasUpdateFile = File.Exists("update");
-
- if (!hasUpdateFile && Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) {
- // Go go go
- StartProcess();
- } else {
- DownloadFiles();
- }
- }
-
- void DownloadFiles() {
- if (intranetOnly) {
- return;
- }
-
- var form = new DownloadForm();
- form.Closed += Exit;
- form.Show();
- }
-
- private void RunWhenStarts(object sender, EventArgs e) {
- if (registryKey == null) {
- MessageBox.Show("Error: Unable to set startup registry key.");
- return;
- }
-
- if (runWhenStarts.Checked) {
- registryKey.DeleteValue(appName, false);
- runWhenStarts.Checked = false;
- } else {
- registryKey.SetValue(appName, Application.ExecutablePath);
- runWhenStarts.Checked = true;
- }
- }
-
- void StartProcess() {
- var startInfo = new ProcessStartInfo {
- FileName = "node/node.exe",
- Arguments = "server/server.js --data-dir=\"../data/\"",
- RedirectStandardOutput = false,
- RedirectStandardError = false,
- UseShellExecute = false,
- CreateNoWindow = true,
- WorkingDirectory = "core"
- };
-
- process = new Process();
- process.StartInfo = startInfo;
- process.EnableRaisingEvents = true;
- process.Exited += ProcessExited;
-
- try {
- process.Start();
- //Open(null, null);
-
- // Async task to check if the server is ready
- Task.Run(() => {
- var runningText = "Server is running";
- using TcpClient tcpClient = new TcpClient();
- while (true) {
- try {
- tcpClient.Connect("127.0.0.1", 3001);
- statusMenuItem.Text = runningText;
- openMenuItem.Enabled = true;
- trayIcon.Text = runningText;
- break;
- } catch (Exception) {
- System.Threading.Thread.Sleep(2000);
- }
- }
- });
-
- } catch (Exception e) {
- MessageBox.Show("Startup failed: " + e.Message, "Uptime Kuma Error");
- }
- }
-
- void StopProcess() {
- process?.Kill();
- }
-
- void Open(object sender, EventArgs e) {
- Process.Start("http://localhost:3001");
- }
-
- void DebugConsole(object sender, EventArgs e) {
-
- }
-
- void CheckForUpdate(object sender, EventArgs e) {
- if (intranetOnly) {
- return;
- }
-
- // Check version.json exists
- if (File.Exists("version.json")) {
- // Load version.json and compare with the latest version from GitHub
- var currentVersionObj = JsonConvert.DeserializeObject(File.ReadAllText("version.json"));
-
- var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
- var latestVersionObj = JsonConvert.DeserializeObject(versionJson);
-
- // Compare version, if the latest version is newer, then update
- if (new System.Version(latestVersionObj.latest).CompareTo(new System.Version(currentVersionObj.latest)) > 0) {
- var result = MessageBox.Show("A new version is available. Do you want to update?", "Update", MessageBoxButtons.YesNo);
- if (result == DialogResult.Yes) {
- // Create a empty file `update`, so the app will download the core files again at startup
- File.Create("update").Close();
-
- trayIcon.Visible = false;
- process?.Kill();
-
- // Restart the app, it will download the core files again at startup
- Application.Restart();
- }
- } else {
- MessageBox.Show("You are using the latest version.");
- }
- }
-
-
- }
-
- void VisitGitHub(object sender, EventArgs e) {
- if (intranetOnly) {
- MessageBox.Show("You have parsed in --intranet so we will not try to access the internet or visit github.com, please go to https://github.com/louislam/uptime-kuma if you want to visit github.");
- return;
- }
-
- Process.Start("https://github.com/louislam/uptime-kuma");
- }
-
- void About(object sender, EventArgs e)
- {
- MessageBox.Show("Uptime Kuma Windows Runtime v1.0.0" + Environment.NewLine + "© 2023 Louis Lam", "Info");
- }
-
- void Exit(object sender, EventArgs e)
- {
- // Hide tray icon, otherwise it will remain shown until user mouses over it
- trayIcon.Visible = false;
- process?.Kill();
- Application.Exit();
- }
-
- void ProcessExited(object sender, EventArgs e) {
-
- if (process.ExitCode != 0) {
- var line = "";
- while (!process.StandardOutput.EndOfStream)
- {
- line += process.StandardOutput.ReadLine();
- }
-
- MessageBox.Show("Uptime Kuma exited unexpectedly. Exit code: " + process.ExitCode + " " + line);
- }
-
- trayIcon.Visible = false;
- Application.Exit();
- }
-
- }
-}
-
diff --git a/extra/exe-builder/Properties/AssemblyInfo.cs b/extra/exe-builder/Properties/AssemblyInfo.cs
deleted file mode 100644
index aa35ef812..000000000
--- a/extra/exe-builder/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Uptime Kuma")]
-[assembly: AssemblyDescription("A portable executable for running Uptime Kuma")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Uptime Kuma")]
-[assembly: AssemblyProduct("Uptime Kuma")]
-[assembly: AssemblyCopyright("Copyright © 2023 Louis Lam")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("86B40AFB-61FC-433D-8C31-650B0F32EA8F")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.2.0")]
-[assembly: AssemblyFileVersion("1.0.2.0")]
diff --git a/extra/exe-builder/Properties/Resources.Designer.cs b/extra/exe-builder/Properties/Resources.Designer.cs
deleted file mode 100644
index 8c8e559c5..000000000
--- a/extra/exe-builder/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace UptimeKuma.Properties {
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder",
- "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance",
- "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState
- .Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if ((resourceMan == null)) {
- global::System.Resources.ResourceManager temp =
- new global::System.Resources.ResourceManager("UptimeKuma.Properties.Resources",
- typeof(Resources).Assembly);
- resourceMan = temp;
- }
-
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState
- .Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get { return resourceCulture; }
- set { resourceCulture = value; }
- }
- }
-}
\ No newline at end of file
diff --git a/extra/exe-builder/Properties/Resources.resx b/extra/exe-builder/Properties/Resources.resx
deleted file mode 100644
index ffecec851..000000000
--- a/extra/exe-builder/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/extra/exe-builder/Properties/Settings.Designer.cs b/extra/exe-builder/Properties/Settings.Designer.cs
deleted file mode 100644
index 6c63b395b..000000000
--- a/extra/exe-builder/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace UptimeKuma.Properties {
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute(
- "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
- private static Settings defaultInstance =
- ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default {
- get { return defaultInstance; }
- }
- }
-}
\ No newline at end of file
diff --git a/extra/exe-builder/Properties/Settings.settings b/extra/exe-builder/Properties/Settings.settings
deleted file mode 100644
index abf36c5d3..000000000
--- a/extra/exe-builder/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/extra/exe-builder/UptimeKuma.csproj b/extra/exe-builder/UptimeKuma.csproj
deleted file mode 100644
index a2ce892ba..000000000
--- a/extra/exe-builder/UptimeKuma.csproj
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
- Debug
- AnyCPU
- {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}
- WinExe
- UptimeKuma
- uptime-kuma
- v4.7.2
- 512
- true
- true
- ..\..\public\favicon.ico
- 9
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- app.manifest
-
-
- COPY "$(SolutionDir)bin\Debug\uptime-kuma.exe" "%UserProfile%\Desktop\uptime-kuma-win64\"
-
-
-
- packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
-
-
-
- packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll
-
-
-
- packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll
-
-
- packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
-
-
-
- packages\System.Console.4.3.1\lib\net46\System.Console.dll
-
-
-
- packages\System.Diagnostics.DiagnosticSource.7.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll
-
-
- packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
-
-
- packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
-
-
- packages\System.IO.4.3.0\lib\net462\System.IO.dll
-
-
- packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
-
-
-
- packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
-
-
- packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
-
-
- packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
-
-
- packages\System.Linq.4.3.0\lib\net463\System.Linq.dll
-
-
- packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll
-
-
- packages\System.Memory.4.5.5\lib\net461\System.Memory.dll
-
-
- packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
-
-
- packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
-
-
-
- packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
-
-
- packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
-
-
- packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll
-
-
- packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll
-
-
- packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll
-
-
- packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll
-
-
- packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
-
-
- packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll
-
-
- packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
-
-
- packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
-
-
- packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll
-
-
- packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll
-
-
-
-
-
-
-
-
-
-
- packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll
-
-
-
-
- Form
-
-
- DownloadForm.cs
-
-
-
-
-
- DownloadForm.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
-
-
- favicon.ico
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
-
-
-
-
-
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105.The missing file is {0}.
-
-
-
-
-
\ No newline at end of file
diff --git a/extra/exe-builder/UptimeKuma.sln b/extra/exe-builder/UptimeKuma.sln
deleted file mode 100644
index 201d7e234..000000000
--- a/extra/exe-builder/UptimeKuma.sln
+++ /dev/null
@@ -1,16 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UptimeKuma", "UptimeKuma.csproj", "{2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2DB53988-1D93-4AC0-90C4-96ADEAAC5C04}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/extra/exe-builder/UptimeKuma.sln.DotSettings.user b/extra/exe-builder/UptimeKuma.sln.DotSettings.user
deleted file mode 100644
index b4ca9dadf..000000000
--- a/extra/exe-builder/UptimeKuma.sln.DotSettings.user
+++ /dev/null
@@ -1,3 +0,0 @@
-
- True
- True
\ No newline at end of file
diff --git a/extra/exe-builder/Version.cs b/extra/exe-builder/Version.cs
deleted file mode 100644
index 896c7a244..000000000
--- a/extra/exe-builder/Version.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace UptimeKuma {
- public class Version {
- public string latest { get; set; }
- public string slow { get; set; }
- public string beta { get; set; }
- public string nodejs { get; set; }
- public string exe { get; set; }
- }
-}
diff --git a/extra/exe-builder/app.manifest b/extra/exe-builder/app.manifest
deleted file mode 100644
index 4a48528fc..000000000
--- a/extra/exe-builder/app.manifest
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- true
- PerMonitorV2
-
-
-
-
-
-
-
-
-
-
-
diff --git a/extra/exe-builder/packages.config b/extra/exe-builder/packages.config
deleted file mode 100644
index 579e2b7ff..000000000
--- a/extra/exe-builder/packages.config
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/extra/fs-rmSync.js b/extra/fs-rmSync.js
deleted file mode 100644
index a42e30a68..000000000
--- a/extra/fs-rmSync.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const fs = require("fs");
-/**
- * Detect if `fs.rmSync` is available
- * to avoid the runtime deprecation warning triggered for using `fs.rmdirSync` with `{ recursive: true }` in Node.js v16,
- * or the `recursive` property removing completely in the future Node.js version.
- * See the link below.
- * @todo Once we drop the support for Node.js v14 (or at least versions before v14.14.0), we can safely replace this function with `fs.rmSync`, since `fs.rmSync` was add in Node.js v14.14.0 and currently we supports all the Node.js v14 versions that include the versions before the v14.14.0, and this function have almost the same signature with `fs.rmSync`.
- * @link https://nodejs.org/docs/latest-v16.x/api/deprecations.html#dep0147-fsrmdirpath--recursive-true- the deprecation information of `fs.rmdirSync`
- * @link https://nodejs.org/docs/latest-v16.x/api/fs.html#fsrmsyncpath-options the document of `fs.rmSync`
- * @param {fs.PathLike} path Valid types for path values in "fs".
- * @param {fs.RmDirOptions} options options for `fs.rmdirSync`, if `fs.rmSync` is available and property `recursive` is true, it will automatically have property `force` with value `true`.
- * @returns {void}
- */
-const rmSync = (path, options) => {
- if (typeof fs.rmSync === "function") {
- if (options.recursive) {
- options.force = true;
- }
- return fs.rmSync(path, options);
- }
- return fs.rmdirSync(path, options);
-};
-module.exports = rmSync;
diff --git a/extra/mark-as-nightly.js b/extra/mark-as-nightly.js
index ada2aca81..d2cb8cb4b 100644
--- a/extra/mark-as-nightly.js
+++ b/extra/mark-as-nightly.js
@@ -15,7 +15,6 @@ if (newVersion) {
// Process package.json
pkg.version = newVersion;
pkg.scripts.setup = pkg.scripts.setup.replaceAll(oldVersion, newVersion);
- pkg.scripts["build-docker"] = pkg.scripts["build-docker"].replaceAll(oldVersion, newVersion);
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n");
// Process README.md
diff --git a/extra/press-any-key.js b/extra/press-any-key.js
deleted file mode 100644
index 42fc363cd..000000000
--- a/extra/press-any-key.js
+++ /dev/null
@@ -1,6 +0,0 @@
-console.log("Git Push and Publish the release note on github, then press any key to continue");
-
-process.stdin.setRawMode(true);
-process.stdin.resume();
-process.stdin.on("data", process.exit.bind(process, 0));
-
diff --git a/extra/release/beta.mjs b/extra/release/beta.mjs
new file mode 100644
index 000000000..7ea13b9b4
--- /dev/null
+++ b/extra/release/beta.mjs
@@ -0,0 +1,64 @@
+import "dotenv/config";
+import {
+ ver,
+ buildDist,
+ buildImage,
+ checkDocker,
+ checkTagExists,
+ checkVersionFormat,
+ getRepoNames,
+ pressAnyKey,
+ execSync, uploadArtifacts,
+} from "./lib.mjs";
+import semver from "semver";
+
+const repoNames = getRepoNames();
+const version = process.env.RELEASE_BETA_VERSION;
+const githubToken = process.env.RELEASE_GITHUB_TOKEN;
+
+console.log("RELEASE_BETA_VERSION:", version);
+
+if (!githubToken) {
+ console.error("GITHUB_TOKEN is required");
+ process.exit(1);
+}
+
+// Check if the version is a valid semver
+checkVersionFormat(version);
+
+// Check if the semver identifier is "beta"
+const semverIdentifier = semver.prerelease(version);
+console.log("Semver identifier:", semverIdentifier);
+if (semverIdentifier[0] !== "beta") {
+ console.error("VERSION should have a semver identifier of 'beta'");
+ process.exit(1);
+}
+
+// Check if docker is running
+checkDocker();
+
+// Check if the tag exists
+await checkTagExists(repoNames, version);
+
+// node extra/beta/update-version.js
+execSync("node ./extra/beta/update-version.js");
+
+// Build frontend dist
+buildDist();
+
+// Build slim image (rootless)
+buildImage(repoNames, [ "beta-slim-rootless", ver(version, "slim-rootless") ], "rootless", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
+
+// Build full image (rootless)
+buildImage(repoNames, [ "beta-rootless", ver(version, "rootless") ], "rootless");
+
+// Build slim image
+buildImage(repoNames, [ "beta-slim", ver(version, "slim") ], "release", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
+
+// Build full image
+buildImage(repoNames, [ "beta", version ], "release");
+
+await pressAnyKey();
+
+// npm run upload-artifacts
+uploadArtifacts(version, githubToken);
diff --git a/extra/release/final.mjs b/extra/release/final.mjs
new file mode 100644
index 000000000..bf0ec2b0c
--- /dev/null
+++ b/extra/release/final.mjs
@@ -0,0 +1,57 @@
+import "dotenv/config";
+import {
+ ver,
+ buildDist,
+ buildImage,
+ checkDocker,
+ checkTagExists,
+ checkVersionFormat,
+ getRepoNames,
+ pressAnyKey, execSync, uploadArtifacts
+} from "./lib.mjs";
+
+const repoNames = getRepoNames();
+const version = process.env.RELEASE_VERSION;
+const githubToken = process.env.RELEASE_GITHUB_TOKEN;
+
+console.log("RELEASE_VERSION:", version);
+
+if (!githubToken) {
+ console.error("GITHUB_TOKEN is required");
+ process.exit(1);
+}
+
+// Check if the version is a valid semver
+checkVersionFormat(version);
+
+// Check if docker is running
+checkDocker();
+
+// Check if the tag exists
+await checkTagExists(repoNames, version);
+
+// node extra/beta/update-version.js
+execSync("node extra/update-version.js");
+
+// Build frontend dist
+buildDist();
+
+// Build slim image (rootless)
+buildImage(repoNames, [ "2-slim-rootless", ver(version, "slim-rootless") ], "rootless", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
+
+// Build full image (rootless)
+buildImage(repoNames, [ "2-rootless", ver(version, "rootless") ], "rootless");
+
+// Build slim image
+buildImage(repoNames, [ "next-slim", "2-slim", ver(version, "slim") ], "release", "BASE_IMAGE=louislam/uptime-kuma:base2-slim");
+
+// Build full image
+buildImage(repoNames, [ "next", "2", version ], "release");
+
+await pressAnyKey();
+
+// npm run upload-artifacts
+uploadArtifacts(version, githubToken);
+
+// node extra/update-wiki-version.js
+execSync("node extra/update-wiki-version.js");
diff --git a/extra/release/lib.mjs b/extra/release/lib.mjs
new file mode 100644
index 000000000..81b9f11b3
--- /dev/null
+++ b/extra/release/lib.mjs
@@ -0,0 +1,251 @@
+import "dotenv/config";
+import * as childProcess from "child_process";
+import semver from "semver";
+
+export const dryRun = process.env.RELEASE_DRY_RUN === "1";
+
+if (dryRun) {
+ console.info("Dry run enabled.");
+}
+
+/**
+ * Check if docker is running
+ * @returns {void}
+ */
+export function checkDocker() {
+ try {
+ childProcess.execSync("docker ps");
+ } catch (error) {
+ console.error("Docker is not running. Please start docker and try again.");
+ process.exit(1);
+ }
+}
+
+/**
+ * Get Docker Hub repository name
+ */
+export function getRepoNames() {
+ if (process.env.RELEASE_REPO_NAMES) {
+ // Split by comma
+ return process.env.RELEASE_REPO_NAMES.split(",").map((name) => name.trim());
+ }
+ return [
+ "louislam/uptime-kuma",
+ "ghcr.io/louislam/uptime-kuma",
+ ];
+}
+
+/**
+ * Build frontend dist
+ * @returns {void}
+ */
+export function buildDist() {
+ if (!dryRun) {
+ childProcess.execSync("npm run build", { stdio: "inherit" });
+ } else {
+ console.info("[DRY RUN] npm run build");
+ }
+}
+
+/**
+ * Build docker image and push to Docker Hub
+ * @param {string[]} repoNames Docker Hub repository names
+ * @param {string[]} tags Docker image tags
+ * @param {string} target Dockerfile's target name
+ * @param {string} buildArgs Docker build args
+ * @param {string} dockerfile Path to Dockerfile
+ * @param {string} platform Build platform
+ * @returns {void}
+ */
+export function buildImage(repoNames, tags, target, buildArgs = "", dockerfile = "docker/dockerfile", platform = "linux/amd64,linux/arm64,linux/arm/v7") {
+ let args = [
+ "buildx",
+ "build",
+ "-f",
+ dockerfile,
+ "--platform",
+ platform,
+ ];
+
+ for (let repoName of repoNames) {
+ // Add tags
+ for (let tag of tags) {
+ args.push("-t", `${repoName}:${tag}`);
+ }
+ }
+
+ args = [
+ ...args,
+ "--target",
+ target,
+ ];
+
+ // Add build args
+ if (buildArgs) {
+ args.push("--build-arg", buildArgs);
+ }
+
+ args = [
+ ...args,
+ ".",
+ "--push",
+ ];
+
+ if (!dryRun) {
+ childProcess.spawnSync("docker", args, { stdio: "inherit" });
+ } else {
+ console.log(`[DRY RUN] docker ${args.join(" ")}`);
+ }
+}
+
+/**
+ * Check if the version already exists on Docker Hub
+ * TODO: use semver to compare versions if it is greater than the previous?
+ * @param {string[]} repoNames repository name (Only check the name with single slash)
+ * @param {string} version Version to check
+ * @returns {void}
+ */
+export async function checkTagExists(repoNames, version) {
+ // Skip if the tag is not on Docker Hub
+ // louislam/uptime-kuma
+ let dockerHubRepoNames = repoNames.filter((name) => {
+ return name.split("/").length === 2;
+ });
+
+ for (let repoName of dockerHubRepoNames) {
+ await checkTagExistsSingle(repoName, version);
+ }
+}
+
+/**
+ * Check if the version already exists on Docker Hub
+ * @param {string} repoName repository name
+ * @param {string} version Version to check
+ * @returns {Promise}
+ */
+export async function checkTagExistsSingle(repoName, version) {
+ console.log(`Checking if version ${version} exists on Docker Hub:`, repoName);
+
+ // Get a list of tags from the Docker Hub repository
+ let tags = [];
+
+ // It is mainly to check my careless mistake that I forgot to update the release version in .env, so `page_size` is set to 100 is enough, I think.
+ const response = await fetch(`https://hub.docker.com/v2/repositories/${repoName}/tags/?page_size=100`);
+ if (response.ok) {
+ const data = await response.json();
+ tags = data.results.map((tag) => tag.name);
+ } else {
+ console.error("Failed to get tags from Docker Hub");
+ process.exit(1);
+ }
+
+ // Check if the version already exists
+ if (tags.includes(version)) {
+ console.error(`Version ${version} already exists`);
+ process.exit(1);
+ }
+}
+
+/**
+ * Check the version format
+ * @param {string} version Version to check
+ * @returns {void}
+ */
+export function checkVersionFormat(version) {
+ if (!version) {
+ console.error("VERSION is required");
+ process.exit(1);
+ }
+
+ // Check the version format, it should be a semver and must be like this: "2.0.0-beta.0"
+ if (!semver.valid(version)) {
+ console.error("VERSION is not a valid semver version");
+ process.exit(1);
+ }
+}
+
+/**
+ * Press any key to continue
+ * @returns {Promise}
+ */
+export function pressAnyKey() {
+ console.log("Git Push and Publish the release note on github, then press any key to continue");
+ process.stdin.setRawMode(true);
+ process.stdin.resume();
+ return new Promise(resolve => process.stdin.once("data", data => {
+ process.stdin.setRawMode(false);
+ process.stdin.pause();
+ resolve();
+ }));
+}
+
+/**
+ * Append version identifier
+ * @param {string} version Version
+ * @param {string} identifier Identifier
+ * @returns {string} Version with identifier
+ */
+export function ver(version, identifier) {
+ const obj = semver.parse(version);
+
+ if (obj.prerelease.length === 0) {
+ obj.prerelease = [ identifier ];
+ } else {
+ obj.prerelease[0] = [ obj.prerelease[0], identifier ].join("-");
+ }
+ return obj.format();
+}
+
+/**
+ * Upload artifacts to GitHub
+ * docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain
+ * @param {string} version Version
+ * @param {string} githubToken GitHub token
+ * @returns {void}
+ */
+export function uploadArtifacts(version, githubToken) {
+ let args = [
+ "buildx",
+ "build",
+ "-f",
+ "docker/dockerfile",
+ "--platform",
+ "linux/amd64",
+ "-t",
+ "louislam/uptime-kuma:upload-artifact",
+ "--build-arg",
+ `VERSION=${version}`,
+ "--build-arg",
+ "GITHUB_TOKEN",
+ "--target",
+ "upload-artifact",
+ ".",
+ "--progress",
+ "plain",
+ ];
+
+ if (!dryRun) {
+ childProcess.spawnSync("docker", args, {
+ stdio: "inherit",
+ env: {
+ ...process.env,
+ GITHUB_TOKEN: githubToken,
+ },
+ });
+ } else {
+ console.log(`[DRY RUN] docker ${args.join(" ")}`);
+ }
+}
+
+/**
+ * Execute a command
+ * @param {string} cmd Command to execute
+ * @returns {void}
+ */
+export function execSync(cmd) {
+ if (!dryRun) {
+ childProcess.execSync(cmd, { stdio: "inherit" });
+ } else {
+ console.info(`[DRY RUN] ${cmd}`);
+ }
+}
diff --git a/extra/release/nightly.mjs b/extra/release/nightly.mjs
new file mode 100644
index 000000000..54951ac42
--- /dev/null
+++ b/extra/release/nightly.mjs
@@ -0,0 +1,16 @@
+import { buildDist, buildImage, checkDocker, getRepoNames } from "./lib.mjs";
+
+// Docker Hub repository name
+const repoNames = getRepoNames();
+
+// Check if docker is running
+checkDocker();
+
+// Build frontend dist (it will build on the host machine, TODO: build on a container?)
+buildDist();
+
+// Build full image (rootless)
+buildImage(repoNames, [ "nightly2-rootless" ], "nightly-rootless");
+
+// Build full image
+buildImage(repoNames, [ "nightly2" ], "nightly");
diff --git a/extra/release/upload-artifacts-beta.mjs b/extra/release/upload-artifacts-beta.mjs
new file mode 100644
index 000000000..2897097e6
--- /dev/null
+++ b/extra/release/upload-artifacts-beta.mjs
@@ -0,0 +1,6 @@
+import { uploadArtifacts } from "./lib.mjs";
+
+const version = process.env.RELEASE_BETA_VERSION;
+const githubToken = process.env.RELEASE_GITHUB_TOKEN;
+
+uploadArtifacts(version, githubToken);
diff --git a/extra/release/upload-artifacts.mjs b/extra/release/upload-artifacts.mjs
new file mode 100644
index 000000000..cd34bd7d4
--- /dev/null
+++ b/extra/release/upload-artifacts.mjs
@@ -0,0 +1,6 @@
+import { uploadArtifacts } from "./lib.mjs";
+
+const version = process.env.RELEASE_VERSION;
+const githubToken = process.env.RELEASE_GITHUB_TOKEN;
+
+uploadArtifacts(version, githubToken);
diff --git a/extra/remove-empty-lang-keys.js b/extra/remove-empty-lang-keys.js
new file mode 100644
index 000000000..6b34fa00c
--- /dev/null
+++ b/extra/remove-empty-lang-keys.js
@@ -0,0 +1,25 @@
+// For #5231
+
+const fs = require("fs");
+
+let path = "../src/lang";
+
+// list directories in the lang directory
+let jsonFileList = fs.readdirSync(path);
+
+for (let jsonFile of jsonFileList) {
+ if (!jsonFile.endsWith(".json")) {
+ continue;
+ }
+
+ let jsonPath = path + "/" + jsonFile;
+ let langData = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
+
+ for (let key in langData) {
+ if (langData[key] === "") {
+ delete langData[key];
+ }
+ }
+
+ fs.writeFileSync(jsonPath, JSON.stringify(langData, null, 4) + "\n");
+}
diff --git a/extra/reset-migrate-aggregate-table-state.js b/extra/reset-migrate-aggregate-table-state.js
new file mode 100644
index 000000000..e6c51fbd0
--- /dev/null
+++ b/extra/reset-migrate-aggregate-table-state.js
@@ -0,0 +1,24 @@
+const { R } = require("redbean-node");
+const Database = require("../server/database");
+const args = require("args-parser")(process.argv);
+const { Settings } = require("../server/settings");
+
+const main = async () => {
+ console.log("Connecting the database");
+ Database.initDataDir(args);
+ await Database.connect(false, false, true);
+
+ console.log("Deleting all data from aggregate tables");
+ await R.exec("DELETE FROM stat_minutely");
+ await R.exec("DELETE FROM stat_hourly");
+ await R.exec("DELETE FROM stat_daily");
+
+ console.log("Resetting the aggregate table state");
+ await Settings.set("migrateAggregateTableState", "");
+
+ await Database.close();
+ console.log("Done");
+};
+
+main();
+
diff --git a/extra/reset-password.js b/extra/reset-password.js
index b87d90f16..e66173af1 100644
--- a/extra/reset-password.js
+++ b/extra/reset-password.js
@@ -3,6 +3,7 @@ console.log("== Uptime Kuma Reset Password Tool ==");
const Database = require("../server/database");
const { R } = require("redbean-node");
const readline = require("readline");
+const { passwordStrength } = require("check-password-strength");
const { initJWTSecret } = require("../server/util-server");
const User = require("../server/model/user");
const { io } = require("socket.io-client");
@@ -42,8 +43,15 @@ const main = async () => {
console.log("Using password from argument");
console.warn("\x1b[31m%s\x1b[0m", "Warning: the password might be stored, in plain text, in your shell's history");
password = confirmPassword = args["new-password"] + "";
+ if (passwordStrength(password).value === "Too weak") {
+ throw new Error("Password is too weak, please use a stronger password.");
+ }
} else {
password = await question("New Password: ");
+ if (passwordStrength(password).value === "Too weak") {
+ console.log("Password is too weak, please try again.");
+ continue;
+ }
confirmPassword = await question("Confirm New Password: ");
}
diff --git a/extra/test-docker.js b/extra/test-docker.js
deleted file mode 100644
index d7926fcca..000000000
--- a/extra/test-docker.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Check if docker is running
-const { exec } = require("child_process");
-
-exec("docker ps", (err, stdout, stderr) => {
- if (err) {
- console.error("Docker is not running. Please start docker and try again.");
- process.exit(1);
- }
-});
diff --git a/extra/update-language-files/index.js b/extra/update-language-files/index.js
index 5b748a98e..acb6bd467 100644
--- a/extra/update-language-files/index.js
+++ b/extra/update-language-files/index.js
@@ -2,7 +2,6 @@
import fs from "fs";
import util from "util";
-import rmSync from "../fs-rmSync.js";
/**
* Copy across the required language files
@@ -16,7 +15,10 @@ import rmSync from "../fs-rmSync.js";
*/
function copyFiles(langCode, baseLang) {
if (fs.existsSync("./languages")) {
- rmSync("./languages", { recursive: true });
+ fs.rmSync("./languages", {
+ recursive: true,
+ force: true,
+ });
}
fs.mkdirSync("./languages");
@@ -93,6 +95,9 @@ console.log("Updating: " + langCode);
copyFiles(langCode, baseLangCode);
await updateLanguage(langCode, baseLangCode);
-rmSync("./languages", { recursive: true });
+fs.rmSync("./languages", {
+ recursive: true,
+ force: true,
+});
console.log("Done. Fixing formatting by ESLint...");
diff --git a/extra/update-version.js b/extra/update-version.js
index 2bc13a78e..f9aead09d 100644
--- a/extra/update-version.js
+++ b/extra/update-version.js
@@ -5,7 +5,7 @@ const util = require("../src/util");
util.polyfill();
-const newVersion = process.env.VERSION;
+const newVersion = process.env.RELEASE_VERSION;
console.log("New Version: " + newVersion);
diff --git a/extra/update-wiki-version.js b/extra/update-wiki-version.js
index 003deec01..f6c961213 100644
--- a/extra/update-wiki-version.js
+++ b/extra/update-wiki-version.js
@@ -1,7 +1,7 @@
const childProcess = require("child_process");
const fs = require("fs");
-const newVersion = process.env.VERSION;
+const newVersion = process.env.RELEASE_VERSION;
if (!newVersion) {
console.log("Missing version");
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index ed0ad5034..000000000
--- a/package-lock.json
+++ /dev/null
@@ -1,16040 +0,0 @@
-{
- "name": "uptime-kuma",
- "version": "2.0.0-dev",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "uptime-kuma",
- "version": "2.0.0-dev",
- "license": "MIT",
- "dependencies": {
- "@grpc/grpc-js": "~1.7.3",
- "@louislam/ping": "~0.4.4-mod.1",
- "@louislam/sqlite3": "15.1.6",
- "@vvo/tzdb": "^6.125.0",
- "args-parser": "~1.3.0",
- "axios": "~0.28.1",
- "badge-maker": "~3.3.1",
- "bcryptjs": "~2.4.3",
- "chardet": "~1.4.0",
- "check-password-strength": "^2.0.5",
- "cheerio": "~1.0.0-rc.12",
- "chroma-js": "~2.4.2",
- "command-exists": "~1.2.9",
- "compare-versions": "~3.6.0",
- "compression": "~1.7.4",
- "croner": "~8.1.0",
- "dayjs": "~1.11.5",
- "dev-null": "^0.1.1",
- "dotenv": "~16.0.3",
- "express": "~4.19.2",
- "express-basic-auth": "~1.2.1",
- "express-static-gzip": "~2.1.7",
- "form-data": "~4.0.0",
- "gamedig": "^4.2.0",
- "html-escaper": "^3.0.3",
- "http-cookie-agent": "~5.0.4",
- "http-graceful-shutdown": "~3.1.7",
- "http-proxy-agent": "~5.0.0",
- "https-proxy-agent": "~5.0.1",
- "iconv-lite": "~0.6.3",
- "isomorphic-ws": "^5.0.0",
- "jsesc": "~3.0.2",
- "jsonata": "^2.0.3",
- "jsonwebtoken": "~9.0.0",
- "jwt-decode": "~3.1.2",
- "kafkajs": "^2.2.4",
- "knex": "^2.4.2",
- "limiter": "~2.1.0",
- "liquidjs": "^10.7.0",
- "mitt": "~3.0.1",
- "mongodb": "~4.17.1",
- "mqtt": "~4.3.7",
- "mssql": "~11.0.0",
- "mysql2": "~3.9.6",
- "nanoid": "~3.3.4",
- "net-snmp": "^3.11.2",
- "node-cloudflared-tunnel": "~1.0.9",
- "node-radius-client": "~1.0.0",
- "nodemailer": "~6.9.13",
- "nostr-tools": "^1.13.1",
- "notp": "~2.0.3",
- "openid-client": "^5.4.2",
- "password-hash": "~1.2.2",
- "pg": "~8.11.3",
- "pg-connection-string": "~2.6.2",
- "playwright-core": "~1.39.0",
- "prom-client": "~13.2.0",
- "prometheus-api-metrics": "~3.2.1",
- "promisify-child-process": "~4.1.2",
- "protobufjs": "~7.2.4",
- "qs": "~6.10.4",
- "redbean-node": "~0.3.0",
- "redis": "~4.5.1",
- "semver": "~7.5.4",
- "socket.io": "~4.7.5",
- "socket.io-client": "~4.7.5",
- "socks-proxy-agent": "6.1.1",
- "tar": "~6.2.1",
- "tcp-ping": "~0.1.1",
- "thirty-two": "~1.0.2",
- "tough-cookie": "~4.1.3",
- "uptime-kuma": "file:",
- "ws": "^8.13.0"
- },
- "devDependencies": {
- "@actions/github": "~5.1.1",
- "@fortawesome/fontawesome-svg-core": "~1.2.36",
- "@fortawesome/free-regular-svg-icons": "~5.15.4",
- "@fortawesome/free-solid-svg-icons": "~5.15.4",
- "@fortawesome/vue-fontawesome": "~3.0.0-5",
- "@playwright/test": "~1.39.0",
- "@popperjs/core": "~2.10.2",
- "@types/bootstrap": "~5.1.9",
- "@types/node": "^20.8.6",
- "@typescript-eslint/eslint-plugin": "^6.7.5",
- "@typescript-eslint/parser": "^6.7.5",
- "@vitejs/plugin-vue": "~5.0.1",
- "@vue/compiler-sfc": "~3.4.2",
- "@vuepic/vue-datepicker": "~3.4.8",
- "aedes": "^0.46.3",
- "bootstrap": "5.1.3",
- "chart.js": "~4.2.1",
- "chartjs-adapter-dayjs-4": "~1.0.4",
- "concurrently": "^7.1.0",
- "core-js": "~3.26.1",
- "cronstrue": "~2.24.0",
- "cross-env": "~7.0.3",
- "delay": "^5.0.0",
- "dns2": "~2.0.1",
- "dompurify": "~3.0.11",
- "eslint": "~8.14.0",
- "eslint-plugin-jsdoc": "~46.4.6",
- "eslint-plugin-vue": "~8.7.1",
- "favico.js": "~0.3.10",
- "get-port-please": "^3.1.1",
- "marked": "~4.2.5",
- "node-ssh": "~13.1.0",
- "postcss-html": "~1.5.0",
- "postcss-rtlcss": "~3.7.2",
- "postcss-scss": "~4.0.4",
- "prismjs": "~1.29.0",
- "qrcode": "~1.5.0",
- "rollup-plugin-visualizer": "^5.6.0",
- "sass": "~1.42.1",
- "stylelint": "^15.10.1",
- "stylelint-config-standard": "~25.0.0",
- "terser": "~5.15.0",
- "test": "~3.3.0",
- "typescript": "~4.4.4",
- "v-pagination-3": "~0.1.7",
- "vite": "~5.2.8",
- "vite-plugin-compression": "^0.5.1",
- "vite-plugin-vue-devtools": "^7.0.15",
- "vue": "~3.4.2",
- "vue-chartjs": "~5.2.0",
- "vue-confirm-dialog": "~1.0.2",
- "vue-contenteditable": "~3.0.4",
- "vue-i18n": "~9.2.2",
- "vue-image-crop-upload": "~3.0.3",
- "vue-multiselect": "~3.0.0-alpha.2",
- "vue-prism-editor": "~2.0.0-alpha.2",
- "vue-qrcode": "~1.0.0",
- "vue-router": "~4.2.5",
- "vue-toastification": "~2.0.0-rc.5",
- "vuedraggable": "~4.1.0",
- "wait-on": "^7.2.0",
- "whatwg-url": "~12.0.1"
- },
- "engines": {
- "node": "18 || >= 20.4.0"
- }
- },
- "node_modules/@actions/github": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.1.1.tgz",
- "integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@actions/http-client": "^2.0.1",
- "@octokit/core": "^3.6.0",
- "@octokit/plugin-paginate-rest": "^2.17.0",
- "@octokit/plugin-rest-endpoint-methods": "^5.13.0"
- }
- },
- "node_modules/@actions/http-client": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz",
- "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tunnel": "^0.0.6",
- "undici": "^5.25.4"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@antfu/utils": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.8.tgz",
- "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@aws-crypto/sha256-browser": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
- "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-crypto/supports-web-crypto": "^5.2.0",
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
- "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
- "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-crypto/sha256-js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
- "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-crypto/supports-web-crypto": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
- "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-crypto/util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
- "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "^3.222.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
- "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
- "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.600.0.tgz",
- "integrity": "sha512-8dYsnDLiD0rjujRiZZl0E57heUkHqMSFZHBi0YMs57SM8ODPxK3tahwDYZtS7bqanvFKZwGy+o9jIcij7jBOlA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.600.0",
- "@aws-sdk/client-sts": "3.600.0",
- "@aws-sdk/core": "3.598.0",
- "@aws-sdk/credential-provider-node": "3.600.0",
- "@aws-sdk/middleware-host-header": "3.598.0",
- "@aws-sdk/middleware-logger": "3.598.0",
- "@aws-sdk/middleware-recursion-detection": "3.598.0",
- "@aws-sdk/middleware-user-agent": "3.598.0",
- "@aws-sdk/region-config-resolver": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@aws-sdk/util-endpoints": "3.598.0",
- "@aws-sdk/util-user-agent-browser": "3.598.0",
- "@aws-sdk/util-user-agent-node": "3.598.0",
- "@smithy/config-resolver": "^3.0.2",
- "@smithy/core": "^2.2.1",
- "@smithy/fetch-http-handler": "^3.0.2",
- "@smithy/hash-node": "^3.0.1",
- "@smithy/invalid-dependency": "^3.0.1",
- "@smithy/middleware-content-length": "^3.0.1",
- "@smithy/middleware-endpoint": "^3.0.2",
- "@smithy/middleware-retry": "^3.0.4",
- "@smithy/middleware-serde": "^3.0.1",
- "@smithy/middleware-stack": "^3.0.1",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/node-http-handler": "^3.0.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "@smithy/url-parser": "^3.0.1",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.4",
- "@smithy/util-defaults-mode-node": "^3.0.4",
- "@smithy/util-endpoints": "^2.0.2",
- "@smithy/util-middleware": "^3.0.1",
- "@smithy/util-retry": "^3.0.1",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sso": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.598.0.tgz",
- "integrity": "sha512-nOI5lqPYa+YZlrrzwAJywJSw3MKVjvu6Ge2fCqQUNYMfxFB0NAaDFnl0EPjXi+sEbtCuz/uWE77poHbqiZ+7Iw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.598.0",
- "@aws-sdk/middleware-host-header": "3.598.0",
- "@aws-sdk/middleware-logger": "3.598.0",
- "@aws-sdk/middleware-recursion-detection": "3.598.0",
- "@aws-sdk/middleware-user-agent": "3.598.0",
- "@aws-sdk/region-config-resolver": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@aws-sdk/util-endpoints": "3.598.0",
- "@aws-sdk/util-user-agent-browser": "3.598.0",
- "@aws-sdk/util-user-agent-node": "3.598.0",
- "@smithy/config-resolver": "^3.0.2",
- "@smithy/core": "^2.2.1",
- "@smithy/fetch-http-handler": "^3.0.2",
- "@smithy/hash-node": "^3.0.1",
- "@smithy/invalid-dependency": "^3.0.1",
- "@smithy/middleware-content-length": "^3.0.1",
- "@smithy/middleware-endpoint": "^3.0.2",
- "@smithy/middleware-retry": "^3.0.4",
- "@smithy/middleware-serde": "^3.0.1",
- "@smithy/middleware-stack": "^3.0.1",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/node-http-handler": "^3.0.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "@smithy/url-parser": "^3.0.1",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.4",
- "@smithy/util-defaults-mode-node": "^3.0.4",
- "@smithy/util-endpoints": "^2.0.2",
- "@smithy/util-middleware": "^3.0.1",
- "@smithy/util-retry": "^3.0.1",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.600.0.tgz",
- "integrity": "sha512-7+I8RWURGfzvChyNQSyj5/tKrqRbzRl7H+BnTOf/4Vsw1nFOi5ROhlhD4X/Y0QCTacxnaoNcIrqnY7uGGvVRzw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sts": "3.600.0",
- "@aws-sdk/core": "3.598.0",
- "@aws-sdk/credential-provider-node": "3.600.0",
- "@aws-sdk/middleware-host-header": "3.598.0",
- "@aws-sdk/middleware-logger": "3.598.0",
- "@aws-sdk/middleware-recursion-detection": "3.598.0",
- "@aws-sdk/middleware-user-agent": "3.598.0",
- "@aws-sdk/region-config-resolver": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@aws-sdk/util-endpoints": "3.598.0",
- "@aws-sdk/util-user-agent-browser": "3.598.0",
- "@aws-sdk/util-user-agent-node": "3.598.0",
- "@smithy/config-resolver": "^3.0.2",
- "@smithy/core": "^2.2.1",
- "@smithy/fetch-http-handler": "^3.0.2",
- "@smithy/hash-node": "^3.0.1",
- "@smithy/invalid-dependency": "^3.0.1",
- "@smithy/middleware-content-length": "^3.0.1",
- "@smithy/middleware-endpoint": "^3.0.2",
- "@smithy/middleware-retry": "^3.0.4",
- "@smithy/middleware-serde": "^3.0.1",
- "@smithy/middleware-stack": "^3.0.1",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/node-http-handler": "^3.0.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "@smithy/url-parser": "^3.0.1",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.4",
- "@smithy/util-defaults-mode-node": "^3.0.4",
- "@smithy/util-endpoints": "^2.0.2",
- "@smithy/util-middleware": "^3.0.1",
- "@smithy/util-retry": "^3.0.1",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sts": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.600.0.tgz",
- "integrity": "sha512-KQG97B7LvTtTiGmjlrG1LRAY8wUvCQzrmZVV5bjrJ/1oXAU7DITYwVbSJeX9NWg6hDuSk0VE3MFwIXS2SvfLIA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.600.0",
- "@aws-sdk/core": "3.598.0",
- "@aws-sdk/credential-provider-node": "3.600.0",
- "@aws-sdk/middleware-host-header": "3.598.0",
- "@aws-sdk/middleware-logger": "3.598.0",
- "@aws-sdk/middleware-recursion-detection": "3.598.0",
- "@aws-sdk/middleware-user-agent": "3.598.0",
- "@aws-sdk/region-config-resolver": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@aws-sdk/util-endpoints": "3.598.0",
- "@aws-sdk/util-user-agent-browser": "3.598.0",
- "@aws-sdk/util-user-agent-node": "3.598.0",
- "@smithy/config-resolver": "^3.0.2",
- "@smithy/core": "^2.2.1",
- "@smithy/fetch-http-handler": "^3.0.2",
- "@smithy/hash-node": "^3.0.1",
- "@smithy/invalid-dependency": "^3.0.1",
- "@smithy/middleware-content-length": "^3.0.1",
- "@smithy/middleware-endpoint": "^3.0.2",
- "@smithy/middleware-retry": "^3.0.4",
- "@smithy/middleware-serde": "^3.0.1",
- "@smithy/middleware-stack": "^3.0.1",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/node-http-handler": "^3.0.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "@smithy/url-parser": "^3.0.1",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.4",
- "@smithy/util-defaults-mode-node": "^3.0.4",
- "@smithy/util-endpoints": "^2.0.2",
- "@smithy/util-middleware": "^3.0.1",
- "@smithy/util-retry": "^3.0.1",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/core": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.598.0.tgz",
- "integrity": "sha512-HaSjt7puO5Cc7cOlrXFCW0rtA0BM9lvzjl56x0A20Pt+0wxXGeTOZZOkXQIepbrFkV2e/HYukuT9e99vXDm59g==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/core": "^2.2.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/signature-v4": "^3.1.0",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.600.0.tgz",
- "integrity": "sha512-AIM+B06d1+71EuBrk2UR9ZZgRS3a+ARxE3oZKMZYlfqtZ3kY8w4DkhEt7OVruc6uSsMhkrcQT6nxsOxFSi4RtA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.600.0",
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.598.0.tgz",
- "integrity": "sha512-vi1khgn7yXzLCcgSIzQrrtd2ilUM0dWodxj3PQ6BLfP0O+q1imO3hG1nq7DVyJtq7rFHs6+9N8G4mYvTkxby2w==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.598.0.tgz",
- "integrity": "sha512-N7cIafi4HVlQvEgvZSo1G4T9qb/JMLGMdBsDCT5XkeJrF0aptQWzTFH0jIdZcLrMYvzPcuEyO3yCBe6cy/ba0g==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/fetch-http-handler": "^3.0.2",
- "@smithy/node-http-handler": "^3.0.1",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/smithy-client": "^3.1.2",
- "@smithy/types": "^3.1.0",
- "@smithy/util-stream": "^3.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.598.0.tgz",
- "integrity": "sha512-/ppcIVUbRwDIwJDoYfp90X3+AuJo2mvE52Y1t2VSrvUovYn6N4v95/vXj6LS8CNDhz2jvEJYmu+0cTMHdhI6eA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.598.0",
- "@aws-sdk/credential-provider-http": "3.598.0",
- "@aws-sdk/credential-provider-process": "3.598.0",
- "@aws-sdk/credential-provider-sso": "3.598.0",
- "@aws-sdk/credential-provider-web-identity": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@smithy/credential-provider-imds": "^3.1.1",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/shared-ini-file-loader": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.598.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.600.0.tgz",
- "integrity": "sha512-1pC7MPMYD45J7yFjA90SxpR0yaSvy+yZiq23aXhAPZLYgJBAxHLu0s0mDCk/piWGPh8+UGur5K0bVdx4B1D5hw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.598.0",
- "@aws-sdk/credential-provider-http": "3.598.0",
- "@aws-sdk/credential-provider-ini": "3.598.0",
- "@aws-sdk/credential-provider-process": "3.598.0",
- "@aws-sdk/credential-provider-sso": "3.598.0",
- "@aws-sdk/credential-provider-web-identity": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@smithy/credential-provider-imds": "^3.1.1",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/shared-ini-file-loader": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.598.0.tgz",
- "integrity": "sha512-rM707XbLW8huMk722AgjVyxu2tMZee++fNA8TJVNgs1Ma02Wx6bBrfIvlyK0rCcIRb0WdQYP6fe3Xhiu4e8IBA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/shared-ini-file-loader": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.598.0.tgz",
- "integrity": "sha512-5InwUmrAuqQdOOgxTccRayMMkSmekdLk6s+az9tmikq0QFAHUCtofI+/fllMXSR9iL6JbGYi1940+EUmS4pHJA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/client-sso": "3.598.0",
- "@aws-sdk/token-providers": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/shared-ini-file-loader": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.598.0.tgz",
- "integrity": "sha512-GV5GdiMbz5Tz9JO4NJtRoFXjW0GPEujA0j+5J/B723rTN+REHthJu48HdBKouHGhdzkDWkkh1bu52V02Wprw8w==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.598.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers": {
- "version": "3.600.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.600.0.tgz",
- "integrity": "sha512-cC9uqmX0rgx1efiJGqeR+i0EXr8RQ5SAzH7M45WNBZpYiLEe6reWgIYJY9hmOxuaoMdWSi8kekuN3IjTIORRjw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.600.0",
- "@aws-sdk/client-sso": "3.598.0",
- "@aws-sdk/client-sts": "3.600.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.600.0",
- "@aws-sdk/credential-provider-env": "3.598.0",
- "@aws-sdk/credential-provider-http": "3.598.0",
- "@aws-sdk/credential-provider-ini": "3.598.0",
- "@aws-sdk/credential-provider-node": "3.600.0",
- "@aws-sdk/credential-provider-process": "3.598.0",
- "@aws-sdk/credential-provider-sso": "3.598.0",
- "@aws-sdk/credential-provider-web-identity": "3.598.0",
- "@aws-sdk/types": "3.598.0",
- "@smithy/credential-provider-imds": "^3.1.1",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.598.0.tgz",
- "integrity": "sha512-WiaG059YBQwQraNejLIi0gMNkX7dfPZ8hDIhvMr5aVPRbaHH8AYF3iNSsXYCHvA2Cfa1O9haYXsuMF9flXnCmA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/middleware-logger": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.598.0.tgz",
- "integrity": "sha512-bxBjf/VYiu3zfu8SYM2S9dQQc3tz5uBAOcPz/Bt8DyyK3GgOpjhschH/2XuUErsoUO1gDJqZSdGOmuHGZQn00Q==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.598.0.tgz",
- "integrity": "sha512-vjT9BeFY9FeN0f8hm2l6F53tI0N5bUq6RcDkQXKNabXBnQxKptJRad6oP2X5y3FoVfBLOuDkQgiC2940GIPxtQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.598.0.tgz",
- "integrity": "sha512-4tjESlHG5B5MdjUaLK7tQs/miUtHbb6deauQx8ryqSBYOhfHVgb1ZnzvQR0bTrhpqUg0WlybSkDaZAICf9xctg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@aws-sdk/util-endpoints": "3.598.0",
- "@smithy/protocol-http": "^4.0.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.598.0.tgz",
- "integrity": "sha512-oYXhmTokSav4ytmWleCr3rs/1nyvZW/S0tdi6X7u+dLNL5Jee+uMxWGzgOrWK6wrQOzucLVjS4E/wA11Kv2GTw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/token-providers": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.598.0.tgz",
- "integrity": "sha512-TKY1EVdHVBnZqpyxyTHdpZpa1tUpb6nxVeRNn1zWG8QB5MvH4ALLd/jR+gtmWDNQbIG4cVuBOZFVL8hIYicKTA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/property-provider": "^3.1.1",
- "@smithy/shared-ini-file-loader": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sso-oidc": "^3.598.0"
- }
- },
- "node_modules/@aws-sdk/types": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.598.0.tgz",
- "integrity": "sha512-742uRl6z7u0LFmZwDrFP6r1wlZcgVPw+/TilluDJmCAR8BgRw3IR+743kUXKBGd8QZDRW2n6v/PYsi/AWCDDMQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/util-endpoints": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.598.0.tgz",
- "integrity": "sha512-Qo9UoiVVZxcOEdiOMZg3xb1mzkTxrhd4qSlg5QQrfWPJVx/QOg+Iy0NtGxPtHtVZNHZxohYwDwV/tfsnDSE2gQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/types": "^3.1.0",
- "@smithy/util-endpoints": "^2.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/util-locate-window": {
- "version": "3.568.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz",
- "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.598.0.tgz",
- "integrity": "sha512-36Sxo6F+ykElaL1mWzWjlg+1epMpSe8obwhCN1yGE7Js9ywy5U6k6l+A3q3YM9YRbm740sNxncbwLklMvuhTKw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/types": "^3.1.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.598.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.598.0.tgz",
- "integrity": "sha512-oyWGcOlfTdzkC6SVplyr0AGh54IMrDxbhg5RxJ5P+V4BKfcDoDcZV9xenUk9NsOi9MuUjxMumb9UJGkDhM1m0A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@aws-sdk/types": "3.598.0",
- "@smithy/node-config-provider": "^3.1.1",
- "@smithy/types": "^3.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "aws-crt": ">=1.0.0"
- },
- "peerDependenciesMeta": {
- "aws-crt": {
- "optional": true
- }
- }
- },
- "node_modules/@azure/abort-controller": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
- "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/core-auth": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz",
- "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-util": "^1.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-client": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz",
- "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-rest-pipeline": "^1.9.1",
- "@azure/core-tracing": "^1.0.0",
- "@azure/core-util": "^1.6.1",
- "@azure/logger": "^1.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-client/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-http-compat": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz",
- "integrity": "sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-client": "^1.3.0",
- "@azure/core-rest-pipeline": "^1.3.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-http-compat/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-lro": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz",
- "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-util": "^1.2.0",
- "@azure/logger": "^1.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-paging": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz",
- "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz",
- "integrity": "sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-tracing": "^1.0.1",
- "@azure/core-util": "^1.9.0",
- "@azure/logger": "^1.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@azure/core-tracing": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz",
- "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-util": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz",
- "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-util/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/identity": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.3.0.tgz",
- "integrity": "sha512-LHZ58/RsIpIWa4hrrE2YuJ/vzG1Jv9f774RfTTAVDZDriubvJ0/S5u4pnw4akJDlS0TiJb6VMphmVUFsWmgodQ==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.5.0",
- "@azure/core-client": "^1.9.2",
- "@azure/core-rest-pipeline": "^1.1.0",
- "@azure/core-tracing": "^1.0.0",
- "@azure/core-util": "^1.3.0",
- "@azure/logger": "^1.0.0",
- "@azure/msal-browser": "^3.11.1",
- "@azure/msal-node": "^2.9.2",
- "events": "^3.0.0",
- "jws": "^4.0.0",
- "open": "^8.0.0",
- "stoppable": "^1.1.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/identity/node_modules/jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "license": "MIT",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/@azure/identity/node_modules/jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "license": "MIT",
- "dependencies": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/@azure/keyvault-keys": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.8.0.tgz",
- "integrity": "sha512-jkuYxgkw0aaRfk40OQhFqDIupqblIOIlYESWB6DKCVDxQet1pyv86Tfk9M+5uFM0+mCs6+MUHU+Hxh3joiUn4Q==",
- "license": "MIT",
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
- "@azure/core-client": "^1.5.0",
- "@azure/core-http-compat": "^2.0.1",
- "@azure/core-lro": "^2.2.0",
- "@azure/core-paging": "^1.1.1",
- "@azure/core-rest-pipeline": "^1.8.1",
- "@azure/core-tracing": "^1.0.0",
- "@azure/core-util": "^1.0.0",
- "@azure/logger": "^1.0.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/logger": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz",
- "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/msal-browser": {
- "version": "3.17.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.17.0.tgz",
- "integrity": "sha512-csccKXmW2z7EkZ0I3yAoW/offQt+JECdTIV/KrnRoZyM7wCSsQWODpwod8ZhYy7iOyamcHApR9uCh0oD1M+0/A==",
- "license": "MIT",
- "dependencies": {
- "@azure/msal-common": "14.12.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-common": {
- "version": "14.12.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.12.0.tgz",
- "integrity": "sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-node": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.9.2.tgz",
- "integrity": "sha512-8tvi6Cos3m+0KmRbPjgkySXi+UQU/QiuVRFnrxIwt5xZlEEFa69O04RTaNESGgImyBBlYbo2mfE8/U8Bbdk1WQ==",
- "license": "MIT",
- "dependencies": {
- "@azure/msal-common": "14.12.0",
- "jsonwebtoken": "^9.0.0",
- "uuid": "^8.3.0"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
- "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.24.7",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
- "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
- "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helpers": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/template": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
- "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/generator/node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
- "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
- "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "browserslist": "^4.22.2",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
- "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-member-expression-to-functions": "^7.24.7",
- "@babel/helper-optimise-call-expression": "^7.24.7",
- "@babel/helper-replace-supers": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
- "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
- "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
- "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
- "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
- "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
- "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-simple-access": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
- "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
- "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
- "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-member-expression-to-functions": "^7.24.7",
- "@babel/helper-optimise-call-expression": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
- "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
- "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
- "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
- "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
- "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
- "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
- "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
- "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
- "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-decorators": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
- "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
- "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
- "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
- "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz",
- "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-typescript": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz",
- "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
- "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
- "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-environment-visitor": "^7.24.7",
- "@babel/helper-function-name": "^7.24.7",
- "@babel/helper-hoist-variables": "^7.24.7",
- "@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
- "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@csstools/css-parser-algorithms": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
- "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-tokenizer": "^2.3.1"
- }
- },
- "node_modules/@csstools/css-tokenizer": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
- "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": "^14 || ^16 || >=18"
- }
- },
- "node_modules/@csstools/media-query-list-parser": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
- "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.6.3",
- "@csstools/css-tokenizer": "^2.3.1"
- }
- },
- "node_modules/@csstools/selector-specificity": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
- "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "license": "MIT-0",
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^6.0.13"
- }
- },
- "node_modules/@es-joy/jsdoccomment": {
- "version": "0.40.1",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
- "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "comment-parser": "1.4.0",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
- "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
- "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
- "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
- "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
- "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
- "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
- "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
- "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
- "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
- "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
- "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
- "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
- "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
- "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
- "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
- "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
- "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
- "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
- "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
- "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
- "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
- "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
- "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.10.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
- "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
- "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.4.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@fastify/busboy": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@fortawesome/fontawesome-common-types": {
- "version": "0.2.36",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz",
- "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@fortawesome/fontawesome-svg-core": {
- "version": "1.2.36",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz",
- "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "@fortawesome/fontawesome-common-types": "^0.2.36"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@fortawesome/free-regular-svg-icons": {
- "version": "5.15.4",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz",
- "integrity": "sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "(CC-BY-4.0 AND MIT)",
- "dependencies": {
- "@fortawesome/fontawesome-common-types": "^0.2.36"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@fortawesome/free-solid-svg-icons": {
- "version": "5.15.4",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz",
- "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==",
- "dev": true,
- "hasInstallScript": true,
- "license": "(CC-BY-4.0 AND MIT)",
- "dependencies": {
- "@fortawesome/fontawesome-common-types": "^0.2.36"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@fortawesome/vue-fontawesome": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.8.tgz",
- "integrity": "sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@fortawesome/fontawesome-svg-core": "~1 || ~6",
- "vue": ">= 3.0.0 < 4"
- }
- },
- "node_modules/@gar/promisify": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
- "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@grpc/grpc-js": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz",
- "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==",
- "license": "Apache-2.0",
- "dependencies": {
- "@grpc/proto-loader": "^0.7.0",
- "@types/node": ">=12.12.47"
- },
- "engines": {
- "node": "^8.13.0 || >=10.10.0"
- }
- },
- "node_modules/@grpc/proto-loader": {
- "version": "0.7.13",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
- "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
- "license": "Apache-2.0",
- "dependencies": {
- "lodash.camelcase": "^4.3.0",
- "long": "^5.0.0",
- "protobufjs": "^7.2.5",
- "yargs": "^17.7.2"
- },
- "bin": {
- "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@hapi/hoek": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@hapi/topo": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
- "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.9.5",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
- "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@intlify/core-base": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz",
- "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@intlify/devtools-if": "9.2.2",
- "@intlify/message-compiler": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/devtools-if": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz",
- "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@intlify/shared": "9.2.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/message-compiler": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz",
- "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@intlify/shared": "9.2.2",
- "source-map": "0.6.1"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/message-compiler/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@intlify/shared": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz",
- "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/vue-devtools": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz",
- "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "license": "MIT"
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@js-joda/core": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.3.tgz",
- "integrity": "sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@kurkle/color": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
- "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@louislam/ping": {
- "version": "0.4.4-mod.1",
- "resolved": "https://registry.npmjs.org/@louislam/ping/-/ping-0.4.4-mod.1.tgz",
- "integrity": "sha512-uMq6qwL9/VYh2YBbDEhM7ZzJ8YON+juw/3k+28P3s9ue3uDMQ56MNPfywXoRpsxkU8RgjN0TDzEhQDzO1WisMw==",
- "license": "MIT",
- "dependencies": {
- "command-exists": "~1.2.9",
- "underscore": "~1.13.6"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@louislam/sqlite3": {
- "version": "15.1.6",
- "resolved": "https://registry.npmjs.org/@louislam/sqlite3/-/sqlite3-15.1.6.tgz",
- "integrity": "sha512-cVf7hcMrfywYnycatLvorngTFpL3BSWvEy7/NrEfcTyQX8xxj9fdeD553oCTv5fIAk85fluo6mzPq89V3YzrVA==",
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@mapbox/node-pre-gyp": "^1.0.0",
- "node-addon-api": "^4.2.0",
- "tar": "^6.1.11"
- },
- "optionalDependencies": {
- "node-gyp": "8.x"
- },
- "peerDependencies": {
- "node-gyp": "8.x"
- },
- "peerDependenciesMeta": {
- "node-gyp": {
- "optional": true
- }
- }
- },
- "node_modules/@louislam/sqlite3/node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "license": "MIT"
- },
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
- "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.7",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
- },
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
- }
- },
- "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "dependencies": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
- "node_modules/@mongodb-js/saslprep": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz",
- "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "sparse-bitfield": "^3.0.3"
- }
- },
- "node_modules/@noble/ciphers": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.2.0.tgz",
- "integrity": "sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw==",
- "license": "MIT",
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/curves": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz",
- "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==",
- "license": "MIT",
- "dependencies": {
- "@noble/hashes": "1.3.1"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz",
- "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==",
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@npmcli/fs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
- "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
- }
- },
- "node_modules/@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "deprecated": "This functionality has been moved to @npmcli/fs",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@octokit/auth-token": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
- "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/types": "^6.0.3"
- }
- },
- "node_modules/@octokit/core": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
- "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/auth-token": "^2.4.4",
- "@octokit/graphql": "^4.5.8",
- "@octokit/request": "^5.6.3",
- "@octokit/request-error": "^2.0.5",
- "@octokit/types": "^6.0.3",
- "before-after-hook": "^2.2.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/endpoint": {
- "version": "6.0.12",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
- "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/types": "^6.0.3",
- "is-plain-object": "^5.0.0",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/graphql": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
- "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/request": "^5.6.0",
- "@octokit/types": "^6.0.3",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/openapi-types": {
- "version": "12.11.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
- "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@octokit/plugin-paginate-rest": {
- "version": "2.21.3",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
- "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/types": "^6.40.0"
- },
- "peerDependencies": {
- "@octokit/core": ">=2"
- }
- },
- "node_modules/@octokit/plugin-rest-endpoint-methods": {
- "version": "5.16.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
- "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/types": "^6.39.0",
- "deprecation": "^2.3.1"
- },
- "peerDependencies": {
- "@octokit/core": ">=3"
- }
- },
- "node_modules/@octokit/request": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
- "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/endpoint": "^6.0.1",
- "@octokit/request-error": "^2.1.0",
- "@octokit/types": "^6.16.1",
- "is-plain-object": "^5.0.0",
- "node-fetch": "^2.6.7",
- "universal-user-agent": "^6.0.0"
- }
- },
- "node_modules/@octokit/request-error": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
- "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/types": "^6.0.3",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
- }
- },
- "node_modules/@octokit/types": {
- "version": "6.41.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz",
- "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@octokit/openapi-types": "^12.11.0"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@playwright/test": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz",
- "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "playwright": "1.39.0"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@polka/url": {
- "version": "1.0.0-next.25",
- "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz",
- "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@popperjs/core": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz",
- "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
- }
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
- "license": "BSD-3-Clause"
- },
- "node_modules/@redis/bloom": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.1.0.tgz",
- "integrity": "sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/client": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.4.2.tgz",
- "integrity": "sha512-oUdEjE0I7JS5AyaAjkD3aOXn9NhO7XKyPyXEyrgFDu++VrVBHUPnV6dgEya9TcMuj5nIJRuCzCm8ZP+c9zCHPw==",
- "license": "MIT",
- "dependencies": {
- "cluster-key-slot": "1.1.1",
- "generic-pool": "3.9.0",
- "yallist": "4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@redis/graph": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz",
- "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/json": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz",
- "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/search": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.0.tgz",
- "integrity": "sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@redis/time-series": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz",
- "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
- }
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
- "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
- "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
- "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
- "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
- "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
- "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
- "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
- "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
- "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
- "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
- "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
- "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
- "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
- "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
- "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
- "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
- "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@scure/base": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz",
- "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==",
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT"
- },
- "node_modules/@scure/bip32": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz",
- "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==",
- "license": "MIT",
- "dependencies": {
- "@noble/curves": "~1.1.0",
- "@noble/hashes": "~1.3.1",
- "@scure/base": "~1.1.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@scure/bip39": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz",
- "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==",
- "license": "MIT",
- "dependencies": {
- "@noble/hashes": "~1.3.0",
- "@scure/base": "~1.1.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@sideway/address": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
- "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
- },
- "node_modules/@sideway/formula": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@sideway/pinpoint": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@sindresorhus/is": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
- "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
- },
- "node_modules/@smithy/abort-controller": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.0.tgz",
- "integrity": "sha512-XOm4LkuC0PsK1sf2bBJLIlskn5ghmVxiEBVlo/jg0R8hxASBKYYgOoJEhKWgOr4vWGkN+5rC+oyBAqHYtxjnwQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/config-resolver": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.3.tgz",
- "integrity": "sha512-4wHqCMkdfVDP4qmr4fVPYOFOH+vKhOv3X4e6KEU9wIC8xXUQ24tnF4CW+sddGDX1zU86GGyQ7A+rg2xmUD6jpQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/types": "^3.2.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/core": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.3.tgz",
- "integrity": "sha512-SpyLOL2vgE6sUYM6nQfu82OirCPkCDKctyG3aMgjMlDPTJpUlmlNH0ttu9ZWwzEjrzzr8uABmPjJTRI7gk1HFQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/middleware-endpoint": "^3.0.3",
- "@smithy/middleware-retry": "^3.0.6",
- "@smithy/middleware-serde": "^3.0.2",
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/smithy-client": "^3.1.4",
- "@smithy/types": "^3.2.0",
- "@smithy/util-middleware": "^3.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/credential-provider-imds": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.2.tgz",
- "integrity": "sha512-gqVmUaNoeqyrOAjgZg+rTmFLsphh/vS59LCMdFfVpthVS0jbfBzvBmEPktBd+y9ME4DYMGHFAMSYJDK8q0noOQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/property-provider": "^3.1.2",
- "@smithy/types": "^3.2.0",
- "@smithy/url-parser": "^3.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/fetch-http-handler": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.1.0.tgz",
- "integrity": "sha512-s7oQjEOUH9TYjctpITtWF4qxOdg7pBrP9eigEQ8SBsxF3dRFV0S28pGMllC83DUr7ECmErhO/BUwnULfoNhKgQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/querystring-builder": "^3.0.2",
- "@smithy/types": "^3.2.0",
- "@smithy/util-base64": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@smithy/hash-node": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.2.tgz",
- "integrity": "sha512-43uGA6o6QJQdXwAogybdTDHDd3SCdKyoiHIHb8PpdE2rKmVicjG9b1UgVwdgO8QPytmVqHFaUw27M3LZKwu8Yg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/invalid-dependency": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.2.tgz",
- "integrity": "sha512-+BAY3fMhomtq470tswXyrdVBSUhiLuhBVT+rOmpbz5e04YX+s1dX4NxTLzZGwBjCpeWZNtTxP8zbIvvFk81gUg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@smithy/is-array-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
- "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/middleware-content-length": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.2.tgz",
- "integrity": "sha512-/Havz3PkYIEmwpqkyRTR21yJsWnFbD1ec4H1pUL+TkDnE7RCQkAVUQepLL/UeCaZeCBXvfdoKbOjSbV01xIinQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/middleware-endpoint": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.3.tgz",
- "integrity": "sha512-ARAXHodhj4tttKa9y75zvENdSoHq6VGsSi7XS3+yLutrnxttJs6N10UMInCC1yi3/bopT8xug3iOP/y9R6sKJQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/middleware-serde": "^3.0.2",
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/shared-ini-file-loader": "^3.1.2",
- "@smithy/types": "^3.2.0",
- "@smithy/url-parser": "^3.0.2",
- "@smithy/util-middleware": "^3.0.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/middleware-retry": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.6.tgz",
- "integrity": "sha512-ICsFKp8eAyIMmxN5UT3IU37S6886L879TKtgxPsn/VD/laYNwqTLmJaCAn5//+2fRIrV0dnHp6LFlMwdXlWoUQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/service-error-classification": "^3.0.2",
- "@smithy/smithy-client": "^3.1.4",
- "@smithy/types": "^3.2.0",
- "@smithy/util-middleware": "^3.0.2",
- "@smithy/util-retry": "^3.0.2",
- "tslib": "^2.6.2",
- "uuid": "^9.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/middleware-retry/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "optional": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@smithy/middleware-serde": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.2.tgz",
- "integrity": "sha512-oT2abV5zLhBucJe1LIIFEcRgIBDbZpziuMPswTMbBQNcaEUycLFvX63zsFmqfwG+/ZQKsNx+BSE8W51CMuK7Yw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/middleware-stack": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.2.tgz",
- "integrity": "sha512-6fRcxomlNKBPIy/YjcnC7YHpMAjRvGUYlYVJAfELqZjkW0vQegNcImjY7T1HgYA6u3pAcCxKVBLYnkTw8z/l0A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/node-config-provider": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.2.tgz",
- "integrity": "sha512-388fEAa7+6ORj/BDC70peg3fyFBTTXJyXfXJ0Bwd6FYsRltePr2oGzIcm5AuC1WUSLtZ/dF+hYOnfTMs04rLvA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/property-provider": "^3.1.2",
- "@smithy/shared-ini-file-loader": "^3.1.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/node-http-handler": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.0.tgz",
- "integrity": "sha512-pOpgB6B+VLXLwAyyvRz+ZAVXABlbAsJ2xvn3WZvrppAPImxwQOPFbeSUzWYMhpC8Tr7yQ3R8fG990QDhskkf1Q==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/abort-controller": "^3.1.0",
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/querystring-builder": "^3.0.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/property-provider": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.2.tgz",
- "integrity": "sha512-Hzp32BpeFFexBpO1z+ts8okbq/VLzJBadxanJAo/Wf2CmvXMBp6Q/TLWr7Js6IbMEcr0pDZ02V3u1XZkuQUJaA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/protocol-http": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.2.tgz",
- "integrity": "sha512-X/90xNWIOqSR2tLUyWxVIBdatpm35DrL44rI/xoeBWUuanE0iyCXJpTcnqlOpnEzgcu0xCKE06+g70TTu2j7RQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/querystring-builder": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.2.tgz",
- "integrity": "sha512-xhv1+HacDYsOLdNt7zW+8Fe779KYAzmWvzs9bC5NlKM8QGYCwwuFwDBynhlU4D5twgi2pZ14Lm4h6RiAazCtmA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "@smithy/util-uri-escape": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/querystring-parser": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.2.tgz",
- "integrity": "sha512-C5hyRKgrZGPNh5QqIWzXnW+LXVrPmVQO0iJKjHeb5v3C61ZkP9QhrKmbfchcTyg/VnaE0tMNf/nmLpQlWuiqpg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/service-error-classification": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.2.tgz",
- "integrity": "sha512-cu0WV2XRttItsuXlcM0kq5MKdphbMMmSd2CXF122dJ75NrFE0o7rruXFGfxAp3BKzgF/DMxX+PllIA/cj4FHMw==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/shared-ini-file-loader": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.2.tgz",
- "integrity": "sha512-tgnXrXbLMO8vo6VeuqabMw/eTzQHlLmZx0TC0TjtjJghnD0Xl4pEnJtBjTJr6XF5fHMNrt5BcczDXHJT9yNQnA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/signature-v4": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.1.tgz",
- "integrity": "sha512-2/vlG86Sr489XX8TA/F+VDA+P04ESef04pSz0wRtlQBExcSPjqO08rvrkcas2zLnJ51i+7ukOURCkgqixBYjSQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "@smithy/types": "^3.2.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-middleware": "^3.0.2",
- "@smithy/util-uri-escape": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/smithy-client": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.4.tgz",
- "integrity": "sha512-y6xJROGrIoitjpwXLY7P9luDHvuT9jWpAluliuSFdBymFxcl6iyQjo9U/JhYfRHFNTruqsvKOrOESVuPGEcRmQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/middleware-endpoint": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.2",
- "@smithy/protocol-http": "^4.0.2",
- "@smithy/types": "^3.2.0",
- "@smithy/util-stream": "^3.0.4",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/types": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.2.0.tgz",
- "integrity": "sha512-cKyeKAPazZRVqm7QPvcPD2jEIt2wqDPAL1KJKb0f/5I7uhollvsWZuZKLclmyP6a+Jwmr3OV3t+X0pZUUHS9BA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/url-parser": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.2.tgz",
- "integrity": "sha512-pRiPHrgibeAr4avtXDoBHmTLtthwA4l8jKYRfZjNgp+bBPyxDMPRg2TMJaYxqbKemvrOkHu9MIBTv2RkdNfD6w==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/querystring-parser": "^3.0.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@smithy/util-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz",
- "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-body-length-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
- "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@smithy/util-body-length-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
- "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-config-provider": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
- "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-defaults-mode-browser": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.6.tgz",
- "integrity": "sha512-tAgoc++Eq+KL7g55+k108pn7nAob3GLWNEMbXhZIQyBcBNaE/o3+r4AEbae0A8bWvLRvArVsjeiuhMykGa04/A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/property-provider": "^3.1.2",
- "@smithy/smithy-client": "^3.1.4",
- "@smithy/types": "^3.2.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@smithy/util-defaults-mode-node": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.6.tgz",
- "integrity": "sha512-UNerul6/E8aiCyFTBHk+RSIZCo7m96d/N5K3FeO/wFeZP6oy5HAicLzxqa85Wjv7MkXSxSySX29L/LwTV/QMag==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/config-resolver": "^3.0.3",
- "@smithy/credential-provider-imds": "^3.1.2",
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/property-provider": "^3.1.2",
- "@smithy/smithy-client": "^3.1.4",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@smithy/util-endpoints": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.3.tgz",
- "integrity": "sha512-Dyi+pfLglDHSGsKSYunuUUSFM5V0tz7UDgv1Ex97yg+Xkn0Eb0rH0rcvl1n0MaJ11fac3HKDOH0DkALyQYCQag==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-hex-encoding": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
- "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-middleware": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.2.tgz",
- "integrity": "sha512-7WW5SD0XVrpfqljBYzS5rLR+EiDzl7wCVJZ9Lo6ChNFV4VYDk37Z1QI5w/LnYtU/QKnSawYoHRd7VjSyC8QRQQ==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-retry": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.2.tgz",
- "integrity": "sha512-HUVOb1k8p/IH6WFUjsLa+L9H1Zi/FAAB2CDOpWuffI1b2Txi6sknau8kNfC46Xrt39P1j2KDzCE1UlLa2eW5+A==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/service-error-classification": "^3.0.2",
- "@smithy/types": "^3.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-stream": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.4.tgz",
- "integrity": "sha512-CcMioiaOOsEVdb09pS7ux1ij7QcQ2jE/cE1+iin1DXMeRgAEQN/47m7Xztu7KFQuQsj0A5YwB2UN45q97CqKCg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/fetch-http-handler": "^3.1.0",
- "@smithy/node-http-handler": "^3.1.0",
- "@smithy/types": "^3.2.0",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-uri-escape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
- "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
- "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
- "license": "MIT"
- },
- "node_modules/@szmarczak/http-timer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
- "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
- "license": "MIT",
- "dependencies": {
- "defer-to-connect": "^2.0.1"
- },
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/@tediousjs/connection-string": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz",
- "integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==",
- "license": "MIT"
- },
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@types/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/body-parser": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
- "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
- "license": "MIT",
- "dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/bootstrap": {
- "version": "5.1.13",
- "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.13.tgz",
- "integrity": "sha512-1hIIOgfkMlyQCQz/3ae53xr6ZN2d6EDj/n3G+Sh/LBsBUVigyDmnCbLwsaXJJ1GBGlkjgfXVoyIvEPowQw25xQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@popperjs/core": "^2.9.2"
- }
- },
- "node_modules/@types/connect": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
- "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/content-disposition": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz",
- "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==",
- "license": "MIT"
- },
- "node_modules/@types/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==",
- "license": "MIT"
- },
- "node_modules/@types/cookies": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.9.0.tgz",
- "integrity": "sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==",
- "license": "MIT",
- "dependencies": {
- "@types/connect": "*",
- "@types/express": "*",
- "@types/keygrip": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/cors": {
- "version": "2.8.17",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
- "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
- "license": "MIT",
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "node_modules/@types/express-serve-static-core": {
- "version": "4.19.5",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
- "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/http-assert": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz",
- "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==",
- "license": "MIT"
- },
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
- "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
- "license": "MIT"
- },
- "node_modules/@types/http-errors": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
- "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/keygrip": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz",
- "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==",
- "license": "MIT"
- },
- "node_modules/@types/koa": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.15.0.tgz",
- "integrity": "sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==",
- "license": "MIT",
- "dependencies": {
- "@types/accepts": "*",
- "@types/content-disposition": "*",
- "@types/cookies": "*",
- "@types/http-assert": "*",
- "@types/http-errors": "*",
- "@types/keygrip": "*",
- "@types/koa-compose": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/koa-compose": {
- "version": "3.2.8",
- "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz",
- "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==",
- "license": "MIT",
- "dependencies": {
- "@types/koa": "*"
- }
- },
- "node_modules/@types/mime": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
- "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
- "license": "MIT"
- },
- "node_modules/@types/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "20.14.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.8.tgz",
- "integrity": "sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~5.26.4"
- }
- },
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
- "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/qs": {
- "version": "6.9.15",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
- "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
- "license": "MIT"
- },
- "node_modules/@types/range-parser": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
- "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
- "license": "MIT"
- },
- "node_modules/@types/readable-stream": {
- "version": "4.0.14",
- "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.14.tgz",
- "integrity": "sha512-xZn/AuUbCMShGsqH/ehZtGDwQtbx00M9rZ2ENLe4tOjFZ/JFeWMhEZkk2fEe1jAUqqEAURIkFJ7Az/go8mM1/w==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/send": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
- "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
- "license": "MIT",
- "dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "node_modules/@types/serve-static": {
- "version": "1.15.7",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
- "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
- "license": "MIT",
- "dependencies": {
- "@types/http-errors": "*",
- "@types/node": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/ssh2": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.0.tgz",
- "integrity": "sha512-YcT8jP5F8NzWeevWvcyrrLB3zcneVjzYY9ZDSMAMboI+2zR1qYWFhwsyOFVzT7Jorn67vqxC0FRiw8YyG9P1ww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "^18.11.18"
- }
- },
- "node_modules/@types/ssh2/node_modules/@types/node": {
- "version": "18.19.39",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz",
- "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~5.26.4"
- }
- },
- "node_modules/@types/webidl-conversions": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
- "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
- "license": "MIT"
- },
- "node_modules/@types/whatwg-url": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
- "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/webidl-conversions": "*"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
- "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/type-utils": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
- "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
- "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
- "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.21.0",
- "@typescript-eslint/utils": "6.21.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
- "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
- "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
- "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
- "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.21.0",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz",
- "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "peerDependencies": {
- "vite": "^5.0.0",
- "vue": "^3.2.25"
- }
- },
- "node_modules/@vue/babel-helper-vue-transform-on": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz",
- "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vue/babel-plugin-jsx": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz",
- "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "~7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/template": "^7.23.9",
- "@babel/traverse": "^7.23.9",
- "@babel/types": "^7.23.9",
- "@vue/babel-helper-vue-transform-on": "1.2.2",
- "@vue/babel-plugin-resolve-type": "1.2.2",
- "camelcase": "^6.3.0",
- "html-tags": "^3.3.1",
- "svg-tags": "^1.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- }
- }
- },
- "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@vue/babel-plugin-resolve-type": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz",
- "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.23.5",
- "@babel/helper-module-imports": "~7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/parser": "^7.23.9",
- "@vue/compiler-sfc": "^3.4.15"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@vue/compiler-core": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.30.tgz",
- "integrity": "sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.24.7",
- "@vue/shared": "3.4.30",
- "entities": "^4.5.0",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.30.tgz",
- "integrity": "sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-core": "3.4.30",
- "@vue/shared": "3.4.30"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.30.tgz",
- "integrity": "sha512-8vElKklHn/UY8+FgUFlQrYAPbtiSB2zcgeRKW7HkpSRn/JjMRmZvuOtwDx036D1aqKNSTtXkWRfqx53Qb+HmMg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.24.7",
- "@vue/compiler-core": "3.4.30",
- "@vue/compiler-dom": "3.4.30",
- "@vue/compiler-ssr": "3.4.30",
- "@vue/shared": "3.4.30",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.10",
- "postcss": "^8.4.38",
- "source-map-js": "^1.2.0"
- }
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.30.tgz",
- "integrity": "sha512-ZJ56YZGXJDd6jky4mmM0rNaNP6kIbQu9LTKZDhcpddGe/3QIalB1WHHmZ6iZfFNyj5mSypTa4+qDJa5VIuxMSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.4.30",
- "@vue/shared": "3.4.30"
- }
- },
- "node_modules/@vue/devtools-api": {
- "version": "6.6.3",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz",
- "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vue/devtools-core": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.3.4.tgz",
- "integrity": "sha512-HiaskdszC1ajYhZkglBzc4BBb4OHAhYonoOaQMx62ZId++ezpd4n0CbM9SXYp8o1JhxImSdueKgJgtyvhm4vAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-kit": "^7.3.4",
- "@vue/devtools-shared": "^7.3.4",
- "mitt": "^3.0.1",
- "nanoid": "^3.3.4",
- "pathe": "^1.1.2",
- "vite-hot-client": "^0.2.3"
- },
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/@vue/devtools-kit": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.4.tgz",
- "integrity": "sha512-DalQZWaFLRyA4qfKT0WT7e+q2AwvYoTwd0pWqswHqcpviXw+oU6FlSJHMrEACB3lBHjN1KBS9Kh527sWIe1vcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-shared": "^7.3.4",
- "birpc": "^0.2.17",
- "hookable": "^5.5.3",
- "mitt": "^3.0.1",
- "perfect-debounce": "^1.0.0",
- "speakingurl": "^14.0.1",
- "superjson": "^2.2.1"
- }
- },
- "node_modules/@vue/devtools-shared": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.4.tgz",
- "integrity": "sha512-5S5cHh7oWLZdboujnLteR3rT8UGfKHfA34aGLyFRB/B5TqBxmeLW1Rq32xW6TCDEy4isoYsYHGwJVp6DQcpiDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "rfdc": "^1.4.1"
- }
- },
- "node_modules/@vue/reactivity": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.30.tgz",
- "integrity": "sha512-bVJurnCe3LS0JII8PPoAA63Zd2MBzcKrEzwdQl92eHCcxtIbxD2fhNwJpa+KkM3Y/A4T5FUnmdhgKwOf6BfbcA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/shared": "3.4.30"
- }
- },
- "node_modules/@vue/runtime-core": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.30.tgz",
- "integrity": "sha512-qaFEbnNpGz+tlnkaualomogzN8vBLkgzK55uuWjYXbYn039eOBZrWxyXWq/7qh9Bz2FPifZqGjVDl/FXiq9L2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.4.30",
- "@vue/shared": "3.4.30"
- }
- },
- "node_modules/@vue/runtime-dom": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.30.tgz",
- "integrity": "sha512-tV6B4YiZRj5QsaJgw2THCy5C1H+2UeywO9tqgWEc21tn85qHEERndHN/CxlyXvSBFrpmlexCIdnqPuR9RM9thw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.4.30",
- "@vue/runtime-core": "3.4.30",
- "@vue/shared": "3.4.30",
- "csstype": "^3.1.3"
- }
- },
- "node_modules/@vue/server-renderer": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.30.tgz",
- "integrity": "sha512-TBD3eqR1DeDc0cMrXS/vEs/PWzq1uXxnvjoqQuDGFIEHFIwuDTX/KWAQKIBjyMWLFHEeTDGYVsYci85z2UbTDg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-ssr": "3.4.30",
- "@vue/shared": "3.4.30"
- },
- "peerDependencies": {
- "vue": "3.4.30"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.30.tgz",
- "integrity": "sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vuepic/vue-datepicker": {
- "version": "3.4.8",
- "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-3.4.8.tgz",
- "integrity": "sha512-nbuMA7IgjtT99LqcjSTSUcl7omTZSB+7vYSWQ9gQm31Frm/1wn54fT1Q0HaRD9nHXX982AACbqeND4K80SKONw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "date-fns": "^2.29.2"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "vue": ">=3.2.0"
- }
- },
- "node_modules/@vvo/tzdb": {
- "version": "6.139.0",
- "resolved": "https://registry.npmjs.org/@vvo/tzdb/-/tzdb-6.139.0.tgz",
- "integrity": "sha512-LpBMlXJIcPddaK3ow5dnqB9z3+EzziCOHz5T6QhshdKu8QU9FW2n8MaDlc2ubxVaJPHerFyq4V8BsCV+T1+lVw==",
- "license": "MIT"
- },
- "node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "license": "ISC"
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "license": "MIT",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
- "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/aedes": {
- "version": "0.46.3",
- "resolved": "https://registry.npmjs.org/aedes/-/aedes-0.46.3.tgz",
- "integrity": "sha512-i3B+H74uNRhlqcs/JdrMp7e3daz4Cwls0x4yLcfjGXz2tIwnxhF6od4m86O6yyNdz/Gg3jfY3q0sc/Cz8qzg6g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aedes-packet": "^2.3.1",
- "aedes-persistence": "^8.1.3",
- "bulk-write-stream": "^2.0.1",
- "end-of-stream": "^1.4.4",
- "fastfall": "^1.5.1",
- "fastparallel": "^2.4.1",
- "fastseries": "^2.0.0",
- "hyperid": "^3.0.0",
- "mqemitter": "^4.5.0",
- "mqtt-packet": "^7.1.2",
- "readable-stream": "^3.6.0",
- "retimer": "^3.0.0",
- "reusify": "^1.0.4",
- "uuid": "^8.3.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/aedes-packet": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/aedes-packet/-/aedes-packet-2.3.1.tgz",
- "integrity": "sha512-LqBd57uc2rui2RbjycW17dylglejG26mM4ewVXGNDnVp/SUHFVEgm7d1HTmYrnSkSCNoHti042qgcTwv/F+BtQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mqtt-packet": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aedes-packet/node_modules/mqtt-packet": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz",
- "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.2",
- "debug": "^4.1.1",
- "process-nextick-args": "^2.0.1"
- }
- },
- "node_modules/aedes-persistence": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/aedes-persistence/-/aedes-persistence-8.1.3.tgz",
- "integrity": "sha512-VMCjEV+2g1TNJb/IlDEUy6SP9crT+QUhe2xc6UjyqrFNBNgTvHmOefXY7FxWrwmR2QA02vwg3+5p/JXkyg/Dkw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aedes-packet": "^2.3.1",
- "from2": "^2.3.0",
- "qlobber": "^5.0.3"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/agentkeepalive": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
- "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "humanize-ms": "^1.2.1"
- },
- "engines": {
- "node": ">= 8.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/anafanafo": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anafanafo/-/anafanafo-2.0.0.tgz",
- "integrity": "sha512-Nlfq7NC4AOkTJerWRIZcOAiMNtIDVIGWGvQ98O7Jl6Kr2Dk0dX5u4MqN778kSRTy5KRqchpLdF2RtLFEz9FVkQ==",
- "license": "MIT",
- "dependencies": {
- "char-width-table-consumer": "^1.0.0"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "license": "MIT"
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "license": "ISC"
- },
- "node_modules/are-docs-informative": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
- "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/args-parser": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/args-parser/-/args-parser-1.3.0.tgz",
- "integrity": "sha512-If3Zi4BSjlQIJ9fgAhSiKi0oJtgMzSqh0H4wvl7XSeO16FKx7QqaHld8lZeEajPX7y1C5qKKeNgyrfyvmjmjUQ==",
- "license": "Apache-2.0"
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
- "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.5",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "license": "MIT"
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
- "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.22.3",
- "es-errors": "^1.2.1",
- "get-intrinsic": "^1.2.3",
- "is-array-buffer": "^3.0.4",
- "is-shared-array-buffer": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/asn1-ber": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/asn1-ber/-/asn1-ber-1.2.2.tgz",
- "integrity": "sha512-CbNem/7hxrjSiOAOOTX4iZxu+0m3jiLqlsERQwwPM1IDR/22M8IPpA1VVndCLw5KtjRYyRODbvAEIfuTogNDng=="
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "license": "MIT"
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
- "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/await-lock": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz",
- "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==",
- "license": "MIT"
- },
- "node_modules/axios": {
- "version": "0.28.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz",
- "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==",
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.0",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/babel-plugin-add-module-exports": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz",
- "integrity": "sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "node_modules/babel-runtime/node_modules/core-js": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT"
- },
- "node_modules/babel-runtime/node_modules/regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/badge-maker": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/badge-maker/-/badge-maker-3.3.1.tgz",
- "integrity": "sha512-OO/PS7Zg2E6qaUWzHEHt21Q5VjcFBAJVA8ztgT/fIdSZFBUwoyeo0ZhA6V5tUM8Vcjq8DJl6jfGhpjESssyqMQ==",
- "license": "CC0-1.0",
- "dependencies": {
- "anafanafo": "2.0.0",
- "css-color-converter": "^2.0.0"
- },
- "bin": {
- "badge": "lib/badge-cli.js"
- },
- "engines": {
- "node": ">= 10",
- "npm": ">= 5"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "license": "MIT"
- },
- "node_modules/barse": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/barse/-/barse-0.4.3.tgz",
- "integrity": "sha512-UEpvriJqAn8zuVinYICuKoPttZy3XxXEoqX/V2uYAL4zzJRuNzCK3+20nAu3YUIa2U7G53kf90wfBIp9/A+Odw==",
- "license": "MIT",
- "dependencies": {
- "readable-stream": "~1.0.2"
- }
- },
- "node_modules/barse/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "license": "MIT"
- },
- "node_modules/barse/node_modules/readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/barse/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "license": "MIT",
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
- },
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
- "node_modules/bcryptjs": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
- "license": "MIT"
- },
- "node_modules/before-after-hook": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/binary-search": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
- "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==",
- "license": "CC0-1.0"
- },
- "node_modules/bintrees": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz",
- "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==",
- "license": "MIT"
- },
- "node_modules/birpc": {
- "version": "0.2.17",
- "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz",
- "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "license": "MIT",
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/body-parser/node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/body-parser/node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "license": "ISC"
- },
- "node_modules/bootstrap": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz",
- "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/bootstrap"
- },
- "peerDependencies": {
- "@popperjs/core": "^2.10.2"
- }
- },
- "node_modules/bowser": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
- "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.23.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
- "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "caniuse-lite": "^1.0.30001629",
- "electron-to-chromium": "^1.4.796",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.16"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bson": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
- "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "buffer": "^5.6.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "license": "MIT"
- },
- "node_modules/buildcheck": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz",
- "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bulk-write-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/bulk-write-stream/-/bulk-write-stream-2.0.1.tgz",
- "integrity": "sha512-XWOLjgHtpDasHfwM8oO4df1JoZwa7/OwTsXDzh4rUTo+9CowzeOFBZz43w+H14h1fyq+xl28tVIBrdjcjj4Gug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "node_modules/bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "run-applescript": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "@npmcli/fs": "^1.0.0",
- "@npmcli/move-file": "^1.0.1",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "infer-owner": "^1.0.4",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.1",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^1.0.3",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^8.0.1",
- "tar": "^6.0.2",
- "unique-filename": "^1.1.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/cacheable-lookup": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
- "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/cacheable-request": {
- "version": "10.2.14",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
- "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
- "license": "MIT",
- "dependencies": {
- "@types/http-cache-semantics": "^4.0.2",
- "get-stream": "^6.0.1",
- "http-cache-semantics": "^4.1.1",
- "keyv": "^4.5.3",
- "mimic-response": "^4.0.0",
- "normalize-url": "^8.0.0",
- "responselike": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/camelcase-keys": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
- "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "camelcase": "^6.3.0",
- "map-obj": "^4.1.0",
- "quick-lru": "^5.1.1",
- "type-fest": "^1.2.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/camelcase-keys/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001636",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz",
- "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/char-width-table-consumer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/char-width-table-consumer/-/char-width-table-consumer-1.0.0.tgz",
- "integrity": "sha512-Fz4UD0LBpxPgL9i29CJ5O4KANwaMnX/OhhbxzvNa332h+9+nRKyeuLw4wA51lt/ex67+/AdsoBQJF3kgX2feYQ==",
- "license": "MIT",
- "dependencies": {
- "binary-search": "^1.3.5"
- }
- },
- "node_modules/chardet": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.4.0.tgz",
- "integrity": "sha512-NpwMDdSIprbYx1CLnfbxEIarI0Z+s9MssEgggMNheGM+WD68yOhV7IEA/3r6tr0yTRgQD0HuZJDw32s99i6L+A==",
- "license": "MIT"
- },
- "node_modules/chart.js": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz",
- "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@kurkle/color": "^0.3.0"
- },
- "engines": {
- "pnpm": "^7.0.0"
- }
- },
- "node_modules/chartjs-adapter-dayjs-4": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/chartjs-adapter-dayjs-4/-/chartjs-adapter-dayjs-4-1.0.4.tgz",
- "integrity": "sha512-yy9BAYW4aNzPVrCWZetbILegTRb7HokhgospPoC3b5iZ5qdlqNmXts2KdSp6AqnjkPAp/YWyHDxLvIvwt5x81w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "chart.js": ">=4.0.1",
- "dayjs": "^1.9.7"
- }
- },
- "node_modules/check-password-strength": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/check-password-strength/-/check-password-strength-2.0.10.tgz",
- "integrity": "sha512-HRM5ICPmtnNtLnTv2QrfVkq1IxI9z3bzYpDJ1k5ixwD9HtJGHuv265R6JmHOV6r8wLhQMlULnIUVpkrC2yaiCw==",
- "license": "MIT"
- },
- "node_modules/cheerio": {
- "version": "1.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
- "license": "MIT",
- "dependencies": {
- "cheerio-select": "^2.1.0",
- "dom-serializer": "^2.0.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "htmlparser2": "^8.0.1",
- "parse5": "^7.0.0",
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
- },
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
- }
- },
- "node_modules/cheerio-select": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-select": "^5.1.0",
- "css-what": "^6.1.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chroma-js": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz",
- "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==",
- "license": "(BSD-3-Clause AND Apache-2.0)"
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/cluster-key-slot": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz",
- "integrity": "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "license": "MIT"
- },
- "node_modules/color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "license": "ISC",
- "bin": {
- "color-support": "bin.js"
- }
- },
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/colorette": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
- "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
- "license": "MIT"
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
- "license": "MIT"
- },
- "node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/comment-parser": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz",
- "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/commist": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz",
- "integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
- "license": "MIT",
- "dependencies": {
- "leven": "^2.1.0",
- "minimist": "^1.1.0"
- }
- },
- "node_modules/compare-versions": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
- "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
- "license": "MIT"
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "license": "MIT",
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "license": "MIT"
- },
- "node_modules/concat-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
- "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
- "engines": [
- "node >= 6.0"
- ],
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.0.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/concurrently": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz",
- "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "date-fns": "^2.29.1",
- "lodash": "^4.17.21",
- "rxjs": "^7.0.0",
- "shell-quote": "^1.7.3",
- "spawn-command": "^0.0.2-1",
- "supports-color": "^8.1.0",
- "tree-kill": "^1.2.2",
- "yargs": "^17.3.1"
- },
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "license": "ISC"
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-disposition/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
- "license": "MIT"
- },
- "node_modules/copy-anything": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
- "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-what": "^4.1.8"
- },
- "engines": {
- "node": ">=12.13"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/core-js": {
- "version": "3.26.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz",
- "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "license": "MIT"
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "license": "MIT",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/cpu-features": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz",
- "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "buildcheck": "~0.0.6",
- "nan": "^2.19.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/croner": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/croner/-/croner-8.1.0.tgz",
- "integrity": "sha512-sz990XOUPR8dG/r5BRKMBd15MYDDUu8oeSaxFD5DqvNgHSZw8Psd1s689/IGET7ezxRMiNlCIyGeY1Gvxp/MLg==",
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/cronstrue": {
- "version": "2.24.0",
- "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.24.0.tgz",
- "integrity": "sha512-A1of24mAGz+OWrdGsxT9BOnDqn2ba182hie8Jx0UcEC2t+ZKtfAJxaFntKUgR7sIisU297fgHBSlNhMIfvAkSA==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "cronstrue": "bin/cli.js"
- }
- },
- "node_modules/cross-env": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
- "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.1"
- },
- "bin": {
- "cross-env": "src/bin/cross-env.js",
- "cross-env-shell": "src/bin/cross-env-shell.js"
- },
- "engines": {
- "node": ">=10.14",
- "npm": ">=6",
- "yarn": ">=1"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/css-color-converter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/css-color-converter/-/css-color-converter-2.0.0.tgz",
- "integrity": "sha512-oLIG2soZz3wcC3aAl/7Us5RS8Hvvc6I8G8LniF/qfMmrm7fIKQ8RIDDRZeKyGL2SrWfNqYspuLShbnjBMVWm8g==",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^0.5.2",
- "color-name": "^1.1.4",
- "css-unit-converter": "^1.1.2"
- }
- },
- "node_modules/css-color-converter/node_modules/color-convert": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
- "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling=="
- },
- "node_modules/css-functions-list": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
- "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12 || >=16"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/css-unit-converter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
- "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
- "license": "MIT"
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
- "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
- "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
- "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.21.0"
- },
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
- "node_modules/dayjs": {
- "version": "1.11.11",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
- "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==",
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
- "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
- "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decamelize-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
- "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decamelize-keys/node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decamelize-keys/node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "license": "MIT",
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/default-browser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
- "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
- "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delay": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz",
- "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "license": "MIT"
- },
- "node_modules/denque": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
- "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
- "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dev-null": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dev-null/-/dev-null-0.1.1.tgz",
- "integrity": "sha512-nMNZG0zfMgmdv8S5O0TM5cpwNbGKRGPCxVsr0SmA3NZZy9CYBbuNLL0PD3Acx9e5LIUgwONXtM9kM6RlawPxEQ==",
- "license": "MIT"
- },
- "node_modules/dijkstrajs": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
- "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dns2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/dns2/-/dns2-2.0.5.tgz",
- "integrity": "sha512-dznYrQU+Txcz++klGLBY9YR3WLOGHTy2vAKAqF+yYw1KaKFm5f5Y4jbbFEvohJf8YtZ0J2SzZlZx2k6LV4zJqQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "BSD-2-Clause"
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/dompurify": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.11.tgz",
- "integrity": "sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==",
- "dev": true,
- "license": "(MPL-2.0 OR Apache-2.0)"
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dotenv": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
- "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/duplexify": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
- "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.2"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "license": "MIT"
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "license": "MIT"
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.810",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz",
- "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "license": "MIT"
- },
- "node_modules/encode-utf8": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
- "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/engine.io": {
- "version": "6.5.5",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz",
- "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==",
- "license": "MIT",
- "dependencies": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.17.1"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/engine.io-client": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
- "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
- "license": "MIT",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.2.1",
- "ws": "~8.17.1",
- "xmlhttprequest-ssl": "~2.0.0"
- }
- },
- "node_modules/engine.io-parser": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
- "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io/node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/error-stack-parser-es": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.4.tgz",
- "integrity": "sha512-l0uy0kAoo6toCgVOYaAayqtPa2a1L15efxUMEnQebKwLQX2X0OpS6wMMQdc4juJXmxd9i40DuaUHq+mjIya9TQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.23.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
- "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "arraybuffer.prototype.slice": "^1.0.3",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "data-view-buffer": "^1.0.1",
- "data-view-byte-length": "^1.0.1",
- "data-view-byte-offset": "^1.0.0",
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-set-tostringtag": "^2.0.3",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.4",
- "get-symbol-description": "^1.0.2",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.0.3",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.2",
- "internal-slot": "^1.0.7",
- "is-array-buffer": "^3.0.4",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.1",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.3",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.13",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.13.1",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.5",
- "regexp.prototype.flags": "^1.5.2",
- "safe-array-concat": "^1.1.2",
- "safe-regex-test": "^1.0.3",
- "string.prototype.trim": "^1.2.9",
- "string.prototype.trimend": "^1.0.8",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.2",
- "typed-array-byte-length": "^1.0.1",
- "typed-array-byte-offset": "^1.0.2",
- "typed-array-length": "^1.0.6",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.15"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
- "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
- "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.4",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/esbuild": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
- "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.20.2",
- "@esbuild/android-arm": "0.20.2",
- "@esbuild/android-arm64": "0.20.2",
- "@esbuild/android-x64": "0.20.2",
- "@esbuild/darwin-arm64": "0.20.2",
- "@esbuild/darwin-x64": "0.20.2",
- "@esbuild/freebsd-arm64": "0.20.2",
- "@esbuild/freebsd-x64": "0.20.2",
- "@esbuild/linux-arm": "0.20.2",
- "@esbuild/linux-arm64": "0.20.2",
- "@esbuild/linux-ia32": "0.20.2",
- "@esbuild/linux-loong64": "0.20.2",
- "@esbuild/linux-mips64el": "0.20.2",
- "@esbuild/linux-ppc64": "0.20.2",
- "@esbuild/linux-riscv64": "0.20.2",
- "@esbuild/linux-s390x": "0.20.2",
- "@esbuild/linux-x64": "0.20.2",
- "@esbuild/netbsd-x64": "0.20.2",
- "@esbuild/openbsd-x64": "0.20.2",
- "@esbuild/sunos-x64": "0.20.2",
- "@esbuild/win32-arm64": "0.20.2",
- "@esbuild/win32-ia32": "0.20.2",
- "@esbuild/win32-x64": "0.20.2"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "license": "MIT"
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
- "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint/eslintrc": "^1.2.2",
- "@humanwhocodes/config-array": "^0.9.2",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.1.1",
- "eslint-utils": "^3.0.0",
- "eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^6.0.1",
- "globals": "^13.6.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "regexpp": "^3.2.0",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-plugin-jsdoc": {
- "version": "46.4.6",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.6.tgz",
- "integrity": "sha512-z4SWYnJfOqftZI+b3RM9AtWL1vF/sLWE/LlO9yOKDof9yN2+n3zOdOJTGX/pRE/xnPsooOLG2Rq6e4d+XW3lNw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@es-joy/jsdoccomment": "~0.40.1",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.0",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^3.0.1"
- },
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-plugin-vue": {
- "version": "8.7.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz",
- "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-utils": "^3.0.0",
- "natural-compare": "^1.4.0",
- "nth-check": "^2.0.1",
- "postcss-selector-parser": "^6.0.9",
- "semver": "^7.3.5",
- "vue-eslint-parser": "^8.0.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/eslint/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/esm": {
- "version": "3.2.25",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
- "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/event-to-promise": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.7.0.tgz",
- "integrity": "sha512-VOBBfyaADfe378ZzG0tgkzmsvzUyeU5arehrFzNRt5yaASUDshgctTwSrPI17ocAwR3+YftsxRClHF+GBKFByQ==",
- "deprecated": "Use promise-toolbox/fromEvent instead",
- "license": "MIT"
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/execa": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
- "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^8.0.1",
- "human-signals": "^5.0.0",
- "is-stream": "^3.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^5.1.0",
- "onetime": "^6.0.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^3.0.0"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/execa/node_modules/get-stream": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
- "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/execa/node_modules/is-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
- "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/execa/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.2",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.6.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express-basic-auth": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.2.1.tgz",
- "integrity": "sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==",
- "license": "MIT",
- "dependencies": {
- "basic-auth": "^2.0.1"
- }
- },
- "node_modules/express-static-gzip": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.7.tgz",
- "integrity": "sha512-QOCZUC+lhPPCjIJKpQGu1Oa61Axg9Mq09Qvit8Of7kzpMuwDeMSqjjQteQS3OVw/GkENBoSBheuQDWPlngImvw==",
- "license": "MIT",
- "dependencies": {
- "serve-static": "^1.14.1"
- }
- },
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/express/node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/express/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-xml-parser": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
- "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
- "funding": [
- {
- "type": "paypal",
- "url": "https://paypal.me/naturalintelligence"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "strnum": "^1.0.5"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
- "node_modules/fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4.9.1"
- }
- },
- "node_modules/fastfall": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz",
- "integrity": "sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "reusify": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fastparallel": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.1.tgz",
- "integrity": "sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4",
- "xtend": "^4.0.2"
- }
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fastseries": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fastseries/-/fastseries-2.0.0.tgz",
- "integrity": "sha512-XBU9RXeoYc2/VnvMhplAxEmZLfIk7cvTBu+xwoBuTI8pL19E03cmca17QQycKIdxgwCeFA/a4u27gv1h3ya5LQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/favico.js": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz",
- "integrity": "sha512-S5KvqAOczRjlyjQPPZPSlUEybBkfBgKosY/pzTIxkvKgigB+DkITvIEI70dxQarbv4PZ+UD77QzquCAcU/6LHQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/for-each": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.3"
- }
- },
- "node_modules/foreground-child": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
- "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/form-data-encoder": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
- "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
- "license": "MIT",
- "engines": {
- "node": ">= 14.17"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/from2/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/from2/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/from2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/fs-extra/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
- "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gamedig": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/gamedig/-/gamedig-4.3.1.tgz",
- "integrity": "sha512-et9Aq4wlD0cExXEO3r3LWiEEjOzsnG5l/0YSqza7FZLoJqunNT6DedkAXAdeOqAqStkRQahQiPFjx2WCg4SOtg==",
- "license": "MIT",
- "dependencies": {
- "cheerio": "^1.0.0-rc.10",
- "gbxremote": "^0.2.1",
- "got": "^12.1.0",
- "iconv-lite": "^0.6.3",
- "long": "^5.2.0",
- "minimist": "^1.2.6",
- "punycode": "^2.1.1",
- "seek-bzip": "^2.0.0",
- "varint": "^6.0.0"
- },
- "bin": {
- "gamedig": "bin/gamedig.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/gbxremote": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/gbxremote/-/gbxremote-0.2.1.tgz",
- "integrity": "sha512-SMehu6Y6ndq2Qgp9VxAb8Np3f+UUD+RWoW2SAMaxzGS96rWXyr4T1GGkecO0HHtxeH1m7pEh4FJWB8a/6aM2XQ==",
- "dependencies": {
- "any-promise": "^1.1.0",
- "barse": "~0.4.2",
- "event-to-promise": "^0.7.0",
- "string-to-stream": "^1.0.1",
- "xmlrpc": "^1.3.1"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/generate-function": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
- "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
- "license": "MIT",
- "dependencies": {
- "is-property": "^1.0.2"
- }
- },
- "node_modules/generic-pool": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
- "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-port-please": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz",
- "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
- "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/getopts": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz",
- "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==",
- "license": "MIT"
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "global-prefix": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
- "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globjoin": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
- "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/got": {
- "version": "12.6.1",
- "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz",
- "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==",
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/is": "^5.2.0",
- "@szmarczak/http-timer": "^5.0.1",
- "cacheable-lookup": "^7.0.0",
- "cacheable-request": "^10.2.8",
- "decompress-response": "^6.0.0",
- "form-data-encoder": "^2.1.2",
- "get-stream": "^6.0.1",
- "http2-wrapper": "^2.1.10",
- "lowercase-keys": "^3.0.0",
- "p-cancelable": "^3.0.0",
- "responselike": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "devOptional": true,
- "license": "ISC"
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/hard-rejection": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
- "license": "ISC"
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/help-me": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz",
- "integrity": "sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==",
- "license": "MIT",
- "dependencies": {
- "glob": "^7.1.6",
- "readable-stream": "^3.6.0"
- }
- },
- "node_modules/hoek": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz",
- "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ==",
- "deprecated": "This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
- "license": "BSD-3-Clause"
- },
- "node_modules/hookable": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
- "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/html-escaper": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
- "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
- "license": "MIT"
- },
- "node_modules/html-tags": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
- "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/htmlparser2": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
- "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "entities": "^4.4.0"
- }
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "license": "BSD-2-Clause"
- },
- "node_modules/http-cookie-agent": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz",
- "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.0"
- },
- "engines": {
- "node": ">=14.18.0 <15.0.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/3846masa"
- },
- "peerDependencies": {
- "deasync": "^0.1.26",
- "tough-cookie": "^4.0.0",
- "undici": "^5.11.0"
- },
- "peerDependenciesMeta": {
- "deasync": {
- "optional": true
- },
- "undici": {
- "optional": true
- }
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "license": "MIT",
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-graceful-shutdown": {
- "version": "3.1.13",
- "resolved": "https://registry.npmjs.org/http-graceful-shutdown/-/http-graceful-shutdown-3.1.13.tgz",
- "integrity": "sha512-Ci5LRufQ8AtrQ1U26AevS8QoMXDOhnAHCJI3eZu1com7mZGHxREmw3dNj85ftpQokQCvak8nI2pnFS8zyM1M+Q==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-proxy-agent/node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/http2-wrapper": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
- "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
- "license": "MIT",
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.2.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/human-signals": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
- "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=16.17.0"
- }
- },
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "ms": "^2.0.0"
- }
- },
- "node_modules/hyperid": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/hyperid/-/hyperid-3.2.0.tgz",
- "integrity": "sha512-PdTtDo+Rmza9nEhTunaDSUKwbC69TIzLEpZUwiB6f+0oqmY0UPfhyHCPt6K1NQ4WFv5yJBTG5vELztVWP+nEVQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer": "^5.2.1",
- "uuid": "^8.3.2",
- "uuid-parse": "^1.1.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/ignore": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
- "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-lazy": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
- "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "devOptional": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "license": "ISC",
- "optional": true
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "license": "ISC"
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/internal-slot": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
- "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.0",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/ip-address": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
- "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
- "license": "MIT",
- "dependencies": {
- "jsbn": "1.1.0",
- "sprintf-js": "^1.1.3"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
- "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
- "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
- "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-inside-container/node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
- "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
- "license": "MIT"
- },
- "node_modules/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
- "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
- "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-what": {
- "version": "4.1.16",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
- "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.13"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "license": "MIT",
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isemail": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
- "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "punycode": "2.x.x"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "license": "ISC"
- },
- "node_modules/isomorphic-ws": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz",
- "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==",
- "license": "MIT",
- "peerDependencies": {
- "ws": "*"
- }
- },
- "node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/joi": {
- "version": "14.3.1",
- "resolved": "https://registry.npmjs.org/joi/-/joi-14.3.1.tgz",
- "integrity": "sha512-LQDdM+pkOrpAn4Lp+neNIFV3axv1Vna3j38bisbQhETPMANYRbFJFUyOZcOClYvM/hppMhGWuKSFEK9vjrB+bQ==",
- "deprecated": "This module has moved and is now available at @hapi/joi. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
- "license": "BSD-3-Clause",
- "dependencies": {
- "hoek": "6.x.x",
- "isemail": "3.x.x",
- "topo": "3.x.x"
- }
- },
- "node_modules/jose": {
- "version": "4.15.7",
- "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.7.tgz",
- "integrity": "sha512-L7ioP+JAuZe8v+T5+zVI9Tx8LtU8BL7NxkyDFVMv+Qr3JW0jSoYDedLtodaXwfqMpeCyx4WXFNyu9tJt4WvC1A==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
- "node_modules/js-md4": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz",
- "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==",
- "license": "MIT"
- },
- "node_modules/js-sdsl": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
- "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/js-sdsl"
- }
- },
- "node_modules/js-tokens": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
- "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
- "license": "MIT"
- },
- "node_modules/jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
- "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "license": "MIT"
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonata": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.5.tgz",
- "integrity": "sha512-wEse9+QLIIU5IaCgtJCPsFi/H4F3qcikWzF4bAELZiRz08ohfx3Q6CjDRf4ZPF5P/92RI3KIHtb7u3jqPaHXdQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jsonfile/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/jsonwebtoken": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
- "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
- "license": "MIT",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/just-performance": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/just-performance/-/just-performance-4.3.0.tgz",
- "integrity": "sha512-L7RjvtJsL0QO8xFs5wEoDDzzJwoiowRw6Rn/GnvldlchS2JQr9wFYPiwZcDfrbbujEKqKN0tvENdbjXdYhDp5Q==",
- "license": "MIT"
- },
- "node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "license": "MIT",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "license": "MIT",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jwt-decode": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz",
- "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==",
- "license": "MIT"
- },
- "node_modules/kafkajs": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz",
- "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/knex": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/knex/-/knex-2.5.1.tgz",
- "integrity": "sha512-z78DgGKUr4SE/6cm7ku+jHvFT0X97aERh/f0MUKAKgFnwCYBEW4TFBqtHWFYiJFid7fMrtpZ/gxJthvz5mEByA==",
- "license": "MIT",
- "dependencies": {
- "colorette": "2.0.19",
- "commander": "^10.0.0",
- "debug": "4.3.4",
- "escalade": "^3.1.1",
- "esm": "^3.2.25",
- "get-package-type": "^0.1.0",
- "getopts": "2.3.0",
- "interpret": "^2.2.0",
- "lodash": "^4.17.21",
- "pg-connection-string": "2.6.1",
- "rechoir": "^0.8.0",
- "resolve-from": "^5.0.0",
- "tarn": "^3.0.2",
- "tildify": "2.0.0"
- },
- "bin": {
- "knex": "bin/cli.js"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependenciesMeta": {
- "better-sqlite3": {
- "optional": true
- },
- "mysql": {
- "optional": true
- },
- "mysql2": {
- "optional": true
- },
- "pg": {
- "optional": true
- },
- "pg-native": {
- "optional": true
- },
- "sqlite3": {
- "optional": true
- },
- "tedious": {
- "optional": true
- }
- }
- },
- "node_modules/knex/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/knex/node_modules/pg-connection-string": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.1.tgz",
- "integrity": "sha512-w6ZzNu6oMmIzEAYVw+RLK0+nqHPt8K3ZnknKi+g48Ak2pr3dtljJW3o+D/n2zzCG07Zoe9VOX3aiKpj+BN0pjg==",
- "license": "MIT"
- },
- "node_modules/knex/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/known-css-properties": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
- "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/kolorist": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
- "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/leven": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
- "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/limiter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/limiter/-/limiter-2.1.0.tgz",
- "integrity": "sha512-361TYz6iay6n+9KvUUImqdLuFigK+K79qrUtBsXhJTLdH4rIt/r1y8r1iozwh8KbZNpujbFTSh74mJ7bwbAMOw==",
- "license": "MIT",
- "dependencies": {
- "just-performance": "4.3.0"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/liquidjs": {
- "version": "10.14.0",
- "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.14.0.tgz",
- "integrity": "sha512-Zjg35Yo3L/2aNy7QkICha/ulbXRtZS7oRenWyDDfw+J34Xy3fOKWWHxASC9r0gbxN661nrwmG/kOIKHfYcVk4Q==",
- "license": "MIT",
- "dependencies": {
- "commander": "^10.0.0"
- },
- "bin": {
- "liquid": "bin/liquid.js",
- "liquidjs": "bin/liquid.js"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/liquidjs"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "license": "MIT"
- },
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "license": "MIT"
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "license": "MIT"
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
- "license": "MIT"
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
- "license": "MIT"
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
- "license": "MIT"
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
- "license": "MIT"
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "license": "MIT"
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
- "license": "MIT"
- },
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/long": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
- "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
- "license": "Apache-2.0"
- },
- "node_modules/lowercase-keys": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
- "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.10",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
- "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "license": "MIT",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/make-fetch-happen": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
- "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "agentkeepalive": "^4.1.3",
- "cacache": "^15.2.0",
- "http-cache-semantics": "^4.1.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-lambda": "^1.0.1",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.3",
- "minipass-collect": "^1.0.2",
- "minipass-fetch": "^1.3.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.2",
- "promise-retry": "^2.0.1",
- "socks-proxy-agent": "^6.0.0",
- "ssri": "^8.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/make-fetch-happen/node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/make-fetch-happen/node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/map-obj": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/marked": {
- "version": "4.2.12",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz",
- "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "marked": "bin/marked.js"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/mathml-tag-names": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
- "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/meow": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
- "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/minimist": "^1.2.2",
- "camelcase-keys": "^7.0.0",
- "decamelize": "^5.0.0",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.2",
- "read-pkg-up": "^8.0.0",
- "redent": "^4.0.0",
- "trim-newlines": "^4.0.2",
- "type-fest": "^1.2.2",
- "yargs-parser": "^20.2.9"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/meow/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/merge": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz",
- "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "license": "MIT"
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
- "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mimic-response": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
- "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/min-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minimist-options": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-fetch": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
- "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "minipass": "^3.1.0",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "optionalDependencies": {
- "encoding": "^0.1.12"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "license": "MIT",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mitt": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
- "license": "MIT"
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "license": "MIT",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mongodb": {
- "version": "4.17.2",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz",
- "integrity": "sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==",
- "license": "Apache-2.0",
- "dependencies": {
- "bson": "^4.7.2",
- "mongodb-connection-string-url": "^2.6.0",
- "socks": "^2.7.1"
- },
- "engines": {
- "node": ">=12.9.0"
- },
- "optionalDependencies": {
- "@aws-sdk/credential-providers": "^3.186.0",
- "@mongodb-js/saslprep": "^1.1.0"
- }
- },
- "node_modules/mongodb-connection-string-url": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
- "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@types/whatwg-url": "^8.2.1",
- "whatwg-url": "^11.0.0"
- }
- },
- "node_modules/mongodb-connection-string-url/node_modules/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "license": "MIT",
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/mqemitter": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/mqemitter/-/mqemitter-4.5.0.tgz",
- "integrity": "sha512-Mp/zytFeIv6piJQkEKnncHcP4R/ErJc5C7dfonkhkNUT2LA/nTayrfNxbipp3M5iCJUTQSUtzfQAQA3XVcKz6w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fastparallel": "^2.3.0",
- "qlobber": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mqtt": {
- "version": "4.3.8",
- "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.3.8.tgz",
- "integrity": "sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw==",
- "license": "MIT",
- "dependencies": {
- "commist": "^1.0.0",
- "concat-stream": "^2.0.0",
- "debug": "^4.1.1",
- "duplexify": "^4.1.1",
- "help-me": "^3.0.0",
- "inherits": "^2.0.3",
- "lru-cache": "^6.0.0",
- "minimist": "^1.2.5",
- "mqtt-packet": "^6.8.0",
- "number-allocator": "^1.0.9",
- "pump": "^3.0.0",
- "readable-stream": "^3.6.0",
- "reinterval": "^1.1.0",
- "rfdc": "^1.3.0",
- "split2": "^3.1.0",
- "ws": "^7.5.5",
- "xtend": "^4.0.2"
- },
- "bin": {
- "mqtt": "bin/mqtt.js",
- "mqtt_pub": "bin/pub.js",
- "mqtt_sub": "bin/sub.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/mqtt-packet": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-7.1.2.tgz",
- "integrity": "sha512-FFZbcZ2omsf4c5TxEQfcX9hI+JzDpDKPT46OmeIBpVA7+t32ey25UNqlqNXTmeZOr5BLsSIERpQQLsFWJS94SQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.2",
- "debug": "^4.1.1",
- "process-nextick-args": "^2.0.1"
- }
- },
- "node_modules/mqtt/node_modules/mqtt-packet": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz",
- "integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==",
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.2",
- "debug": "^4.1.1",
- "process-nextick-args": "^2.0.1"
- }
- },
- "node_modules/mqtt/node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/mrmime": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
- "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "license": "MIT"
- },
- "node_modules/mssql": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/mssql/-/mssql-11.0.0.tgz",
- "integrity": "sha512-XvfsSHeHD/hPIWjnfati1h2/K05pbJNIOOhf32xJ+9dnViSNF95XU6QgkI+CmNx4oYDTMBNN3b7p460PUbq0tw==",
- "license": "MIT",
- "dependencies": {
- "@tediousjs/connection-string": "^0.5.0",
- "commander": "^11.0.0",
- "debug": "^4.3.3",
- "rfdc": "^1.3.0",
- "tarn": "^3.0.2",
- "tedious": "^18.2.1"
- },
- "bin": {
- "mssql": "bin/mssql"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/mssql/node_modules/commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/mysql2": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.9.tgz",
- "integrity": "sha512-Qtb2RUxwWMFkWXqF7Rd/7ySkupbQnNY7O0zQuQYgPcuJZ06M36JG3HIDEh/pEeq7LImcvA6O3lOVQ9XQK+HEZg==",
- "license": "MIT",
- "dependencies": {
- "denque": "^2.1.0",
- "generate-function": "^2.3.1",
- "iconv-lite": "^0.6.3",
- "long": "^5.2.1",
- "lru-cache": "^8.0.0",
- "named-placeholders": "^1.1.3",
- "seq-queue": "^0.0.5",
- "sqlstring": "^2.3.2"
- },
- "engines": {
- "node": ">= 8.0"
- }
- },
- "node_modules/mysql2/node_modules/lru-cache": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
- "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
- "license": "ISC",
- "engines": {
- "node": ">=16.14"
- }
- },
- "node_modules/named-placeholders": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
- "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
- "license": "MIT",
- "dependencies": {
- "lru-cache": "^7.14.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/named-placeholders/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/nan": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
- "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/native-duplexpair": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
- "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==",
- "license": "MIT"
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/net-snmp": {
- "version": "3.11.2",
- "resolved": "https://registry.npmjs.org/net-snmp/-/net-snmp-3.11.2.tgz",
- "integrity": "sha512-QKy2JQHIBsSK344dUxYRZv7tU0ANk8f8fzKD/Mmq/cCxm/cPbtiT7009QEgxdViW/gGjqGIOiLHxkCc+JhZltg==",
- "dependencies": {
- "asn1-ber": "^1.2.1",
- "smart-buffer": "^4.1.0"
- }
- },
- "node_modules/node-cloudflared-tunnel": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/node-cloudflared-tunnel/-/node-cloudflared-tunnel-1.0.10.tgz",
- "integrity": "sha512-QBTH4bcTePgiwYdK5vYZhZl7GNr3Pqnj5V3Tg1w5HvnK4VhLZe5BUuhqKvzzCA604yhoD2I1ATdnOl6axSJu/w==",
- "license": "MIT",
- "dependencies": {
- "command-exists": "^1.2.9"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "license": "MIT"
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "license": "BSD-2-Clause"
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/node-gyp": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
- "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^9.1.0",
- "nopt": "^5.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": ">= 10.12.0"
- }
- },
- "node_modules/node-radius-client": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-radius-client/-/node-radius-client-1.0.0.tgz",
- "integrity": "sha512-FkR9cMV5hNoX+kKDUTzuagvEixlLiaEJQ1/ywOdhahsihKrGDhVZmnCvmrCStA589MT3yuC/J2eKc6z68IGdBw==",
- "license": "MIT",
- "dependencies": {
- "joi": "^14.3.1",
- "node-radius-utils": "^1.2.0",
- "radius": "^1.1.4"
- }
- },
- "node_modules/node-radius-utils": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/node-radius-utils/-/node-radius-utils-1.2.0.tgz",
- "integrity": "sha512-i3Sf6khnenl0aXumo0whAlfPWTaBqHxEnVBBxpu3dZ7q69NkPPv71rvPjlDZ5wkeKCTNNUTECljerS5kcYQxRw==",
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-ssh": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/node-ssh/-/node-ssh-13.1.0.tgz",
- "integrity": "sha512-GLcw49yFd9+rUpP+FgX6wrF/N90cmuDl2n0i8d3L828b6riRjkb9w3SS+XvviRWbrAhLxuMKywFqxvQDZQ1bug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/ssh2": "^1.11.9",
- "is-stream": "^2.0.0",
- "make-dir": "^3.1.0",
- "sb-promise-queue": "^2.1.0",
- "sb-scandir": "^3.1.0",
- "shell-escape": "^0.2.0",
- "ssh2": "^1.11.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/nodemailer": {
- "version": "6.9.14",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz",
- "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==",
- "license": "MIT-0",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "license": "ISC",
- "dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-url": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
- "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/nostr-tools": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-1.17.0.tgz",
- "integrity": "sha512-LZmR8GEWKZeElbFV5Xte75dOeE9EFUW/QLI1Ncn3JKn0kFddDKEfBbFN8Mu4TMs+L4HR/WTPha2l+PPuRnJcMw==",
- "license": "Unlicense",
- "dependencies": {
- "@noble/ciphers": "0.2.0",
- "@noble/curves": "1.1.0",
- "@noble/hashes": "1.3.1",
- "@scure/base": "1.1.1",
- "@scure/bip32": "1.3.1",
- "@scure/bip39": "1.2.1"
- },
- "peerDependencies": {
- "typescript": ">=5.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/notp": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/notp/-/notp-2.0.3.tgz",
- "integrity": "sha512-oBig/2uqkjQ5AkBuw4QJYwkEWa/q+zHxI5/I5z6IeP2NT0alpJFsP/trrfCC+9xOAgQSZXssNi962kp5KBmypQ==",
- "engines": {
- "node": "> v0.6.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
- "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "deprecated": "This package is no longer supported.",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/number-allocator": {
- "version": "1.0.14",
- "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz",
- "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.1",
- "js-sdsl": "4.3.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
- "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
- "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
- "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/oidc-token-hash": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz",
- "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==",
- "license": "MIT",
- "engines": {
- "node": "^10.13.0 || >=12.0.0"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
- "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
- "license": "MIT",
- "dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/openid-client": {
- "version": "5.6.5",
- "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.5.tgz",
- "integrity": "sha512-5P4qO9nGJzB5PI0LFlhj4Dzg3m4odt0qsJTfyEtZyOlkgpILwEioOhVVJOrS1iVH494S4Ee5OCjjg6Bf5WOj3w==",
- "license": "MIT",
- "dependencies": {
- "jose": "^4.15.5",
- "lru-cache": "^6.0.0",
- "object-hash": "^2.2.0",
- "oidc-token-hash": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-cancelable": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
- "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "license": "MIT",
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parse5-htmlparser2-tree-adapter": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
- "license": "MIT",
- "dependencies": {
- "domhandler": "^5.0.2",
- "parse5": "^7.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/password-hash": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/password-hash/-/password-hash-1.2.2.tgz",
- "integrity": "sha512-Dy/5+Srojwv+1XnMrK2bn7f2jN3k2p90DfBVA0Zd6PrjWF7lXHOTWgKT4uBp1gIsqV7/llYqm+hj+gwDBF/Fmg==",
- "bin": {
- "nodepw": "bin/nodepw"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "license": "MIT"
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
- "license": "ISC",
- "engines": {
- "node": "14 || >=16.14"
- }
- },
- "node_modules/path-scurry/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
- "license": "MIT"
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pathe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
- "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/perfect-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
- "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/pg": {
- "version": "8.11.6",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.6.tgz",
- "integrity": "sha512-6CyL4F0j3vPmakU9rWdeRY8qF5Cjc3OE86y6YpgDI6YtKHhNyCjGEIE8U5ZRfBjKTZikwolKIFWh3I22MeRnoA==",
- "license": "MIT",
- "dependencies": {
- "pg-connection-string": "^2.6.4",
- "pg-pool": "^3.6.2",
- "pg-protocol": "^1.6.1",
- "pg-types": "^2.1.0",
- "pgpass": "1.x"
- },
- "engines": {
- "node": ">= 8.0.0"
- },
- "optionalDependencies": {
- "pg-cloudflare": "^1.1.1"
- },
- "peerDependencies": {
- "pg-native": ">=3.0.1"
- },
- "peerDependenciesMeta": {
- "pg-native": {
- "optional": true
- }
- }
- },
- "node_modules/pg-cloudflare": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz",
- "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/pg-connection-string": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz",
- "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==",
- "license": "MIT"
- },
- "node_modules/pg-int8": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
- "license": "ISC",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/pg-pool": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz",
- "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==",
- "license": "MIT",
- "peerDependencies": {
- "pg": ">=8.0"
- }
- },
- "node_modules/pg-protocol": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz",
- "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==",
- "license": "MIT"
- },
- "node_modules/pg-types": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
- "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
- "license": "MIT",
- "dependencies": {
- "pg-int8": "1.0.1",
- "postgres-array": "~2.0.0",
- "postgres-bytea": "~1.0.0",
- "postgres-date": "~1.0.4",
- "postgres-interval": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pgpass": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
- "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
- "license": "MIT",
- "dependencies": {
- "split2": "^4.1.0"
- }
- },
- "node_modules/pgpass/node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "license": "ISC",
- "engines": {
- "node": ">= 10.x"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkginfo": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz",
- "integrity": "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/playwright": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz",
- "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "playwright-core": "1.39.0"
- },
- "bin": {
- "playwright": "cli.js"
- },
- "engines": {
- "node": ">=16"
- },
- "optionalDependencies": {
- "fsevents": "2.3.2"
- }
- },
- "node_modules/playwright-core": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
- "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
- "license": "Apache-2.0",
- "bin": {
- "playwright-core": "cli.js"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/pngjs": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
- "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
- "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.38",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
- "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.2.0"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-html": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz",
- "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "htmlparser2": "^8.0.0",
- "js-tokens": "^8.0.0",
- "postcss": "^8.4.0",
- "postcss-safe-parser": "^6.0.0"
- },
- "engines": {
- "node": "^12 || >=14"
- }
- },
- "node_modules/postcss-resolve-nested-selector": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
- "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/postcss-rtlcss": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.7.2.tgz",
- "integrity": "sha512-GurrGedCKvOTe1QrifI+XpDKXA3bJky1v8KiOa/TYYHs1bfJOxI53GIRvVSqLJLly7e1WcNMz8KMESTN01vbZQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "rtlcss": "^3.5.0"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-safe-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
- "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.3.3"
- }
- },
- "node_modules/postcss-scss": {
- "version": "4.0.9",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
- "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss-scss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=12.0"
- },
- "peerDependencies": {
- "postcss": "^8.4.29"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
- "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/postgres-array": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postgres-bytea": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
- "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postgres-date": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postgres-interval": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
- "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
- "license": "MIT",
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prismjs": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
- "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "license": "MIT"
- },
- "node_modules/prom-client": {
- "version": "13.2.0",
- "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-13.2.0.tgz",
- "integrity": "sha512-wGr5mlNNdRNzEhRYXgboUU2LxHWIojxscJKmtG3R8f4/KiWqyYgXTLHs0+Ted7tG3zFT7pgHJbtomzZ1L0ARaQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "tdigest": "^0.1.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/prometheus-api-metrics": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/prometheus-api-metrics/-/prometheus-api-metrics-3.2.2.tgz",
- "integrity": "sha512-5hT17HAjflPkrHSYQ7lorsKygo0PhLau/FQ6SQhw0XWAm10GwKfLQmIVP6b3LJBnc4WNOf/QKHce2RfcZMLjJQ==",
- "license": "Apache-2.0",
- "dependencies": {
- "@types/express": "^4.17.13",
- "@types/express-serve-static-core": "^4.17.28",
- "@types/koa": "^2.13.4",
- "debug": "^3.2.6",
- "lodash.get": "^4.4.2",
- "pkginfo": "^0.4.1"
- },
- "peerDependencies": {
- "prom-client": ">=12 <15"
- }
- },
- "node_modules/prometheus-api-metrics/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
- "license": "ISC",
- "optional": true
- },
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/promisify-child-process": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.2.tgz",
- "integrity": "sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/protobufjs": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
- "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/node": ">=13.7.0",
- "long": "^5.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "license": "MIT"
- },
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "license": "MIT"
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qlobber": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/qlobber/-/qlobber-5.0.3.tgz",
- "integrity": "sha512-wW4GTZPePyh0RgOsM18oDyOUlXfurVRgoNyJfS+y7VWPyd0GYhQp5T2tycZFZjonH+hngxIfklGJhTP/ghidgQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/qrcode": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
- "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dijkstrajs": "^1.0.1",
- "encode-utf8": "^1.0.3",
- "pngjs": "^5.0.0",
- "yargs": "^15.3.1"
- },
- "bin": {
- "qrcode": "bin/qrcode"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/qrcode/node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qrcode/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/qrcode/node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/qrcode/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/qrcode/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/qrcode/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/qrcode/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.10.4",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
- "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "license": "MIT"
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/radius": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/radius/-/radius-1.1.4.tgz",
- "integrity": "sha512-UWuzdF6xf3NpsXFZZmUEkxtEalDXj8hdmMXgbGzn7vOk6zXNsiIY2I6SJ1euHt7PTQuMoz2qDEJB+AfJDJgQYw==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "license": "MIT",
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/read-pkg": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
- "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^3.0.2",
- "parse-json": "^5.2.0",
- "type-fest": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
- "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^5.0.0",
- "read-pkg": "^6.0.0",
- "type-fest": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
- "license": "MIT",
- "dependencies": {
- "resolve": "^1.20.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/redbean-node": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/redbean-node/-/redbean-node-0.3.3.tgz",
- "integrity": "sha512-0J59/QlShdWs1h0lsFHRfb8NwjvgIYTQKwYrvq6FykRmeX1cG2u8AgHEIRVBrm56mtKLRASVy/8ykk6fSntLdw==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "~20.3.1",
- "await-lock": "~2.2.2",
- "dayjs": "~1.11.8",
- "glob": "~10.3.0",
- "knex": "~2.4.2",
- "lodash": "~4.17.21"
- }
- },
- "node_modules/redbean-node/node_modules/@types/node": {
- "version": "20.3.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz",
- "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==",
- "license": "MIT"
- },
- "node_modules/redbean-node/node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || >=14"
- }
- },
- "node_modules/redbean-node/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/redbean-node/node_modules/glob": {
- "version": "10.3.16",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.16.tgz",
- "integrity": "sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==",
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.11.0"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/redbean-node/node_modules/knex": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz",
- "integrity": "sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==",
- "license": "MIT",
- "dependencies": {
- "colorette": "2.0.19",
- "commander": "^9.1.0",
- "debug": "4.3.4",
- "escalade": "^3.1.1",
- "esm": "^3.2.25",
- "get-package-type": "^0.1.0",
- "getopts": "2.3.0",
- "interpret": "^2.2.0",
- "lodash": "^4.17.21",
- "pg-connection-string": "2.5.0",
- "rechoir": "^0.8.0",
- "resolve-from": "^5.0.0",
- "tarn": "^3.0.2",
- "tildify": "2.0.0"
- },
- "bin": {
- "knex": "bin/cli.js"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependenciesMeta": {
- "better-sqlite3": {
- "optional": true
- },
- "mysql": {
- "optional": true
- },
- "mysql2": {
- "optional": true
- },
- "pg": {
- "optional": true
- },
- "pg-native": {
- "optional": true
- },
- "sqlite3": {
- "optional": true
- },
- "tedious": {
- "optional": true
- }
- }
- },
- "node_modules/redbean-node/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/redbean-node/node_modules/pg-connection-string": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
- "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==",
- "license": "MIT"
- },
- "node_modules/redbean-node/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/redent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
- "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "indent-string": "^5.0.0",
- "strip-indent": "^4.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/redent/node_modules/indent-string": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
- "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/redis": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/redis/-/redis-4.5.1.tgz",
- "integrity": "sha512-oxXSoIqMJCQVBTfxP6BNTCtDMyh9G6Vi5wjdPdV/sRKkufyZslDqCScSGcOr6XGR/reAWZefz7E4leM31RgdBA==",
- "license": "MIT",
- "workspaces": [
- "./packages/*"
- ],
- "dependencies": {
- "@redis/bloom": "1.1.0",
- "@redis/client": "1.4.2",
- "@redis/graph": "1.1.0",
- "@redis/json": "1.0.4",
- "@redis/search": "1.1.0",
- "@redis/time-series": "1.0.4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
- "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.6",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "set-function-name": "^2.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/reinterval": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz",
- "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==",
- "license": "MIT"
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "license": "MIT"
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "license": "MIT"
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/responselike": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
- "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
- "license": "MIT",
- "dependencies": {
- "lowercase-keys": "^3.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/retimer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz",
- "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rfdc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
- "license": "MIT"
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rollup": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
- "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.5"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.18.0",
- "@rollup/rollup-android-arm64": "4.18.0",
- "@rollup/rollup-darwin-arm64": "4.18.0",
- "@rollup/rollup-darwin-x64": "4.18.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
- "@rollup/rollup-linux-arm64-gnu": "4.18.0",
- "@rollup/rollup-linux-arm64-musl": "4.18.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
- "@rollup/rollup-linux-s390x-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-gnu": "4.18.0",
- "@rollup/rollup-linux-x64-musl": "4.18.0",
- "@rollup/rollup-win32-arm64-msvc": "4.18.0",
- "@rollup/rollup-win32-ia32-msvc": "4.18.0",
- "@rollup/rollup-win32-x64-msvc": "4.18.0",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rollup-plugin-visualizer": {
- "version": "5.12.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz",
- "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "open": "^8.4.0",
- "picomatch": "^2.3.1",
- "source-map": "^0.7.4",
- "yargs": "^17.5.1"
- },
- "bin": {
- "rollup-plugin-visualizer": "dist/bin/cli.js"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "rollup": "2.x || 3.x || 4.x"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/rtlcss": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz",
- "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^5.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.3.11",
- "strip-json-comments": "^3.1.1"
- },
- "bin": {
- "rtlcss": "bin/rtlcss.js"
- }
- },
- "node_modules/run-applescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
- "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.1",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
- "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
- "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "get-intrinsic": "^1.2.4",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "license": "MIT"
- },
- "node_modules/safe-regex-test": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
- "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.6",
- "es-errors": "^1.3.0",
- "is-regex": "^1.1.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "license": "MIT"
- },
- "node_modules/sass": {
- "version": "1.42.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.42.1.tgz",
- "integrity": "sha512-/zvGoN8B7dspKc5mC6HlaygyCBRvnyzzgD5khiaCfglWztY99cYoiTUksVx11NlnemrcfH5CEaCpsUKoW0cQqg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "license": "ISC"
- },
- "node_modules/sb-promise-queue": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/sb-promise-queue/-/sb-promise-queue-2.1.0.tgz",
- "integrity": "sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/sb-scandir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/sb-scandir/-/sb-scandir-3.1.0.tgz",
- "integrity": "sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sb-promise-queue": "^2.1.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/seek-bzip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-2.0.0.tgz",
- "integrity": "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==",
- "license": "MIT",
- "dependencies": {
- "commander": "^6.0.0"
- },
- "bin": {
- "seek-bunzip": "bin/seek-bunzip",
- "seek-table": "bin/seek-bzip-table"
- }
- },
- "node_modules/seek-bzip/node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "license": "MIT",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/seq-queue": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
- "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
- },
- "node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "license": "MIT",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "license": "ISC"
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
- "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "license": "ISC"
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-escape": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz",
- "integrity": "sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
- "node_modules/sirv": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
- "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@polka/url": "^1.0.0-next.24",
- "mrmime": "^2.0.0",
- "totalist": "^3.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "license": "MIT",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socket.io": {
- "version": "4.7.5",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz",
- "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==",
- "license": "MIT",
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "cors": "~2.8.5",
- "debug": "~4.3.2",
- "engine.io": "~6.5.2",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.2.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "2.5.5",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz",
- "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==",
- "license": "MIT",
- "dependencies": {
- "debug": "~4.3.4",
- "ws": "~8.17.1"
- }
- },
- "node_modules/socket.io-client": {
- "version": "4.7.5",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
- "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
- "license": "MIT",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.2",
- "engine.io-client": "~6.5.2",
- "socket.io-parser": "~4.2.4"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-parser": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
- "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
- "license": "MIT",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socks": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
- "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
- "license": "MIT",
- "dependencies": {
- "ip-address": "^9.0.5",
- "smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socks-proxy-agent": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz",
- "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.1",
- "socks": "^2.6.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/socks-proxy-agent/node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/sortablejs": {
- "version": "1.14.0",
- "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
- "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
- "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-support/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sparse-bitfield": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "memory-pager": "^1.0.2"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2-1",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
- "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/spdx-correct": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
- "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
- "dev": true,
- "license": "CC-BY-3.0"
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.18",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
- "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/speakingurl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
- "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split2": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
- "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
- "license": "ISC",
- "dependencies": {
- "readable-stream": "^3.0.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "license": "BSD-3-Clause"
- },
- "node_modules/sqlstring": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
- "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/ssh2": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz",
- "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "asn1": "^0.2.6",
- "bcrypt-pbkdf": "^1.0.2"
- },
- "engines": {
- "node": ">=10.16.0"
- },
- "optionalDependencies": {
- "cpu-features": "~0.0.9",
- "nan": "^2.18.0"
- }
- },
- "node_modules/ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "minipass": "^3.1.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/stoppable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
- "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
- "license": "MIT",
- "engines": {
- "node": ">=4",
- "npm": ">=6"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
- "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
- "license": "MIT"
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/string-to-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz",
- "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.1.0"
- }
- },
- "node_modules/string-to-stream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "license": "MIT"
- },
- "node_modules/string-to-stream/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/string-to-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.replaceall": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/string.prototype.replaceall/-/string.prototype.replaceall-1.0.10.tgz",
- "integrity": "sha512-PKLapcZUZmXUdfIM6rTTTMYOxaj4JiQrgl0SKEeCFug1CdMAuJq8hVZd4eek9yMXAW4ldGUq+TiZRtjLJRU96g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "has-symbols": "^1.0.3",
- "is-regex": "^1.1.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
- "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
- "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
- "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
- "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
- "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "min-indent": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strnum": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
- "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/style-search": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/stylelint": {
- "version": "15.11.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz",
- "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@csstools/css-parser-algorithms": "^2.3.1",
- "@csstools/css-tokenizer": "^2.2.0",
- "@csstools/media-query-list-parser": "^2.1.4",
- "@csstools/selector-specificity": "^3.0.0",
- "balanced-match": "^2.0.0",
- "colord": "^2.9.3",
- "cosmiconfig": "^8.2.0",
- "css-functions-list": "^3.2.1",
- "css-tree": "^2.3.1",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.1",
- "fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^7.0.0",
- "global-modules": "^2.0.0",
- "globby": "^11.1.0",
- "globjoin": "^0.1.4",
- "html-tags": "^3.3.1",
- "ignore": "^5.2.4",
- "import-lazy": "^4.0.0",
- "imurmurhash": "^0.1.4",
- "is-plain-object": "^5.0.0",
- "known-css-properties": "^0.29.0",
- "mathml-tag-names": "^2.1.3",
- "meow": "^10.1.5",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.28",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.13",
- "postcss-value-parser": "^4.2.0",
- "resolve-from": "^5.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "style-search": "^0.1.0",
- "supports-hyperlinks": "^3.0.0",
- "svg-tags": "^1.0.0",
- "table": "^6.8.1",
- "write-file-atomic": "^5.0.1"
- },
- "bin": {
- "stylelint": "bin/stylelint.mjs"
- },
- "engines": {
- "node": "^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/stylelint"
- }
- },
- "node_modules/stylelint-config-recommended": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz",
- "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "stylelint": "^14.4.0"
- }
- },
- "node_modules/stylelint-config-standard": {
- "version": "25.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz",
- "integrity": "sha512-21HnP3VSpaT1wFjFvv9VjvOGDtAviv47uTp3uFmzcN+3Lt+RYRv6oAplLaV51Kf792JSxJ6svCJh/G18E9VnCA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "stylelint-config-recommended": "^7.0.0"
- },
- "peerDependencies": {
- "stylelint": "^14.4.0"
- }
- },
- "node_modules/stylelint/node_modules/balanced-match": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
- "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz",
- "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/stylelint/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/superjson": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz",
- "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "copy-anything": "^3.0.2"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/supports-hyperlinks": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
- "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">=14.18"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/svg-tags": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
- "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
- "dev": true
- },
- "node_modules/table": {
- "version": "6.8.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
- "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/table/node_modules/ajv": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz",
- "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.4.1"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tar/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/tarn": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
- "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==",
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/tcp-ping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/tcp-ping/-/tcp-ping-0.1.1.tgz",
- "integrity": "sha512-7Ed10Ds0hYnF+O1lfiZ2iSZ1bCAj+96Madctebmq7Y1ALPWlBY4YI8C6pCL+UTlshFY5YogixKLpgDP/4BlHrw==",
- "license": "MIT"
- },
- "node_modules/tdigest": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz",
- "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==",
- "license": "MIT",
- "dependencies": {
- "bintrees": "1.0.2"
- }
- },
- "node_modules/tedious": {
- "version": "18.2.1",
- "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.2.1.tgz",
- "integrity": "sha512-DKsTgGBC0ZeZexAd5OObfeKd0Tlx3jx3kNoKImsxfBKdRuV216u9n6Sr+4w6vzn+S4r43XmWAXQwM7UkDkbIEg==",
- "license": "MIT",
- "dependencies": {
- "@azure/identity": "^4.2.1",
- "@azure/keyvault-keys": "^4.4.0",
- "@js-joda/core": "^5.6.1",
- "@types/node": ">=18",
- "bl": "^6.0.11",
- "iconv-lite": "^0.6.3",
- "js-md4": "^0.3.2",
- "native-duplexpair": "^1.0.0",
- "sprintf-js": "^1.1.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/tedious/node_modules/bl": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.13.tgz",
- "integrity": "sha512-tMncAcpsyjZgAVbVFupVIaB2xud13xxT59fdHkuszY2jdZkqIWfpQdmII1fOe3kOGAz0mNLTIHEm+KxpYsQKKg==",
- "license": "MIT",
- "dependencies": {
- "@types/readable-stream": "^4.0.0",
- "buffer": "^6.0.3",
- "inherits": "^2.0.4",
- "readable-stream": "^4.2.0"
- }
- },
- "node_modules/tedious/node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/tedious/node_modules/readable-stream": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
- "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
- "license": "MIT",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10",
- "string_decoder": "^1.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/terser": {
- "version": "5.15.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
- "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/test": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/test/-/test-3.3.0.tgz",
- "integrity": "sha512-JKlEohxDIJRjwBH/+BrTcAPHljBALrAHw3Zs99RqZlaC605f6BggqXhxkdqZThbSHgaYPwpNJlf9bTSWkb/1rA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.6",
- "readable-stream": "^4.3.0",
- "string.prototype.replaceall": "^1.0.6"
- },
- "bin": {
- "node--test": "bin/node--test.js",
- "node--test-name-pattern": "bin/node--test-name-pattern.js",
- "node--test-only": "bin/node--test-only.js",
- "test": "bin/node-core-test.js"
- }
- },
- "node_modules/test/node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/test/node_modules/readable-stream": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
- "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10",
- "string_decoder": "^1.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/thirty-two": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz",
- "integrity": "sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==",
- "engines": {
- "node": ">=0.2.6"
- }
- },
- "node_modules/tildify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
- "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/topo": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
- "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
- "deprecated": "This module has moved and is now available at @hapi/topo. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues.",
- "license": "BSD-3-Clause",
- "dependencies": {
- "hoek": "6.x.x"
- }
- },
- "node_modules/totalist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
- "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tr46": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz",
- "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.3.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/trim-newlines": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
- "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
- "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "license": "0BSD"
- },
- "node_modules/tunnel": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
- "dev": true,
- "license": "Unlicense"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "license": "MIT",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
- "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
- "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
- "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
- "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-proto": "^1.0.3",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
- "license": "MIT"
- },
- "node_modules/typescript": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
- "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/underscore": {
- "version": "1.13.6",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
- "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
- "license": "MIT"
- },
- "node_modules/undici": {
- "version": "5.28.4",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
- "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@fastify/busboy": "^2.0.0"
- },
- "engines": {
- "node": ">=14.0"
- }
- },
- "node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "license": "MIT"
- },
- "node_modules/unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "license": "ISC",
- "optional": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/universal-user-agent": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
- "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "license": "MIT",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
- "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uptime-kuma": {
- "resolved": "",
- "link": true
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "license": "MIT",
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "license": "MIT"
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/uuid-parse": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
- "integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/v-pagination-3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/v-pagination-3/-/v-pagination-3-0.1.7.tgz",
- "integrity": "sha512-b5H+SdL+yIhkqyWI+Uj5lGk1VK3Q/hjqN44okerMa9smtk55DJX3Jg+ecU/vJAFrEhNCqgNzLsJ8pLRcHrbjrg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "babel-plugin-add-module-exports": "^0.2.1",
- "merge": "^2.1.1",
- "vue": ">=3.0.0"
- }
- },
- "node_modules/v8-compile-cache": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
- "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/varint": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
- "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
- "license": "MIT"
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/vite": {
- "version": "5.2.13",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz",
- "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.20.1",
- "postcss": "^8.4.38",
- "rollup": "^4.13.0"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^18.0.0 || >=20.0.0",
- "less": "*",
- "lightningcss": "^1.21.0",
- "sass": "*",
- "stylus": "*",
- "sugarss": "*",
- "terser": "^5.4.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- }
- }
- },
- "node_modules/vite-hot-client": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.3.tgz",
- "integrity": "sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0"
- }
- },
- "node_modules/vite-plugin-compression": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz",
- "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.2",
- "debug": "^4.3.3",
- "fs-extra": "^10.0.0"
- },
- "peerDependencies": {
- "vite": ">=2.0.0"
- }
- },
- "node_modules/vite-plugin-inspect": {
- "version": "0.8.4",
- "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.4.tgz",
- "integrity": "sha512-G0N3rjfw+AiiwnGw50KlObIHYWfulVwaCBUBLh2xTW9G1eM9ocE5olXkEYUbwyTmX+azM8duubi+9w5awdCz+g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@antfu/utils": "^0.7.7",
- "@rollup/pluginutils": "^5.1.0",
- "debug": "^4.3.4",
- "error-stack-parser-es": "^0.1.1",
- "fs-extra": "^11.2.0",
- "open": "^10.1.0",
- "perfect-debounce": "^1.0.0",
- "picocolors": "^1.0.0",
- "sirv": "^2.0.4"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0"
- },
- "peerDependenciesMeta": {
- "@nuxt/kit": {
- "optional": true
- }
- }
- },
- "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vite-plugin-inspect/node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/vite-plugin-inspect/node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-inside-container": "^1.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vite-plugin-inspect/node_modules/open": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
- "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "default-browser": "^5.2.1",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^3.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/vite-plugin-inspect/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/vite-plugin-vue-devtools": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.3.4.tgz",
- "integrity": "sha512-5WKGIFldO9/E/J6d+x286ENieFUsexcg8Qgh/js3rEJtzipHzxiD47xMJVSBhl14n1E4jABIMuwmn1FYtpwm3w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-core": "^7.3.4",
- "@vue/devtools-kit": "^7.3.4",
- "@vue/devtools-shared": "^7.3.4",
- "execa": "^8.0.1",
- "sirv": "^2.0.4",
- "vite-plugin-inspect": "^0.8.4",
- "vite-plugin-vue-inspector": "^5.1.2"
- },
- "engines": {
- "node": ">=v14.21.3"
- },
- "peerDependencies": {
- "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0"
- }
- },
- "node_modules/vite-plugin-vue-inspector": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.2.tgz",
- "integrity": "sha512-M+yH2LlQtVNzJAljQM+61CqDXBvHim8dU5ImGaQuwlo13tMDHue5D7IC20YwDJuWDODiYc/cZBUYspVlyPf2vQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.23.0",
- "@babel/plugin-proposal-decorators": "^7.23.0",
- "@babel/plugin-syntax-import-attributes": "^7.22.5",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-transform-typescript": "^7.22.15",
- "@vue/babel-plugin-jsx": "^1.1.5",
- "@vue/compiler-dom": "^3.3.4",
- "kolorist": "^1.8.0",
- "magic-string": "^0.30.4"
- },
- "peerDependencies": {
- "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0"
- }
- },
- "node_modules/vite/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/vue": {
- "version": "3.4.30",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.30.tgz",
- "integrity": "sha512-NcxtKCwkdf1zPsr7Y8+QlDBCGqxvjLXF2EX+yi76rV5rrz90Y6gK1cq0olIhdWGgrlhs9ElHuhi9t3+W5sG5Xw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.4.30",
- "@vue/compiler-sfc": "3.4.30",
- "@vue/runtime-dom": "3.4.30",
- "@vue/server-renderer": "3.4.30",
- "@vue/shared": "3.4.30"
- },
- "peerDependencies": {
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/vue-chartjs": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.2.0.tgz",
- "integrity": "sha512-d3zpKmGZr2OWHQ1xmxBcAn5ShTG917+/UCLaSpaCDDqT0U7DBsvFzTs69ZnHCgKoXT55GZDW8YEj9Av+dlONLA==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "chart.js": "^4.1.1",
- "vue": "^3.0.0-0 || ^2.7.0"
- }
- },
- "node_modules/vue-confirm-dialog": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/vue-confirm-dialog/-/vue-confirm-dialog-1.0.2.tgz",
- "integrity": "sha512-gTo1bMDWOLd/6ihmWv8VlPxhc9QaKoE5YqlsKydUOfrrQ3Q3taljF6yI+1TMtAtJLrvZ8DYrePhgBhY1VCJzbQ==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "vue": "^2.6.10"
- }
- },
- "node_modules/vue-contenteditable": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/vue-contenteditable/-/vue-contenteditable-3.0.4.tgz",
- "integrity": "sha512-CmtqT4zHQwLoJEyNVaXUjjUFPUVYlXXBHfSbRCHCUjODMqrn6L293LM1nc1ELx8epitZZvecTfIqOLlSzB3d+w==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/vue-demi": {
- "version": "0.12.5",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz",
- "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/vue-eslint-parser": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
- "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.2",
- "eslint-scope": "^7.0.0",
- "eslint-visitor-keys": "^3.1.0",
- "espree": "^9.0.0",
- "esquery": "^1.4.0",
- "lodash": "^4.17.21",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=6.0.0"
- }
- },
- "node_modules/vue-i18n": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz",
- "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2",
- "@vue/devtools-api": "^6.2.1"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/vue-image-crop-upload": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/vue-image-crop-upload/-/vue-image-crop-upload-3.0.3.tgz",
- "integrity": "sha512-VeBsU0oI1hXeCvdpnu19DM/r3KTlI8SUXTxsHsU4MhDXR0ahRziiL9tf4FbILGx+gRVNZhGbl32yuM6TiaGNhA==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "babel-runtime": "^6.11.6"
- }
- },
- "node_modules/vue-multiselect": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-3.0.0.tgz",
- "integrity": "sha512-uupKdINgz7j83lQToCL7KkgQQxvG43el++hsR39YT9pCe1DwzUGmKzPxjVP6rqskXed5P6DtUASYAlCliW740Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.18.1",
- "npm": ">= 6.14.15"
- }
- },
- "node_modules/vue-prism-editor": {
- "version": "2.0.0-alpha.2",
- "resolved": "https://registry.npmjs.org/vue-prism-editor/-/vue-prism-editor-2.0.0-alpha.2.tgz",
- "integrity": "sha512-Gu42ba9nosrE+gJpnAEuEkDMqG9zSUysIR8SdXUw8MQKDjBnnNR9lHC18uOr/ICz7yrA/5c7jHJr9lpElODC7w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "vue": "^3.0.0"
- }
- },
- "node_modules/vue-qrcode": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/vue-qrcode/-/vue-qrcode-1.0.1.tgz",
- "integrity": "sha512-LHEsHA8mVR+mL8REKeLrvP0h0lelwzkJjFe3ToygKjQS9Mo85m9I7/axdCnRl9ZiZIFjTWkAW1dCK+f8rq0wIg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.2.0",
- "vue-demi": "^0.12.5"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0",
- "qrcode": "^1.0.0",
- "vue": "^2.0.0 || ^3.0.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
- "node_modules/vue-router": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
- "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^6.5.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/posva"
- },
- "peerDependencies": {
- "vue": "^3.2.0"
- }
- },
- "node_modules/vue-toastification": {
- "version": "2.0.0-rc.5",
- "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz",
- "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "vue": "^3.0.2"
- }
- },
- "node_modules/vuedraggable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
- "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sortablejs": "1.14.0"
- },
- "peerDependencies": {
- "vue": "^3.0.1"
- }
- },
- "node_modules/wait-on": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz",
- "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "axios": "^1.6.1",
- "joi": "^17.11.0",
- "lodash": "^4.17.21",
- "minimist": "^1.2.8",
- "rxjs": "^7.8.1"
- },
- "bin": {
- "wait-on": "bin/wait-on"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/wait-on/node_modules/axios": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
- "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.0",
- "proxy-from-env": "^1.1.0"
- }
- },
- "node_modules/wait-on/node_modules/joi": {
- "version": "17.13.3",
- "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
- "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@hapi/hoek": "^9.3.0",
- "@hapi/topo": "^5.1.0",
- "@sideway/address": "^4.1.5",
- "@sideway/formula": "^3.0.1",
- "@sideway/pinpoint": "^2.0.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-url": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz",
- "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tr46": "^4.1.1",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
- "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/which-typed-array": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
- "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
- "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/write-file-atomic/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xmlbuilder": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
- "integrity": "sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==",
- "license": "MIT",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/xmlhttprequest-ssl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
- "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/xmlrpc": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz",
- "integrity": "sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==",
- "license": "MIT",
- "dependencies": {
- "sax": "1.2.x",
- "xmlbuilder": "8.2.x"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.0.0"
- }
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}
diff --git a/package.json b/package.json
index e1f812aef..755a588a0 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "uptime-kuma",
- "version": "2.0.0-dev",
+ "version": "2.0.0-beta.2",
"license": "MIT",
"repository": {
"type": "git",
@@ -27,29 +27,21 @@
"build": "vite build --config ./config/vite.config.js",
"test": "npm run test-backend && npm run test-e2e",
"test-with-build": "npm run build && npm test",
- "test-backend": "node test/backend-test-entry.js",
- "test-backend:14": "cross-env TEST_BACKEND=1 NODE_OPTIONS=\"--experimental-abortcontroller --no-warnings\" node--test test/backend-test",
- "test-backend:18": "cross-env TEST_BACKEND=1 node --test test/backend-test",
+ "test-backend": "cross-env TEST_BACKEND=1 node --test test/backend-test",
"test-e2e": "playwright test --config ./config/playwright.config.js",
"test-e2e-ui": "playwright test --config ./config/playwright.config.js --ui --ui-port=51063",
"playwright-codegen": "playwright codegen localhost:3000 --save-storage=./private/e2e-auth.json",
"playwright-show-report": "playwright show-report ./private/playwright-report",
"tsc": "tsc",
"vite-preview-dist": "vite preview --host --config ./config/vite.config.js",
- "build-docker": "npm run build && npm run build-docker-full && npm run build-docker-slim",
"build-docker-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2 --target base2 . --push",
"build-docker-base-slim": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base2-slim --target base2-slim . --push",
"build-docker-builder-go": "docker buildx build -f docker/builder-go.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:builder-go . --push",
- "build-docker-slim": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim -t louislam/uptime-kuma:$VERSION-slim --target release --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
- "build-docker-full": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2 -t louislam/uptime-kuma:$VERSION --target release . --push",
- "build-docker-nightly": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2 --target nightly . --push",
- "build-docker-slim-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-slim-rootless -t louislam/uptime-kuma:$VERSION-slim-rootless --target rootless --build-arg BASE_IMAGE=louislam/uptime-kuma:base2-slim . --push",
- "build-docker-full-rootless": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:2-rootless -t louislam/uptime-kuma:$VERSION-rootless --target rootless . --push",
- "build-docker-nightly-rootless": "node ./extra/test-docker.js && npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly2-rootless --target nightly-rootless . --push",
"build-docker-nightly-local": "npm run build && docker build -f docker/dockerfile -t louislam/uptime-kuma:nightly2 --target nightly .",
"build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test2 --target pr-test2 . --push",
- "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain",
- "setup": "git checkout 1.23.13 && npm ci --production && npm run download-dist",
+ "upload-artifacts": "node extra/release/upload-artifacts.mjs",
+ "upload-artifacts-beta": "node extra/release/upload-artifacts-beta.mjs",
+ "setup": "git checkout 1.23.16 && npm ci --omit dev && npm run download-dist",
"download-dist": "node extra/download-dist.js",
"mark-as-nightly": "node extra/mark-as-nightly.js",
"reset-password": "node extra/reset-password.js",
@@ -60,8 +52,9 @@
"simple-postgres": "docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres",
"simple-mariadb": "docker run --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mariadb# mariadb",
"update-language-files": "cd extra/update-language-files && node index.js && cross-env-shell eslint ../../src/languages/$npm_config_language.js --fix",
- "release-final": "node ./extra/test-docker.js && node extra/update-version.js && npm run build-docker && node ./extra/press-any-key.js && npm run upload-artifacts && node ./extra/update-wiki-version.js",
- "release-beta": "node ./extra/test-docker.js && node extra/beta/update-version.js && npm run build && node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:beta . --target release --push && node ./extra/press-any-key.js && npm run upload-artifacts",
+ "release-final": "node ./extra/release/final.mjs",
+ "release-beta": "node ./extra/release/beta.mjs",
+ "release-nightly": "node ./extra/release/nightly.mjs",
"git-remove-tag": "git tag -d",
"build-dist-and-restart": "npm run build && npm run start-server-dev",
"start-pr-test": "node extra/checkout-pr.js && npm install && npm run dev",
@@ -71,15 +64,15 @@
"quick-run-nightly": "docker run --rm --env NODE_ENV=development -p 3001:3001 louislam/uptime-kuma:nightly2",
"start-dev-container": "cd docker && docker-compose -f docker-compose-dev.yml up --force-recreate",
"rebase-pr-to-1.23.X": "node extra/rebase-pr.js 1.23.X",
- "start-server-node14-win": "private\\node14\\node.exe server/server.js"
+ "reset-migrate-aggregate-table-state": "node extra/reset-migrate-aggregate-table-state.js"
},
"dependencies": {
- "@grpc/grpc-js": "~1.7.3",
+ "@grpc/grpc-js": "~1.8.22",
"@louislam/ping": "~0.4.4-mod.1",
"@louislam/sqlite3": "15.1.6",
"@vvo/tzdb": "^6.125.0",
"args-parser": "~1.3.0",
- "axios": "~0.28.1",
+ "axios": "~0.30.0",
"badge-maker": "~3.3.1",
"bcryptjs": "~2.4.3",
"chardet": "~1.4.0",
@@ -89,20 +82,22 @@
"command-exists": "~1.2.9",
"compare-versions": "~3.6.0",
"compression": "~1.7.4",
+ "country-flag-emoji-polyfill": "^0.1.8",
"croner": "~8.1.0",
"dayjs": "~1.11.5",
"dev-null": "^0.1.1",
"dotenv": "~16.0.3",
- "express": "~4.19.2",
+ "express": "~4.21.0",
"express-basic-auth": "~1.2.1",
"express-static-gzip": "~2.1.7",
+ "feed": "^4.2.2",
"form-data": "~4.0.0",
"gamedig": "^4.2.0",
"html-escaper": "^3.0.3",
"http-cookie-agent": "~5.0.4",
"http-graceful-shutdown": "~3.1.7",
- "http-proxy-agent": "~5.0.0",
- "https-proxy-agent": "~5.0.1",
+ "http-proxy-agent": "~7.0.2",
+ "https-proxy-agent": "~7.0.6",
"iconv-lite": "~0.6.3",
"isomorphic-ws": "^5.0.0",
"jsesc": "~3.0.2",
@@ -110,20 +105,21 @@
"jsonwebtoken": "~9.0.0",
"jwt-decode": "~3.1.2",
"kafkajs": "^2.2.4",
- "knex": "^2.4.2",
+ "knex": "~3.1.0",
"limiter": "~2.1.0",
"liquidjs": "^10.7.0",
+ "marked": "^14.0.0",
"mitt": "~3.0.1",
"mongodb": "~4.17.1",
"mqtt": "~4.3.7",
"mssql": "~11.0.0",
- "mysql2": "~3.9.6",
+ "mysql2": "~3.11.3",
"nanoid": "~3.3.4",
"net-snmp": "^3.11.2",
"node-cloudflared-tunnel": "~1.0.9",
"node-radius-client": "~1.0.0",
"nodemailer": "~6.9.13",
- "nostr-tools": "^1.13.1",
+ "nostr-tools": "^2.10.4",
"notp": "~2.0.3",
"openid-client": "^5.4.2",
"password-hash": "~1.2.2",
@@ -138,9 +134,9 @@
"redbean-node": "~0.3.0",
"redis": "~4.5.1",
"semver": "~7.5.4",
- "socket.io": "~4.7.5",
- "socket.io-client": "~4.7.5",
- "socks-proxy-agent": "6.1.1",
+ "socket.io": "~4.8.0",
+ "socket.io-client": "~4.8.0",
+ "socks-proxy-agent": "~8.0.5",
"tar": "~6.2.1",
"tcp-ping": "~0.1.1",
"thirty-two": "~1.0.2",
@@ -149,13 +145,15 @@
"ws": "^8.13.0"
},
"devDependencies": {
- "@actions/github": "~5.1.1",
+ "@actions/github": "~6.0.0",
"@fortawesome/fontawesome-svg-core": "~1.2.36",
"@fortawesome/free-regular-svg-icons": "~5.15.4",
"@fortawesome/free-solid-svg-icons": "~5.15.4",
"@fortawesome/vue-fontawesome": "~3.0.0-5",
"@playwright/test": "~1.39.0",
"@popperjs/core": "~2.10.2",
+ "@testcontainers/hivemq": "^10.13.1",
+ "@testcontainers/rabbitmq": "^10.13.2",
"@types/bootstrap": "~5.1.9",
"@types/node": "^20.8.6",
"@typescript-eslint/eslint-plugin": "^6.7.5",
@@ -173,18 +171,17 @@
"cross-env": "~7.0.3",
"delay": "^5.0.0",
"dns2": "~2.0.1",
- "dompurify": "~3.0.11",
+ "dompurify": "~3.2.4",
"eslint": "~8.14.0",
"eslint-plugin-jsdoc": "~46.4.6",
"eslint-plugin-vue": "~8.7.1",
"favico.js": "~0.3.10",
"get-port-please": "^3.1.1",
- "marked": "~4.2.5",
"node-ssh": "~13.1.0",
"postcss-html": "~1.5.0",
"postcss-rtlcss": "~3.7.2",
"postcss-scss": "~4.0.4",
- "prismjs": "~1.29.0",
+ "prismjs": "~1.30.0",
"qrcode": "~1.5.0",
"rollup-plugin-visualizer": "^5.6.0",
"sass": "~1.42.1",
@@ -192,16 +189,17 @@
"stylelint-config-standard": "~25.0.0",
"terser": "~5.15.0",
"test": "~3.3.0",
+ "testcontainers": "^10.13.1",
"typescript": "~4.4.4",
"v-pagination-3": "~0.1.7",
- "vite": "~5.2.8",
+ "vite": "~5.4.15",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-vue-devtools": "^7.0.15",
"vue": "~3.4.2",
"vue-chartjs": "~5.2.0",
"vue-confirm-dialog": "~1.0.2",
"vue-contenteditable": "~3.0.4",
- "vue-i18n": "~9.2.2",
+ "vue-i18n": "~9.14.3",
"vue-image-crop-upload": "~3.0.3",
"vue-multiselect": "~3.0.0-alpha.2",
"vue-prism-editor": "~2.0.0-alpha.2",
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
index f3c5854b0..2a5638218 100644
Binary files a/public/apple-touch-icon.png and b/public/apple-touch-icon.png differ
diff --git a/public/icon-192x192.png b/public/icon-192x192.png
index 89d60d72b..03c8a4d1e 100644
Binary files a/public/icon-192x192.png and b/public/icon-192x192.png differ
diff --git a/public/icon-512x512.png b/public/icon-512x512.png
index cd3ab7718..11278c6fe 100644
Binary files a/public/icon-512x512.png and b/public/icon-512x512.png differ
diff --git a/server/client.js b/server/client.js
index 58ed8f956..72f0a4e8e 100644
--- a/server/client.js
+++ b/server/client.js
@@ -213,6 +213,32 @@ async function sendRemoteBrowserList(socket) {
return list;
}
+/**
+ * Send list of monitor types to client
+ * @param {Socket} socket Socket.io socket instance
+ * @returns {Promise}
+ */
+async function sendMonitorTypeList(socket) {
+ const result = Object.entries(UptimeKumaServer.monitorTypeList).map(([ key, type ]) => {
+ return [ key, {
+ supportsConditions: type.supportsConditions,
+ conditionVariables: type.conditionVariables.map(v => {
+ return {
+ id: v.id,
+ operators: v.operators.map(o => {
+ return {
+ id: o.id,
+ caption: o.caption,
+ };
+ }),
+ };
+ }),
+ }];
+ });
+
+ io.to(socket.userID).emit("monitorTypeList", Object.fromEntries(result));
+}
+
module.exports = {
sendNotificationList,
sendImportantHeartbeatList,
@@ -222,4 +248,5 @@ module.exports = {
sendInfo,
sendDockerHostList,
sendRemoteBrowserList,
+ sendMonitorTypeList,
};
diff --git a/server/database.js b/server/database.js
index 3374aff9e..582f19c29 100644
--- a/server/database.js
+++ b/server/database.js
@@ -6,6 +6,11 @@ const knex = require("knex");
const path = require("path");
const { EmbeddedMariaDB } = require("./embedded-mariadb");
const mysql = require("mysql2/promise");
+const { Settings } = require("./settings");
+const { UptimeCalculator } = require("./uptime-calculator");
+const dayjs = require("dayjs");
+const { SimpleMigrationServer } = require("./utils/simple-migration-server");
+const KumaColumnCompiler = require("./utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler");
/**
* Database & App Data Folder
@@ -194,6 +199,14 @@ class Database {
* @returns {Promise}
*/
static async connect(testMode = false, autoloadModels = true, noLog = false) {
+ // Patch "mysql2" knex client
+ // Workaround: Tried extending the ColumnCompiler class, but it didn't work for unknown reasons, so I override the function via prototype
+ const { getDialectByNameOrAlias } = require("knex/lib/dialects");
+ const mysql2 = getDialectByNameOrAlias("mysql2");
+ mysql2.prototype.columnCompiler = function () {
+ return new KumaColumnCompiler(this, ...arguments);
+ };
+
const acquireConnectionTimeout = 120 * 1000;
let dbConfig;
try {
@@ -283,7 +296,7 @@ class Database {
client: "mysql2",
connection: {
socketPath: embeddedMariaDB.socketPath,
- user: "node",
+ user: embeddedMariaDB.username,
database: "kuma",
timezone: "Z",
typeCast: function (field, next) {
@@ -379,9 +392,11 @@ class Database {
/**
* Patch the database
+ * @param {number} port Start the migration server for aggregate tables on this port if provided
+ * @param {string} hostname Start the migration server for aggregate tables on this hostname if provided
* @returns {Promise}
*/
- static async patch() {
+ static async patch(port = undefined, hostname = undefined) {
// Still need to keep this for old versions of Uptime Kuma
if (Database.dbConfig.type === "sqlite") {
await this.patchSqlite();
@@ -391,9 +406,23 @@ class Database {
// https://knexjs.org/guide/migrations.html
// https://gist.github.com/NigelEarle/70db130cc040cc2868555b29a0278261
try {
+ // Disable foreign key check for SQLite
+ // Known issue of knex: https://github.com/drizzle-team/drizzle-orm/issues/1813
+ if (Database.dbConfig.type === "sqlite") {
+ await R.exec("PRAGMA foreign_keys = OFF");
+ }
+
await R.knex.migrate.latest({
directory: Database.knexMigrationsPath,
});
+
+ // Enable foreign key check for SQLite
+ if (Database.dbConfig.type === "sqlite") {
+ await R.exec("PRAGMA foreign_keys = ON");
+ }
+
+ await this.migrateAggregateTable(port, hostname);
+
} catch (e) {
// Allow missing patch files for downgrade or testing pr.
if (e.message.includes("the following files are missing:")) {
@@ -707,7 +736,176 @@ class Database {
if (Database.dbConfig.type === "sqlite") {
return "DATETIME('now', ? || ' hours')";
} else {
- return "DATE_ADD(NOW(), INTERVAL ? HOUR)";
+ return "DATE_ADD(UTC_TIMESTAMP(), INTERVAL ? HOUR)";
+ }
+ }
+
+ /**
+ * Migrate the old data in the heartbeat table to the new format (stat_daily, stat_hourly, stat_minutely)
+ * It should be run once while upgrading V1 to V2
+ *
+ * Normally, it should be in transaction, but UptimeCalculator wasn't designed to be in transaction before that.
+ * I don't want to heavily modify the UptimeCalculator, so it is not in transaction.
+ * Run `npm run reset-migrate-aggregate-table-state` to reset, in case the migration is interrupted.
+ * @param {number} port Start the migration server on this port if provided
+ * @param {string} hostname Start the migration server on this hostname if provided
+ * @returns {Promise}
+ */
+ static async migrateAggregateTable(port, hostname = undefined) {
+ log.debug("db", "Enter Migrate Aggregate Table function");
+
+ // Add a setting for 2.0.0-dev users to skip this migration
+ if (process.env.SET_MIGRATE_AGGREGATE_TABLE_TO_TRUE === "1") {
+ log.warn("db", "SET_MIGRATE_AGGREGATE_TABLE_TO_TRUE is set to 1, skipping aggregate table migration forever (for 2.0.0-dev users)");
+ await Settings.set("migrateAggregateTableState", "migrated");
+ }
+
+ let migrateState = await Settings.get("migrateAggregateTableState");
+
+ // Skip if already migrated
+ // If it is migrating, it possibly means the migration was interrupted, or the migration is in progress
+ if (migrateState === "migrated") {
+ log.debug("db", "Migrated aggregate table already, skip");
+ return;
+ } else if (migrateState === "migrating") {
+ log.warn("db", "Aggregate table migration is already in progress, or it was interrupted");
+ throw new Error("Aggregate table migration is already in progress");
+ }
+
+ /**
+ * Start migration server for displaying the migration status
+ * @type {SimpleMigrationServer}
+ */
+ let migrationServer;
+ let msg;
+
+ if (port) {
+ migrationServer = new SimpleMigrationServer();
+ await migrationServer.start(port, hostname);
+ }
+
+ log.info("db", "Migrating Aggregate Table");
+
+ log.info("db", "Getting list of unique monitors");
+
+ // Get a list of unique monitors from the heartbeat table, using raw sql
+ let monitors = await R.getAll(`
+ SELECT DISTINCT monitor_id
+ FROM heartbeat
+ ORDER BY monitor_id ASC
+ `);
+
+ // Stop if stat_* tables are not empty
+ for (let table of [ "stat_minutely", "stat_hourly", "stat_daily" ]) {
+ let countResult = await R.getRow(`SELECT COUNT(*) AS count FROM ${table}`);
+ let count = countResult.count;
+ if (count > 0) {
+ log.warn("db", `Aggregate table ${table} is not empty, migration will not be started (Maybe you were using 2.0.0-dev?)`);
+ await migrationServer?.stop();
+ return;
+ }
+ }
+
+ await Settings.set("migrateAggregateTableState", "migrating");
+
+ let progressPercent = 0;
+ let part = 100 / monitors.length;
+ let i = 1;
+ for (let monitor of monitors) {
+ // Get a list of unique dates from the heartbeat table, using raw sql
+ let dates = await R.getAll(`
+ SELECT DISTINCT DATE(time) AS date
+ FROM heartbeat
+ WHERE monitor_id = ?
+ ORDER BY date ASC
+ `, [
+ monitor.monitor_id
+ ]);
+
+ for (let date of dates) {
+ // New Uptime Calculator
+ let calculator = new UptimeCalculator();
+ calculator.monitorID = monitor.monitor_id;
+ calculator.setMigrationMode(true);
+
+ // Get all the heartbeats for this monitor and date
+ let heartbeats = await R.getAll(`
+ SELECT status, ping, time
+ FROM heartbeat
+ WHERE monitor_id = ?
+ AND DATE(time) = ?
+ ORDER BY time ASC
+ `, [ monitor.monitor_id, date.date ]);
+
+ if (heartbeats.length > 0) {
+ msg = `[DON'T STOP] Migrating monitor data ${monitor.monitor_id} - ${date.date} [${progressPercent.toFixed(2)}%][${i}/${monitors.length}]`;
+ log.info("db", msg);
+ migrationServer?.update(msg);
+ }
+
+ for (let heartbeat of heartbeats) {
+ await calculator.update(heartbeat.status, parseFloat(heartbeat.ping), dayjs(heartbeat.time));
+ }
+
+ progressPercent += (Math.round(part / dates.length * 100) / 100);
+
+ // Lazy to fix the floating point issue, it is acceptable since it is just a progress bar
+ if (progressPercent > 100) {
+ progressPercent = 100;
+ }
+ }
+
+ i++;
+ }
+
+ msg = "Clearing non-important heartbeats";
+ log.info("db", msg);
+ migrationServer?.update(msg);
+
+ await Database.clearHeartbeatData(true);
+ await Settings.set("migrateAggregateTableState", "migrated");
+ await migrationServer?.stop();
+
+ if (monitors.length > 0) {
+ log.info("db", "Aggregate Table Migration Completed");
+ } else {
+ log.info("db", "No data to migrate");
+ }
+ }
+
+ /**
+ * Remove all non-important heartbeats from heartbeat table, keep last 24-hour or {KEEP_LAST_ROWS} rows for each monitor
+ * @param {boolean} detailedLog Log detailed information
+ * @returns {Promise}
+ */
+ static async clearHeartbeatData(detailedLog = false) {
+ let monitors = await R.getAll("SELECT id FROM monitor");
+ const sqlHourOffset = Database.sqlHourOffset();
+
+ for (let monitor of monitors) {
+ if (detailedLog) {
+ log.info("db", "Deleting non-important heartbeats for monitor " + monitor.id);
+ }
+ await R.exec(`
+ DELETE FROM heartbeat
+ WHERE monitor_id = ?
+ AND important = 0
+ AND time < ${sqlHourOffset}
+ AND id NOT IN (
+ SELECT id FROM ( -- written this way for Maria's support
+ SELECT id
+ FROM heartbeat
+ WHERE monitor_id = ?
+ ORDER BY time DESC
+ LIMIT ?
+ ) AS limited_ids
+ )
+ `, [
+ monitor.id,
+ -24,
+ monitor.id,
+ 100,
+ ]);
}
}
diff --git a/server/embedded-mariadb.js b/server/embedded-mariadb.js
index 8aa7134bf..7c9630dd7 100644
--- a/server/embedded-mariadb.js
+++ b/server/embedded-mariadb.js
@@ -14,9 +14,15 @@ class EmbeddedMariaDB {
mariadbDataDir = "/app/data/mariadb";
- runDir = "/app/data/run/mariadb";
+ runDir = "/app/data/run";
- socketPath = this.runDir + "/mysqld.sock";
+ socketPath = this.runDir + "/mariadb.sock";
+
+ /**
+ * The username to connect to the MariaDB
+ * @type {string}
+ */
+ username = null;
/**
* @type {ChildProcessWithoutNullStreams}
@@ -46,16 +52,42 @@ class EmbeddedMariaDB {
/**
* Start the embedded MariaDB
+ * @throws {Error} If the current user is not "node" or "root"
* @returns {Promise|void} A promise that resolves when the MariaDB is started or void if it is already started
*/
start() {
+ // Check if the current user is "node" or "root"
+ this.username = require("os").userInfo().username;
+ if (this.username !== "node" && this.username !== "root") {
+ throw new Error("Embedded Mariadb supports only 'node' or 'root' user, but the current user is: " + this.username);
+ }
+
+ this.initDB();
+
+ this.startChildProcess();
+
+ return new Promise((resolve) => {
+ let interval = setInterval(() => {
+ if (this.started) {
+ clearInterval(interval);
+ resolve();
+ } else {
+ log.info("mariadb", "Waiting for Embedded MariaDB to start...");
+ }
+ }, 1000);
+ });
+ }
+
+ /**
+ * Start the child process
+ * @returns {void}
+ */
+ startChildProcess() {
if (this.childProcess) {
log.info("mariadb", "Already started");
return;
}
- this.initDB();
-
this.running = true;
log.info("mariadb", "Starting Embedded MariaDB");
this.childProcess = childProcess.spawn(this.exec, [
@@ -63,6 +95,8 @@ class EmbeddedMariaDB {
"--datadir=" + this.mariadbDataDir,
`--socket=${this.socketPath}`,
`--pid-file=${this.runDir}/mysqld.pid`,
+ // Don't add the following option, the mariadb will not report message to the console, which affects initDBAfterStarted()
+ // "--log-error=" + `${this.mariadbDataDir}/mariadb-error.log`,
]);
this.childProcess.on("close", (code) => {
@@ -72,8 +106,8 @@ class EmbeddedMariaDB {
log.info("mariadb", "Stopped Embedded MariaDB: " + code);
if (code !== 0) {
- log.info("mariadb", "Try to restart Embedded MariaDB as it is not stopped by user");
- this.start();
+ log.error("mariadb", "Try to restart Embedded MariaDB as it is not stopped by user");
+ this.startChildProcess();
}
});
@@ -86,7 +120,7 @@ class EmbeddedMariaDB {
});
let handler = (data) => {
- log.debug("mariadb", data.toString("utf-8"));
+ log.info("mariadb", data.toString("utf-8"));
if (data.toString("utf-8").includes("ready for connections")) {
this.initDBAfterStarted();
}
@@ -94,17 +128,6 @@ class EmbeddedMariaDB {
this.childProcess.stdout.on("data", handler);
this.childProcess.stderr.on("data", handler);
-
- return new Promise((resolve) => {
- let interval = setInterval(() => {
- if (this.started) {
- clearInterval(interval);
- resolve();
- } else {
- log.info("mariadb", "Waiting for Embedded MariaDB to start...");
- }
- }, 1000);
- });
}
/**
@@ -129,9 +152,11 @@ class EmbeddedMariaDB {
recursive: true,
});
- let result = childProcess.spawnSync("mysql_install_db", [
+ let result = childProcess.spawnSync("mariadb-install-db", [
"--user=node",
- "--ldata=" + this.mariadbDataDir,
+ "--auth-root-socket-user=node",
+ "--datadir=" + this.mariadbDataDir,
+ "--auth-root-authentication-method=socket",
]);
if (result.status !== 0) {
@@ -143,6 +168,17 @@ class EmbeddedMariaDB {
}
}
+ // Check the owner of the mariadb directory, and change it if necessary
+ let stat = fs.statSync(this.mariadbDataDir);
+ if (stat.uid !== 1000 || stat.gid !== 1000) {
+ fs.chownSync(this.mariadbDataDir, 1000, 1000);
+ }
+
+ // Check the permission of the mariadb directory, and change it if it is not 755
+ if (stat.mode !== 0o755) {
+ fs.chmodSync(this.mariadbDataDir, 0o755);
+ }
+
if (!fs.existsSync(this.runDir)) {
log.info("mariadb", `Embedded MariaDB: ${this.runDir} is not found, create one now.`);
fs.mkdirSync(this.runDir, {
@@ -150,6 +186,13 @@ class EmbeddedMariaDB {
});
}
+ stat = fs.statSync(this.runDir);
+ if (stat.uid !== 1000 || stat.gid !== 1000) {
+ fs.chownSync(this.runDir, 1000, 1000);
+ }
+ if (stat.mode !== 0o755) {
+ fs.chmodSync(this.runDir, 0o755);
+ }
}
/**
@@ -159,7 +202,7 @@ class EmbeddedMariaDB {
async initDBAfterStarted() {
const connection = mysql.createConnection({
socketPath: this.socketPath,
- user: "node",
+ user: this.username,
});
let result = await connection.execute("CREATE DATABASE IF NOT EXISTS `kuma`");
diff --git a/server/jobs/clear-old-data.js b/server/jobs/clear-old-data.js
index 248a4d409..cfd65a8a8 100644
--- a/server/jobs/clear-old-data.js
+++ b/server/jobs/clear-old-data.js
@@ -1,21 +1,22 @@
const { R } = require("redbean-node");
const { log } = require("../../src/util");
-const { setSetting, setting } = require("../util-server");
const Database = require("../database");
+const { Settings } = require("../settings");
+const dayjs = require("dayjs");
-const DEFAULT_KEEP_PERIOD = 180;
+const DEFAULT_KEEP_PERIOD = 365;
/**
- * Clears old data from the heartbeat table of the database.
+ * Clears old data from the heartbeat table and the stat_daily of the database.
* @returns {Promise} A promise that resolves when the data has been cleared.
*/
-
const clearOldData = async () => {
- let period = await setting("keepDataPeriodDays");
+ await Database.clearHeartbeatData();
+ let period = await Settings.get("keepDataPeriodDays");
// Set Default Period
if (period == null) {
- await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
+ await Settings.set("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
period = DEFAULT_KEEP_PERIOD;
}
@@ -25,23 +26,28 @@ const clearOldData = async () => {
parsedPeriod = parseInt(period);
} catch (_) {
log.warn("clearOldData", "Failed to parse setting, resetting to default..");
- await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
+ await Settings.set("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general");
parsedPeriod = DEFAULT_KEEP_PERIOD;
}
if (parsedPeriod < 1) {
log.info("clearOldData", `Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`);
} else {
-
log.debug("clearOldData", `Clearing Data older than ${parsedPeriod} days...`);
-
const sqlHourOffset = Database.sqlHourOffset();
try {
- await R.exec(
- "DELETE FROM heartbeat WHERE time < " + sqlHourOffset,
- [ parsedPeriod * -24 ]
- );
+ // Heartbeat
+ await R.exec("DELETE FROM heartbeat WHERE time < " + sqlHourOffset, [
+ parsedPeriod * -24,
+ ]);
+
+ let timestamp = dayjs().subtract(parsedPeriod, "day").utc().startOf("day").unix();
+
+ // stat_daily
+ await R.exec("DELETE FROM stat_daily WHERE timestamp < ? ", [
+ timestamp,
+ ]);
if (Database.dbConfig.type === "sqlite") {
await R.exec("PRAGMA optimize;");
@@ -50,6 +56,8 @@ const clearOldData = async () => {
log.error("clearOldData", `Failed to clear old data: ${e.message}`);
}
}
+
+ log.debug("clearOldData", "Data cleared.");
};
module.exports = {
diff --git a/server/model/group.js b/server/model/group.js
index bd2c30189..16c482759 100644
--- a/server/model/group.js
+++ b/server/model/group.js
@@ -33,7 +33,7 @@ class Group extends BeanModel {
*/
async getMonitorList() {
return R.convertToBeans("monitor", await R.getAll(`
- SELECT monitor.*, monitor_group.send_url FROM monitor, monitor_group
+ SELECT monitor.*, monitor_group.send_url, monitor_group.custom_url FROM monitor, monitor_group
WHERE monitor.id = monitor_group.monitor_id
AND group_id = ?
ORDER BY monitor_group.weight
diff --git a/server/model/monitor.js b/server/model/monitor.js
index a5c290c3b..741fb940e 100644
--- a/server/model/monitor.js
+++ b/server/model/monitor.js
@@ -2,7 +2,11 @@ const dayjs = require("dayjs");
const axios = require("axios");
const { Prometheus } = require("../prometheus");
const { log, UP, DOWN, PENDING, MAINTENANCE, flipStatus, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND,
- SQL_DATETIME_FORMAT, evaluateJsonQuery
+ SQL_DATETIME_FORMAT, evaluateJsonQuery,
+ PING_PACKET_SIZE_MIN, PING_PACKET_SIZE_MAX, PING_PACKET_SIZE_DEFAULT,
+ PING_GLOBAL_TIMEOUT_MIN, PING_GLOBAL_TIMEOUT_MAX, PING_GLOBAL_TIMEOUT_DEFAULT,
+ PING_COUNT_MIN, PING_COUNT_MAX, PING_COUNT_DEFAULT,
+ PING_PER_REQUEST_TIMEOUT_MIN, PING_PER_REQUEST_TIMEOUT_MAX, PING_PER_REQUEST_TIMEOUT_DEFAULT
} = require("../../src/util");
const { tcping, ping, checkCertificate, checkStatusCode, getTotalClientInRoom, setting, mssqlQuery, postgresQuery, mysqlQuery, setSetting, httpNtlm, radius, grpcQuery,
redisPingAsync, kafkaProducerAsync, getOidcTokenClientCredentials, rootCertificatesFingerprints, axiosAbortSignal
@@ -53,7 +57,7 @@ class Monitor extends BeanModel {
};
if (this.sendUrl) {
- obj.url = this.url;
+ obj.url = this.customUrl ?? this.url;
}
if (showTags) {
@@ -71,23 +75,12 @@ class Monitor extends BeanModel {
/**
* Return an object that ready to parse to JSON
+ * @param {object} preloadData to prevent n+1 problems, we query the data in a batch outside of this function
* @param {boolean} includeSensitiveData Include sensitive data in
* JSON
- * @returns {Promise} Object ready to parse
+ * @returns {object} Object ready to parse
*/
- async toJSON(includeSensitiveData = true) {
-
- let notificationIDList = {};
-
- let list = await R.find("monitor_notification", " monitor_id = ? ", [
- this.id,
- ]);
-
- for (let bean of list) {
- notificationIDList[bean.notification_id] = true;
- }
-
- const tags = await this.getTags();
+ toJSON(preloadData = {}, includeSensitiveData = true) {
let screenshot = null;
@@ -95,7 +88,7 @@ class Monitor extends BeanModel {
screenshot = "/screenshots/" + jwt.sign(this.id, UptimeKumaServer.getInstance().jwtSecret) + ".png";
}
- const path = await this.getPath();
+ const path = preloadData.paths.get(this.id) || [];
const pathName = path.join(" / ");
let data = {
@@ -105,15 +98,15 @@ class Monitor extends BeanModel {
path,
pathName,
parent: this.parent,
- childrenIDs: await Monitor.getAllChildrenIDs(this.id),
+ childrenIDs: preloadData.childrenIDs.get(this.id) || [],
url: this.url,
method: this.method,
hostname: this.hostname,
port: this.port,
maxretries: this.maxretries,
weight: this.weight,
- active: await this.isActive(),
- forceInactive: !await Monitor.isParentActive(this.id),
+ active: preloadData.activeStatus.get(this.id),
+ forceInactive: preloadData.forceInactive.get(this.id),
type: this.type,
timeout: this.timeout,
interval: this.interval,
@@ -133,9 +126,9 @@ class Monitor extends BeanModel {
docker_container: this.docker_container,
docker_host: this.docker_host,
proxyId: this.proxy_id,
- notificationIDList,
- tags: tags,
- maintenance: await Monitor.isUnderMaintenance(this.id),
+ notificationIDList: preloadData.notifications.get(this.id) || {},
+ tags: preloadData.tags.get(this.id) || [],
+ maintenance: preloadData.maintenanceStatus.get(this.id),
mqttTopic: this.mqttTopic,
mqttSuccessMessage: this.mqttSuccessMessage,
mqttCheckType: this.mqttCheckType,
@@ -159,10 +152,19 @@ class Monitor extends BeanModel {
kafkaProducerAllowAutoTopicCreation: this.getKafkaProducerAllowAutoTopicCreation(),
kafkaProducerMessage: this.kafkaProducerMessage,
screenshot,
+ cacheBust: this.getCacheBust(),
remote_browser: this.remote_browser,
snmpOid: this.snmpOid,
jsonPathOperator: this.jsonPathOperator,
snmpVersion: this.snmpVersion,
+ smtpSecurity: this.smtpSecurity,
+ rabbitmqNodes: JSON.parse(this.rabbitmqNodes),
+ conditions: JSON.parse(this.conditions),
+
+ // ping advanced options
+ ping_numeric: this.isPingNumeric(),
+ ping_count: this.ping_count,
+ ping_per_request_timeout: this.ping_per_request_timeout,
};
if (includeSensitiveData) {
@@ -192,6 +194,8 @@ class Monitor extends BeanModel {
tlsCert: this.tlsCert,
tlsKey: this.tlsKey,
kafkaProducerSaslOptions: JSON.parse(this.kafkaProducerSaslOptions),
+ rabbitmqUsername: this.rabbitmqUsername,
+ rabbitmqPassword: this.rabbitmqPassword,
};
}
@@ -199,16 +203,6 @@ class Monitor extends BeanModel {
return data;
}
- /**
- * Checks if the monitor is active based on itself and its parents
- * @returns {Promise} Is the monitor active?
- */
- async isActive() {
- const parentActive = await Monitor.isParentActive(this.id);
-
- return (this.active === 1) && parentActive;
- }
-
/**
* Get all tags applied to this monitor
* @returns {Promise[]>} List of tags on the
@@ -263,6 +257,14 @@ class Monitor extends BeanModel {
return Boolean(this.expiryNotification);
}
+ /**
+ * Check if ping should use numeric output only
+ * @returns {boolean} True if IP addresses will be output instead of symbolic hostnames
+ */
+ isPingNumeric() {
+ return Boolean(this.ping_numeric);
+ }
+
/**
* Parse to boolean
* @returns {boolean} Should TLS errors be ignored?
@@ -295,6 +297,14 @@ class Monitor extends BeanModel {
return Boolean(this.grpcEnableTls);
}
+ /**
+ * Parse to boolean
+ * @returns {boolean} if cachebusting is enabled
+ */
+ getCacheBust() {
+ return Boolean(this.cacheBust);
+ }
+
/**
* Get accepted status codes
* @returns {object} Accepted status codes
@@ -388,39 +398,6 @@ class Monitor extends BeanModel {
if (await Monitor.isUnderMaintenance(this.id)) {
bean.msg = "Monitor under maintenance";
bean.status = MAINTENANCE;
- } else if (this.type === "group") {
- const children = await Monitor.getChildren(this.id);
-
- if (children.length > 0) {
- bean.status = UP;
- bean.msg = "All children up and running";
- for (const child of children) {
- if (!child.active) {
- // Ignore inactive childs
- continue;
- }
- const lastBeat = await Monitor.getPreviousHeartbeat(child.id);
-
- // Only change state if the monitor is in worse conditions then the ones before
- // lastBeat.status could be null
- if (!lastBeat) {
- bean.status = PENDING;
- } else if (bean.status === UP && (lastBeat.status === PENDING || lastBeat.status === DOWN)) {
- bean.status = lastBeat.status;
- } else if (bean.status === PENDING && lastBeat.status === DOWN) {
- bean.status = lastBeat.status;
- }
- }
-
- if (bean.status !== UP) {
- bean.msg = "Child inaccessible";
- }
- } else {
- // Set status pending if group is empty
- bean.status = PENDING;
- bean.msg = "Group empty";
- }
-
} else if (this.type === "http" || this.type === "keyword" || this.type === "json-query") {
// Do not do any queries/high loading things before the "bean.ping"
let startTime = dayjs().valueOf();
@@ -500,6 +477,14 @@ class Monitor extends BeanModel {
options.data = bodyValue;
}
+ if (this.cacheBust) {
+ const randomFloatString = Math.random().toString(36);
+ const cacheBust = randomFloatString.substring(2);
+ options.params = {
+ uptime_kuma_cachebuster: cacheBust,
+ };
+ }
+
if (this.proxy_id) {
const proxy = await R.load("proxy", this.proxy_id);
@@ -617,7 +602,7 @@ class Monitor extends BeanModel {
bean.status = UP;
} else if (this.type === "ping") {
- bean.ping = await ping(this.hostname, this.packetSize);
+ bean.ping = await ping(this.hostname, this.ping_count, "", this.ping_numeric, this.packetSize, this.timeout, this.ping_per_request_timeout);
bean.msg = "";
bean.status = UP;
} else if (this.type === "push") { // Type: Push
@@ -689,7 +674,7 @@ class Monitor extends BeanModel {
bean.msg = res.data.response.servers[0].name;
try {
- bean.ping = await ping(this.hostname, this.packetSize);
+ bean.ping = await ping(this.hostname, PING_COUNT_DEFAULT, "", true, this.packetSize, PING_GLOBAL_TIMEOUT_DEFAULT, PING_PER_REQUEST_TIMEOUT_DEFAULT);
} catch (_) { }
} else {
throw new Error("Server not found on Steam");
@@ -1178,6 +1163,18 @@ class Monitor extends BeanModel {
return checkCertificateResult;
}
+ /**
+ * Checks if the monitor is active based on itself and its parents
+ * @param {number} monitorID ID of monitor to send
+ * @param {boolean} active is active
+ * @returns {Promise} Is the monitor active?
+ */
+ static async isActive(monitorID, active) {
+ const parentActive = await Monitor.isParentActive(monitorID);
+
+ return (active === 1) && parentActive;
+ }
+
/**
* Send statistics to clients
* @param {Server} io Socket server instance
@@ -1314,7 +1311,11 @@ class Monitor extends BeanModel {
for (let notification of notificationList) {
try {
const heartbeatJSON = bean.toJSON();
-
+ const monitorData = [{ id: monitor.id,
+ active: monitor.active,
+ name: monitor.name
+ }];
+ const preloadData = await Monitor.preparePreloadData(monitorData);
// Prevent if the msg is undefined, notifications such as Discord cannot send out.
if (!heartbeatJSON["msg"]) {
heartbeatJSON["msg"] = "N/A";
@@ -1325,7 +1326,7 @@ class Monitor extends BeanModel {
heartbeatJSON["timezoneOffset"] = UptimeKumaServer.getInstance().getTimezoneOffset();
heartbeatJSON["localDateTime"] = dayjs.utc(heartbeatJSON["time"]).tz(heartbeatJSON["timezone"]).format(SQL_DATETIME_FORMAT);
- await Notification.send(JSON.parse(notification.config), msg, await monitor.toJSON(false), heartbeatJSON);
+ await Notification.send(JSON.parse(notification.config), msg, monitor.toJSON(preloadData, false), heartbeatJSON);
} catch (e) {
log.error("monitor", "Cannot send notification to " + notification.name);
log.error("monitor", e);
@@ -1419,7 +1420,7 @@ class Monitor extends BeanModel {
for (let notification of notificationList) {
try {
log.debug("monitor", "Sending to " + notification.name);
- await Notification.send(JSON.parse(notification.config), `[${this.name}][${this.url}] ${certType} certificate ${certCN} will be expired in ${daysRemaining} days`);
+ await Notification.send(JSON.parse(notification.config), `[${this.name}][${this.url}] ${certType} certificate ${certCN} will expire in ${daysRemaining} days`);
sent = true;
} catch (e) {
log.error("monitor", "Cannot send cert notification to " + notification.name);
@@ -1485,6 +1486,135 @@ class Monitor extends BeanModel {
if (this.interval < MIN_INTERVAL_SECOND) {
throw new Error(`Interval cannot be less than ${MIN_INTERVAL_SECOND} seconds`);
}
+
+ if (this.type === "ping") {
+ // ping parameters validation
+ if (this.packetSize && (this.packetSize < PING_PACKET_SIZE_MIN || this.packetSize > PING_PACKET_SIZE_MAX)) {
+ throw new Error(`Packet size must be between ${PING_PACKET_SIZE_MIN} and ${PING_PACKET_SIZE_MAX} (default: ${PING_PACKET_SIZE_DEFAULT})`);
+ }
+
+ if (this.ping_per_request_timeout && (this.ping_per_request_timeout < PING_PER_REQUEST_TIMEOUT_MIN || this.ping_per_request_timeout > PING_PER_REQUEST_TIMEOUT_MAX)) {
+ throw new Error(`Per-ping timeout must be between ${PING_PER_REQUEST_TIMEOUT_MIN} and ${PING_PER_REQUEST_TIMEOUT_MAX} seconds (default: ${PING_PER_REQUEST_TIMEOUT_DEFAULT})`);
+ }
+
+ if (this.ping_count && (this.ping_count < PING_COUNT_MIN || this.ping_count > PING_COUNT_MAX)) {
+ throw new Error(`Echo requests count must be between ${PING_COUNT_MIN} and ${PING_COUNT_MAX} (default: ${PING_COUNT_DEFAULT})`);
+ }
+
+ if (this.timeout) {
+ const pingGlobalTimeout = Math.round(Number(this.timeout));
+
+ if (pingGlobalTimeout < this.ping_per_request_timeout || pingGlobalTimeout < PING_GLOBAL_TIMEOUT_MIN || pingGlobalTimeout > PING_GLOBAL_TIMEOUT_MAX) {
+ throw new Error(`Timeout must be between ${PING_GLOBAL_TIMEOUT_MIN} and ${PING_GLOBAL_TIMEOUT_MAX} seconds (default: ${PING_GLOBAL_TIMEOUT_DEFAULT})`);
+ }
+
+ this.timeout = pingGlobalTimeout;
+ }
+ }
+ }
+
+ /**
+ * Gets monitor notification of multiple monitor
+ * @param {Array} monitorIDs IDs of monitor to get
+ * @returns {Promise>} object
+ */
+ static async getMonitorNotification(monitorIDs) {
+ return await R.getAll(`
+ SELECT monitor_notification.monitor_id, monitor_notification.notification_id
+ FROM monitor_notification
+ WHERE monitor_notification.monitor_id IN (${monitorIDs.map((_) => "?").join(",")})
+ `, monitorIDs);
+ }
+
+ /**
+ * Gets monitor tags of multiple monitor
+ * @param {Array} monitorIDs IDs of monitor to get
+ * @returns {Promise>} object
+ */
+ static async getMonitorTag(monitorIDs) {
+ return await R.getAll(`
+ SELECT monitor_tag.monitor_id, monitor_tag.tag_id, monitor_tag.value, tag.name, tag.color
+ FROM monitor_tag
+ JOIN tag ON monitor_tag.tag_id = tag.id
+ WHERE monitor_tag.monitor_id IN (${monitorIDs.map((_) => "?").join(",")})
+ `, monitorIDs);
+ }
+
+ /**
+ * prepare preloaded data for efficient access
+ * @param {Array} monitorData IDs & active field of monitor to get
+ * @returns {Promise>} object
+ */
+ static async preparePreloadData(monitorData) {
+
+ const notificationsMap = new Map();
+ const tagsMap = new Map();
+ const maintenanceStatusMap = new Map();
+ const childrenIDsMap = new Map();
+ const activeStatusMap = new Map();
+ const forceInactiveMap = new Map();
+ const pathsMap = new Map();
+
+ if (monitorData.length > 0) {
+ const monitorIDs = monitorData.map(monitor => monitor.id);
+ const notifications = await Monitor.getMonitorNotification(monitorIDs);
+ const tags = await Monitor.getMonitorTag(monitorIDs);
+ const maintenanceStatuses = await Promise.all(monitorData.map(monitor => Monitor.isUnderMaintenance(monitor.id)));
+ const childrenIDs = await Promise.all(monitorData.map(monitor => Monitor.getAllChildrenIDs(monitor.id)));
+ const activeStatuses = await Promise.all(monitorData.map(monitor => Monitor.isActive(monitor.id, monitor.active)));
+ const forceInactiveStatuses = await Promise.all(monitorData.map(monitor => Monitor.isParentActive(monitor.id)));
+ const paths = await Promise.all(monitorData.map(monitor => Monitor.getAllPath(monitor.id, monitor.name)));
+
+ notifications.forEach(row => {
+ if (!notificationsMap.has(row.monitor_id)) {
+ notificationsMap.set(row.monitor_id, {});
+ }
+ notificationsMap.get(row.monitor_id)[row.notification_id] = true;
+ });
+
+ tags.forEach(row => {
+ if (!tagsMap.has(row.monitor_id)) {
+ tagsMap.set(row.monitor_id, []);
+ }
+ tagsMap.get(row.monitor_id).push({
+ tag_id: row.tag_id,
+ monitor_id: row.monitor_id,
+ value: row.value,
+ name: row.name,
+ color: row.color
+ });
+ });
+
+ monitorData.forEach((monitor, index) => {
+ maintenanceStatusMap.set(monitor.id, maintenanceStatuses[index]);
+ });
+
+ monitorData.forEach((monitor, index) => {
+ childrenIDsMap.set(monitor.id, childrenIDs[index]);
+ });
+
+ monitorData.forEach((monitor, index) => {
+ activeStatusMap.set(monitor.id, activeStatuses[index]);
+ });
+
+ monitorData.forEach((monitor, index) => {
+ forceInactiveMap.set(monitor.id, !forceInactiveStatuses[index]);
+ });
+
+ monitorData.forEach((monitor, index) => {
+ pathsMap.set(monitor.id, paths[index]);
+ });
+ }
+
+ return {
+ notifications: notificationsMap,
+ tags: tagsMap,
+ maintenanceStatus: maintenanceStatusMap,
+ childrenIDs: childrenIDsMap,
+ activeStatus: activeStatusMap,
+ forceInactive: forceInactiveMap,
+ paths: pathsMap,
+ };
}
/**
@@ -1506,7 +1636,7 @@ class Monitor extends BeanModel {
/**
* Gets all Children of the monitor
* @param {number} monitorID ID of monitor to get
- * @returns {Promise>} Children
+ * @returns {Promise[]>} Children
*/
static async getChildren(monitorID) {
return await R.getAll(`
@@ -1519,16 +1649,18 @@ class Monitor extends BeanModel {
/**
* Gets the full path
+ * @param {number} monitorID ID of the monitor to get
+ * @param {string} name of the monitor to get
* @returns {Promise} Full path (includes groups and the name) of the monitor
*/
- async getPath() {
- const path = [ this.name ];
+ static async getAllPath(monitorID, name) {
+ const path = [ name ];
if (this.parent === null) {
return path;
}
- let parent = await Monitor.getParent(this.id);
+ let parent = await Monitor.getParent(monitorID);
while (parent !== null) {
path.unshift(parent.name);
parent = await Monitor.getParent(parent.id);
diff --git a/server/model/status_page.js b/server/model/status_page.js
index e40b28f6f..38f548ebb 100644
--- a/server/model/status_page.js
+++ b/server/model/status_page.js
@@ -5,6 +5,10 @@ const { UptimeKumaServer } = require("../uptime-kuma-server");
const jsesc = require("jsesc");
const googleAnalytics = require("../google-analytics");
const { marked } = require("marked");
+const { Feed } = require("feed");
+const config = require("../config");
+
+const { STATUS_PAGE_ALL_DOWN, STATUS_PAGE_ALL_UP, STATUS_PAGE_MAINTENANCE, STATUS_PAGE_PARTIAL_DOWN, UP, MAINTENANCE, DOWN } = require("../../src/util");
class StatusPage extends BeanModel {
@@ -14,6 +18,24 @@ class StatusPage extends BeanModel {
*/
static domainMappingList = { };
+ /**
+ * Handle responses to RSS pages
+ * @param {Response} response Response object
+ * @param {string} slug Status page slug
+ * @returns {Promise}
+ */
+ static async handleStatusPageRSSResponse(response, slug) {
+ let statusPage = await R.findOne("status_page", " slug = ? ", [
+ slug
+ ]);
+
+ if (statusPage) {
+ response.send(await StatusPage.renderRSS(statusPage, slug));
+ } else {
+ response.status(404).send(UptimeKumaServer.getInstance().indexHTML);
+ }
+ }
+
/**
* Handle responses to status page
* @param {Response} response Response object
@@ -39,6 +61,38 @@ class StatusPage extends BeanModel {
}
}
+ /**
+ * SSR for RSS feed
+ * @param {statusPage} statusPage object
+ * @param {slug} slug from router
+ * @returns {Promise} the rendered html
+ */
+ static async renderRSS(statusPage, slug) {
+ const { heartbeats, statusDescription } = await StatusPage.getRSSPageData(statusPage);
+
+ let proto = config.isSSL ? "https" : "http";
+ let host = `${proto}://${config.hostname || "localhost"}:${config.port}/status/${slug}`;
+
+ const feed = new Feed({
+ title: "uptime kuma rss feed",
+ description: `current status: ${statusDescription}`,
+ link: host,
+ language: "en", // optional, used only in RSS 2.0, possible values: http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
+ updated: new Date(), // optional, default = today
+ });
+
+ heartbeats.forEach(heartbeat => {
+ feed.addItem({
+ title: `${heartbeat.name} is down`,
+ description: `${heartbeat.name} has been down since ${heartbeat.time}`,
+ id: heartbeat.monitorID,
+ date: new Date(heartbeat.time),
+ });
+ });
+
+ return feed.rss2();
+ }
+
/**
* SSR for status pages
* @param {string} indexHTML HTML page to render
@@ -98,6 +152,109 @@ class StatusPage extends BeanModel {
return $.root().html();
}
+ /**
+ * @param {heartbeats} heartbeats from getRSSPageData
+ * @returns {number} status_page constant from util.ts
+ */
+ static overallStatus(heartbeats) {
+ if (heartbeats.length === 0) {
+ return -1;
+ }
+
+ let status = STATUS_PAGE_ALL_UP;
+ let hasUp = false;
+
+ for (let beat of heartbeats) {
+ if (beat.status === MAINTENANCE) {
+ return STATUS_PAGE_MAINTENANCE;
+ } else if (beat.status === UP) {
+ hasUp = true;
+ } else {
+ status = STATUS_PAGE_PARTIAL_DOWN;
+ }
+ }
+
+ if (! hasUp) {
+ status = STATUS_PAGE_ALL_DOWN;
+ }
+
+ return status;
+ }
+
+ /**
+ * @param {number} status from overallStatus
+ * @returns {string} description
+ */
+ static getStatusDescription(status) {
+ if (status === -1) {
+ return "No Services";
+ }
+
+ if (status === STATUS_PAGE_ALL_UP) {
+ return "All Systems Operational";
+ }
+
+ if (status === STATUS_PAGE_PARTIAL_DOWN) {
+ return "Partially Degraded Service";
+ }
+
+ if (status === STATUS_PAGE_ALL_DOWN) {
+ return "Degraded Service";
+ }
+
+ // TODO: show the real maintenance information: title, description, time
+ if (status === MAINTENANCE) {
+ return "Under maintenance";
+ }
+
+ return "?";
+ }
+
+ /**
+ * Get all data required for RSS
+ * @param {StatusPage} statusPage Status page to get data for
+ * @returns {object} Status page data
+ */
+ static async getRSSPageData(statusPage) {
+ // get all heartbeats that correspond to this statusPage
+ const config = await statusPage.toPublicJSON();
+
+ // Public Group List
+ const showTags = !!statusPage.show_tags;
+
+ const list = await R.find("group", " public = 1 AND status_page_id = ? ORDER BY weight ", [
+ statusPage.id
+ ]);
+
+ let heartbeats = [];
+
+ for (let groupBean of list) {
+ let monitorGroup = await groupBean.toPublicJSON(showTags, config?.showCertificateExpiry);
+ for (const monitor of monitorGroup.monitorList) {
+ const heartbeat = await R.findOne("heartbeat", "monitor_id = ? ORDER BY time DESC", [ monitor.id ]);
+ if (heartbeat) {
+ heartbeats.push({
+ ...monitor,
+ status: heartbeat.status,
+ time: heartbeat.time
+ });
+ }
+ }
+ }
+
+ // calculate RSS feed description
+ let status = StatusPage.overallStatus(heartbeats);
+ let statusDescription = StatusPage.getStatusDescription(status);
+
+ // keep only DOWN heartbeats in the RSS feed
+ heartbeats = heartbeats.filter(heartbeat => heartbeat.status === DOWN);
+
+ return {
+ heartbeats,
+ statusDescription
+ };
+ }
+
/**
* Get all status page data in one call
* @param {StatusPage} statusPage Status page to get data for
diff --git a/server/modules/apicache/apicache.js b/server/modules/apicache/apicache.js
index 41930b24d..95a04d9e3 100644
--- a/server/modules/apicache/apicache.js
+++ b/server/modules/apicache/apicache.js
@@ -485,7 +485,7 @@ function ApiCache() {
}
if (typeof duration === "string") {
- let split = duration.match(/^([\d\.,]+)\s?(\w+)$/);
+ let split = duration.match(/^([\d\.,]+)\s?([a-zA-Z]+)$/);
if (split.length === 3) {
let len = parseFloat(split[1]);
diff --git a/server/monitor-conditions/evaluator.js b/server/monitor-conditions/evaluator.js
new file mode 100644
index 000000000..3860a3325
--- /dev/null
+++ b/server/monitor-conditions/evaluator.js
@@ -0,0 +1,71 @@
+const { ConditionExpressionGroup, ConditionExpression, LOGICAL } = require("./expression");
+const { operatorMap } = require("./operators");
+
+/**
+ * @param {ConditionExpression} expression Expression to evaluate
+ * @param {object} context Context to evaluate against; These are values for variables in the expression
+ * @returns {boolean} Whether the expression evaluates true or false
+ * @throws {Error}
+ */
+function evaluateExpression(expression, context) {
+ /**
+ * @type {import("./operators").ConditionOperator|null}
+ */
+ const operator = operatorMap.get(expression.operator) || null;
+ if (operator === null) {
+ throw new Error("Unexpected expression operator ID '" + expression.operator + "'. Expected one of [" + operatorMap.keys().join(",") + "]");
+ }
+
+ if (!Object.prototype.hasOwnProperty.call(context, expression.variable)) {
+ throw new Error("Variable missing in context: " + expression.variable);
+ }
+
+ return operator.test(context[expression.variable], expression.value);
+}
+
+/**
+ * @param {ConditionExpressionGroup} group Group of expressions to evaluate
+ * @param {object} context Context to evaluate against; These are values for variables in the expression
+ * @returns {boolean} Whether the group evaluates true or false
+ * @throws {Error}
+ */
+function evaluateExpressionGroup(group, context) {
+ if (!group.children.length) {
+ throw new Error("ConditionExpressionGroup must contain at least one child.");
+ }
+
+ let result = null;
+
+ for (const child of group.children) {
+ let childResult;
+
+ if (child instanceof ConditionExpression) {
+ childResult = evaluateExpression(child, context);
+ } else if (child instanceof ConditionExpressionGroup) {
+ childResult = evaluateExpressionGroup(child, context);
+ } else {
+ throw new Error("Invalid child type in ConditionExpressionGroup. Expected ConditionExpression or ConditionExpressionGroup");
+ }
+
+ if (result === null) {
+ result = childResult; // Initialize result with the first child's result
+ } else if (child.andOr === LOGICAL.OR) {
+ result = result || childResult;
+ } else if (child.andOr === LOGICAL.AND) {
+ result = result && childResult;
+ } else {
+ throw new Error("Invalid logical operator in child of ConditionExpressionGroup. Expected 'and' or 'or'. Got '" + group.andOr + "'");
+ }
+ }
+
+ if (result === null) {
+ throw new Error("ConditionExpressionGroup did not result in a boolean.");
+ }
+
+ return result;
+}
+
+module.exports = {
+ evaluateExpression,
+ evaluateExpressionGroup,
+};
diff --git a/server/monitor-conditions/expression.js b/server/monitor-conditions/expression.js
new file mode 100644
index 000000000..1e7036959
--- /dev/null
+++ b/server/monitor-conditions/expression.js
@@ -0,0 +1,111 @@
+/**
+ * @readonly
+ * @enum {string}
+ */
+const LOGICAL = {
+ AND: "and",
+ OR: "or",
+};
+
+/**
+ * Recursively processes an array of raw condition objects and populates the given parent group with
+ * corresponding ConditionExpression or ConditionExpressionGroup instances.
+ * @param {Array} conditions Array of raw condition objects, where each object represents either a group or an expression.
+ * @param {ConditionExpressionGroup} parentGroup The parent group to which the instantiated ConditionExpression or ConditionExpressionGroup objects will be added.
+ * @returns {void}
+ */
+function processMonitorConditions(conditions, parentGroup) {
+ conditions.forEach(condition => {
+ const andOr = condition.andOr === LOGICAL.OR ? LOGICAL.OR : LOGICAL.AND;
+
+ if (condition.type === "group") {
+ const group = new ConditionExpressionGroup([], andOr);
+
+ // Recursively process the group's children
+ processMonitorConditions(condition.children, group);
+
+ parentGroup.children.push(group);
+ } else if (condition.type === "expression") {
+ const expression = new ConditionExpression(condition.variable, condition.operator, condition.value, andOr);
+ parentGroup.children.push(expression);
+ }
+ });
+}
+
+class ConditionExpressionGroup {
+ /**
+ * @type {ConditionExpressionGroup[]|ConditionExpression[]} Groups and/or expressions to test
+ */
+ children = [];
+
+ /**
+ * @type {LOGICAL} Connects group result with previous group/expression results
+ */
+ andOr;
+
+ /**
+ * @param {ConditionExpressionGroup[]|ConditionExpression[]} children Groups and/or expressions to test
+ * @param {LOGICAL} andOr Connects group result with previous group/expression results
+ */
+ constructor(children = [], andOr = LOGICAL.AND) {
+ this.children = children;
+ this.andOr = andOr;
+ }
+
+ /**
+ * @param {Monitor} monitor Monitor instance
+ * @returns {ConditionExpressionGroup|null} A ConditionExpressionGroup with the Monitor's conditions
+ */
+ static fromMonitor(monitor) {
+ const conditions = JSON.parse(monitor.conditions);
+ if (conditions.length === 0) {
+ return null;
+ }
+
+ const root = new ConditionExpressionGroup();
+ processMonitorConditions(conditions, root);
+
+ return root;
+ }
+}
+
+class ConditionExpression {
+ /**
+ * @type {string} ID of variable
+ */
+ variable;
+
+ /**
+ * @type {string} ID of operator
+ */
+ operator;
+
+ /**
+ * @type {string} Value to test with the operator
+ */
+ value;
+
+ /**
+ * @type {LOGICAL} Connects expression result with previous group/expression results
+ */
+ andOr;
+
+ /**
+ * @param {string} variable ID of variable to test against
+ * @param {string} operator ID of operator to test the variable with
+ * @param {string} value Value to test with the operator
+ * @param {LOGICAL} andOr Connects expression result with previous group/expression results
+ */
+ constructor(variable, operator, value, andOr = LOGICAL.AND) {
+ this.variable = variable;
+ this.operator = operator;
+ this.value = value;
+ this.andOr = andOr;
+ }
+}
+
+module.exports = {
+ LOGICAL,
+ ConditionExpressionGroup,
+ ConditionExpression,
+};
diff --git a/server/monitor-conditions/operators.js b/server/monitor-conditions/operators.js
new file mode 100644
index 000000000..d900dff9d
--- /dev/null
+++ b/server/monitor-conditions/operators.js
@@ -0,0 +1,318 @@
+class ConditionOperator {
+ id = undefined;
+ caption = undefined;
+
+ /**
+ * @type {mixed} variable
+ * @type {mixed} value
+ */
+ test(variable, value) {
+ throw new Error("You need to override test()");
+ }
+}
+
+const OP_STR_EQUALS = "equals";
+
+const OP_STR_NOT_EQUALS = "not_equals";
+
+const OP_CONTAINS = "contains";
+
+const OP_NOT_CONTAINS = "not_contains";
+
+const OP_STARTS_WITH = "starts_with";
+
+const OP_NOT_STARTS_WITH = "not_starts_with";
+
+const OP_ENDS_WITH = "ends_with";
+
+const OP_NOT_ENDS_WITH = "not_ends_with";
+
+const OP_NUM_EQUALS = "num_equals";
+
+const OP_NUM_NOT_EQUALS = "num_not_equals";
+
+const OP_LT = "lt";
+
+const OP_GT = "gt";
+
+const OP_LTE = "lte";
+
+const OP_GTE = "gte";
+
+/**
+ * Asserts a variable is equal to a value.
+ */
+class StringEqualsOperator extends ConditionOperator {
+ id = OP_STR_EQUALS;
+ caption = "equals";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable === value;
+ }
+}
+
+/**
+ * Asserts a variable is not equal to a value.
+ */
+class StringNotEqualsOperator extends ConditionOperator {
+ id = OP_STR_NOT_EQUALS;
+ caption = "not equals";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable !== value;
+ }
+}
+
+/**
+ * Asserts a variable contains a value.
+ * Handles both Array and String variable types.
+ */
+class ContainsOperator extends ConditionOperator {
+ id = OP_CONTAINS;
+ caption = "contains";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ if (Array.isArray(variable)) {
+ return variable.includes(value);
+ }
+
+ return variable.indexOf(value) !== -1;
+ }
+}
+
+/**
+ * Asserts a variable does not contain a value.
+ * Handles both Array and String variable types.
+ */
+class NotContainsOperator extends ConditionOperator {
+ id = OP_NOT_CONTAINS;
+ caption = "not contains";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ if (Array.isArray(variable)) {
+ return !variable.includes(value);
+ }
+
+ return variable.indexOf(value) === -1;
+ }
+}
+
+/**
+ * Asserts a variable starts with a value.
+ */
+class StartsWithOperator extends ConditionOperator {
+ id = OP_STARTS_WITH;
+ caption = "starts with";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable.startsWith(value);
+ }
+}
+
+/**
+ * Asserts a variable does not start with a value.
+ */
+class NotStartsWithOperator extends ConditionOperator {
+ id = OP_NOT_STARTS_WITH;
+ caption = "not starts with";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return !variable.startsWith(value);
+ }
+}
+
+/**
+ * Asserts a variable ends with a value.
+ */
+class EndsWithOperator extends ConditionOperator {
+ id = OP_ENDS_WITH;
+ caption = "ends with";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable.endsWith(value);
+ }
+}
+
+/**
+ * Asserts a variable does not end with a value.
+ */
+class NotEndsWithOperator extends ConditionOperator {
+ id = OP_NOT_ENDS_WITH;
+ caption = "not ends with";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return !variable.endsWith(value);
+ }
+}
+
+/**
+ * Asserts a numeric variable is equal to a value.
+ */
+class NumberEqualsOperator extends ConditionOperator {
+ id = OP_NUM_EQUALS;
+ caption = "equals";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable === Number(value);
+ }
+}
+
+/**
+ * Asserts a numeric variable is not equal to a value.
+ */
+class NumberNotEqualsOperator extends ConditionOperator {
+ id = OP_NUM_NOT_EQUALS;
+ caption = "not equals";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable !== Number(value);
+ }
+}
+
+/**
+ * Asserts a variable is less than a value.
+ */
+class LessThanOperator extends ConditionOperator {
+ id = OP_LT;
+ caption = "less than";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable < Number(value);
+ }
+}
+
+/**
+ * Asserts a variable is greater than a value.
+ */
+class GreaterThanOperator extends ConditionOperator {
+ id = OP_GT;
+ caption = "greater than";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable > Number(value);
+ }
+}
+
+/**
+ * Asserts a variable is less than or equal to a value.
+ */
+class LessThanOrEqualToOperator extends ConditionOperator {
+ id = OP_LTE;
+ caption = "less than or equal to";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable <= Number(value);
+ }
+}
+
+/**
+ * Asserts a variable is greater than or equal to a value.
+ */
+class GreaterThanOrEqualToOperator extends ConditionOperator {
+ id = OP_GTE;
+ caption = "greater than or equal to";
+
+ /**
+ * @inheritdoc
+ */
+ test(variable, value) {
+ return variable >= Number(value);
+ }
+}
+
+const operatorMap = new Map([
+ [ OP_STR_EQUALS, new StringEqualsOperator ],
+ [ OP_STR_NOT_EQUALS, new StringNotEqualsOperator ],
+ [ OP_CONTAINS, new ContainsOperator ],
+ [ OP_NOT_CONTAINS, new NotContainsOperator ],
+ [ OP_STARTS_WITH, new StartsWithOperator ],
+ [ OP_NOT_STARTS_WITH, new NotStartsWithOperator ],
+ [ OP_ENDS_WITH, new EndsWithOperator ],
+ [ OP_NOT_ENDS_WITH, new NotEndsWithOperator ],
+ [ OP_NUM_EQUALS, new NumberEqualsOperator ],
+ [ OP_NUM_NOT_EQUALS, new NumberNotEqualsOperator ],
+ [ OP_LT, new LessThanOperator ],
+ [ OP_GT, new GreaterThanOperator ],
+ [ OP_LTE, new LessThanOrEqualToOperator ],
+ [ OP_GTE, new GreaterThanOrEqualToOperator ],
+]);
+
+const defaultStringOperators = [
+ operatorMap.get(OP_STR_EQUALS),
+ operatorMap.get(OP_STR_NOT_EQUALS),
+ operatorMap.get(OP_CONTAINS),
+ operatorMap.get(OP_NOT_CONTAINS),
+ operatorMap.get(OP_STARTS_WITH),
+ operatorMap.get(OP_NOT_STARTS_WITH),
+ operatorMap.get(OP_ENDS_WITH),
+ operatorMap.get(OP_NOT_ENDS_WITH)
+];
+
+const defaultNumberOperators = [
+ operatorMap.get(OP_NUM_EQUALS),
+ operatorMap.get(OP_NUM_NOT_EQUALS),
+ operatorMap.get(OP_LT),
+ operatorMap.get(OP_GT),
+ operatorMap.get(OP_LTE),
+ operatorMap.get(OP_GTE)
+];
+
+module.exports = {
+ OP_STR_EQUALS,
+ OP_STR_NOT_EQUALS,
+ OP_CONTAINS,
+ OP_NOT_CONTAINS,
+ OP_STARTS_WITH,
+ OP_NOT_STARTS_WITH,
+ OP_ENDS_WITH,
+ OP_NOT_ENDS_WITH,
+ OP_NUM_EQUALS,
+ OP_NUM_NOT_EQUALS,
+ OP_LT,
+ OP_GT,
+ OP_LTE,
+ OP_GTE,
+ operatorMap,
+ defaultStringOperators,
+ defaultNumberOperators,
+ ConditionOperator,
+};
diff --git a/server/monitor-conditions/variables.js b/server/monitor-conditions/variables.js
new file mode 100644
index 000000000..af98d2f29
--- /dev/null
+++ b/server/monitor-conditions/variables.js
@@ -0,0 +1,31 @@
+/**
+ * Represents a variable used in a condition and the set of operators that can be applied to this variable.
+ *
+ * A `ConditionVariable` holds the ID of the variable and a list of operators that define how this variable can be evaluated
+ * in conditions. For example, if the variable is a request body or a specific field in a request, the operators can include
+ * operations such as equality checks, comparisons, or other custom evaluations.
+ */
+class ConditionVariable {
+ /**
+ * @type {string}
+ */
+ id;
+
+ /**
+ * @type {import("./operators").ConditionOperator[]}
+ */
+ operators = {};
+
+ /**
+ * @param {string} id ID of variable
+ * @param {import("./operators").ConditionOperator[]} operators Operators the condition supports
+ */
+ constructor(id, operators = []) {
+ this.id = id;
+ this.operators = operators;
+ }
+}
+
+module.exports = {
+ ConditionVariable,
+};
diff --git a/server/monitor-types/dns.js b/server/monitor-types/dns.js
index d038b6805..5a47e4591 100644
--- a/server/monitor-types/dns.js
+++ b/server/monitor-types/dns.js
@@ -1,12 +1,22 @@
const { MonitorType } = require("./monitor-type");
-const { UP } = require("../../src/util");
+const { UP, DOWN } = require("../../src/util");
const dayjs = require("dayjs");
const { dnsResolve } = require("../util-server");
const { R } = require("redbean-node");
+const { ConditionVariable } = require("../monitor-conditions/variables");
+const { defaultStringOperators } = require("../monitor-conditions/operators");
+const { ConditionExpressionGroup } = require("../monitor-conditions/expression");
+const { evaluateExpressionGroup } = require("../monitor-conditions/evaluator");
class DnsMonitorType extends MonitorType {
name = "dns";
+ supportsConditions = true;
+
+ conditionVariables = [
+ new ConditionVariable("record", defaultStringOperators ),
+ ];
+
/**
* @inheritdoc
*/
@@ -17,28 +27,52 @@ class DnsMonitorType extends MonitorType {
let dnsRes = await dnsResolve(monitor.hostname, monitor.dns_resolve_server, monitor.port, monitor.dns_resolve_type);
heartbeat.ping = dayjs().valueOf() - startTime;
- if (monitor.dns_resolve_type === "A" || monitor.dns_resolve_type === "AAAA" || monitor.dns_resolve_type === "TXT" || monitor.dns_resolve_type === "PTR") {
- dnsMessage += "Records: ";
- dnsMessage += dnsRes.join(" | ");
- } else if (monitor.dns_resolve_type === "CNAME" || monitor.dns_resolve_type === "PTR") {
- dnsMessage += dnsRes[0];
- } else if (monitor.dns_resolve_type === "CAA") {
- dnsMessage += dnsRes[0].issue;
- } else if (monitor.dns_resolve_type === "MX") {
- dnsRes.forEach(record => {
- dnsMessage += `Hostname: ${record.exchange} - Priority: ${record.priority} | `;
- });
- dnsMessage = dnsMessage.slice(0, -2);
- } else if (monitor.dns_resolve_type === "NS") {
- dnsMessage += "Servers: ";
- dnsMessage += dnsRes.join(" | ");
- } else if (monitor.dns_resolve_type === "SOA") {
- dnsMessage += `NS-Name: ${dnsRes.nsname} | Hostmaster: ${dnsRes.hostmaster} | Serial: ${dnsRes.serial} | Refresh: ${dnsRes.refresh} | Retry: ${dnsRes.retry} | Expire: ${dnsRes.expire} | MinTTL: ${dnsRes.minttl}`;
- } else if (monitor.dns_resolve_type === "SRV") {
- dnsRes.forEach(record => {
- dnsMessage += `Name: ${record.name} | Port: ${record.port} | Priority: ${record.priority} | Weight: ${record.weight} | `;
- });
- dnsMessage = dnsMessage.slice(0, -2);
+ const conditions = ConditionExpressionGroup.fromMonitor(monitor);
+ let conditionsResult = true;
+ const handleConditions = (data) => conditions ? evaluateExpressionGroup(conditions, data) : true;
+
+ switch (monitor.dns_resolve_type) {
+ case "A":
+ case "AAAA":
+ case "PTR":
+ dnsMessage = `Records: ${dnsRes.join(" | ")}`;
+ conditionsResult = dnsRes.some(record => handleConditions({ record }));
+ break;
+
+ case "TXT":
+ dnsMessage = `Records: ${dnsRes.join(" | ")}`;
+ conditionsResult = dnsRes.flat().some(record => handleConditions({ record }));
+ break;
+
+ case "CNAME":
+ dnsMessage = dnsRes[0];
+ conditionsResult = handleConditions({ record: dnsRes[0] });
+ break;
+
+ case "CAA":
+ dnsMessage = dnsRes[0].issue;
+ conditionsResult = handleConditions({ record: dnsRes[0].issue });
+ break;
+
+ case "MX":
+ dnsMessage = dnsRes.map(record => `Hostname: ${record.exchange} - Priority: ${record.priority}`).join(" | ");
+ conditionsResult = dnsRes.some(record => handleConditions({ record: record.exchange }));
+ break;
+
+ case "NS":
+ dnsMessage = `Servers: ${dnsRes.join(" | ")}`;
+ conditionsResult = dnsRes.some(record => handleConditions({ record }));
+ break;
+
+ case "SOA":
+ dnsMessage = `NS-Name: ${dnsRes.nsname} | Hostmaster: ${dnsRes.hostmaster} | Serial: ${dnsRes.serial} | Refresh: ${dnsRes.refresh} | Retry: ${dnsRes.retry} | Expire: ${dnsRes.expire} | MinTTL: ${dnsRes.minttl}`;
+ conditionsResult = handleConditions({ record: dnsRes.nsname });
+ break;
+
+ case "SRV":
+ dnsMessage = dnsRes.map(record => `Name: ${record.name} | Port: ${record.port} | Priority: ${record.priority} | Weight: ${record.weight}`).join(" | ");
+ conditionsResult = dnsRes.some(record => handleConditions({ record: record.name }));
+ break;
}
if (monitor.dns_last_result !== dnsMessage && dnsMessage !== undefined) {
@@ -46,7 +80,7 @@ class DnsMonitorType extends MonitorType {
}
heartbeat.msg = dnsMessage;
- heartbeat.status = UP;
+ heartbeat.status = conditionsResult ? UP : DOWN;
}
}
diff --git a/server/monitor-types/group.js b/server/monitor-types/group.js
new file mode 100644
index 000000000..28d0443d4
--- /dev/null
+++ b/server/monitor-types/group.js
@@ -0,0 +1,49 @@
+const { UP, PENDING, DOWN } = require("../../src/util");
+const { MonitorType } = require("./monitor-type");
+const Monitor = require("../model/monitor");
+
+class GroupMonitorType extends MonitorType {
+ name = "group";
+
+ /**
+ * @inheritdoc
+ */
+ async check(monitor, heartbeat, _server) {
+ const children = await Monitor.getChildren(monitor.id);
+
+ if (children.length > 0) {
+ heartbeat.status = UP;
+ heartbeat.msg = "All children up and running";
+ for (const child of children) {
+ if (!child.active) {
+ // Ignore inactive childs
+ continue;
+ }
+ const lastBeat = await Monitor.getPreviousHeartbeat(child.id);
+
+ // Only change state if the monitor is in worse conditions then the ones before
+ // lastBeat.status could be null
+ if (!lastBeat) {
+ heartbeat.status = PENDING;
+ } else if (heartbeat.status === UP && (lastBeat.status === PENDING || lastBeat.status === DOWN)) {
+ heartbeat.status = lastBeat.status;
+ } else if (heartbeat.status === PENDING && lastBeat.status === DOWN) {
+ heartbeat.status = lastBeat.status;
+ }
+ }
+
+ if (heartbeat.status !== UP) {
+ heartbeat.msg = "Child inaccessible";
+ }
+ } else {
+ // Set status pending if group is empty
+ heartbeat.status = PENDING;
+ heartbeat.msg = "Group empty";
+ }
+ }
+}
+
+module.exports = {
+ GroupMonitorType,
+};
+
diff --git a/server/monitor-types/monitor-type.js b/server/monitor-types/monitor-type.js
index 8290bdd76..8f3cbcac4 100644
--- a/server/monitor-types/monitor-type.js
+++ b/server/monitor-types/monitor-type.js
@@ -1,6 +1,19 @@
class MonitorType {
name = undefined;
+ /**
+ * Whether or not this type supports monitor conditions. Controls UI visibility in monitor form.
+ * @type {boolean}
+ */
+ supportsConditions = false;
+
+ /**
+ * Variables supported by this type. e.g. an HTTP type could have a "response_code" variable to test against.
+ * This property controls the choices displayed in the monitor edit form.
+ * @type {import("../monitor-conditions/variables").ConditionVariable[]}
+ */
+ conditionVariables = [];
+
/**
* Run the monitoring check on the given monitor
* @param {Monitor} monitor Monitor to check
diff --git a/server/monitor-types/rabbitmq.js b/server/monitor-types/rabbitmq.js
new file mode 100644
index 000000000..165a0ed91
--- /dev/null
+++ b/server/monitor-types/rabbitmq.js
@@ -0,0 +1,67 @@
+const { MonitorType } = require("./monitor-type");
+const { log, UP, DOWN } = require("../../src/util");
+const { axiosAbortSignal } = require("../util-server");
+const axios = require("axios");
+
+class RabbitMqMonitorType extends MonitorType {
+ name = "rabbitmq";
+
+ /**
+ * @inheritdoc
+ */
+ async check(monitor, heartbeat, server) {
+ let baseUrls = [];
+ try {
+ baseUrls = JSON.parse(monitor.rabbitmqNodes);
+ } catch (error) {
+ throw new Error("Invalid RabbitMQ Nodes");
+ }
+
+ heartbeat.status = DOWN;
+ for (let baseUrl of baseUrls) {
+ try {
+ // Without a trailing slash, path in baseUrl will be removed. https://example.com/api -> https://example.com
+ if ( !baseUrl.endsWith("/") ) {
+ baseUrl += "/";
+ }
+ const options = {
+ // Do not start with slash, it will strip the trailing slash from baseUrl
+ url: new URL("api/health/checks/alarms/", baseUrl).href,
+ method: "get",
+ timeout: monitor.timeout * 1000,
+ headers: {
+ "Accept": "application/json",
+ "Authorization": "Basic " + Buffer.from(`${monitor.rabbitmqUsername || ""}:${monitor.rabbitmqPassword || ""}`).toString("base64"),
+ },
+ signal: axiosAbortSignal((monitor.timeout + 10) * 1000),
+ // Capture reason for 503 status
+ validateStatus: (status) => status === 200 || status === 503,
+ };
+ log.debug("monitor", `[${monitor.name}] Axios Request: ${JSON.stringify(options)}`);
+ const res = await axios.request(options);
+ log.debug("monitor", `[${monitor.name}] Axios Response: status=${res.status} body=${JSON.stringify(res.data)}`);
+ if (res.status === 200) {
+ heartbeat.status = UP;
+ heartbeat.msg = "OK";
+ break;
+ } else if (res.status === 503) {
+ heartbeat.msg = res.data.reason;
+ } else {
+ heartbeat.msg = `${res.status} - ${res.statusText}`;
+ }
+ } catch (error) {
+ if (axios.isCancel(error)) {
+ heartbeat.msg = "Request timed out";
+ log.debug("monitor", `[${monitor.name}] Request timed out`);
+ } else {
+ log.debug("monitor", `[${monitor.name}] Axios Error: ${JSON.stringify(error.message)}`);
+ heartbeat.msg = error.message;
+ }
+ }
+ }
+ }
+}
+
+module.exports = {
+ RabbitMqMonitorType,
+};
diff --git a/server/monitor-types/real-browser-monitor-type.js b/server/monitor-types/real-browser-monitor-type.js
index f1219af18..2a2871d2c 100644
--- a/server/monitor-types/real-browser-monitor-type.js
+++ b/server/monitor-types/real-browser-monitor-type.js
@@ -240,6 +240,14 @@ class RealBrowserMonitorType extends MonitorType {
const context = await browser.newContext();
const page = await context.newPage();
+ // Prevent Local File Inclusion
+ // Accept only http:// and https://
+ // https://github.com/louislam/uptime-kuma/security/advisories/GHSA-2qgm-m29m-cj2h
+ let url = new URL(monitor.url);
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
+ throw new Error("Invalid url protocol, only http and https are allowed.");
+ }
+
const res = await page.goto(monitor.url, {
waitUntil: "networkidle",
timeout: monitor.interval * 1000 * 0.8,
diff --git a/server/monitor-types/smtp.js b/server/monitor-types/smtp.js
new file mode 100644
index 000000000..f4a49e238
--- /dev/null
+++ b/server/monitor-types/smtp.js
@@ -0,0 +1,35 @@
+const { MonitorType } = require("./monitor-type");
+const { UP } = require("../../src/util");
+const nodemailer = require("nodemailer");
+
+class SMTPMonitorType extends MonitorType {
+ name = "smtp";
+
+ /**
+ * @inheritdoc
+ */
+ async check(monitor, heartbeat, _server) {
+ let options = {
+ port: monitor.port || 25,
+ host: monitor.hostname,
+ secure: monitor.smtpSecurity === "secure", // use SMTPS (not STARTTLS)
+ ignoreTLS: monitor.smtpSecurity === "nostarttls", // don't use STARTTLS even if it's available
+ requireTLS: monitor.smtpSecurity === "starttls", // use STARTTLS or fail
+ };
+ let transporter = nodemailer.createTransport(options);
+ try {
+ await transporter.verify();
+
+ heartbeat.status = UP;
+ heartbeat.msg = "SMTP connection verifies successfully";
+ } catch (e) {
+ throw new Error(`SMTP connection doesn't verify: ${e}`);
+ } finally {
+ transporter.close();
+ }
+ }
+}
+
+module.exports = {
+ SMTPMonitorType,
+};
diff --git a/server/notification-providers/46elks.js b/server/notification-providers/46elks.js
new file mode 100644
index 000000000..4b15e9fad
--- /dev/null
+++ b/server/notification-providers/46elks.js
@@ -0,0 +1,35 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class Elks extends NotificationProvider {
+ name = "Elks";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://api.46elks.com/a1/sms";
+
+ try {
+ let data = new URLSearchParams();
+ data.append("from", notification.elksFromNumber);
+ data.append("to", notification.elksToNumber );
+ data.append("message", msg);
+
+ const config = {
+ headers: {
+ "Authorization": "Basic " + Buffer.from(`${notification.elksUsername}:${notification.elksAuthToken}`).toString("base64")
+ }
+ };
+
+ await axios.post(url, data, config);
+
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = Elks;
diff --git a/server/notification-providers/aliyun-sms.js b/server/notification-providers/aliyun-sms.js
index ff38bd0d9..e18602bdc 100644
--- a/server/notification-providers/aliyun-sms.js
+++ b/server/notification-providers/aliyun-sms.js
@@ -17,7 +17,7 @@ class AliyunSMS extends NotificationProvider {
if (heartbeatJSON != null) {
let msgBody = JSON.stringify({
name: monitorJSON["name"],
- time: heartbeatJSON["time"],
+ time: heartbeatJSON["localDateTime"],
status: this.statusToString(heartbeatJSON["status"]),
msg: heartbeatJSON["msg"],
});
diff --git a/server/notification-providers/dingding.js b/server/notification-providers/dingding.js
index 5d8cb8948..c66f270a7 100644
--- a/server/notification-providers/dingding.js
+++ b/server/notification-providers/dingding.js
@@ -87,7 +87,6 @@ class DingDing extends NotificationProvider {
* @returns {string} Status
*/
statusToString(status) {
- // TODO: Move to notification-provider.js to avoid repetition in classes
switch (status) {
case DOWN:
return "DOWN";
diff --git a/server/notification-providers/discord.js b/server/notification-providers/discord.js
index ccb80bf40..9ea260410 100644
--- a/server/notification-providers/discord.js
+++ b/server/notification-providers/discord.js
@@ -46,10 +46,10 @@ class Discord extends NotificationProvider {
name: "Service Name",
value: monitorJSON["name"],
},
- {
+ ...(!notification.disableUrl ? [{
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
- value: this.extractAdress(monitorJSON),
- },
+ value: this.extractAddress(monitorJSON),
+ }] : []),
{
name: `Time (${heartbeatJSON["timezone"]})`,
value: heartbeatJSON["localDateTime"],
@@ -83,10 +83,10 @@ class Discord extends NotificationProvider {
name: "Service Name",
value: monitorJSON["name"],
},
- {
+ ...(!notification.disableUrl ? [{
name: monitorJSON["type"] === "push" ? "Service Type" : "Service URL",
- value: this.extractAdress(monitorJSON),
- },
+ value: this.extractAddress(monitorJSON),
+ }] : []),
{
name: `Time (${heartbeatJSON["timezone"]})`,
value: heartbeatJSON["localDateTime"],
diff --git a/server/notification-providers/google-chat.js b/server/notification-providers/google-chat.js
index 0b72fea95..9e94844d7 100644
--- a/server/notification-providers/google-chat.js
+++ b/server/notification-providers/google-chat.js
@@ -72,6 +72,7 @@ class GoogleChat extends NotificationProvider {
// construct json data
let data = {
+ fallbackText: chatHeader["title"],
cardsV2: [
{
card: {
diff --git a/server/notification-providers/nostr.js b/server/notification-providers/nostr.js
index 453b86d0a..72f0bb621 100644
--- a/server/notification-providers/nostr.js
+++ b/server/notification-providers/nostr.js
@@ -1,27 +1,16 @@
-const { log } = require("../../src/util");
const NotificationProvider = require("./notification-provider");
const {
- relayInit,
- getPublicKey,
- getEventHash,
- getSignature,
+ finalizeEvent,
+ Relay,
+ kinds,
nip04,
- nip19
+ nip19,
} = require("nostr-tools");
// polyfills for node versions
const semver = require("semver");
const nodeVersion = process.version;
-if (semver.lt(nodeVersion, "16.0.0")) {
- log.warn("monitor", "Node <= 16 is unsupported for nostr, sorry :(");
-} else if (semver.lt(nodeVersion, "18.0.0")) {
- // polyfills for node 16
- global.crypto = require("crypto");
- global.WebSocket = require("isomorphic-ws");
- if (typeof crypto !== "undefined" && !crypto.subtle && crypto.webcrypto) {
- crypto.subtle = crypto.webcrypto.subtle;
- }
-} else if (semver.lt(nodeVersion, "20.0.0")) {
+if (semver.lt(nodeVersion, "20.0.0")) {
// polyfills for node 18
global.crypto = require("crypto");
global.WebSocket = require("isomorphic-ws");
@@ -41,7 +30,6 @@ class Nostr extends NotificationProvider {
const createdAt = Math.floor(Date.now() / 1000);
const senderPrivateKey = await this.getPrivateKey(notification.sender);
- const senderPublicKey = getPublicKey(senderPrivateKey);
const recipientsPublicKeys = await this.getPublicKeys(notification.recipients);
// Create NIP-04 encrypted direct message event for each recipient
@@ -49,34 +37,41 @@ class Nostr extends NotificationProvider {
for (const recipientPublicKey of recipientsPublicKeys) {
const ciphertext = await nip04.encrypt(senderPrivateKey, recipientPublicKey, msg);
let event = {
- kind: 4,
- pubkey: senderPublicKey,
+ kind: kinds.EncryptedDirectMessage,
created_at: createdAt,
tags: [[ "p", recipientPublicKey ]],
content: ciphertext,
};
- event.id = getEventHash(event);
- event.sig = getSignature(event, senderPrivateKey);
- events.push(event);
+ const signedEvent = finalizeEvent(event, senderPrivateKey);
+ events.push(signedEvent);
}
// Publish events to each relay
const relays = notification.relays.split("\n");
let successfulRelays = 0;
-
- // Connect to each relay
for (const relayUrl of relays) {
- const relay = relayInit(relayUrl);
- try {
- await relay.connect();
- successfulRelays++;
+ const relay = await Relay.connect(relayUrl);
+ let eventIndex = 0;
- // Publish events
- for (const event of events) {
- relay.publish(event);
- }
+ // Authenticate to the relay, if required
+ try {
+ await relay.publish(events[0]);
+ eventIndex = 1;
} catch (error) {
- continue;
+ if (relay.challenge) {
+ await relay.auth(async (evt) => {
+ return finalizeEvent(evt, senderPrivateKey);
+ });
+ }
+ }
+
+ try {
+ for (let i = eventIndex; i < events.length; i++) {
+ await relay.publish(events[i]);
+ }
+ successfulRelays++;
+ } catch (error) {
+ console.error(`Failed to publish event to ${relayUrl}:`, error);
} finally {
relay.close();
}
@@ -100,7 +95,7 @@ class Nostr extends NotificationProvider {
const { data } = senderDecodeResult;
return data;
} catch (error) {
- throw new Error(`Failed to get private key: ${error.message}`);
+ throw new Error(`Failed to decode private key for sender ${sender}: ${error.message}`);
}
}
@@ -119,10 +114,10 @@ class Nostr extends NotificationProvider {
if (type === "npub") {
publicKeys.push(data);
} else {
- throw new Error("not an npub");
+ throw new Error(`Recipient ${recipient} is not an npub`);
}
} catch (error) {
- throw new Error(`Error decoding recipient: ${error}`);
+ throw new Error(`Error decoding recipient ${recipient}: ${error}`);
}
}
return publicKeys;
diff --git a/server/notification-providers/notifery.js b/server/notification-providers/notifery.js
new file mode 100644
index 000000000..772556497
--- /dev/null
+++ b/server/notification-providers/notifery.js
@@ -0,0 +1,53 @@
+const { getMonitorRelativeURL, UP } = require("../../src/util");
+const { setting } = require("../util-server");
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class Notifery extends NotificationProvider {
+ name = "notifery";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://api.notifery.com/event";
+
+ let data = {
+ title: notification.notiferyTitle || "Uptime Kuma Alert",
+ message: msg,
+ };
+
+ if (notification.notiferyGroup) {
+ data.group = notification.notiferyGroup;
+ }
+
+ // Link to the monitor
+ const baseURL = await setting("primaryBaseURL");
+ if (baseURL && monitorJSON) {
+ data.message += `\n\nMonitor: ${baseURL}${getMonitorRelativeURL(monitorJSON.id)}`;
+ }
+
+ if (heartbeatJSON) {
+ data.code = heartbeatJSON.status === UP ? 0 : 1;
+
+ if (heartbeatJSON.ping) {
+ data.duration = heartbeatJSON.ping;
+ }
+ }
+
+ try {
+ const headers = {
+ "Content-Type": "application/json",
+ "x-api-key": notification.notiferyApiKey,
+ };
+
+ await axios.post(url, data, { headers });
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = Notifery;
diff --git a/server/notification-providers/notification-provider.js b/server/notification-providers/notification-provider.js
index d26b791f6..42e8e616d 100644
--- a/server/notification-providers/notification-provider.js
+++ b/server/notification-providers/notification-provider.js
@@ -1,3 +1,6 @@
+const { Liquid } = require("liquidjs");
+const { DOWN } = require("../../src/util");
+
class NotificationProvider {
/**
@@ -24,7 +27,7 @@ class NotificationProvider {
* @param {?object} monitorJSON Monitor details (For Up/Down only)
* @returns {string} The extracted address based on the monitor type.
*/
- extractAdress(monitorJSON) {
+ extractAddress(monitorJSON) {
if (!monitorJSON) {
return "";
}
@@ -49,6 +52,50 @@ class NotificationProvider {
}
}
+ /**
+ * Renders a message template with notification context
+ * @param {string} template the template
+ * @param {string} msg the message that will be included in the context
+ * @param {?object} monitorJSON Monitor details (For Up/Down/Cert-Expiry only)
+ * @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
+ * @returns {Promise} rendered template
+ */
+ async renderTemplate(template, msg, monitorJSON, heartbeatJSON) {
+ const engine = new Liquid();
+ const parsedTpl = engine.parse(template);
+
+ // Let's start with dummy values to simplify code
+ let monitorName = "Monitor Name not available";
+ let monitorHostnameOrURL = "testing.hostname";
+
+ if (monitorJSON !== null) {
+ monitorName = monitorJSON["name"];
+ monitorHostnameOrURL = this.extractAddress(monitorJSON);
+ }
+
+ let serviceStatus = "⚠️ Test";
+ if (heartbeatJSON !== null) {
+ serviceStatus = (heartbeatJSON["status"] === DOWN) ? "🔴 Down" : "✅ Up";
+ }
+
+ const context = {
+ // for v1 compatibility, to be removed in v3
+ "STATUS": serviceStatus,
+ "NAME": monitorName,
+ "HOSTNAME_OR_URL": monitorHostnameOrURL,
+
+ // variables which are officially supported
+ "status": serviceStatus,
+ "name": monitorName,
+ "hostnameOrURL": monitorHostnameOrURL,
+ monitorJSON,
+ heartbeatJSON,
+ msg,
+ };
+
+ return engine.render(parsedTpl, context);
+ }
+
/**
* Throws an error
* @param {any} error The error to throw
diff --git a/server/notification-providers/onechat.js b/server/notification-providers/onechat.js
new file mode 100644
index 000000000..2d6ea1d5b
--- /dev/null
+++ b/server/notification-providers/onechat.js
@@ -0,0 +1,73 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { DOWN, UP } = require("../../src/util");
+
+class OneChat extends NotificationProvider {
+ name = "OneChat";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://chat-api.one.th/message/api/v1/push_message";
+
+ try {
+ const config = {
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: "Bearer " + notification.accessToken,
+ },
+ };
+ if (heartbeatJSON == null) {
+ const testMessage = {
+ to: notification.recieverId,
+ bot_id: notification.botId,
+ type: "text",
+ message: "Test Successful!",
+ };
+ await axios.post(url, testMessage, config);
+ } else if (heartbeatJSON["status"] === DOWN) {
+ const downMessage = {
+ to: notification.recieverId,
+ bot_id: notification.botId,
+ type: "text",
+ message:
+ `UptimeKuma Alert:
+[🔴 Down]
+Name: ${monitorJSON["name"]}
+${heartbeatJSON["msg"]}
+Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`,
+ };
+ await axios.post(url, downMessage, config);
+ } else if (heartbeatJSON["status"] === UP) {
+ const upMessage = {
+ to: notification.recieverId,
+ bot_id: notification.botId,
+ type: "text",
+ message:
+ `UptimeKuma Alert:
+[🟢 Up]
+Name: ${monitorJSON["name"]}
+${heartbeatJSON["msg"]}
+Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`,
+ };
+ await axios.post(url, upMessage, config);
+ }
+
+ return okMsg;
+ } catch (error) {
+ // Handle errors and throw a descriptive message
+ if (error.response) {
+ const errorMessage =
+ error.response.data?.message ||
+ "Unknown API error occurred.";
+ throw new Error(`OneChat API Error: ${errorMessage}`);
+ } else {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+ }
+}
+
+module.exports = OneChat;
diff --git a/server/notification-providers/pumble.js b/server/notification-providers/pumble.js
new file mode 100644
index 000000000..e1731c0ab
--- /dev/null
+++ b/server/notification-providers/pumble.js
@@ -0,0 +1,48 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { UP } = require("../../src/util");
+
+class Pumble extends NotificationProvider {
+ name = "pumble";
+
+ /**
+ * @inheritDoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ if (heartbeatJSON === null && monitorJSON === null) {
+ let data = {
+ "attachments": [
+ {
+ "title": "Uptime Kuma Alert",
+ "text": msg,
+ "color": "#5BDD8B"
+ }
+ ]
+ };
+
+ await axios.post(notification.webhookURL, data);
+ return okMsg;
+ }
+
+ let data = {
+ "attachments": [
+ {
+ "title": `${monitorJSON["name"]} is ${heartbeatJSON["status"] === UP ? "up" : "down"}`,
+ "text": heartbeatJSON["msg"],
+ "color": (heartbeatJSON["status"] === UP ? "#5BDD8B" : "#DC3645"),
+ }
+ ]
+ };
+
+ await axios.post(notification.webhookURL, data);
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = Pumble;
diff --git a/server/notification-providers/pushdeer.js b/server/notification-providers/pushdeer.js
index 276c2f476..b1f675957 100644
--- a/server/notification-providers/pushdeer.js
+++ b/server/notification-providers/pushdeer.js
@@ -11,7 +11,8 @@ class PushDeer extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
const serverUrl = notification.pushdeerServer || "https://api2.pushdeer.com";
- const url = `${serverUrl.trim().replace(/\/*$/, "")}/message/push`;
+ // capture group below is nessesary to prevent an ReDOS-attack
+ const url = `${serverUrl.trim().replace(/([^/])\/+$/, "$1")}/message/push`;
let valid = msg != null && monitorJSON != null && heartbeatJSON != null;
diff --git a/server/notification-providers/pushover.js b/server/notification-providers/pushover.js
index 304aa3519..fdceeaa44 100644
--- a/server/notification-providers/pushover.js
+++ b/server/notification-providers/pushover.js
@@ -1,3 +1,7 @@
+const { getMonitorRelativeURL } = require("../../src/util");
+const { setting } = require("../util-server");
+const { UP } = require("../../src/util");
+
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
@@ -23,6 +27,12 @@ class Pushover extends NotificationProvider {
"html": 1,
};
+ const baseURL = await setting("primaryBaseURL");
+ if (baseURL && monitorJSON) {
+ data["url"] = baseURL + getMonitorRelativeURL(monitorJSON.id);
+ data["url_title"] = "Link to Monitor";
+ }
+
if (notification.pushoverdevice) {
data.device = notification.pushoverdevice;
}
@@ -34,15 +44,20 @@ class Pushover extends NotificationProvider {
if (heartbeatJSON == null) {
await axios.post(url, data);
return okMsg;
- } else {
- data.message += `\nTime (${heartbeatJSON["timezone"]}) :${heartbeatJSON["localDateTime"]}`;
- await axios.post(url, data);
- return okMsg;
}
+
+ if (heartbeatJSON.status === UP && notification.pushoversounds_up) {
+ // default = DOWN => DOWN-sound is also played for non-UP/DOWN notiifcations
+ data.sound = notification.pushoversounds_up;
+ }
+
+ data.message += `\nTime (${heartbeatJSON["timezone"]}) : ${heartbeatJSON["localDateTime"]}`;
+ await axios.post(url, data);
+ return okMsg;
+
} catch (error) {
this.throwGeneralAxiosError(error);
}
-
}
}
diff --git a/server/notification-providers/pushplus.js b/server/notification-providers/pushplus.js
new file mode 100644
index 000000000..a26ba176f
--- /dev/null
+++ b/server/notification-providers/pushplus.js
@@ -0,0 +1,56 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { DOWN, UP } = require("../../src/util");
+
+class PushPlus extends NotificationProvider {
+ name = "PushPlus";
+
+ /**
+ * @inheritdoc
+ * @param {BeanModel} notification Notification object
+ * @param {string} msg Message content
+ * @param {?object} monitorJSON Monitor details
+ * @param {?object} heartbeatJSON Heartbeat details
+ * @returns {Promise} Success message
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://www.pushplus.plus/send";
+ try {
+ const config = {
+ headers: {
+ "Content-Type": "application/json",
+ },
+ };
+ const params = {
+ "token": notification.pushPlusSendKey,
+ "title": this.checkStatus(heartbeatJSON, monitorJSON),
+ "content": msg,
+ "template": "html"
+ };
+ await axios.post(url, params, config);
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+
+ /**
+ * Get the formatted title for message
+ * @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
+ * @param {?object} monitorJSON Monitor details (For Up/Down only)
+ * @returns {string} Formatted title
+ */
+ checkStatus(heartbeatJSON, monitorJSON) {
+ let title = "UptimeKuma Message";
+ if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
+ title = "UptimeKuma Monitor Up " + monitorJSON["name"];
+ }
+ if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
+ title = "UptimeKuma Monitor Down " + monitorJSON["name"];
+ }
+ return title;
+ }
+}
+
+module.exports = PushPlus;
diff --git a/server/notification-providers/send-grid.js b/server/notification-providers/send-grid.js
new file mode 100644
index 000000000..3489f6385
--- /dev/null
+++ b/server/notification-providers/send-grid.js
@@ -0,0 +1,65 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class SendGrid extends NotificationProvider {
+ name = "SendGrid";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ let config = {
+ headers: {
+ "Content-Type": "application/json",
+ Authorization: `Bearer ${notification.sendgridApiKey}`,
+ },
+ };
+
+ let personalizations = {
+ to: [{ email: notification.sendgridToEmail }],
+ };
+
+ // Add CC recipients if provided
+ if (notification.sendgridCcEmail) {
+ personalizations.cc = notification.sendgridCcEmail
+ .split(",")
+ .map((email) => ({ email: email.trim() }));
+ }
+
+ // Add BCC recipients if provided
+ if (notification.sendgridBccEmail) {
+ personalizations.bcc = notification.sendgridBccEmail
+ .split(",")
+ .map((email) => ({ email: email.trim() }));
+ }
+
+ let data = {
+ personalizations: [ personalizations ],
+ from: { email: notification.sendgridFromEmail.trim() },
+ subject:
+ notification.sendgridSubject ||
+ "Notification from Your Uptime Kuma",
+ content: [
+ {
+ type: "text/plain",
+ value: msg,
+ },
+ ],
+ };
+
+ await axios.post(
+ "https://api.sendgrid.com/v3/mail/send",
+ data,
+ config
+ );
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = SendGrid;
diff --git a/server/notification-providers/serverchan.js b/server/notification-providers/serverchan.js
index cefe61f14..aee22f83f 100644
--- a/server/notification-providers/serverchan.js
+++ b/server/notification-providers/serverchan.js
@@ -11,8 +11,14 @@ class ServerChan extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
+ // serverchan3 requires sending via ft07.com
+ const matchResult = String(notification.serverChanSendKey).match(/^sctp(\d+)t/i);
+ const url = matchResult && matchResult[1]
+ ? `https://${matchResult[1]}.push.ft07.com/send/${notification.serverChanSendKey}.send`
+ : `https://sctapi.ftqq.com/${notification.serverChanSendKey}.send`;
+
try {
- await axios.post(`https://sctapi.ftqq.com/${notification.serverChanSendKey}.send`, {
+ await axios.post(url, {
"title": this.checkStatus(heartbeatJSON, monitorJSON),
"desp": msg,
});
diff --git a/server/notification-providers/sevenio.js b/server/notification-providers/sevenio.js
index 9d805d7e6..eac38a26e 100644
--- a/server/notification-providers/sevenio.js
+++ b/server/notification-providers/sevenio.js
@@ -32,7 +32,7 @@ class SevenIO extends NotificationProvider {
return okMsg;
}
- let address = this.extractAdress(monitorJSON);
+ let address = this.extractAddress(monitorJSON);
if (address !== "") {
address = `(${address}) `;
}
diff --git a/server/notification-providers/signl4.js b/server/notification-providers/signl4.js
new file mode 100644
index 000000000..8261a73f3
--- /dev/null
+++ b/server/notification-providers/signl4.js
@@ -0,0 +1,52 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { UP, DOWN } = require("../../src/util");
+
+class SIGNL4 extends NotificationProvider {
+ name = "SIGNL4";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ let data = {
+ heartbeat: heartbeatJSON,
+ monitor: monitorJSON,
+ msg,
+ // Source system
+ "X-S4-SourceSystem": "UptimeKuma",
+ monitorUrl: this.extractAddress(monitorJSON),
+ };
+
+ const config = {
+ headers: {
+ "Content-Type": "application/json"
+ }
+ };
+
+ if (heartbeatJSON == null) {
+ // Test alert
+ data.title = "Uptime Kuma Alert";
+ data.message = msg;
+ } else if (heartbeatJSON.status === UP) {
+ data.title = "Uptime Kuma Monitor ✅ Up";
+ data["X-S4-ExternalID"] = "UptimeKuma-" + monitorJSON.monitorID;
+ data["X-S4-Status"] = "resolved";
+ } else if (heartbeatJSON.status === DOWN) {
+ data.title = "Uptime Kuma Monitor 🔴 Down";
+ data["X-S4-ExternalID"] = "UptimeKuma-" + monitorJSON.monitorID;
+ data["X-S4-Status"] = "new";
+ }
+
+ await axios.post(notification.webhookURL, data, config);
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = SIGNL4;
diff --git a/server/notification-providers/slack.js b/server/notification-providers/slack.js
index 702256429..455d787c7 100644
--- a/server/notification-providers/slack.js
+++ b/server/notification-providers/slack.js
@@ -1,7 +1,7 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { setSettings, setting } = require("../util-server");
-const { getMonitorRelativeURL, UP } = require("../../src/util");
+const { getMonitorRelativeURL, UP, log } = require("../../src/util");
class Slack extends NotificationProvider {
name = "slack";
@@ -32,7 +32,7 @@ class Slack extends NotificationProvider {
* @param {object} monitorJSON The monitor config
* @returns {Array} The relevant action objects
*/
- static buildActions(baseURL, monitorJSON) {
+ buildActions(baseURL, monitorJSON) {
const actions = [];
if (baseURL) {
@@ -48,17 +48,22 @@ class Slack extends NotificationProvider {
}
- const address = this.extractAdress(monitorJSON);
+ const address = this.extractAddress(monitorJSON);
if (address) {
- actions.push({
- "type": "button",
- "text": {
- "type": "plain_text",
- "text": "Visit site",
- },
- "value": "Site",
- "url": address,
- });
+ try {
+ actions.push({
+ "type": "button",
+ "text": {
+ "type": "plain_text",
+ "text": "Visit site",
+ },
+ "value": "Site",
+ "url": new URL(address),
+ });
+
+ } catch (e) {
+ log.debug("slack", `Failed to parse address ${address} as URL`);
+ }
}
return actions;
@@ -73,7 +78,7 @@ class Slack extends NotificationProvider {
* @param {string} msg The message body
* @returns {Array} The rich content blocks for the Slack message
*/
- static buildBlocks(baseURL, monitorJSON, heartbeatJSON, title, msg) {
+ buildBlocks(baseURL, monitorJSON, heartbeatJSON, title, msg) {
//create an array to dynamically add blocks
const blocks = [];
@@ -140,17 +145,23 @@ class Slack extends NotificationProvider {
const title = "Uptime Kuma Alert";
let data = {
- "text": `${title}\n${msg}`,
+ "text": msg,
"channel": notification.slackchannel,
"username": notification.slackusername,
"icon_emoji": notification.slackiconemo,
- "attachments": [
+ "attachments": [],
+ };
+
+ if (notification.slackrichmessage) {
+ data.attachments.push(
{
"color": (heartbeatJSON["status"] === UP) ? "#2eb886" : "#e01e5a",
- "blocks": Slack.buildBlocks(baseURL, monitorJSON, heartbeatJSON, title, msg),
+ "blocks": this.buildBlocks(baseURL, monitorJSON, heartbeatJSON, title, msg),
}
- ]
- };
+ );
+ } else {
+ data.text = `${title}\n${msg}`;
+ }
if (notification.slackbutton) {
await Slack.deprecateURL(notification.slackbutton);
diff --git a/server/notification-providers/sms-planet.js b/server/notification-providers/sms-planet.js
new file mode 100644
index 000000000..97e9e715e
--- /dev/null
+++ b/server/notification-providers/sms-planet.js
@@ -0,0 +1,40 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class SMSPlanet extends NotificationProvider {
+ name = "SMSPlanet";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+ const url = "https://api2.smsplanet.pl/sms";
+
+ try {
+ let config = {
+ headers: {
+ "Authorization": "Bearer " + notification.smsplanetApiToken,
+ "content-type": "multipart/form-data"
+ }
+ };
+
+ let data = {
+ "from": notification.smsplanetSenderName,
+ "to": notification.smsplanetPhoneNumbers,
+ "msg": msg.replace(/🔴/, "❌")
+ };
+
+ let response = await axios.post(url, data, config);
+ if (!response.data?.messageId) {
+ throw new Error(response.data?.errorMsg ?? "SMSPlanet server did not respond with the expected result");
+ }
+
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = SMSPlanet;
diff --git a/server/notification-providers/smseagle.js b/server/notification-providers/smseagle.js
index 4e897006c..a123243a4 100644
--- a/server/notification-providers/smseagle.js
+++ b/server/notification-providers/smseagle.js
@@ -11,59 +11,127 @@ class SMSEagle extends NotificationProvider {
const okMsg = "Sent Successfully.";
try {
- let config = {
- headers: {
- "Content-Type": "application/json",
+ if (notification.smseagleApiType === "smseagle-apiv1") { // according to https://www.smseagle.eu/apiv1/
+ let config = {
+ headers: {
+ "Content-Type": "application/x-www-form-urlencoded",
+ }
+ };
+
+ let sendMethod;
+ let recipientType;
+ let duration;
+ let voiceId;
+
+ if (notification.smseagleRecipientType === "smseagle-contact") {
+ recipientType = "contactname";
+ sendMethod = "/send_tocontact";
+ } else if (notification.smseagleRecipientType === "smseagle-group") {
+ recipientType = "groupname";
+ sendMethod = "/send_togroup";
+ } else if (notification.smseagleRecipientType === "smseagle-to") {
+ recipientType = "to";
+ sendMethod = "/send_sms";
+ if (notification.smseagleMsgType !== "smseagle-sms") {
+ duration = notification.smseagleDuration ?? 10;
+
+ if (notification.smseagleMsgType === "smseagle-ring") {
+ sendMethod = "/ring_call";
+ } else if (notification.smseagleMsgType === "smseagle-tts") {
+ sendMethod = "/tts_call";
+ } else if (notification.smseagleMsgType === "smseagle-tts-advanced") {
+ sendMethod = "/tts_adv_call";
+ voiceId = notification.smseagleTtsModel ? notification.smseagleTtsModel : 1;
+ }
+ }
}
- };
- let postData;
- let sendMethod;
- let recipientType;
+ const url = new URL(notification.smseagleUrl + "/http_api" + sendMethod);
- let encoding = (notification.smseagleEncoding) ? "1" : "0";
- let priority = (notification.smseaglePriority) ? notification.smseaglePriority : "0";
-
- if (notification.smseagleRecipientType === "smseagle-contact") {
- recipientType = "contactname";
- sendMethod = "sms.send_tocontact";
- }
- if (notification.smseagleRecipientType === "smseagle-group") {
- recipientType = "groupname";
- sendMethod = "sms.send_togroup";
- }
- if (notification.smseagleRecipientType === "smseagle-to") {
- recipientType = "to";
- sendMethod = "sms.send_sms";
- }
-
- let params = {
- access_token: notification.smseagleToken,
- [recipientType]: notification.smseagleRecipient,
- message: msg,
- responsetype: "extended",
- unicode: encoding,
- highpriority: priority
- };
-
- postData = {
- method: sendMethod,
- params: params
- };
-
- let resp = await axios.post(notification.smseagleUrl + "/jsonrpc/sms", postData, config);
-
- if ((JSON.stringify(resp.data)).indexOf("message_id") === -1) {
- let error = "";
- if (resp.data.result && resp.data.result.error_text) {
- error = `SMSEagle API returned error: ${JSON.stringify(resp.data.result.error_text)}`;
+ url.searchParams.append("access_token", notification.smseagleToken);
+ url.searchParams.append(recipientType, notification.smseagleRecipient);
+ if (!notification.smseagleRecipientType || notification.smseagleRecipientType === "smseagle-sms") {
+ url.searchParams.append("unicode", (notification.smseagleEncoding) ? "1" : "0");
+ url.searchParams.append("highpriority", notification.smseaglePriority ?? "0");
} else {
- error = "SMSEagle API returned an unexpected response";
+ url.searchParams.append("duration", duration);
+ }
+ if (notification.smseagleRecipientType !== "smseagle-ring") {
+ url.searchParams.append("message", msg);
+ }
+ if (voiceId) {
+ url.searchParams.append("voice_id", voiceId);
}
- throw new Error(error);
- }
- return okMsg;
+ let resp = await axios.get(url.toString(), config);
+
+ if (resp.data.indexOf("OK") === -1) {
+ let error = `SMSEagle API returned error: ${resp.data}`;
+ throw new Error(error);
+ }
+
+ return okMsg;
+ } else if (notification.smseagleApiType === "smseagle-apiv2") { // according to https://www.smseagle.eu/docs/apiv2/
+ let config = {
+ headers: {
+ "access-token": notification.smseagleToken,
+ "Content-Type": "application/json",
+ }
+ };
+
+ let encoding = (notification.smseagleEncoding) ? "unicode" : "standard";
+ let priority = (notification.smseaglePriority) ?? 0;
+
+ let postData = {
+ text: msg,
+ encoding: encoding,
+ priority: priority
+ };
+
+ if (notification.smseagleRecipientContact) {
+ postData["contacts"] = notification.smseagleRecipientContact.split(",").map(Number);
+ }
+ if (notification.smseagleRecipientGroup) {
+ postData["groups"] = notification.smseagleRecipientGroup.split(",").map(Number);
+ }
+ if (notification.smseagleRecipientTo) {
+ postData["to"] = notification.smseagleRecipientTo.split(",");
+ }
+
+ let endpoint = "/messages/sms";
+
+ if (notification.smseagleMsgType !== "smseagle-sms") {
+
+ postData["duration"] = notification.smseagleDuration ?? 10;
+
+ if (notification.smseagleMsgType === "smseagle-ring") {
+ endpoint = "/calls/ring";
+ } else if (notification.smseagleMsgType === "smseagle-tts") {
+ endpoint = "/calls/tts";
+ } else if (notification.smseagleMsgType === "smseagle-tts-advanced") {
+ endpoint = "/calls/tts_advanced";
+ postData["voice_id"] = notification.smseagleTtsModel ?? 1;
+ }
+ }
+
+ let resp = await axios.post(notification.smseagleUrl + "/api/v2" + endpoint, postData, config);
+
+ const queuedCount = resp.data.filter(x => x.status === "queued").length;
+ const unqueuedCount = resp.data.length - queuedCount;
+
+ if (resp.status !== 200 || queuedCount === 0) {
+ if (!resp.data.length) {
+ throw new Error("SMSEagle API returned an empty response");
+ }
+ throw new Error(`SMSEagle API returned error: ${JSON.stringify(resp.data)}`);
+ }
+
+ if (unqueuedCount) {
+ return `Sent ${queuedCount}/${resp.data.length} Messages Successfully.`;
+ }
+
+ return okMsg;
+ }
} catch (error) {
this.throwGeneralAxiosError(error);
}
diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js
index 801e0e69d..d0ad5b728 100644
--- a/server/notification-providers/smtp.js
+++ b/server/notification-providers/smtp.js
@@ -1,7 +1,5 @@
const nodemailer = require("nodemailer");
const NotificationProvider = require("./notification-provider");
-const { DOWN } = require("../../src/util");
-const { Liquid } = require("liquidjs");
class SMTP extends NotificationProvider {
name = "smtp";
@@ -44,6 +42,7 @@ class SMTP extends NotificationProvider {
// default values in case the user does not want to template
let subject = msg;
let body = msg;
+ let useHTMLBody = false;
if (heartbeatJSON) {
body = `${msg}\nTime (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`;
}
@@ -52,16 +51,12 @@ class SMTP extends NotificationProvider {
// cannot end with whitespace as this often raises spam scores
const customSubject = notification.customSubject?.trim() || "";
const customBody = notification.customBody?.trim() || "";
-
- const context = this.generateContext(msg, monitorJSON, heartbeatJSON);
- const engine = new Liquid();
if (customSubject !== "") {
- const tpl = engine.parse(customSubject);
- subject = await engine.render(tpl, context);
+ subject = await this.renderTemplate(customSubject, msg, monitorJSON, heartbeatJSON);
}
if (customBody !== "") {
- const tpl = engine.parse(customBody);
- body = await engine.render(tpl, context);
+ useHTMLBody = notification.htmlBody || false;
+ body = await this.renderTemplate(customBody, msg, monitorJSON, heartbeatJSON);
}
}
@@ -73,48 +68,12 @@ class SMTP extends NotificationProvider {
bcc: notification.smtpBCC,
to: notification.smtpTo,
subject: subject,
- text: body,
+ // If the email body is custom, and the user wants it, set the email body as HTML
+ [useHTMLBody ? "html" : "text"]: body
});
return okMsg;
}
-
- /**
- * Generate context for LiquidJS
- * @param {string} msg the message that will be included in the context
- * @param {?object} monitorJSON Monitor details (For Up/Down/Cert-Expiry only)
- * @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
- * @returns {{STATUS: string, status: string, HOSTNAME_OR_URL: string, hostnameOrUrl: string, NAME: string, name: string, monitorJSON: ?object, heartbeatJSON: ?object, msg: string}} the context
- */
- generateContext(msg, monitorJSON, heartbeatJSON) {
- // Let's start with dummy values to simplify code
- let monitorName = "Monitor Name not available";
- let monitorHostnameOrURL = "testing.hostname";
-
- if (monitorJSON !== null) {
- monitorName = monitorJSON["name"];
- monitorHostnameOrURL = this.extractAdress(monitorJSON);
- }
-
- let serviceStatus = "⚠️ Test";
- if (heartbeatJSON !== null) {
- serviceStatus = (heartbeatJSON["status"] === DOWN) ? "🔴 Down" : "✅ Up";
- }
- return {
- // for v1 compatibility, to be removed in v3
- "STATUS": serviceStatus,
- "NAME": monitorName,
- "HOSTNAME_OR_URL": monitorHostnameOrURL,
-
- // variables which are officially supported
- "status": serviceStatus,
- "name": monitorName,
- "hostnameOrURL": monitorHostnameOrURL,
- monitorJSON,
- heartbeatJSON,
- msg,
- };
- }
}
module.exports = SMTP;
diff --git a/server/notification-providers/spugpush.js b/server/notification-providers/spugpush.js
new file mode 100644
index 000000000..b04a20cac
--- /dev/null
+++ b/server/notification-providers/spugpush.js
@@ -0,0 +1,37 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { DOWN, UP } = require("../../src/util");
+
+class SpugPush extends NotificationProvider {
+
+ name = "SpugPush";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ let okMsg = "Sent Successfully.";
+ try {
+ let formData = {
+ title: "Uptime Kuma Message",
+ content: msg
+ };
+ if (heartbeatJSON) {
+ if (heartbeatJSON["status"] === UP) {
+ formData.title = `UptimeKuma 「${monitorJSON["name"]}」 is Up`;
+ formData.content = `[✅ Up] ${heartbeatJSON["msg"]}`;
+ } else if (heartbeatJSON["status"] === DOWN) {
+ formData.title = `UptimeKuma 「${monitorJSON["name"]}」 is Down`;
+ formData.content = `[🔴 Down] ${heartbeatJSON["msg"]}`;
+ }
+ }
+ const apiUrl = `https://push.spug.cc/send/${notification.templateKey}`;
+ await axios.post(apiUrl, formData);
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+}
+
+module.exports = SpugPush;
diff --git a/server/notification-providers/squadcast.js b/server/notification-providers/squadcast.js
index 9074e9b76..5713783c0 100644
--- a/server/notification-providers/squadcast.js
+++ b/server/notification-providers/squadcast.js
@@ -34,7 +34,7 @@ class Squadcast extends NotificationProvider {
data.status = "resolve";
}
- data.tags["AlertAddress"] = this.extractAdress(monitorJSON);
+ data.tags["AlertAddress"] = this.extractAddress(monitorJSON);
monitorJSON["tags"].forEach(tag => {
data.tags[tag["name"]] = {
diff --git a/server/notification-providers/teams.js b/server/notification-providers/teams.js
index 2fcea7077..2793604cc 100644
--- a/server/notification-providers/teams.js
+++ b/server/notification-providers/teams.js
@@ -225,7 +225,7 @@ class Teams extends NotificationProvider {
const payload = this._notificationPayloadFactory({
heartbeatJSON: heartbeatJSON,
monitorName: monitorJSON.name,
- monitorUrl: this.extractAdress(monitorJSON),
+ monitorUrl: this.extractAddress(monitorJSON),
dashboardUrl: dashboardUrl,
});
diff --git a/server/notification-providers/techulus-push.js b/server/notification-providers/techulus-push.js
index 230897f3c..bf688b194 100644
--- a/server/notification-providers/techulus-push.js
+++ b/server/notification-providers/techulus-push.js
@@ -10,11 +10,22 @@ class TechulusPush extends NotificationProvider {
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
+ let data = {
+ "title": notification?.pushTitle?.length ? notification.pushTitle : "Uptime-Kuma",
+ "body": msg,
+ "timeSensitive": notification.pushTimeSensitive ?? true,
+ };
+
+ if (notification.pushChannel) {
+ data.channel = notification.pushChannel;
+ }
+
+ if (notification.pushSound) {
+ data.sound = notification.pushSound;
+ }
+
try {
- await axios.post(`https://push.techulus.com/api/v1/notify/${notification.pushAPIKey}`, {
- "title": "Uptime-Kuma",
- "body": msg,
- });
+ await axios.post(`https://push.techulus.com/api/v1/notify/${notification.pushAPIKey}`, data);
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
diff --git a/server/notification-providers/telegram.js b/server/notification-providers/telegram.js
index c5bbb1909..04117e65a 100644
--- a/server/notification-providers/telegram.js
+++ b/server/notification-providers/telegram.js
@@ -9,7 +9,7 @@ class Telegram extends NotificationProvider {
*/
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
- const url = "https://api.telegram.org";
+ const url = notification.telegramServerUrl ?? "https://api.telegram.org";
try {
let params = {
@@ -22,6 +22,14 @@ class Telegram extends NotificationProvider {
params.message_thread_id = notification.telegramMessageThreadID;
}
+ if (notification.telegramUseTemplate) {
+ params.text = await this.renderTemplate(notification.telegramTemplate, msg, monitorJSON, heartbeatJSON);
+
+ if (notification.telegramTemplateParseMode !== "plain") {
+ params.parse_mode = notification.telegramTemplateParseMode;
+ }
+ }
+
await axios.get(`${url}/bot${notification.telegramBotToken}/sendMessage`, {
params: params,
});
diff --git a/server/notification-providers/waha.js b/server/notification-providers/waha.js
new file mode 100644
index 000000000..b075f33f0
--- /dev/null
+++ b/server/notification-providers/waha.js
@@ -0,0 +1,40 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+
+class WAHA extends NotificationProvider {
+ name = "waha";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ const config = {
+ headers: {
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+ "X-Api-Key": notification.wahaApiKey,
+ }
+ };
+
+ let data = {
+ "session": notification.wahaSession,
+ "chatId": notification.wahaChatId,
+ "text": msg,
+ };
+
+ let url = notification.wahaApiUrl.replace(/([^/])\/+$/, "$1") + "/api/sendText";
+
+ await axios.post(url, data, config);
+
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+
+}
+
+module.exports = WAHA;
diff --git a/server/notification-providers/webhook.js b/server/notification-providers/webhook.js
index 986986d44..537f94bd5 100644
--- a/server/notification-providers/webhook.js
+++ b/server/notification-providers/webhook.js
@@ -1,7 +1,6 @@
const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const FormData = require("form-data");
-const { Liquid } = require("liquidjs");
class Webhook extends NotificationProvider {
name = "webhook";
@@ -28,17 +27,7 @@ class Webhook extends NotificationProvider {
config.headers = formData.getHeaders();
data = formData;
} else if (notification.webhookContentType === "custom") {
- // Initialize LiquidJS and parse the custom Body Template
- const engine = new Liquid();
- const tpl = engine.parse(notification.webhookCustomBody);
-
- // Insert templated values into Body
- data = await engine.render(tpl,
- {
- msg,
- heartbeatJSON,
- monitorJSON
- });
+ data = await this.renderTemplate(notification.webhookCustomBody, msg, monitorJSON, heartbeatJSON);
}
if (notification.webhookAdditionalHeaders) {
diff --git a/server/notification-providers/wecom.js b/server/notification-providers/wecom.js
index 03fa7c186..1eb069095 100644
--- a/server/notification-providers/wecom.js
+++ b/server/notification-providers/wecom.js
@@ -32,20 +32,17 @@ class WeCom extends NotificationProvider {
* @returns {object} Message
*/
composeMessage(heartbeatJSON, msg) {
- let title;
+ let title = "UptimeKuma Message";
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === UP) {
title = "UptimeKuma Monitor Up";
}
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
title = "UptimeKuma Monitor Down";
}
- if (msg != null) {
- title = "UptimeKuma Message";
- }
return {
msgtype: "text",
text: {
- content: title + msg
+ content: title + "\n" + msg
}
};
}
diff --git a/server/notification-providers/whapi.js b/server/notification-providers/whapi.js
index 70e0fbb4c..d83dc470f 100644
--- a/server/notification-providers/whapi.js
+++ b/server/notification-providers/whapi.js
@@ -24,7 +24,7 @@ class Whapi extends NotificationProvider {
"body": msg,
};
- let url = (notification.whapiApiUrl || "https://gate.whapi.cloud/").replace(/\/+$/, "") + "/messages/text";
+ let url = (notification.whapiApiUrl || "https://gate.whapi.cloud/").replace(/([^/])\/+$/, "$1") + "/messages/text";
await axios.post(url, data, config);
diff --git a/server/notification-providers/wpush.js b/server/notification-providers/wpush.js
new file mode 100644
index 000000000..db043f9c5
--- /dev/null
+++ b/server/notification-providers/wpush.js
@@ -0,0 +1,51 @@
+const NotificationProvider = require("./notification-provider");
+const axios = require("axios");
+const { DOWN, UP } = require("../../src/util");
+
+class WPush extends NotificationProvider {
+ name = "WPush";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ const okMsg = "Sent Successfully.";
+
+ try {
+ const context = {
+ "title": this.checkStatus(heartbeatJSON, monitorJSON),
+ "content": msg,
+ "apikey": notification.wpushAPIkey,
+ "channel": notification.wpushChannel
+ };
+ const result = await axios.post("https://api.wpush.cn/api/v1/send", context);
+ if (result.data.code !== 0) {
+ throw result.data.message;
+ }
+
+ return okMsg;
+
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+
+ /**
+ * Get the formatted title for message
+ * @param {?object} heartbeatJSON Heartbeat details (For Up/Down only)
+ * @param {?object} monitorJSON Monitor details (For Up/Down only)
+ * @returns {string} Formatted title
+ */
+ checkStatus(heartbeatJSON, monitorJSON) {
+ let title = "UptimeKuma Message";
+ if (heartbeatJSON != null && heartbeatJSON["status"] === UP) {
+ title = "UptimeKuma Monitor Up " + monitorJSON["name"];
+ }
+ if (heartbeatJSON != null && heartbeatJSON["status"] === DOWN) {
+ title = "UptimeKuma Monitor Down " + monitorJSON["name"];
+ }
+ return title;
+ }
+}
+
+module.exports = WPush;
diff --git a/server/notification-providers/yzj.js b/server/notification-providers/yzj.js
new file mode 100644
index 000000000..6bd3cba51
--- /dev/null
+++ b/server/notification-providers/yzj.js
@@ -0,0 +1,57 @@
+const NotificationProvider = require("./notification-provider");
+const { DOWN, UP } = require("../../src/util");
+const { default: axios } = require("axios");
+
+class YZJ extends NotificationProvider {
+ name = "YZJ";
+
+ /**
+ * @inheritdoc
+ */
+ async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
+ let okMsg = "Sent Successfully.";
+
+ try {
+ if (heartbeatJSON !== null) {
+ msg = `${this.statusToString(heartbeatJSON["status"])} ${monitorJSON["name"]} \n> ${heartbeatJSON["msg"]}\n> Time (${heartbeatJSON["timezone"]}): ${heartbeatJSON["localDateTime"]}`;
+ }
+
+ const config = {
+ headers: {
+ "Content-Type": "application/json",
+ },
+ };
+ const params = {
+ content: msg
+ };
+ // yzjtype=0 => general robot
+ const url = `${notification.yzjWebHookUrl}?yzjtype=0&yzjtoken=${notification.yzjToken}`;
+
+ const result = await axios.post(url, params, config);
+ if (!result.data?.success) {
+ throw new Error(result.data?.errmsg ?? "yzj's server did not respond with the expected result");
+ }
+ return okMsg;
+ } catch (error) {
+ this.throwGeneralAxiosError(error);
+ }
+ }
+
+ /**
+ * Convert status constant to string
+ * @param {string} status The status constant
+ * @returns {string} status
+ */
+ statusToString(status) {
+ switch (status) {
+ case DOWN:
+ return "❌";
+ case UP:
+ return "✅";
+ default:
+ return status;
+ }
+ }
+}
+
+module.exports = YZJ;
diff --git a/server/notification-providers/zoho-cliq.js b/server/notification-providers/zoho-cliq.js
index 44681b7df..3a504de8c 100644
--- a/server/notification-providers/zoho-cliq.js
+++ b/server/notification-providers/zoho-cliq.js
@@ -85,7 +85,7 @@ class ZohoCliq extends NotificationProvider {
const payload = this._notificationPayloadFactory({
monitorMessage: heartbeatJSON.msg,
monitorName: monitorJSON.name,
- monitorUrl: this.extractAdress(monitorJSON),
+ monitorUrl: this.extractAddress(monitorJSON),
status: heartbeatJSON.status
});
diff --git a/server/notification.js b/server/notification.js
index e6a2e6d5e..fd8c23d67 100644
--- a/server/notification.js
+++ b/server/notification.js
@@ -11,7 +11,9 @@ const CallMeBot = require("./notification-providers/call-me-bot");
const SMSC = require("./notification-providers/smsc");
const DingDing = require("./notification-providers/dingding");
const Discord = require("./notification-providers/discord");
+const Elks = require("./notification-providers/46elks");
const Feishu = require("./notification-providers/feishu");
+const Notifery = require("./notification-providers/notifery");
const FreeMobile = require("./notification-providers/freemobile");
const GoogleChat = require("./notification-providers/google-chat");
const Gorush = require("./notification-providers/gorush");
@@ -29,19 +31,23 @@ const Mattermost = require("./notification-providers/mattermost");
const Nostr = require("./notification-providers/nostr");
const Ntfy = require("./notification-providers/ntfy");
const Octopush = require("./notification-providers/octopush");
+const OneChat = require("./notification-providers/onechat");
const OneBot = require("./notification-providers/onebot");
const Opsgenie = require("./notification-providers/opsgenie");
const PagerDuty = require("./notification-providers/pagerduty");
+const Pumble = require("./notification-providers/pumble");
const FlashDuty = require("./notification-providers/flashduty");
const PagerTree = require("./notification-providers/pagertree");
const PromoSMS = require("./notification-providers/promosms");
const Pushbullet = require("./notification-providers/pushbullet");
const PushDeer = require("./notification-providers/pushdeer");
const Pushover = require("./notification-providers/pushover");
+const PushPlus = require("./notification-providers/pushplus");
const Pushy = require("./notification-providers/pushy");
const RocketChat = require("./notification-providers/rocket-chat");
const SerwerSMS = require("./notification-providers/serwersms");
const Signal = require("./notification-providers/signal");
+const SIGNL4 = require("./notification-providers/signl4");
const Slack = require("./notification-providers/slack");
const SMSPartner = require("./notification-providers/smspartner");
const SMSEagle = require("./notification-providers/smseagle");
@@ -62,9 +68,15 @@ const ServerChan = require("./notification-providers/serverchan");
const ZohoCliq = require("./notification-providers/zoho-cliq");
const SevenIO = require("./notification-providers/sevenio");
const Whapi = require("./notification-providers/whapi");
+const WAHA = require("./notification-providers/waha");
const GtxMessaging = require("./notification-providers/gtx-messaging");
const Cellsynt = require("./notification-providers/cellsynt");
const Onesender = require("./notification-providers/onesender");
+const Wpush = require("./notification-providers/wpush");
+const SendGrid = require("./notification-providers/send-grid");
+const YZJ = require("./notification-providers/yzj");
+const SMSPlanet = require("./notification-providers/sms-planet");
+const SpugPush = require("./notification-providers/spugpush");
class Notification {
@@ -93,6 +105,7 @@ class Notification {
new SMSC(),
new DingDing(),
new Discord(),
+ new Elks(),
new Feishu(),
new FreeMobile(),
new GoogleChat(),
@@ -111,6 +124,7 @@ class Notification {
new Nostr(),
new Ntfy(),
new Octopush(),
+ new OneChat(),
new OneBot(),
new Onesender(),
new Opsgenie(),
@@ -118,14 +132,17 @@ class Notification {
new FlashDuty(),
new PagerTree(),
new PromoSMS(),
+ new Pumble(),
new Pushbullet(),
new PushDeer(),
new Pushover(),
+ new PushPlus(),
new Pushy(),
new RocketChat(),
new ServerChan(),
new SerwerSMS(),
new Signal(),
+ new SIGNL4(),
new SMSManager(),
new SMSPartner(),
new Slack(),
@@ -145,8 +162,15 @@ class Notification {
new ZohoCliq(),
new SevenIO(),
new Whapi(),
+ new WAHA(),
new GtxMessaging(),
new Cellsynt(),
+ new Wpush(),
+ new SendGrid(),
+ new YZJ(),
+ new SMSPlanet(),
+ new SpugPush(),
+ new Notifery(),
];
for (let item of list) {
if (! item.name) {
diff --git a/server/proxy.js b/server/proxy.js
index 3f3771ab9..d38e3e4f1 100644
--- a/server/proxy.js
+++ b/server/proxy.js
@@ -1,7 +1,7 @@
const { R } = require("redbean-node");
-const HttpProxyAgent = require("http-proxy-agent");
-const HttpsProxyAgent = require("https-proxy-agent");
-const SocksProxyAgent = require("socks-proxy-agent");
+const { HttpProxyAgent } = require("http-proxy-agent");
+const { HttpsProxyAgent } = require("https-proxy-agent");
+const { SocksProxyAgent } = require("socks-proxy-agent");
const { debug } = require("../src/util");
const { UptimeKumaServer } = require("./uptime-kuma-server");
const { CookieJar } = require("tough-cookie");
@@ -100,17 +100,17 @@ class Proxy {
let jar = new CookieJar();
const proxyOptions = {
- protocol: proxy.protocol,
- host: proxy.host,
- port: proxy.port,
cookies: { jar },
};
+ const proxyUrl = new URL(`${proxy.protocol}://${proxy.host}:${proxy.port}`);
+
if (proxy.auth) {
- proxyOptions.auth = `${proxy.username}:${proxy.password}`;
+ proxyUrl.username = proxy.username;
+ proxyUrl.password = proxy.password;
}
- debug(`Proxy Options: ${JSON.stringify(proxyOptions)}`);
+ debug(`Proxy URL: ${proxyUrl.toString()}`);
debug(`HTTP Agent Options: ${JSON.stringify(httpAgentOptions)}`);
debug(`HTTPS Agent Options: ${JSON.stringify(httpsAgentOptions)}`);
@@ -122,15 +122,15 @@ class Proxy {
// eslint-disable-next-line no-case-declarations
const HttpsCookieProxyAgent = createCookieAgent(HttpsProxyAgent);
- httpAgent = new HttpCookieProxyAgent({
- ...httpAgentOptions || {},
+ httpAgent = new HttpCookieProxyAgent(proxyUrl.toString(), {
+ ...(httpAgentOptions || {}),
+ ...proxyOptions,
+ });
+ httpsAgent = new HttpsCookieProxyAgent(proxyUrl.toString(), {
+ ...(httpsAgentOptions || {}),
...proxyOptions,
});
- httpsAgent = new HttpsCookieProxyAgent({
- ...httpsAgentOptions || {},
- ...proxyOptions,
- });
break;
case "socks":
case "socks5":
@@ -138,10 +138,9 @@ class Proxy {
case "socks4":
// eslint-disable-next-line no-case-declarations
const SocksCookieProxyAgent = createCookieAgent(SocksProxyAgent);
- agent = new SocksCookieProxyAgent({
+ agent = new SocksCookieProxyAgent(proxyUrl.toString(), {
...httpAgentOptions,
...httpsAgentOptions,
- ...proxyOptions,
tls: {
rejectUnauthorized: httpsAgentOptions.rejectUnauthorized,
},
diff --git a/server/routers/api-router.js b/server/routers/api-router.js
index ed6db2cd1..b00dbc02d 100644
--- a/server/routers/api-router.js
+++ b/server/routers/api-router.js
@@ -50,7 +50,7 @@ router.all("/api/push/:pushToken", async (request, response) => {
let msg = request.query.msg || "OK";
let ping = parseFloat(request.query.ping) || null;
let statusString = request.query.status || "up";
- let status = (statusString === "up") ? UP : DOWN;
+ const statusFromParam = (statusString === "up") ? UP : DOWN;
let monitor = await R.findOne("monitor", " push_token = ? AND active = 1 ", [
pushToken
@@ -80,7 +80,7 @@ router.all("/api/push/:pushToken", async (request, response) => {
msg = "Monitor under maintenance";
bean.status = MAINTENANCE;
} else {
- determineStatus(status, previousHeartbeat, monitor.maxretries, monitor.isUpsideDown(), bean);
+ determineStatus(statusFromParam, previousHeartbeat, monitor.maxretries, monitor.isUpsideDown(), bean);
}
// Calculate uptime
@@ -92,21 +92,21 @@ router.all("/api/push/:pushToken", async (request, response) => {
log.debug("router", "PreviousStatus: " + previousHeartbeat?.status);
log.debug("router", "Current Status: " + bean.status);
- bean.important = Monitor.isImportantBeat(isFirstBeat, previousHeartbeat?.status, status);
+ bean.important = Monitor.isImportantBeat(isFirstBeat, previousHeartbeat?.status, bean.status);
- if (Monitor.isImportantForNotification(isFirstBeat, previousHeartbeat?.status, status)) {
+ if (Monitor.isImportantForNotification(isFirstBeat, previousHeartbeat?.status, bean.status)) {
// Reset down count
bean.downCount = 0;
- log.debug("monitor", `[${this.name}] sendNotification`);
+ log.debug("monitor", `[${monitor.name}] sendNotification`);
await Monitor.sendNotification(isFirstBeat, monitor, bean);
} else {
- if (bean.status === DOWN && this.resendInterval > 0) {
+ if (bean.status === DOWN && monitor.resendInterval > 0) {
++bean.downCount;
- if (bean.downCount >= this.resendInterval) {
+ if (bean.downCount >= monitor.resendInterval) {
// Send notification again, because we are still DOWN
- log.debug("monitor", `[${this.name}] sendNotification again: Down Count: ${bean.downCount} | Resend Interval: ${this.resendInterval}`);
- await Monitor.sendNotification(isFirstBeat, this, bean);
+ log.debug("monitor", `[${monitor.name}] sendNotification again: Down Count: ${bean.downCount} | Resend Interval: ${monitor.resendInterval}`);
+ await Monitor.sendNotification(isFirstBeat, monitor, bean);
// Reset down count
bean.downCount = 0;
diff --git a/server/routers/status-page-router.js b/server/routers/status-page-router.js
index 42cccc942..6e57451f1 100644
--- a/server/routers/status-page-router.js
+++ b/server/routers/status-page-router.js
@@ -15,9 +15,16 @@ const server = UptimeKumaServer.getInstance();
router.get("/status/:slug", cache("5 minutes"), async (request, response) => {
let slug = request.params.slug;
+ slug = slug.toLowerCase();
await StatusPage.handleStatusPageResponse(response, server.indexHTML, slug);
});
+router.get("/status/:slug/rss", cache("5 minutes"), async (request, response) => {
+ let slug = request.params.slug;
+ slug = slug.toLowerCase();
+ await StatusPage.handleStatusPageRSSResponse(response, slug);
+});
+
router.get("/status", cache("5 minutes"), async (request, response) => {
let slug = "default";
await StatusPage.handleStatusPageResponse(response, server.indexHTML, slug);
@@ -32,6 +39,7 @@ router.get("/status-page", cache("5 minutes"), async (request, response) => {
router.get("/api/status-page/:slug", cache("5 minutes"), async (request, response) => {
allowDevAllOrigin(response);
let slug = request.params.slug;
+ slug = slug.toLowerCase();
try {
// Get Status Page
@@ -64,6 +72,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
let uptimeList = {};
let slug = request.params.slug;
+ slug = slug.toLowerCase();
let statusPageID = await StatusPage.slugToID(slug);
let monitorIDList = await R.getCol(`
@@ -80,7 +89,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
SELECT * FROM heartbeat
WHERE monitor_id = ?
ORDER BY time DESC
- LIMIT 50
+ LIMIT 100
`, [
monitorID,
]);
@@ -106,6 +115,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async (request, response) => {
allowDevAllOrigin(response);
let slug = request.params.slug;
+ slug = slug.toLowerCase();
try {
// Get Status Page
@@ -140,7 +150,8 @@ router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async
// overall status-page status badge
router.get("/api/status-page/:slug/badge", cache("5 minutes"), async (request, response) => {
allowDevAllOrigin(response);
- const slug = request.params.slug;
+ let slug = request.params.slug;
+ slug = slug.toLowerCase();
const statusPageID = await StatusPage.slugToID(slug);
const {
label,
diff --git a/server/server.js b/server/server.js
index d066d36df..72ddab466 100644
--- a/server/server.js
+++ b/server/server.js
@@ -19,7 +19,7 @@ const nodeVersion = process.versions.node;
// Get the required Node.js version from package.json
const requiredNodeVersions = require("../package.json").engines.node;
-const bannedNodeVersions = " < 14 || 20.0.* || 20.1.* || 20.2.* || 20.3.* ";
+const bannedNodeVersions = " < 18 || 20.0.* || 20.1.* || 20.2.* || 20.3.* ";
console.log(`Your Node.js version: ${nodeVersion}`);
const semver = require("semver");
@@ -132,9 +132,9 @@ const twoFAVerifyOptions = {
const testMode = !!args["test"] || false;
// Must be after io instantiation
-const { sendNotificationList, sendHeartbeatList, sendInfo, sendProxyList, sendDockerHostList, sendAPIKeyList, sendRemoteBrowserList } = require("./client");
+const { sendNotificationList, sendHeartbeatList, sendInfo, sendProxyList, sendDockerHostList, sendAPIKeyList, sendRemoteBrowserList, sendMonitorTypeList } = require("./client");
const { statusPageSocketHandler } = require("./socket-handlers/status-page-socket-handler");
-const databaseSocketHandler = require("./socket-handlers/database-socket-handler");
+const { databaseSocketHandler } = require("./socket-handlers/database-socket-handler");
const { remoteBrowserSocketHandler } = require("./socket-handlers/remote-browser-socket-handler");
const TwoFA = require("./2fa");
const StatusPage = require("./model/status_page");
@@ -246,6 +246,36 @@ let needSetup = false;
log.debug("test", request.body);
response.send("OK");
});
+
+ const fs = require("fs");
+
+ app.get("/_e2e/take-sqlite-snapshot", async (request, response) => {
+ await Database.close();
+ try {
+ fs.cpSync(Database.sqlitePath, `${Database.sqlitePath}.e2e-snapshot`);
+ } catch (err) {
+ throw new Error("Unable to copy SQLite DB.");
+ }
+ await Database.connect();
+
+ response.send("Snapshot taken.");
+ });
+
+ app.get("/_e2e/restore-sqlite-snapshot", async (request, response) => {
+ if (!fs.existsSync(`${Database.sqlitePath}.e2e-snapshot`)) {
+ throw new Error("Snapshot doesn't exist.");
+ }
+
+ await Database.close();
+ try {
+ fs.cpSync(`${Database.sqlitePath}.e2e-snapshot`, Database.sqlitePath);
+ } catch (err) {
+ throw new Error("Unable to copy snapshot file.");
+ }
+ await Database.connect();
+
+ response.send("Snapshot restored.");
+ });
}
// Robots.txt
@@ -695,6 +725,10 @@ let needSetup = false;
monitor.kafkaProducerBrokers = JSON.stringify(monitor.kafkaProducerBrokers);
monitor.kafkaProducerSaslOptions = JSON.stringify(monitor.kafkaProducerSaslOptions);
+ monitor.conditions = JSON.stringify(monitor.conditions);
+
+ monitor.rabbitmqNodes = JSON.stringify(monitor.rabbitmqNodes);
+
bean.import(monitor);
bean.user_id = socket.userID;
@@ -704,13 +738,13 @@ let needSetup = false;
await updateMonitorNotification(bean.id, notificationIDList);
- await server.sendMonitorList(socket);
+ await server.sendUpdateMonitorIntoList(socket, bean.id);
if (monitor.active !== false) {
await startMonitor(socket.userID, bean.id);
}
- log.info("monitor", `Added Monitor: ${monitor.id} User ID: ${socket.userID}`);
+ log.info("monitor", `Added Monitor: ${bean.id} User ID: ${socket.userID}`);
callback({
ok: true,
@@ -834,15 +868,26 @@ let needSetup = false;
bean.kafkaProducerAllowAutoTopicCreation = monitor.kafkaProducerAllowAutoTopicCreation;
bean.kafkaProducerSaslOptions = JSON.stringify(monitor.kafkaProducerSaslOptions);
bean.kafkaProducerMessage = monitor.kafkaProducerMessage;
+ bean.cacheBust = monitor.cacheBust;
bean.kafkaProducerSsl = monitor.kafkaProducerSsl;
bean.kafkaProducerAllowAutoTopicCreation =
monitor.kafkaProducerAllowAutoTopicCreation;
bean.gamedigGivenPortOnly = monitor.gamedigGivenPortOnly;
bean.remote_browser = monitor.remote_browser;
+ bean.smtpSecurity = monitor.smtpSecurity;
bean.snmpVersion = monitor.snmpVersion;
bean.snmpOid = monitor.snmpOid;
bean.jsonPathOperator = monitor.jsonPathOperator;
bean.timeout = monitor.timeout;
+ bean.rabbitmqNodes = JSON.stringify(monitor.rabbitmqNodes);
+ bean.rabbitmqUsername = monitor.rabbitmqUsername;
+ bean.rabbitmqPassword = monitor.rabbitmqPassword;
+ bean.conditions = JSON.stringify(monitor.conditions);
+
+ // ping advanced options
+ bean.ping_numeric = monitor.ping_numeric;
+ bean.ping_count = monitor.ping_count;
+ bean.ping_per_request_timeout = monitor.ping_per_request_timeout;
bean.validate();
@@ -854,11 +899,11 @@ let needSetup = false;
await updateMonitorNotification(bean.id, monitor.notificationIDList);
- if (await bean.isActive()) {
+ if (await Monitor.isActive(bean.id, bean.active)) {
await restartMonitor(socket.userID, bean.id);
}
- await server.sendMonitorList(socket);
+ await server.sendUpdateMonitorIntoList(socket, bean.id);
callback({
ok: true,
@@ -898,14 +943,17 @@ let needSetup = false;
log.info("monitor", `Get Monitor: ${monitorID} User ID: ${socket.userID}`);
- let bean = await R.findOne("monitor", " id = ? AND user_id = ? ", [
+ let monitor = await R.findOne("monitor", " id = ? AND user_id = ? ", [
monitorID,
socket.userID,
]);
-
+ const monitorData = [{ id: monitor.id,
+ active: monitor.active
+ }];
+ const preloadData = await Monitor.preparePreloadData(monitorData);
callback({
ok: true,
- monitor: await bean.toJSON(),
+ monitor: monitor.toJSON(preloadData),
});
} catch (e) {
@@ -956,7 +1004,7 @@ let needSetup = false;
try {
checkLogin(socket);
await startMonitor(socket.userID, monitorID);
- await server.sendMonitorList(socket);
+ await server.sendUpdateMonitorIntoList(socket, monitorID);
callback({
ok: true,
@@ -976,7 +1024,7 @@ let needSetup = false;
try {
checkLogin(socket);
await pauseMonitor(socket.userID, monitorID);
- await server.sendMonitorList(socket);
+ await server.sendUpdateMonitorIntoList(socket, monitorID);
callback({
ok: true,
@@ -1022,8 +1070,7 @@ let needSetup = false;
msg: "successDeleted",
msgi18n: true,
});
-
- await server.sendMonitorList(socket);
+ await server.sendDeleteMonitorFromList(socket, monitorID);
} catch (e) {
callback({
@@ -1571,18 +1618,20 @@ let needSetup = false;
await server.start();
- server.httpServer.listen(port, hostname, () => {
+ server.httpServer.listen(port, hostname, async () => {
if (hostname) {
log.info("server", `Listening on ${hostname}:${port}`);
} else {
log.info("server", `Listening on ${port}`);
}
- startMonitors();
+ await startMonitors();
+
+ // Put this here. Start background jobs after the db and server is ready to prevent clear up during db migration.
+ await initBackgroundJobs();
+
checkVersion.startInterval();
});
- await initBackgroundJobs();
-
// Start cloudflared at the end if configured
await cloudflaredAutoStart(cloudflaredToken);
@@ -1648,17 +1697,18 @@ async function afterLogin(socket, user) {
sendDockerHostList(socket),
sendAPIKeyList(socket),
sendRemoteBrowserList(socket),
+ sendMonitorTypeList(socket),
]);
await StatusPage.sendStatusPageList(io, socket);
+ const monitorPromises = [];
for (let monitorID in monitorList) {
- await sendHeartbeatList(socket, monitorID);
+ monitorPromises.push(sendHeartbeatList(socket, monitorID));
+ monitorPromises.push(Monitor.sendStats(io, monitorID, user.id));
}
- for (let monitorID in monitorList) {
- await Monitor.sendStats(io, monitorID, user.id);
- }
+ await Promise.all(monitorPromises);
// Set server timezone from client browser if not set
// It should be run once only
@@ -1680,7 +1730,7 @@ async function initDatabase(testMode = false) {
log.info("server", "Connected to the database");
// Patch the database
- await Database.patch();
+ await Database.patch(port, hostname);
let jwtSecretBean = await R.findOne("setting", " `key` = ? ", [
"jwtSecret",
@@ -1775,7 +1825,11 @@ async function startMonitors() {
}
for (let monitor of list) {
- await monitor.start(io);
+ try {
+ await monitor.start(io);
+ } catch (e) {
+ log.error("monitor", e);
+ }
// Give some delays, so all monitors won't make request at the same moment when just start the server.
await sleep(getRandomInt(300, 1000));
}
diff --git a/server/socket-handlers/database-socket-handler.js b/server/socket-handlers/database-socket-handler.js
index bcf34c906..ee2394bf6 100644
--- a/server/socket-handlers/database-socket-handler.js
+++ b/server/socket-handlers/database-socket-handler.js
@@ -6,7 +6,7 @@ const Database = require("../database");
* @param {Socket} socket Socket.io instance
* @returns {void}
*/
-module.exports = (socket) => {
+module.exports.databaseSocketHandler = (socket) => {
// Post or edit incident
socket.on("getDatabaseSize", async (callback) => {
diff --git a/server/socket-handlers/general-socket-handler.js b/server/socket-handlers/general-socket-handler.js
index 68e1f814c..50dcd946e 100644
--- a/server/socket-handlers/general-socket-handler.js
+++ b/server/socket-handlers/general-socket-handler.js
@@ -29,8 +29,13 @@ function getGameList() {
return gameList;
}
+/**
+ * Handler for general events
+ * @param {Socket} socket Socket.io instance
+ * @param {UptimeKumaServer} server Uptime Kuma server
+ * @returns {void}
+ */
module.exports.generalSocketHandler = (socket, server) => {
-
socket.on("initServerTimezone", async (timezone) => {
try {
checkLogin(socket);
diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js
index 6926fb9cf..b042042fc 100644
--- a/server/socket-handlers/status-page-socket-handler.js
+++ b/server/socket-handlers/status-page-socket-handler.js
@@ -211,6 +211,10 @@ module.exports.statusPageSocketHandler = (socket) => {
relationBean.send_url = monitor.sendUrl;
}
+ if (monitor.url !== undefined) {
+ relationBean.custom_url = monitor.url;
+ }
+
await R.store(relationBean);
}
@@ -220,13 +224,17 @@ module.exports.statusPageSocketHandler = (socket) => {
// Delete groups that are not in the list
log.debug("socket", "Delete groups that are not in the list");
- const slots = groupIDList.map(() => "?").join(",");
+ if (groupIDList.length === 0) {
+ await R.exec("DELETE FROM `group` WHERE status_page_id = ?", [ statusPage.id ]);
+ } else {
+ const slots = groupIDList.map(() => "?").join(",");
- const data = [
- ...groupIDList,
- statusPage.id
- ];
- await R.exec(`DELETE FROM \`group\` WHERE id NOT IN (${slots}) AND status_page_id = ?`, data);
+ const data = [
+ ...groupIDList,
+ statusPage.id
+ ];
+ await R.exec(`DELETE FROM \`group\` WHERE id NOT IN (${slots}) AND status_page_id = ?`, data);
+ }
const server = UptimeKumaServer.getInstance();
@@ -288,6 +296,7 @@ module.exports.statusPageSocketHandler = (socket) => {
ok: true,
msg: "successAdded",
msgi18n: true,
+ slug: slug
});
} catch (error) {
diff --git a/server/uptime-calculator.js b/server/uptime-calculator.js
index f2738b96a..71d1d458c 100644
--- a/server/uptime-calculator.js
+++ b/server/uptime-calculator.js
@@ -12,7 +12,6 @@ class UptimeCalculator {
* @private
* @type {{string:UptimeCalculator}}
*/
-
static list = {};
/**
@@ -55,6 +54,15 @@ class UptimeCalculator {
lastHourlyStatBean = null;
lastMinutelyStatBean = null;
+ /**
+ * For migration purposes.
+ * @type {boolean}
+ */
+ migrationMode = false;
+
+ statMinutelyKeepHour = 24;
+ statHourlyKeepDay = 30;
+
/**
* Get the uptime calculator for a monitor
* Initializes and returns the monitor if it does not exist
@@ -189,16 +197,19 @@ class UptimeCalculator {
/**
* @param {number} status status
* @param {number} ping Ping
+ * @param {dayjs.Dayjs} date Date (Only for migration)
* @returns {dayjs.Dayjs} date
* @throws {Error} Invalid status
*/
- async update(status, ping = 0) {
- let date = this.getCurrentDate();
+ async update(status, ping = 0, date) {
+ if (!date) {
+ date = this.getCurrentDate();
+ }
let flatStatus = this.flatStatus(status);
if (flatStatus === DOWN && ping > 0) {
- log.warn("uptime-calc", "The ping is not effective when the status is DOWN");
+ log.debug("uptime-calc", "The ping is not effective when the status is DOWN");
}
let divisionKey = this.getMinutelyKey(date);
@@ -297,47 +308,61 @@ class UptimeCalculator {
}
await R.store(dailyStatBean);
- let hourlyStatBean = await this.getHourlyStatBean(hourlyKey);
- hourlyStatBean.up = hourlyData.up;
- hourlyStatBean.down = hourlyData.down;
- hourlyStatBean.ping = hourlyData.avgPing;
- hourlyStatBean.pingMin = hourlyData.minPing;
- hourlyStatBean.pingMax = hourlyData.maxPing;
- {
- // eslint-disable-next-line no-unused-vars
- const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = hourlyData;
- if (Object.keys(extras).length > 0) {
- hourlyStatBean.extras = JSON.stringify(extras);
+ let currentDate = this.getCurrentDate();
+
+ // For migration mode, we don't need to store old hourly and minutely data, but we need 30-day's hourly data
+ // Run anyway for non-migration mode
+ if (!this.migrationMode || date.isAfter(currentDate.subtract(this.statHourlyKeepDay, "day"))) {
+ let hourlyStatBean = await this.getHourlyStatBean(hourlyKey);
+ hourlyStatBean.up = hourlyData.up;
+ hourlyStatBean.down = hourlyData.down;
+ hourlyStatBean.ping = hourlyData.avgPing;
+ hourlyStatBean.pingMin = hourlyData.minPing;
+ hourlyStatBean.pingMax = hourlyData.maxPing;
+ {
+ // eslint-disable-next-line no-unused-vars
+ const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = hourlyData;
+ if (Object.keys(extras).length > 0) {
+ hourlyStatBean.extras = JSON.stringify(extras);
+ }
}
+ await R.store(hourlyStatBean);
}
- await R.store(hourlyStatBean);
- let minutelyStatBean = await this.getMinutelyStatBean(divisionKey);
- minutelyStatBean.up = minutelyData.up;
- minutelyStatBean.down = minutelyData.down;
- minutelyStatBean.ping = minutelyData.avgPing;
- minutelyStatBean.pingMin = minutelyData.minPing;
- minutelyStatBean.pingMax = minutelyData.maxPing;
- {
- // eslint-disable-next-line no-unused-vars
- const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = minutelyData;
- if (Object.keys(extras).length > 0) {
- minutelyStatBean.extras = JSON.stringify(extras);
+ // For migration mode, we don't need to store old hourly and minutely data, but we need 24-hour's minutely data
+ // Run anyway for non-migration mode
+ if (!this.migrationMode || date.isAfter(currentDate.subtract(this.statMinutelyKeepHour, "hour"))) {
+ let minutelyStatBean = await this.getMinutelyStatBean(divisionKey);
+ minutelyStatBean.up = minutelyData.up;
+ minutelyStatBean.down = minutelyData.down;
+ minutelyStatBean.ping = minutelyData.avgPing;
+ minutelyStatBean.pingMin = minutelyData.minPing;
+ minutelyStatBean.pingMax = minutelyData.maxPing;
+ {
+ // eslint-disable-next-line no-unused-vars
+ const { up, down, avgPing, minPing, maxPing, timestamp, ...extras } = minutelyData;
+ if (Object.keys(extras).length > 0) {
+ minutelyStatBean.extras = JSON.stringify(extras);
+ }
}
+ await R.store(minutelyStatBean);
}
- await R.store(minutelyStatBean);
- // Remove the old data
- log.debug("uptime-calc", "Remove old data");
- await R.exec("DELETE FROM stat_minutely WHERE monitor_id = ? AND timestamp < ?", [
- this.monitorID,
- this.getMinutelyKey(date.subtract(24, "hour")),
- ]);
+ // No need to remove old data in migration mode
+ if (!this.migrationMode) {
+ // Remove the old data
+ // TODO: Improvement: Convert it to a job?
+ log.debug("uptime-calc", "Remove old data");
+ await R.exec("DELETE FROM stat_minutely WHERE monitor_id = ? AND timestamp < ?", [
+ this.monitorID,
+ this.getMinutelyKey(currentDate.subtract(this.statMinutelyKeepHour, "hour")),
+ ]);
- await R.exec("DELETE FROM stat_hourly WHERE monitor_id = ? AND timestamp < ?", [
- this.monitorID,
- this.getHourlyKey(date.subtract(30, "day")),
- ]);
+ await R.exec("DELETE FROM stat_hourly WHERE monitor_id = ? AND timestamp < ?", [
+ this.monitorID,
+ this.getHourlyKey(currentDate.subtract(this.statHourlyKeepDay, "day")),
+ ]);
+ }
return date;
}
@@ -812,6 +837,14 @@ class UptimeCalculator {
return dayjs.utc();
}
+ /**
+ * For migration purposes.
+ * @param {boolean} value Migration mode on/off
+ * @returns {void}
+ */
+ setMigrationMode(value) {
+ this.migrationMode = value;
+ }
}
class UptimeDataResult {
diff --git a/server/uptime-kuma-server.js b/server/uptime-kuma-server.js
index 573d791a6..1f75b72cc 100644
--- a/server/uptime-kuma-server.js
+++ b/server/uptime-kuma-server.js
@@ -113,8 +113,11 @@ class UptimeKumaServer {
UptimeKumaServer.monitorTypeList["tailscale-ping"] = new TailscalePing();
UptimeKumaServer.monitorTypeList["dns"] = new DnsMonitorType();
UptimeKumaServer.monitorTypeList["mqtt"] = new MqttMonitorType();
+ UptimeKumaServer.monitorTypeList["smtp"] = new SMTPMonitorType();
+ UptimeKumaServer.monitorTypeList["group"] = new GroupMonitorType();
UptimeKumaServer.monitorTypeList["snmp"] = new SNMPMonitorType();
UptimeKumaServer.monitorTypeList["mongodb"] = new MongodbMonitorType();
+ UptimeKumaServer.monitorTypeList["rabbitmq"] = new RabbitMqMonitorType();
// Allow all CORS origins (polling) in development
let cors = undefined;
@@ -205,24 +208,56 @@ class UptimeKumaServer {
return list;
}
+ /**
+ * Update Monitor into list
+ * @param {Socket} socket Socket to send list on
+ * @param {number} monitorID update or deleted monitor id
+ * @returns {Promise}
+ */
+ async sendUpdateMonitorIntoList(socket, monitorID) {
+ let list = await this.getMonitorJSONList(socket.userID, monitorID);
+ this.io.to(socket.userID).emit("updateMonitorIntoList", list);
+ }
+
+ /**
+ * Delete Monitor from list
+ * @param {Socket} socket Socket to send list on
+ * @param {number} monitorID update or deleted monitor id
+ * @returns {Promise}
+ */
+ async sendDeleteMonitorFromList(socket, monitorID) {
+ this.io.to(socket.userID).emit("deleteMonitorFromList", monitorID);
+ }
+
/**
* Get a list of monitors for the given user.
* @param {string} userID - The ID of the user to get monitors for.
+ * @param {number} monitorID - The ID of monitor for.
* @returns {Promise} A promise that resolves to an object with monitor IDs as keys and monitor objects as values.
*
* Generated by Trelent
*/
- async getMonitorJSONList(userID) {
- let result = {};
+ async getMonitorJSONList(userID, monitorID = null) {
- let monitorList = await R.find("monitor", " user_id = ? ORDER BY weight DESC, name", [
- userID,
- ]);
+ let query = " user_id = ? ";
+ let queryParams = [ userID ];
- for (let monitor of monitorList) {
- result[monitor.id] = await monitor.toJSON();
+ if (monitorID) {
+ query += "AND id = ? ";
+ queryParams.push(monitorID);
}
+ let monitorList = await R.find("monitor", query + "ORDER BY weight DESC, name", queryParams);
+
+ const monitorData = monitorList.map(monitor => ({
+ id: monitor.id,
+ active: monitor.active,
+ name: monitor.name,
+ }));
+ const preloadData = await Monitor.preparePreloadData(monitorData);
+
+ const result = {};
+ monitorList.forEach(monitor => result[monitor.id] = monitor.toJSON(preloadData));
return result;
}
@@ -518,5 +553,9 @@ const { RealBrowserMonitorType } = require("./monitor-types/real-browser-monitor
const { TailscalePing } = require("./monitor-types/tailscale-ping");
const { DnsMonitorType } = require("./monitor-types/dns");
const { MqttMonitorType } = require("./monitor-types/mqtt");
+const { SMTPMonitorType } = require("./monitor-types/smtp");
+const { GroupMonitorType } = require("./monitor-types/group");
const { SNMPMonitorType } = require("./monitor-types/snmp");
const { MongodbMonitorType } = require("./monitor-types/mongodb");
+const { RabbitMqMonitorType } = require("./monitor-types/rabbitmq");
+const Monitor = require("./model/monitor");
diff --git a/server/util-server.js b/server/util-server.js
index 5ebc62ac5..08df728ed 100644
--- a/server/util-server.js
+++ b/server/util-server.js
@@ -1,7 +1,11 @@
const tcpp = require("tcp-ping");
const ping = require("@louislam/ping");
const { R } = require("redbean-node");
-const { log, genSecret, badgeConstants } = require("../src/util");
+const {
+ log, genSecret, badgeConstants,
+ PING_PACKET_SIZE_DEFAULT, PING_GLOBAL_TIMEOUT_DEFAULT,
+ PING_COUNT_DEFAULT, PING_PER_REQUEST_TIMEOUT_DEFAULT
+} = require("../src/util");
const passwordHash = require("./password-hash");
const { Resolver } = require("dns");
const iconv = require("iconv-lite");
@@ -118,20 +122,33 @@ exports.tcping = function (hostname, port) {
/**
* Ping the specified machine
- * @param {string} hostname Hostname / address of machine
- * @param {number} size Size of packet to send
+ * @param {string} destAddr Hostname / IP address of machine to ping
+ * @param {number} count Number of packets to send before stopping
+ * @param {string} sourceAddr Source address for sending/receiving echo requests
+ * @param {boolean} numeric If true, IP addresses will be output instead of symbolic hostnames
+ * @param {number} size Size (in bytes) of echo request to send
+ * @param {number} deadline Maximum time in seconds before ping stops, regardless of packets sent
+ * @param {number} timeout Maximum time in seconds to wait for each response
* @returns {Promise} Time for ping in ms rounded to nearest integer
*/
-exports.ping = async (hostname, size = 56) => {
+exports.ping = async (
+ destAddr,
+ count = PING_COUNT_DEFAULT,
+ sourceAddr = "",
+ numeric = true,
+ size = PING_PACKET_SIZE_DEFAULT,
+ deadline = PING_GLOBAL_TIMEOUT_DEFAULT,
+ timeout = PING_PER_REQUEST_TIMEOUT_DEFAULT,
+) => {
try {
- return await exports.pingAsync(hostname, false, size);
+ return await exports.pingAsync(destAddr, false, count, sourceAddr, numeric, size, deadline, timeout);
} catch (e) {
// If the host cannot be resolved, try again with ipv6
log.debug("ping", "IPv6 error message: " + e.message);
// As node-ping does not report a specific error for this, try again if it is an empty message with ipv6 no matter what.
if (!e.message) {
- return await exports.pingAsync(hostname, true, size);
+ return await exports.pingAsync(destAddr, true, count, sourceAddr, numeric, size, deadline, timeout);
} else {
throw e;
}
@@ -140,18 +157,35 @@ exports.ping = async (hostname, size = 56) => {
/**
* Ping the specified machine
- * @param {string} hostname Hostname / address of machine to ping
+ * @param {string} destAddr Hostname / IP address of machine to ping
* @param {boolean} ipv6 Should IPv6 be used?
- * @param {number} size Size of ping packet to send
+ * @param {number} count Number of packets to send before stopping
+ * @param {string} sourceAddr Source address for sending/receiving echo requests
+ * @param {boolean} numeric If true, IP addresses will be output instead of symbolic hostnames
+ * @param {number} size Size (in bytes) of echo request to send
+ * @param {number} deadline Maximum time in seconds before ping stops, regardless of packets sent
+ * @param {number} timeout Maximum time in seconds to wait for each response
* @returns {Promise} Time for ping in ms rounded to nearest integer
*/
-exports.pingAsync = function (hostname, ipv6 = false, size = 56) {
+exports.pingAsync = function (
+ destAddr,
+ ipv6 = false,
+ count = PING_COUNT_DEFAULT,
+ sourceAddr = "",
+ numeric = true,
+ size = PING_PACKET_SIZE_DEFAULT,
+ deadline = PING_GLOBAL_TIMEOUT_DEFAULT,
+ timeout = PING_PER_REQUEST_TIMEOUT_DEFAULT,
+) {
return new Promise((resolve, reject) => {
- ping.promise.probe(hostname, {
+ ping.promise.probe(destAddr, {
v6: ipv6,
- min_reply: 1,
- deadline: 10,
+ min_reply: count,
+ sourceAddr: sourceAddr,
+ numeric: numeric,
packetSize: size,
+ deadline: deadline,
+ timeout: timeout
}).then((res) => {
// If ping failed, it will set field to unknown
if (res.alive) {
diff --git a/server/utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler.js b/server/utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler.js
new file mode 100644
index 000000000..d05a6bc8c
--- /dev/null
+++ b/server/utils/knex/lib/dialects/mysql2/schema/mysql2-columncompiler.js
@@ -0,0 +1,22 @@
+const ColumnCompilerMySQL = require("knex/lib/dialects/mysql/schema/mysql-columncompiler");
+const { formatDefault } = require("knex/lib/formatter/formatterUtils");
+const { log } = require("../../../../../../../src/util");
+
+class KumaColumnCompiler extends ColumnCompilerMySQL {
+ /**
+ * Override defaultTo method to handle default value for TEXT fields
+ * @param {any} value Value
+ * @returns {string|void} Default value (Don't understand why it can return void or string, but it's the original code, lol)
+ */
+ defaultTo(value) {
+ if (this.type === "text" && typeof value === "string") {
+ log.debug("defaultTo", `${this.args[0]}: ${this.type} ${value} ${typeof value}`);
+ // MySQL 8.0 is required and only if the value is written as an expression: https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html
+ // MariaDB 10.2 is required: https://mariadb.com/kb/en/text/
+ return `default (${formatDefault(value, this.type, this.client)})`;
+ }
+ return super.defaultTo.apply(this, arguments);
+ }
+}
+
+module.exports = KumaColumnCompiler;
diff --git a/server/utils/simple-migration-server.js b/server/utils/simple-migration-server.js
new file mode 100644
index 000000000..680f8df24
--- /dev/null
+++ b/server/utils/simple-migration-server.js
@@ -0,0 +1,84 @@
+const express = require("express");
+const http = require("node:http");
+const { log } = require("../../src/util");
+
+/**
+ * SimpleMigrationServer
+ * For displaying the migration status of the server
+ * Also, it is used to let Docker healthcheck know the status of the server, as the main server is not started yet, healthcheck will think the server is down incorrectly.
+ */
+class SimpleMigrationServer {
+ /**
+ * Express app instance
+ * @type {?Express}
+ */
+ app;
+
+ /**
+ * Server instance
+ * @type {?Server}
+ */
+ server;
+
+ /**
+ * Response object
+ * @type {?Response}
+ */
+ response;
+
+ /**
+ * Start the server
+ * @param {number} port Port
+ * @param {string} hostname Hostname
+ * @returns {Promise}
+ */
+ start(port, hostname) {
+ this.app = express();
+ this.server = http.createServer(this.app);
+
+ this.app.get("/", (req, res) => {
+ res.set("Content-Type", "text/plain");
+ res.write("Migration is in progress, listening message...\n");
+ if (this.response) {
+ this.response.write("Disconnected\n");
+ this.response.end();
+ }
+ this.response = res;
+ // never ending response
+ });
+
+ return new Promise((resolve) => {
+ this.server.listen(port, hostname, () => {
+ if (hostname) {
+ log.info("migration", `Migration server is running on http://${hostname}:${port}`);
+ } else {
+ log.info("migration", `Migration server is running on http://localhost:${port}`);
+ }
+ resolve();
+ });
+ });
+ }
+
+ /**
+ * Update the message
+ * @param {string} msg Message to update
+ * @returns {void}
+ */
+ update(msg) {
+ this.response?.write(msg + "\n");
+ }
+
+ /**
+ * Stop the server
+ * @returns {Promise}
+ */
+ async stop() {
+ this.response?.write("Finished, please refresh this page.\n");
+ this.response?.end();
+ await this.server?.close();
+ }
+}
+
+module.exports = {
+ SimpleMigrationServer,
+};
diff --git a/src/App.vue b/src/App.vue
index f102360c1..a7bb69b42 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -4,9 +4,11 @@
diff --git a/src/assets/app.scss b/src/assets/app.scss
index 28eeca87c..fd43a7bee 100644
--- a/src/assets/app.scss
+++ b/src/assets/app.scss
@@ -3,7 +3,7 @@
@import "node_modules/bootstrap/scss/bootstrap";
#app {
- font-family: BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
+ font-family: "Twemoji Country Flags", BlinkMacSystemFont, segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
}
h1 {
@@ -619,7 +619,7 @@ $shadow-box-padding: 20px;
bottom: 0;
margin-left: -$shadow-box-padding;
margin-right: -$shadow-box-padding;
- z-index: 100;
+ z-index: 10;
background-color: rgba(white, 0.2);
backdrop-filter: blur(2px);
border-radius: 0 0 10px 10px;
diff --git a/src/components/CreateGroupDialog.vue b/src/components/CreateGroupDialog.vue
index ba7fe6eb7..8bac1ccd0 100644
--- a/src/components/CreateGroupDialog.vue
+++ b/src/components/CreateGroupDialog.vue
@@ -42,6 +42,9 @@ export default {
mounted() {
this.modal = new Modal(this.$refs.modal);
},
+ beforeUnmount() {
+ this.cleanupModal();
+ },
methods: {
/**
* Show the confirm dialog
@@ -58,6 +61,19 @@ export default {
this.$emit("added", this.groupName);
this.modal.hide();
},
+ /**
+ * Clean up modal and restore scroll behavior
+ * @returns {void}
+ */
+ cleanupModal() {
+ if (this.modal) {
+ try {
+ this.modal.hide();
+ } catch (e) {
+ console.warn("Modal hide failed:", e);
+ }
+ }
+ }
},
};
diff --git a/src/components/EditMonitorCondition.vue b/src/components/EditMonitorCondition.vue
new file mode 100644
index 000000000..ac1b02dd2
--- /dev/null
+++ b/src/components/EditMonitorCondition.vue
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+ {{ $t("and") }}
+ {{ $t("or") }}
+
+
+
+
+ {{ $t(variable.id) }}
+
+
+
+
+
+ {{ $t(operator.caption) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/EditMonitorConditionGroup.vue b/src/components/EditMonitorConditionGroup.vue
new file mode 100644
index 000000000..910b41508
--- /dev/null
+++ b/src/components/EditMonitorConditionGroup.vue
@@ -0,0 +1,189 @@
+
+
+
+
+ {{ $t("and") }}
+ {{ $t("or") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("conditionAdd") }}
+
+
+ {{ $t("conditionAddGroup") }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/EditMonitorConditions.vue b/src/components/EditMonitorConditions.vue
new file mode 100644
index 000000000..1827cfe27
--- /dev/null
+++ b/src/components/EditMonitorConditions.vue
@@ -0,0 +1,143 @@
+
+
+
{{ $t("Conditions") }}
+
+
+
+
+
+
+
+
+ {{ $t("conditionAdd") }}
+
+
+ {{ $t("conditionAddGroup") }}
+
+
+
+
+
+
+
+
diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue
index fc044fe54..429ca9f91 100644
--- a/src/components/HeartbeatBar.vue
+++ b/src/components/HeartbeatBar.vue
@@ -4,17 +4,23 @@
+ >
+
+
-
{{ timeSinceFirstBeat }} ago
+
{{ timeSinceFirstBeat }}
{{ timeSinceLastBeat }}
@@ -47,7 +53,7 @@ export default {
beatWidth: 10,
beatHeight: 30,
hoverScale: 1.5,
- beatMargin: 4,
+ beatHoverAreaPadding: 4,
move: false,
maxBeat: -1,
};
@@ -123,7 +129,7 @@ export default {
barStyle() {
if (this.move && this.shortBeatList.length > this.maxBeat) {
- let width = -(this.beatWidth + this.beatMargin * 2);
+ let width = -(this.beatWidth + this.beatHoverAreaPadding * 2);
return {
transition: "all ease-in-out 0.25s",
@@ -137,12 +143,17 @@ export default {
},
+ beatHoverAreaStyle() {
+ return {
+ padding: this.beatHoverAreaPadding + "px",
+ "--hover-scale": this.hoverScale,
+ };
+ },
+
beatStyle() {
return {
width: this.beatWidth + "px",
height: this.beatHeight + "px",
- margin: this.beatMargin + "px",
- "--hover-scale": this.hoverScale,
};
},
@@ -152,7 +163,7 @@ export default {
*/
timeStyle() {
return {
- "margin-left": this.numPadding * (this.beatWidth + this.beatMargin * 2) + "px",
+ "margin-left": this.numPadding * (this.beatWidth + this.beatHoverAreaPadding * 2) + "px",
};
},
@@ -184,11 +195,11 @@ export default {
}
if (seconds < tolerance) {
- return "now";
+ return this.$t("now");
} else if (seconds < 60 * 60) {
- return (seconds / 60).toFixed(0) + "m ago";
+ return this.$t("time ago", [ (seconds / 60).toFixed(0) + "m" ]);
} else {
- return (seconds / 60 / 60).toFixed(0) + "h ago";
+ return this.$t("time ago", [ (seconds / 60 / 60).toFixed(0) + "h" ]);
}
}
},
@@ -219,20 +230,20 @@ export default {
if (this.size !== "big") {
this.beatWidth = 5;
this.beatHeight = 16;
- this.beatMargin = 2;
+ this.beatHoverAreaPadding = 2;
}
// Suddenly, have an idea how to handle it universally.
// If the pixel * ratio != Integer, then it causes render issue, round it to solve it!!
const actualWidth = this.beatWidth * window.devicePixelRatio;
- const actualMargin = this.beatMargin * window.devicePixelRatio;
+ const actualHoverAreaPadding = this.beatHoverAreaPadding * window.devicePixelRatio;
if (!Number.isInteger(actualWidth)) {
this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio;
}
- if (!Number.isInteger(actualMargin)) {
- this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio;
+ if (!Number.isInteger(actualHoverAreaPadding)) {
+ this.beatHoverAreaPadding = Math.round(actualHoverAreaPadding) / window.devicePixelRatio;
}
window.addEventListener("resize", this.resize);
@@ -245,7 +256,7 @@ export default {
*/
resize() {
if (this.$refs.wrap) {
- this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2));
+ this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatHoverAreaPadding * 2));
}
},
@@ -273,32 +284,41 @@ export default {
}
.hp-bar-big {
- .beat {
+ .beat-hover-area {
display: inline-block;
- background-color: $primary;
- border-radius: $border-radius;
-
- &.empty {
- background-color: aliceblue;
- }
-
- &.down {
- background-color: $danger;
- }
-
- &.pending {
- background-color: $warning;
- }
-
- &.maintenance {
- background-color: $maintenance;
- }
&:not(.empty):hover {
transition: all ease-in-out 0.15s;
opacity: 0.8;
transform: scale(var(--hover-scale));
}
+
+ .beat {
+ background-color: $primary;
+ border-radius: $border-radius;
+
+ /*
+ pointer-events needs to be changed because
+ tooltip momentarily disappears when crossing between .beat-hover-area and .beat
+ */
+ pointer-events: none;
+
+ &.empty {
+ background-color: aliceblue;
+ }
+
+ &.down {
+ background-color: $danger;
+ }
+
+ &.pending {
+ background-color: $warning;
+ }
+
+ &.maintenance {
+ background-color: $maintenance;
+ }
+ }
}
}
diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue
index b9d42048b..a579316b3 100644
--- a/src/components/MonitorList.vue
+++ b/src/components/MonitorList.vue
@@ -45,7 +45,7 @@
-
+
{{ $t("No Monitors, please") }} {{ $t("add one") }}
diff --git a/src/components/MonitorListItem.vue b/src/components/MonitorListItem.vue
index 9b45ae9f2..ce38086b9 100644
--- a/src/components/MonitorListItem.vue
+++ b/src/components/MonitorListItem.vue
@@ -14,7 +14,7 @@
-
+
@@ -22,11 +22,11 @@
{{ monitor.name }}
-
-
@@ -43,12 +43,15 @@
diff --git a/src/components/MonitorSettingDialog.vue b/src/components/MonitorSettingDialog.vue
index e6b2cd1ef..8723c4862 100644
--- a/src/components/MonitorSettingDialog.vue
+++ b/src/components/MonitorSettingDialog.vue
@@ -10,7 +10,7 @@
+
+
+ {{ $t("Custom URL") }}
+ changeUrl(monitor.group_index, monitor.monitor_index, e.target!.value)">
+
+
+ {{ $t("customUrlDescription") }}
+
+
+
@@ -78,6 +88,7 @@ export default {
monitor_index: monitor.index,
group_index: group.index,
isClickAble: this.showLink(monitor),
+ url: monitor.element.url,
};
this.MonitorSettingDialog.show();
@@ -110,6 +121,17 @@ export default {
}
return monitor.element.sendUrl && monitor.element.url && monitor.element.url !== "https://" && !this.editMode;
},
+
+ /**
+ * Toggle the value of sendUrl
+ * @param {number} groupIndex Index of group monitor is member of
+ * @param {number} index Index of monitor within group
+ * @param {string} value The new value of the url
+ * @returns {void}
+ */
+ changeUrl(groupIndex, index, value) {
+ this.$root.publicGroupList[groupIndex].monitorList[index].url = value;
+ },
},
};
diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue
index 288b00559..acfcde6a2 100644
--- a/src/components/NotificationDialog.vue
+++ b/src/components/NotificationDialog.vue
@@ -118,6 +118,7 @@ export default {
"clicksendsms": "ClickSend SMS",
"CallMeBot": "CallMeBot (WhatsApp, Telegram Call, Facebook Messanger)",
"discord": "Discord",
+ "Elks": "46elks",
"GoogleChat": "Google Chat (Google Workspace)",
"gorush": "Gorush",
"gotify": "Gotify",
@@ -134,17 +135,20 @@ export default {
"nostr": "Nostr",
"ntfy": "Ntfy",
"octopush": "Octopush",
+ "OneChat": "OneChat",
"OneBot": "OneBot",
"Onesender": "Onesender",
"Opsgenie": "Opsgenie",
"PagerDuty": "PagerDuty",
"PagerTree": "PagerTree",
+ "pumble": "Pumble",
"pushbullet": "Pushbullet",
"PushByTechulus": "Push by Techulus",
"pushover": "Pushover",
"pushy": "Pushy",
"rocket.chat": "Rocket.Chat",
"signal": "Signal",
+ "SIGNL4": "SIGNL4",
"slack": "Slack",
"squadcast": "SquadCast",
"SMSEagle": "SMSEagle",
@@ -161,8 +165,11 @@ export default {
"ZohoCliq": "ZohoCliq",
"SevenIO": "SevenIO",
"whapi": "WhatsApp (Whapi)",
+ "waha": "WhatsApp (WAHA)",
"gtxmessaging": "GtxMessaging",
"Cellsynt": "Cellsynt",
+ "SendGrid": "SendGrid",
+ "notifery": "Notifery"
};
// Put notifications here if it's not supported in most regions or its documentation is not in English
@@ -178,7 +185,12 @@ export default {
"SMSManager": "SmsManager (smsmanager.cz)",
"WeCom": "WeCom (企业微信群机器人)",
"ServerChan": "ServerChan (Server酱)",
+ "PushPlus": "PushPlus (推送加)",
+ "SpugPush": "SpugPush(Spug推送助手)",
"smsc": "SMSC",
+ "WPush": "WPush(wpush.cn)",
+ "YZJ": "YZJ (云之家自定义机器人)",
+ "SMSPlanet": "SMSPlanet.pl"
};
// Sort by notification name
@@ -228,6 +240,9 @@ export default {
mounted() {
this.modal = new Modal(this.$refs.modal);
},
+ beforeUnmount() {
+ this.cleanupModal();
+ },
methods: {
/**
@@ -332,6 +347,20 @@ export default {
});
} while (this.$root.notificationList.find(it => it.name === name));
return name;
+ },
+
+ /**
+ * Clean up modal and restore scroll behavior
+ * @returns {void}
+ */
+ cleanupModal() {
+ if (this.modal) {
+ try {
+ this.modal.hide();
+ } catch (e) {
+ console.warn("Modal hide failed:", e);
+ }
+ }
}
},
};
diff --git a/src/components/ProxyDialog.vue b/src/components/ProxyDialog.vue
index fc92359b9..2f7ed7b61 100644
--- a/src/components/ProxyDialog.vue
+++ b/src/components/ProxyDialog.vue
@@ -125,11 +125,12 @@ export default {
}
};
},
-
mounted() {
this.modal = new Modal(this.$refs.modal);
},
-
+ beforeUnmount() {
+ this.cleanupModal();
+ },
methods: {
/**
* Show dialog to confirm deletion
@@ -209,6 +210,20 @@ export default {
}
});
},
+
+ /**
+ * Clean up modal and restore scroll behavior
+ * @returns {void}
+ */
+ cleanupModal() {
+ if (this.modal) {
+ try {
+ this.modal.hide();
+ } catch (e) {
+ console.warn("Modal hide failed:", e);
+ }
+ }
+ }
},
};
diff --git a/src/components/PublicGroupList.vue b/src/components/PublicGroupList.vue
index d1c1f4c52..cb97ecdcd 100644
--- a/src/components/PublicGroupList.vue
+++ b/src/components/PublicGroupList.vue
@@ -7,12 +7,12 @@
:animation="100"
>
-
+
-
+
@@ -31,9 +31,9 @@
item-key="id"
>
-
+
-
+
@@ -45,10 +45,11 @@
class="item-name"
target="_blank"
rel="noopener noreferrer"
+ data-testid="monitor-name"
>
{{ monitor.element.name }}
-
{{ monitor.element.name }}
+
{{ monitor.element.name }}
@@ -66,11 +68,11 @@
-
+
-
diff --git a/src/components/Tag.vue b/src/components/Tag.vue
index 6c2ff8c9b..ceccce8a6 100644
--- a/src/components/Tag.vue
+++ b/src/components/Tag.vue
@@ -6,7 +6,6 @@
'm-2': size == 'normal',
'px-2': size == 'sm',
'py-0': size == 'sm',
- 'mx-1': size == 'sm',
}"
:style="{ backgroundColor: item.color, fontSize: size == 'sm' ? '0.7em' : '1em' }"
>
@@ -48,7 +47,7 @@ export default {
},
computed: {
displayText() {
- if (this.item.value === "" || this.item.value === undefined) {
+ if (this.item.value === "" || this.item.value === undefined || this.item.value === null) {
return this.item.name;
} else {
return `${this.item.name}: ${this.item.value}`;
diff --git a/src/components/TagsManager.vue b/src/components/TagsManager.vue
index 6b77b1c39..aa8f93a83 100644
--- a/src/components/TagsManager.vue
+++ b/src/components/TagsManager.vue
@@ -14,6 +14,7 @@
type="button"
class="btn btn-outline-secondary btn-add"
:disabled="processing"
+ data-testid="add-tag-button"
@click.stop="showAddDialog"
>
{{ $t("Add") }}
@@ -59,6 +60,7 @@
v-model="newDraftTag.name" class="form-control"
:class="{'is-invalid': validateDraftTag.nameInvalid}"
:placeholder="$t('Name')"
+ data-testid="tag-name-input"
@keydown.enter.prevent="onEnter"
/>
@@ -76,6 +78,7 @@
label="name"
select-label=""
deselect-label=""
+ data-testid="tag-color-select"
>
@@ -114,6 +118,7 @@
type="button"
class="btn btn-secondary float-end"
:disabled="processing || validateDraftTag.invalid"
+ data-testid="tag-submit-button"
@click.stop="addDraftTag"
>
{{ $t("Add") }}
@@ -192,7 +197,7 @@ export default {
return tagOptions;
},
selectedTags() {
- return this.preSelectedTags.concat(this.newTags).filter(tag => !this.deleteTags.find(monitorTag => monitorTag.id === tag.id));
+ return this.preSelectedTags.concat(this.newTags).filter(tag => !this.deleteTags.find(monitorTag => monitorTag.tag_id === tag.tag_id));
},
colorOptions() {
return colorOptions(this);
@@ -243,6 +248,9 @@ export default {
this.modal = new Modal(this.$refs.modal);
this.getExistingTags();
},
+ beforeUnmount() {
+ this.cleanupModal();
+ },
methods: {
/**
* Show the add tag dialog
@@ -454,6 +462,19 @@ export default {
this.newTags = [];
this.deleteTags = [];
this.processing = false;
+ },
+ /**
+ * Clean up modal and restore scroll behavior
+ * @returns {void}
+ */
+ cleanupModal() {
+ if (this.modal) {
+ try {
+ this.modal.hide();
+ } catch (e) {
+ console.warn("Modal hide failed:", e);
+ }
+ }
}
},
};
diff --git a/src/components/TemplatedInput.vue b/src/components/TemplatedInput.vue
new file mode 100644
index 000000000..43c5382e0
--- /dev/null
+++ b/src/components/TemplatedInput.vue
@@ -0,0 +1,75 @@
+
+
+
+ {{ $t("documentation") }}
+
+
+
{{ msg }}
: {{ $t("templateMsg") }}
+
{{ name }}
: {{ $t("templateServiceName") }}
+
{{ status }}
: {{ $t("templateStatus") }}
+
{{ hostnameOrURL }}
: {{ $t("templateHostnameOrURL") }}
+
{{ heartbeatJSON }}
: {{ $t("templateHeartbeatJSON") }}
({{ $t("templateLimitedToUpDownNotifications") }})
+
{{ monitorJSON }}
: {{ $t("templateMonitorJSON") }}
({{ $t("templateLimitedToUpDownCertNotifications") }})
+
+
+
+
+
+
diff --git a/src/components/TemplatedTextarea.vue b/src/components/TemplatedTextarea.vue
new file mode 100644
index 000000000..ff0c0f9fb
--- /dev/null
+++ b/src/components/TemplatedTextarea.vue
@@ -0,0 +1,80 @@
+
+
+
+ {{ $t("documentation") }}
+
+
+
{{ msg }}
: {{ $t("templateMsg") }}
+
{{ name }}
: {{ $t("templateServiceName") }}
+
{{ status }}
: {{ $t("templateStatus") }}
+
{{ hostnameOrURL }}
: {{ $t("templateHostnameOrURL") }}
+
{{ heartbeatJSON }}
: {{ $t("templateHeartbeatJSON") }}
({{ $t("templateLimitedToUpDownNotifications") }})
+
{{ monitorJSON }}
: {{ $t("templateMonitorJSON") }}
({{ $t("templateLimitedToUpDownCertNotifications") }})
+
+
+
+
+
+
+
+
diff --git a/src/components/notifications/46elks.vue b/src/components/notifications/46elks.vue
new file mode 100644
index 000000000..d29655bd5
--- /dev/null
+++ b/src/components/notifications/46elks.vue
@@ -0,0 +1,48 @@
+
+
+ {{ $t("Username") }}
+
+ {{ $t("Password") }}
+
+
+
+
+
+
{{ $t("To Number") }}
+
+
+
+
+
+ https://46elks.com/docs/send-sms
+
+
+
+
diff --git a/src/components/notifications/Discord.vue b/src/components/notifications/Discord.vue
index 5d8334f5f..40d2f204e 100644
--- a/src/components/notifications/Discord.vue
+++ b/src/components/notifications/Discord.vue
@@ -53,6 +53,13 @@
+
+
+
+
+ {{ $t("Disable URL in Notification") }}
+
+
diff --git a/src/components/notifications/Matrix.vue b/src/components/notifications/Matrix.vue
index a9fd63403..60d43cf17 100644
--- a/src/components/notifications/Matrix.vue
+++ b/src/components/notifications/Matrix.vue
@@ -18,7 +18,7 @@
{{ $t("matrixDesc1") }}
- curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/r0/login"
.
+ curl -XPOST -d '{"type": "m.login.password", "identifier": {"user": "botusername", "type": "m.id.user"}, "password": "passwordforuser"}' "https://home.server/_matrix/client/v3/login"
.
diff --git a/src/components/notifications/Notifery.vue b/src/components/notifications/Notifery.vue
new file mode 100644
index 000000000..ce204dc6a
--- /dev/null
+++ b/src/components/notifications/Notifery.vue
@@ -0,0 +1,49 @@
+
+
+ {{
+ $t("API Key")
+ }}
+
+
+
+
+ {{ $t("Title") }}
+
+
+
+
+ {{ $t("Group") }}
+
+
+
+
+ https://docs.notifery.com/api/event/
+
+
+
+
diff --git a/src/components/notifications/OneChat.vue b/src/components/notifications/OneChat.vue
new file mode 100644
index 000000000..b954d338b
--- /dev/null
+++ b/src/components/notifications/OneChat.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+ OneChat Access Token*
+
+
+
+
+
{{ $t("OneChatAccessToken") }}
+
+
+
+
+
+
+ {{ $t("OneChatUserIdOrGroupId") }}*
+
+
+
+
+
+
+
+ {{ $t("OneChatBotId") }}*
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/notifications/Pumble.vue b/src/components/notifications/Pumble.vue
new file mode 100644
index 000000000..c577e0404
--- /dev/null
+++ b/src/components/notifications/Pumble.vue
@@ -0,0 +1,9 @@
+
+
+ {{ $t("Webhook URL") }} *
+
+
+
+
diff --git a/src/components/notifications/PushPlus.vue b/src/components/notifications/PushPlus.vue
new file mode 100644
index 000000000..80e47cea0
--- /dev/null
+++ b/src/components/notifications/PushPlus.vue
@@ -0,0 +1,19 @@
+
+
+ {{ $t("SendKey") }}
+
+
+
+ https://www.pushplus.plus/
+
+
+
+
diff --git a/src/components/notifications/Pushover.vue b/src/components/notifications/Pushover.vue
index 7ee0eafb6..e2fecd29f 100644
--- a/src/components/notifications/Pushover.vue
+++ b/src/components/notifications/Pushover.vue
@@ -16,34 +16,24 @@
1
2
-
{{ $t("Notification Sound") }}
-
- {{ $t("pushoversounds pushover") }}
- {{ $t("pushoversounds bike") }}
- {{ $t("pushoversounds bugle") }}
- {{ $t("pushoversounds cashregister") }}
- {{ $t("pushoversounds classical") }}
- {{ $t("pushoversounds cosmic") }}
- {{ $t("pushoversounds falling") }}
- {{ $t("pushoversounds gamelan") }}
- {{ $t("pushoversounds incoming") }}
- {{ $t("pushoversounds intermission") }}
- {{ $t("pushoversounds magic") }}
- {{ $t("pushoversounds mechanical") }}
- {{ $t("pushoversounds pianobar") }}
- {{ $t("pushoversounds siren") }}
- {{ $t("pushoversounds spacealarm") }}
- {{ $t("pushoversounds tugboat") }}
- {{ $t("pushoversounds alien") }}
- {{ $t("pushoversounds climb") }}
- {{ $t("pushoversounds persistent") }}
- {{ $t("pushoversounds echo") }}
- {{ $t("pushoversounds updown") }}
- {{ $t("pushoversounds vibrate") }}
- {{ $t("pushoversounds none") }}
+
+ {{ $t("Notification Sound") }} - Up
+
+
+ {{ $t(`pushoversounds ${sound}`) }}
+
+
+ {{ $t("Notification Sound") }} - Down
+
+
+ {{ $t(`pushoversounds ${sound}`) }}
+
+
+
{{ $t("pushoverMessageTtl") }}
+
* {{ $t("Required") }}
@@ -66,5 +56,34 @@ export default {
components: {
HiddenInput,
},
+ data() {
+ return {
+ soundOptions: [
+ "pushover",
+ "bike",
+ "bugle",
+ "cashregister",
+ "classical",
+ "cosmic",
+ "falling",
+ "gamelan",
+ "incoming",
+ "intermission",
+ "magic",
+ "mechanical",
+ "pianobar",
+ "siren",
+ "spacealarm",
+ "tugboat",
+ "alien",
+ "climb",
+ "persistent",
+ "echo",
+ "updown",
+ "vibrate",
+ "none",
+ ],
+ };
+ },
};
diff --git a/src/components/notifications/SIGNL4.vue b/src/components/notifications/SIGNL4.vue
new file mode 100644
index 000000000..d557c2d38
--- /dev/null
+++ b/src/components/notifications/SIGNL4.vue
@@ -0,0 +1,16 @@
+
+
+
diff --git a/src/components/notifications/SMSEagle.vue b/src/components/notifications/SMSEagle.vue
index ec781313a..16277a6ef 100644
--- a/src/components/notifications/SMSEagle.vue
+++ b/src/components/notifications/SMSEagle.vue
@@ -1,31 +1,123 @@
{{ $t("smseagleUrl") }}
-
+
{{ $t("smseagleToken") }}
-
{{ $t("smseagleRecipientType") }}
-
- {{ $t("smseagleTo") }}
- {{ $t("smseagleGroup") }}
- {{ $t("smseagleContact") }}
+ {{ $t("smseagleApiType") }}
+
+ {{ $t("smseagleApiv1") }}
+ {{ $t("smseagleApiv2") }}
+
+ https://www.smseagle.eu/api/
+
-
-
{{ $t("smseagleRecipient") }}
-
+
+
+ {{ $t("smseagleRecipientType") }}
+
+
+ {{ $t("smseagleTo") }}
+ {{ $t("smseagleGroup") }}
+ {{ $t("smseagleContact") }}
+
+
+
+ {{ $t("smseagleRecipient") }}
+
+
+
+ {{ $t("smseaglePriority") }}
+
+
+
+ {{ $t("smseagleEncoding") }}
+
+
+
+
+ {{ $t("smseagleMsgType") }}
+
+ {{ $t("smseagleMsgSms") }}
+ {{ $t("smseagleMsgRing") }}
+ {{ $t("smseagleMsgTts") }}
+ {{ $t("smseagleMsgTtsAdvanced") }}
+
+
+
+ {{ $t("smseagleDuration") }}
+
+
+
+ {{ $t("smseagleTtsModel") }}
+
+
+
-
- {{ $t("smseaglePriority") }}
-
-
-
-
-
- {{ $t("documentation") }}
-
- {{name}}
: {{ $t("emailTemplateServiceName") }}
- {{msg}}
: {{ $t("emailTemplateMsg") }}
- {{status}}
: {{ $t("emailTemplateStatus") }}
- {{heartbeatJSON}}
: {{ $t("emailTemplateHeartbeatJSON") }}{{ $t("emailTemplateLimitedToUpDownNotification") }}
- {{monitorJSON}}
: {{ $t("emailTemplateMonitorJSON") }} {{ $t("emailTemplateLimitedToUpDownNotification") }}
- {{hostnameOrURL}}
: {{ $t("emailTemplateHostnameOrURL") }}
-
{{ $t("emailCustomSubject") }}
-
+
{{ $t("leave blank for default subject") }}
+
{{ $t("emailCustomBody") }}
-
+
{{ $t("leave blank for default body") }}
+
+
+
+
+ {{ $t("Use HTML for custom E-mail body") }}
+
+
+
+
{{ $t("documentation") }}
@@ -124,11 +123,15 @@
diff --git a/src/components/notifications/Slack.vue b/src/components/notifications/Slack.vue
index dead709ce..9fa9f34be 100644
--- a/src/components/notifications/Slack.vue
+++ b/src/components/notifications/Slack.vue
@@ -4,11 +4,20 @@
{{ $t("Username") }}
+
+ {{ $t("aboutSlackUsername") }}
+
{{ $t("Icon Emoji") }}
{{ $t("Channel Name") }}
+ {{ $t("Message format") }}
+
+
+ {{ $t("Send rich messages") }}
+
+
* {{ $t("Required") }}
diff --git a/src/components/notifications/SpugPush.vue b/src/components/notifications/SpugPush.vue
new file mode 100644
index 000000000..37dffccf3
--- /dev/null
+++ b/src/components/notifications/SpugPush.vue
@@ -0,0 +1,19 @@
+
+
+ {{ $t("SpugPush Template Code") }}
+
+
+
+ https://push.spug.cc
+
+
+
+
diff --git a/src/components/notifications/TechulusPush.vue b/src/components/notifications/TechulusPush.vue
index bece17e27..bb2c27ad8 100644
--- a/src/components/notifications/TechulusPush.vue
+++ b/src/components/notifications/TechulusPush.vue
@@ -4,6 +4,53 @@
+
+ {{ $t("Title") }}
+
+
+
+
+
{{ $t("Notification Channel") }}
+
+
+ {{ $t("Alphanumerical string and hyphens only") }}
+
+
+
+
+
{{ $t("Sound") }}
+
+ {{ $t("Default") }}
+ {{ $t("Arcade") }}
+ {{ $t("Correct") }}
+ {{ $t("Fail") }}
+ {{ $t("Harp") }}
+ {{ $t("Reveal") }}
+ {{ $t("Bubble") }}
+ {{ $t("Doorbell") }}
+ {{ $t("Flute") }}
+ {{ $t("Money") }}
+ {{ $t("Scifi") }}
+ {{ $t("Clear") }}
+ {{ $t("Elevator") }}
+ {{ $t("Guitar") }}
+ {{ $t("Pop") }}
+
+
+ {{ $t("Custom sound to override default notification sound") }}
+
+
+
+
+
+
+ {{ $t("Time Sensitive (iOS Only)") }}
+
+
+ {{ $t("Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.") }}
+
+
+
https://docs.push.techulus.com
@@ -16,5 +63,19 @@ export default {
components: {
HiddenInput,
},
+ mounted() {
+ if (typeof this.$parent.notification.pushTitle === "undefined") {
+ this.$parent.notification.pushTitle = "Uptime-Kuma";
+ }
+ if (typeof this.$parent.notification.pushChannel === "undefined") {
+ this.$parent.notification.pushChannel = "uptime-kuma";
+ }
+ if (typeof this.$parent.notification.pushSound === "undefined") {
+ this.$parent.notification.pushSound = "default";
+ }
+ if (typeof this.$parent.notification.pushTimeSensitive === "undefined") {
+ this.$parent.notification.pushTimeSensitive = true;
+ }
+ },
};
diff --git a/src/components/notifications/Telegram.vue b/src/components/notifications/Telegram.vue
index a072c3ed3..145a5c94e 100644
--- a/src/components/notifications/Telegram.vue
+++ b/src/components/notifications/Telegram.vue
@@ -33,6 +33,56 @@
{{ $t("telegramMessageThreadIDDescription") }}
+ {{ $t("telegramServerUrl") }}
+
+
+
+
+
+
+
+ {{ $t("telegramUseTemplate") }}
+
+
+
+ {{ $t("telegramUseTemplateDescription") }}
+
+
+
+
+
+
{{ $t("Message Format") }}
+
+ {{ $t("Plain Text") }}
+ HTML
+ MarkdownV2
+
+
+ {{ $t("documentation") }}
+
+
+
{{ $t('Message Template') }}
+
+
+
+
+
@@ -67,7 +54,12 @@
diff --git a/src/components/notifications/index.js b/src/components/notifications/index.js
index 51642d7da..933139a4a 100644
--- a/src/components/notifications/index.js
+++ b/src/components/notifications/index.js
@@ -4,11 +4,13 @@ import AliyunSMS from "./AliyunSms.vue";
import Apprise from "./Apprise.vue";
import Bark from "./Bark.vue";
import Bitrix24 from "./Bitrix24.vue";
+import Notifery from "./Notifery.vue";
import ClickSendSMS from "./ClickSendSMS.vue";
import CallMeBot from "./CallMeBot.vue";
import SMSC from "./SMSC.vue";
import DingDing from "./DingDing.vue";
import Discord from "./Discord.vue";
+import Elks from "./46elks.vue";
import Feishu from "./Feishu.vue";
import FreeMobile from "./FreeMobile.vue";
import GoogleChat from "./GoogleChat.vue";
@@ -28,6 +30,7 @@ import Mattermost from "./Mattermost.vue";
import Nostr from "./Nostr.vue";
import Ntfy from "./Ntfy.vue";
import Octopush from "./Octopush.vue";
+import OneChat from "./OneChat.vue";
import OneBot from "./OneBot.vue";
import Onesender from "./Onesender.vue";
import Opsgenie from "./Opsgenie.vue";
@@ -35,9 +38,11 @@ import PagerDuty from "./PagerDuty.vue";
import FlashDuty from "./FlashDuty.vue";
import PagerTree from "./PagerTree.vue";
import PromoSMS from "./PromoSMS.vue";
+import Pumble from "./Pumble.vue";
import Pushbullet from "./Pushbullet.vue";
import PushDeer from "./PushDeer.vue";
import Pushover from "./Pushover.vue";
+import PushPlus from "./PushPlus.vue";
import Pushy from "./Pushy.vue";
import RocketChat from "./RocketChat.vue";
import ServerChan from "./ServerChan.vue";
@@ -60,9 +65,16 @@ import WeCom from "./WeCom.vue";
import GoAlert from "./GoAlert.vue";
import ZohoCliq from "./ZohoCliq.vue";
import Splunk from "./Splunk.vue";
+import SpugPush from "./SpugPush.vue";
import SevenIO from "./SevenIO.vue";
import Whapi from "./Whapi.vue";
+import WAHA from "./WAHA.vue";
import Cellsynt from "./Cellsynt.vue";
+import WPush from "./WPush.vue";
+import SIGNL4 from "./SIGNL4.vue";
+import SendGrid from "./SendGrid.vue";
+import YZJ from "./YZJ.vue";
+import SMSPlanet from "./SMSPlanet.vue";
/**
* Manage all notification form.
@@ -80,6 +92,7 @@ const NotificationFormList = {
"smsc": SMSC,
"DingDing": DingDing,
"discord": Discord,
+ "Elks": Elks,
"Feishu": Feishu,
"FreeMobile": FreeMobile,
"GoogleChat": GoogleChat,
@@ -98,6 +111,7 @@ const NotificationFormList = {
"nostr": Nostr,
"ntfy": Ntfy,
"octopush": Octopush,
+ "OneChat": OneChat,
"OneBot": OneBot,
"Onesender": Onesender,
"Opsgenie": Opsgenie,
@@ -105,14 +119,17 @@ const NotificationFormList = {
"FlashDuty": FlashDuty,
"PagerTree": PagerTree,
"promosms": PromoSMS,
+ "pumble": Pumble,
"pushbullet": Pushbullet,
"PushByTechulus": TechulusPush,
"PushDeer": PushDeer,
"pushover": Pushover,
+ "PushPlus": PushPlus,
"pushy": Pushy,
"rocket.chat": RocketChat,
"serwersms": SerwerSMS,
"signal": Signal,
+ "SIGNL4": SIGNL4,
"SMSManager": SMSManager,
"SMSPartner": SMSPartner,
"slack": Slack,
@@ -125,6 +142,7 @@ const NotificationFormList = {
"threema": Threema,
"twilio": Twilio,
"Splunk": Splunk,
+ "SpugPush": SpugPush,
"webhook": Webhook,
"WeCom": WeCom,
"GoAlert": GoAlert,
@@ -132,8 +150,14 @@ const NotificationFormList = {
"ZohoCliq": ZohoCliq,
"SevenIO": SevenIO,
"whapi": Whapi,
+ "notifery": Notifery,
+ "waha": WAHA,
"gtxmessaging": GtxMessaging,
"Cellsynt": Cellsynt,
+ "WPush": WPush,
+ "SendGrid": SendGrid,
+ "YZJ": YZJ,
+ "SMSPlanet": SMSPlanet,
};
export default NotificationFormList;
diff --git a/src/components/settings/About.vue b/src/components/settings/About.vue
index 3ef9e6d78..b8049d8bd 100644
--- a/src/components/settings/About.vue
+++ b/src/components/settings/About.vue
@@ -21,6 +21,9 @@
{{ $t("Also check beta release") }}
+
+
{{ $t("Font Twemoji by Twitter licensed under") }} CC-BY 4.0
+
diff --git a/src/components/settings/MonitorHistory.vue b/src/components/settings/MonitorHistory.vue
index befedf513..25e3e1559 100644
--- a/src/components/settings/MonitorHistory.vue
+++ b/src/components/settings/MonitorHistory.vue
@@ -32,7 +32,14 @@
{{ $t("Shrink Database") }} ({{ databaseSizeDisplay }})
-
{{ $t("shrinkDatabaseDescription") }}
+
+
+ VACUUM
+
+
+ AUTO_VACUUM
+
+
Services\" search for \"notification\" to find your device/phone name.": "Спіс службаў абвестак можна знайсці ў Home Assistant у раздзеле \"Інструменты распрацоўніка > Службы\", выканаўшы пошук па слове \"абвестка\", каб знайсці назву вашага прылады/тэлефона.",
+ "Automations can optionally be triggered in Home Assistant:": "Пры жаданні аўтаматызацыю можна актываваць у Home Assistant.:",
+ "Trigger type:": "Тып трыгера:",
+ "Event type:": "Тып падзеі:",
+ "Event data:": "даныя падзеі:",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "Затым выберыце дзеянне, напрыклад, пераключыце сцэну на чырвоны індыкатар RGB..",
+ "Frontend Version": "Версія інтэрфейса",
+ "Frontend Version do not match backend version!": "Версія інтэрфейса не адпавядае версіі сервернай часткі!",
+ "backupOutdatedWarning": "Састарэла: гэтая функцыя рэзервовага капіявання больш не падтрымліваецца. Праз даданыя шмат функцый, яна не можа стварыць або аднавіць поўную рэзервовую копію.",
+ "backupRecommend": "Зрабіце рэзервовую копію таму або папцы з данымі (./data/) напрамую.",
+ "Optional": "Неабавязкова",
+ "or": "або",
+ "sameAsServerTimezone": "Аналагічна часавому поясу сервера",
+ "startDateTime": "Пачатковая дата і час",
+ "endDateTime": "Канчатковая дата і час",
+ "cronExpression": "Выраз для Cron",
+ "cronSchedule": "Расклад: ",
+ "invalidCronExpression": "Няправільны выраз Cron: {0}",
+ "recurringInterval": "Інтэрвал",
+ "Recurring": "Паўторны",
+ "strategyManual": "Актыўны/Неактыўны Ручным спосабам",
+ "warningTimezone": "Выкарыстоўваецца часавы пояс сервера",
+ "weekdayShortMon": "Пн",
+ "weekdayShortTue": "Аўт",
+ "weekdayShortWed": "Ср",
+ "weekdayShortThu": "Чт",
+ "weekdayShortFri": "Пт",
+ "weekdayShortSat": "Сб",
+ "weekdayShortSun": "Нд",
+ "dayOfWeek": "Дзень тыдня",
+ "dayOfMonth": "Дзень месяца",
+ "lastDay": "Апошні дзень",
+ "lastDay1": "Апошні дзень месяца",
+ "lastDay2": "Другі апошні дзень месяца",
+ "lastDay3": "Трэці апошні дзень месяца",
+ "maintenanceStatus-scheduled": "Запланавана(ы)",
+ "maintenanceStatus-unknown": "Невядома",
+ "lastDay4": "Чацвёрты апошні дзень месяца",
+ "No Maintenance": "Няма тэхабслугоўванняў",
+ "pauseMaintenanceMsg": "Вы ўпэўненыя, што хочаце паставіць на паўзу?",
+ "maintenanceStatus-under-maintenance": "На тэхабслугоўванні",
+ "maintenanceStatus-inactive": "Неактыўны",
+ "Display Timezone": "Паказаць часавы пояс",
+ "Server Timezone": "Часавы пояс сервера",
+ "statusPageMaintenanceEndDate": "Канец",
+ "IconUrl": "URL значка",
+ "Enable DNS Cache": "(Састарэла) Уключыць DNS кэш для манітораў HTTP(S)",
+ "Enable": "Уключыць",
+ "Disable": "Адключыць",
+ "enableNSCD": "Уключыць NSCD (Name Service Cache Daemon) для кэшавання ўсіх DNS-запытаў",
+ "chromeExecutable": "Выканаўчы файл Chrome/Chromium",
+ "chromeExecutableAutoDetect": "Аўтавызначэнне",
+ "chromeExecutableDescription": "Для карыстальнікаў Docker, калі Chromium яшчэ не ўсталяваны, можа спатрэбіцца некалькі хвілін для ўсталявання і адлюстравання выніку тэставання. Ён займае 1 ГБ дыскавага прастору.",
+ "dnsCacheDescription": "Гэта можа не працаваць на некаторых IPv6 асяроддзях, адключыце гэта, калі ў вас узнікаюць праблемы.",
+ "Single Maintenance Window": "Адзінае акно тэхабслугоўвання",
+ "Maintenance Time Window of a Day": "Суточны інтэрвал для тэхабслугоўвання",
+ "Effective Date Range": "Даты дзеяння (Неабавязкова)",
+ "Schedule Maintenance": "Запланаваць тэхабслугоўванне",
+ "Edit Maintenance": "Рэдагаваць тэхабслугоўванне",
+ "Date and Time": "Дата і час",
+ "DateTime Range": "Дыяпазон даты і часу",
+ "loadingError": "Немагчыма атрымаць даныя, калі ласка паспрабуйце пазней.",
+ "plugin": "Плагін | Плагіны",
+ "install": "Усталяваць",
+ "installing": "Усталяваецца",
+ "uninstall": "Выдаліць",
+ "uninstalling": "Выдаляецца",
+ "confirmUninstallPlugin": "Вы ўпэўнены, што хочаце выдаліць гэты плагін?",
+ "notificationRegional": "Рэгіянальны",
+ "Clone Monitor": "Копія",
+ "Clone": "Кланаваць",
+ "cloneOf": "Копія {0}",
+ "smtp": "Email (SMTP)",
+ "secureOptionNone": "Няма / STARTTLS (25, 587)",
+ "secureOptionTLS": "TLS (465)",
+ "Ignore TLS Error": "Ігнараваць памылкі TLS",
+ "From Email": "Ад каго",
+ "emailCustomisableContent": "Наладжвальны змест",
+ "smtpLiquidIntroduction": "Наступныя два поля з'яўляюцца шабланізаванымі з дапамогай мовы шаблонаў Liquid. Інструкцыі па іх выкарыстаньні прадстаўлены ў раздзеле {0}. Вось даступныя зменныя:",
+ "emailCustomSubject": "Свая тэма",
+ "leave blank for default subject": "пакіньце пустым для тэмы па змаўчаньні",
+ "emailCustomBody": "Карыстацкі аб'ект",
+ "leave blank for default body": "пакіньце пустым для аб'екта па змаўчаньні",
+ "emailTemplateServiceName": "Назва сэрвіса",
+ "emailTemplateHostnameOrURL": "Назва хоста або URL",
+ "emailTemplateStatus": "Статус",
+ "emailTemplateMonitorJSON": "аб'ект, які апісвае манітор",
+ "emailTemplateHeartbeatJSON": "аб'ект, які апісвае сігнал",
+ "emailTemplateMsg": "паведамленне апавешчання",
+ "emailTemplateLimitedToUpDownNotification": "даступны толькі для сігналаў UP/DOWN, у адваротным выпадку null",
+ "To Email": "Каму",
+ "smtpCC": "Копія",
+ "smtpBCC": "Схаваная копія",
+ "Discord Webhook URL": "Discord вэбхук URL",
+ "wayToGetDiscordURL": "Вы можаце стварыць яго ў наладах канала \"Налады -> Інтэграцыі -> Стварыць Вэбхук\"",
+ "Bot Display Name": "Адлюстраваная назва бота",
+ "Prefix Custom Message": "Свой прэфікс паведамлення",
+ "Hello @everyone is...": "Прывітанне {'@'}everyone гэта…",
+ "wayToGetTeamsURL": "Як стварыць URL вэбхука вы можаце даведацца тут - {0}.",
+ "wayToGetZohoCliqURL": "Вы можаце даведацца, як стварыць webhook URL тут {0}.",
+ "needSignalAPI": "Вам патрэбны кліент Signal з падтрымкай REST API.",
+ "Channel access token": "Токен доступу да канала",
+ "wayToCheckSignalURL": "Перайдзіце па гэтаму URL, каб даведацца, як наладзіць такі кліент:",
+ "Recipients": "Атрымальнікі",
+ "Access Token": "Токен доступу",
+ "Channel access token (Long-lived)": "Токен доступу да канала (даўгавечны)",
+ "Line Developers Console": "Кансоль распрацошчыкаў Line",
+ "Basic Settings": "Базавыя налады",
+ "User ID": "ID карыстальніка",
+ "Your User ID": "Ваш ідэнтыфікатар карыстальніка",
+ "Messaging API": "API паведамленняў",
+ "wayToGetLineChannelToken": "Спачатку зайдзіце ў {0}, стварыце правайдэра і канал (API паведамленняў), потым вы зможаце атрымаць токен доступу да канала і ID карыстальніка з вышэйзгаданых пунктаў меню.",
+ "Icon URL": "URL значка",
+ "aboutIconURL": "Вы можаце ўставіць спасылку на значок ў поле \"URL значка\" каб змяніць малюнак профілю па змаўчанні. Не выкарыстоўваецца, калі зададзена значок Emoji.",
+ "aboutMattermostChannelName": "Вы можаце перавызначыць канал па змаўчанні, у які вэбхук піша, уведаўшы імя канала ў поле \"Імя канала\". Гэта неабходна ўключыць у наладах вэбхука Mattermost. Напрыклад: #other-channel",
+ "dataRetentionTimeError": "Перыяд захавання павінен быць 0 або больш",
+ "infiniteRetention": "Выберыце 0 для бясконцага захавання.",
+ "confirmDeleteTagMsg": "Вы сапраўды хочаце выдаліць гэты тэг? Маніторы, звязаныя з гэтым тэгам не будуць выдаленыя.",
+ "enableGRPCTls": "Дазволіць адпраўляць gRPC запыт праз TLS злучэнне",
+ "grpcMethodDescription": "Імя метада пераўтвараецца ў фармат camelCase, напрыклад, sayHello, check і г.д.",
+ "acceptedStatusCodesDescription": "Выберыце коды статусаў для вызначэння даступнасці службы.",
+ "deleteMonitorMsg": "Вы сапраўды хочаце выдаліць гэты манітор?",
+ "deleteMaintenanceMsg": "Вы сапраўды хочаце выдаліць гэтае тэхабслугоўванне?",
+ "deleteNotificationMsg": "Вы сапраўды хочаце выдаліць гэтую абвестку для ўсіх манітораў?",
+ "dnsPortDescription": "Па змаўчанні порт DNS сервера - 53. Мы можаце змяніць яго ў любы час.",
+ "resolverserverDescription": "Cloudflare з'яўляецца серверам па змаўчанні. Вы заўсёды можаце змяніць гэты сервер.",
+ "rrtypeDescription": "Выберыце тып рэсурснага запісу, які вы хочаце адсочваць",
+ "pauseMonitorMsg": "Вы сапраўды хочаце прыпыніць?",
+ "enableDefaultNotificationDescription": "Для кожнага новага манітора гэта апавяшчэнне будзе ўключана па змаўчанні. Вы ўсё яшчэ можаце адключыць апавяшчэнні ў кожным маніторы асобна.",
+ "clearEventsMsg": "Вы сапраўды хочаце выдаліць усю статыстыку падзей гэтага манітора?",
+ "clearHeartbeatsMsg": "Вы сапраўды хочаце выдаліць усю статыстыку апытанняў гэтага манітора?",
+ "confirmClearStatisticsMsg": "Вы сапраўды хочаце выдаліць УСЮ статыстыку?",
+ "importHandleDescription": "Выберыце \"Прапусціць існуючыя\", калі вы хочаце прапусціць кожны манітор або апавяшчэнне з такой жа назвай. \"Перазапісаць\" выдаліць кожны існуючы манітор або апавяшчэнне і дадаць зноў. Варыянт \"Не правяраць\" прымусова адновіць усе маніторы і апавяшчэнні, нават калі яны ўжо існуюць.",
+ "twoFAVerifyLabel": "Увядзіце свой токен, каб праверыць працу 2FA:",
+ "tokenValidSettingsMsg": "Токен сапраўдны! Цяпер вы можаце захаваць налады 2FA.",
+ "confirmImportMsg": "Вы сапраўды хочаце аднавіць рэзервовую копію? Пераканайцеся, што вы выбралі правільны варыянт імпарту.",
+ "confirmEnableTwoFAMsg": "Вы сапраўды хочаце ўключыць 2FA?",
+ "confirmDisableTwoFAMsg": "Вы сапраўды хочаце адключыць 2FA?",
+ "affectedStatusPages": "Паказваць абвестку аб тэхабслугоўванні на выбраных старонках статуса",
+ "atLeastOneMonitor": "Выберыце больш за адзін затрагаваны манітор",
+ "passwordNotMatchMsg": "Уведзеныя паролі не супадаюць.",
+ "notificationDescription": "Прымацаваць абвесткі да манітораў.",
+ "keywordDescription": "Пошук слова ў чыстым HTML або ў JSON-адказе (адчувальны да рэгістра).",
+ "invertKeywordDescription": "Шукаць, каб ключавое слова адсутнічала, а не прысутнічала.",
+ "jsonQueryDescription": "Выконайце json-запыт да адказу і праверце наяўнасць чаканага значэння (вяртанае значэнне будзе пераўтворана ў радок для параўнання). Глядзіце {0} для атрымання дакументацыі па мове запытаў. А трэніравацца вы можаце {1}.",
+ "backupDescription": "Вы можаце захаваць рэзервовую копію ўсіх манітораў і апавешчанняў у выглядзе JSON-файла.",
+ "backupDescription2": "Важна: гісторыя і падзеі захаваныя не будуць.",
+ "backupDescription3": "Важныя даныя, такія як токены апавешчанняў, дадаюцца пры экспарце, таму захоўвайце файлы ў бяспечным месцы.",
+ "endpoint": "канчатковая кропка",
+ "octopushAPIKey": "\"{API key}\" з даных уліковых запісаў HTTP API ў панэлі кіравання",
+ "octopushLogin": "\"Login\" з даных уліковых запісаў HTTP API ў панэлі кіравання",
+ "promosmsLogin": "Лагін API",
+ "promosmsPassword": "Пароль API",
+ "pushoversounds pushover": "Pushover (па змаўчанні)",
+ "pushoversounds bike": "Веласіпед",
+ "pushoversounds bugle": "Горн",
+ "pushoversounds cashregister": "Касавы апарат",
+ "pushoversounds classical": "Класічны",
+ "pushoversounds cosmic": "Касмічны",
+ "pushoversounds falling": "Падаючы",
+ "pushoversounds intermission": "Антракт",
+ "pushoversounds magic": "Магія",
+ "pushoversounds mechanical": "Механічны",
+ "pushoversounds pianobar": "Піяна-бар",
+ "pushoversounds siren": "Сірэна",
+ "pushoversounds spacealarm": "Касмічная сігналізацыя",
+ "pushoversounds tugboat": "Буксір",
+ "pushoversounds alien": "Іншаплянетная трывога (доўгая)",
+ "pushoversounds persistent": "Настойлівы (доўгі)",
+ "pushoversounds echo": "Pushover Эха (доўгае)",
+ "pushoversounds updown": "Уверх уніз (доўгае)",
+ "pushoversounds vibrate": "Толькі вібрацыя",
+ "pushoversounds none": "Няма (ціха)",
+ "pushyAPIKey": "Сакрэтны ключ API",
+ "pushyToken": "Токен прылады",
+ "apprise": "Apprise (Падтрымка 50+ сэрвісаў абвестак)",
+ "GoogleChat": "Google Chat (толькі Google Workspace)",
+ "wayToGetKookGuildID": "Уключыце \"Рэжым распрацошчыка\" у наладах Kook, а затым націсніце правай кнопкай на гільдыю, каб скапіраваць яе ID",
+ "Guild ID": "Ідэнтыфікатар гільдыі",
+ "User Key": "Ключ карыстальніка",
+ "Message Title": "Загаловак паведамлення",
+ "Notification Sound": "Гук абвесткі",
+ "More info on:": "Больш інфармацыі на: {0}",
+ "pushoverDesc1": "Экстрэмальны прыярытэт (2) мае таймаўт паўтору па змаўчанні 30 секунд і сканчаецца праз 1 гадзіну.",
+ "pushoverDesc2": "Калі вы хочаце адпраўляць абвесткі розным прыладам, неабходна запоўніць поле Прылада.",
+ "pushoverMessageTtl": "TTL паведамлення (у секундах)",
+ "SMS Type": "Тып SMS",
+ "octopushTypePremium": "Преміум (Хуткі - рэкамендуецца для аляртаў)",
+ "octopushTypeLowCost": "Танны (Павольны - часам блакуецца аператарамі)",
+ "apiCredentials": "API рэквізіты",
+ "checkPrice": "Тарыфы {0}:",
+ "octopushLegacyHint": "Вы выкарыстоўваеце старую версію Octopush (2011-2020) ці новую?",
+ "Check octopush prices": "Тарыфы Octopush {0}.",
+ "octopushPhoneNumber": "Нумар тэлефона (міжнародны фармат напр. +48123456789) ",
+ "octopushSMSSender": "Імя адпраўніка SMS: 3-11 сімвалаў алфавіта, лічбаў і прабелаў (a-zA-Z0-9)",
+ "LunaSea Device ID": "ID прылады LunaSea",
+ "Apprise URL": "URL апавяшчэння",
+ "Example:": "Прыклад: {0}",
+ "Read more:": "Падрабязней: {0}",
+ "Status:": "Статус: {0}",
+ "Strategy": "Стратэгія",
+ "Free Mobile User Identifier": "Бясплатны мабільны ідэнтыфікатар карыстальніка",
+ "Free Mobile API Key": "API ключ Free Mobile",
+ "Enable TLS": "Уключыць TLS",
+ "Proto Service Name": "Назва службы Proto",
+ "Proto Method": "Метад Proto",
+ "Proto Content": "Змест Proto",
+ "Economy": "Эканомія",
+ "Lowcost": "Бюджэтны",
+ "high": "высокі",
+ "SendKey": "SendKey",
+ "SMSManager API Docs": "Дакументацыя да API SMSManager ",
+ "Gateway Type": "Тып шлюза",
+ "You can divide numbers with": "Вы можаце дзяліць лічбы з",
+ "Base URL": "Базавы URL",
+ "goAlertInfo": "GoAlert — гэта праграма з адкрытым зыходным кодам для складання раскладу выклікаў, аўтаматычнай эскаляцыі і абвестак (напрыклад, SMS або галасавых выклікаў). Аўтаматычна прывабляйце патрэбнага чалавека, патрэбным спосабам і ў патрэбны час! {0}",
+ "goAlertIntegrationKeyInfo": "Атрымаць агульны ключ інтэграцыі API для службы ў гэтым фармаце \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" звычайна значэнне параметра токена скапіяванага URL.",
+ "AccessKeyId": "ID ключа доступу",
+ "SecretAccessKey": "Сакрэтны ключ доступу",
+ "PhoneNumbers": "Нумары тэлефонаў",
+ "TemplateCode": "Код шаблону",
+ "SignName": "SignName",
+ "Sms template must contain parameters: ": "Шаблон SMS павінен змяшчаць параметры: ",
+ "Bark API Version": "Версія Bark API",
+ "Bark Endpoint": "Канчатковая кропка Bark",
+ "Bark Group": "Bark Group",
+ "Bark Sound": "Bark Sound",
+ "WebHookUrl": "WebHookUrl",
+ "SecretKey": "Сакрэтны Ключ",
+ "For safety, must use secret key": "Для бяспекі, неабходна выкарыстоўваць сакрэтны ключ",
+ "Mentioning": "Згадванне",
+ "Don't mention people": "Не згадваць людзей",
+ "Mention group": "Згадаць {group}",
+ "Device Token": "Токен прылады",
+ "Platform": "Платформа",
+ "High": "Высокі",
+ "Retry": "Паўторыць",
+ "Topic": "Тэма",
+ "WeCom Bot Key": "WeCom Bot Key",
+ "Setup Proxy": "Налада Проксі",
+ "Proxy Protocol": "Пратакол Проксі",
+ "Proxy Server": "Проксі",
+ "Proxy server has authentication": "Проксі мае аўтэнтыфікацыю",
+ "promosmsTypeEco": "SMS ECO - танкі і павольны, часта перагружаны. Толькі для атрымальнікаў з Польшчы.",
+ "promosmsTypeFlash": "SMS FLASH - паведамленні аўтаматычна з'яўляюцца на прыладзе атрымальніка. Толькі для атрымальнікаў з Польшчы.",
+ "promosmsTypeFull": "SMS FULL - прэміум-узровень SMS, можна выкарыстоўваць сваё імя адпраўніка (папярэдне зарэгістраваў яго). Надзейна для аляртаў.",
+ "promosmsTypeSpeed": "SMS SPEED - найвышэйшы прыярытэт у сістэме. Вельмі хутка і надзейна, але вельмі дорага (у два разы дорага, чым SMS FULL).",
+ "promosmsPhoneNumber": "Нумар тэлефона (для атрымальнікаў з Польшчы можна прапусціць код рэгіёна)",
+ "promosmsSMSSender": "Імя адпраўніка SMS: Зарэгістраванае або адно з імён па змаўчанні: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
+ "promosmsAllowLongSMS": "Дазволіць доўгія SMS",
+ "Feishu WebHookUrl": "Feishu WebHookURL",
+ "matrixHomeserverURL": "URL сервера (разам з http(s):// і па жаданні порт)",
+ "Internal Room Id": "Унутраны ID пакою",
+ "matrixDesc1": "Унутраны ID пакою можна знайсці ў Падрабязнасцях у параметрах канала вашага кліента Matrix. Ён павінен выглядаць прыблізна так !QMdRCpUIfLwsfjxye6:home.server.",
+ "matrixDesc2": "Рэкамендуецца стварыць новага карыстальніка і не выкарыстоўваць токен доступу асабістага карыстальніка Matrix, т.к. гэта ўяўляе за сабой поўны доступ да акаўнта і да пакояў, у якіх вы знаходзіцеся. Замест гэтага стварыце новага карыстальніка і запрасіце яго толькі ў той пакой, у якім вы хочаце атрымліваць абвесткі. Токен доступу можна атрымаць, выканаўшы каманду {0}",
+ "Channel Name": "Назва канала",
+ "Notify Channel": "Канал апавешчанняў",
+ "aboutNotifyChannel": "Апавяшчэнне аб канале выкліча настольнае або мабільнае апавяшчэнне для ўсіх удзельнікаў канала, незалежна ад таго, ці ўстаноўлена іх даступнасць як актыўная або адсутная.",
+ "Uptime Kuma URL": "Uptime Kuma URL",
+ "setup a new monitor group": "наладзіць новую групу манітораў",
+ "openModalTo": "адкрыць мадальнае акно {0}",
+ "Add a domain": "Дадаць дамен",
+ "Remove domain": "Выдаліць дамен '{0}'",
+ "Icon Emoji": "Emoji",
+ "signalImportant": "ВАЖНА: Нельга змешваць у Атрымальніках групы і нумары!",
+ "aboutWebhooks": "Больш інфармацыі аб вэбхуках: {0}",
+ "aboutChannelName": "Увядзіце назву канала ў поле {0} Назва канала, калі вы хочаце абысці канал вэбхука. Напрыклад: #other-channel",
+ "aboutKumaURL": "Калі поле Uptime Kuma URL у наладах застанецца пустым, па змаўчанні будзе выкарыстоўвацца спасылка на праект на GitHub.",
+ "smtpDkimSettings": "DKIM Налады",
+ "smtpDkimDesc": "Калі ласка, азнаёмцеся з {0} Nodemailer DKIM для выкарыстання.",
+ "documentation": "дакументацыяй",
+ "smtpDkimDomain": "Назва дамена",
+ "smtpDkimKeySelector": "Ключ",
+ "smtpDkimPrivateKey": "Прыватны ключ",
+ "smtpDkimHashAlgo": "Алгарытм хэша (неабавязкова)",
+ "smtpDkimheaderFieldNames": "Загаловак ключоў для подпісу (неабавязкова)",
+ "smtpDkimskipFields": "Загаловак ключоў не для подпісу (опцыянальна)",
+ "wayToGetPagerDutyKey": "Вы можаце гэта атрымаць, перайшоўшы ў Сервіс -> Каталог сервісаў -> (Выберыце сервіс) -> Інтэграцыі -> Дадаць інтэграцыю. Тут вы можаце шукаць «Events API V2». Падрабязней {0}",
+ "Integration Key": "Ключ інтэграцыі",
+ "Integration URL": "URL інтэграцыі",
+ "Auto resolve or acknowledged": "Аўтаматычнае развязванне або пацверджанне",
+ "do nothing": "нічога не рабіць",
+ "auto acknowledged": "аўтаматычна пацверджана",
+ "auto resolve": "аўтаматычна развязана",
+ "alertaApiEndpoint": "Канчатковая кропка API",
+ "alertaEnvironment": "Асяроддзе",
+ "alertaApiKey": "Ключ API",
+ "alertaAlertState": "Стан алярта",
+ "alertaRecoverState": "Стан аднаўлення",
+ "serwersmsAPIUser": "API Карыстальнік (уключаючы прэфікс webapi_)",
+ "serwersmsAPIPassword": "API Пароль",
+ "serwersmsPhoneNumber": "Нумар тэлефона",
+ "serwersmsSenderName": "SMS Імя адпраўніка (зарэгістравана праз карыстальніцкі партал)",
+ "smseagleTo": "Нумар(ы) тэлефона",
+ "smseagleGroup": "Назва(ы) групы тэлефоннай кнігі",
+ "smseagleContact": "Імёны кантактаў тэлефоннай кнігі",
+ "smseagleRecipientType": "Тып атрымальніка",
+ "smseagleRecipient": "Атрымальнік(і) (калі множнасць, павінны быць раздзеленыя коскай)",
+ "smseagleToken": "Токен доступу API",
+ "smseagleUrl": "URL вашага прылады SMSEagle",
+ "smseagleEncoding": "Адправіць у Unicode",
+ "smseaglePriority": "Прыярытэт паведамлення (0-9, па змаўчанні = 0)",
+ "Recipient Number": "Нумар атрымальніка",
+ "From Name/Number": "Імя/нумар адпраўніка",
+ "Leave blank to use a shared sender number.": "Пакіньце пустым, каб выкарыстоўваць агульны нумар адпраўніка.",
+ "Octopush API Version": "Версія API Octopush",
+ "Legacy Octopush-DM": "Састарэлы Octopush-DM",
+ "ntfy Topic": "Тэма ntfy",
+ "Server URL should not contain the nfty topic": "URL сервера не павінен утрымліваць тэму nfty",
+ "onebotHttpAddress": "HTTP-адрас OneBot",
+ "onebotMessageType": "Тып паведамлення OneBot",
+ "onebotGroupMessage": "Група",
+ "onebotPrivateMessage": "Асабістае",
+ "onebotUserOrGroupId": "ID групы/карыстальніка",
+ "onebotSafetyTips": "Для бяспекі неабходна ўсталяваць токен доступу",
+ "PushDeer Server": "Сервер PushDeer",
+ "pushDeerServerDescription": "Пакіньце пустым для выкарыстання афіцыйнага сервера",
+ "PushDeer Key": "Ключ PushDeer",
+ "wayToGetClickSendSMSToken": "Вы можаце атрымаць імя карыстальніка API і ключ API з {0} .",
+ "Custom Monitor Type": "Сваёродны тып манітора",
+ "Google Analytics ID": "ID Google Аналітыкі",
+ "Edit Tag": "Рэдагаваць тэг",
+ "Server Address": "Адрас сервера",
+ "Learn More": "Даведацца больш",
+ "Body Encoding": "Тып зместу запыту.(JSON або XML)",
+ "API Keys": "API Ключы",
+ "Expiry": "Сканчэнне",
+ "Continue": "Працягнуць",
+ "Add Another": "Дадаць яшчэ",
+ "Key Added": "Ключ дададзены",
+ "apiKeyAddedMsg": "Ваш ключ API дададзены. Звярніце ўвагу на гэтае паведамленне, так як яно адлюстроўваецца адзін раз.",
+ "Add API Key": "Дадаць API ключ",
+ "No API Keys": "Няма ключоў API",
+ "apiKey-active": "Актыўны",
+ "apiKey-expired": "Скончыўся",
+ "apiKey-inactive": "Неактыўны",
+ "Expires": "Сканчаецца",
+ "disableAPIKeyMsg": "Вы ўпэўнены, што хочаце адключыць гэты API ключ?",
+ "deleteAPIKeyMsg": "Вы ўпэўнены, што хочаце выдаліць гэты ключ API?",
+ "Generate": "Згенераваць",
+ "pagertreeIntegrationUrl": "URL-адрас інтэграцыі",
+ "pagertreeUrgency": "Тэрміновасць",
+ "pagertreeSilent": "Ціхі",
+ "pagertreeLow": "Нізкі",
+ "pagertreeMedium": "Сярэдні",
+ "pagertreeHigh": "Высокі",
+ "pagertreeCritical": "Крытычны",
+ "pagertreeResolve": "Аўтаматычнае развязванне",
+ "pagertreeDoNothing": "Нічога не рабіць",
+ "wayToGetPagerTreeIntegrationURL": "Пасля стварэння інтэграцыі Uptime Kuma ў PagerTree скапіруйце файл {Endpoint}. Гл. поўную інфармацыю {0}",
+ "lunaseaTarget": "Мэта",
+ "lunaseaDeviceID": "Ідэнтыфікатар прылады",
+ "lunaseaUserID": "Ідэнтыфікатар карыстальніка",
+ "ntfyAuthenticationMethod": "Метад уваходу",
+ "ntfyPriorityHelptextAllEvents": "Усе падзеі адпраўляюцца з максімальным прыярытэтам",
+ "ntfyPriorityHelptextAllExceptDown": "Усе падзеі адпраўляюцца з гэтым прыярытэтам, акрамя {0}-падзеяў, якія маюць прыярытэт {1}",
+ "ntfyUsernameAndPassword": "Лагін і пароль",
+ "twilioAccountSID": "SID уліковага запісу",
+ "twilioApiKey": "Ключ API (неабавязкова)",
+ "twilioAuthToken": "Токен аўтарызацыі / Сакрэтны API ключ",
+ "twilioFromNumber": "З нумара",
+ "twilioToNumber": "На нумар",
+ "Monitor Setting": "Налада манітора {0}",
+ "Show Clickable Link": "Паказаць націскальную спасылку",
+ "Show Clickable Link Description": "Калі пазначаны флажок, усе, хто мае доступ да гэтай старонкі стану, могуць мець доступ да URL-адрасу манітора.",
+ "Open Badge Generator": "Адкрыць генератар значкаў",
+ "Badge Generator": "Генератар значкоў для {0}",
+ "Badge Type": "Тып значка",
+ "Badge Duration (in hours)": "Тэрмін дзеяння значка (у гадзінах)",
+ "Badge Label": "Надпіс для значка",
+ "Badge Prefix": "Значэнне прэфікса значка",
+ "Badge Suffix": "Значэнне суфікса значка",
+ "Badge Label Color": "Колер надпісу значка",
+ "Badge Color": "Колер значка",
+ "Badge Label Prefix": "Прэфікс надпісу для значка",
+ "Badge Preview": "Папярэдні прагляд значка",
+ "Badge Label Suffix": "Суфікс надпісу для значка",
+ "Badge Up Color": "Колер значка для статусу \"Даступны\"",
+ "Badge Down Color": "Колер значка для статусу \"Недаступны\"",
+ "Badge Pending Color": "Колер значка для статусу \"Чаканне\"",
+ "Badge Maintenance Color": "Колер значка для статусу \"Тэхабслугоўванне\"",
+ "Badge Warn Color": "Колер значка для папярэджання",
+ "Badge Warn Days": "Значок для \"дзён папярэджання\"",
+ "Badge Down Days": "Значок для \"дзён недаступнасці\"",
+ "Badge Style": "Стыль значка",
+ "Badge value (For Testing only.)": "Значэнне значка (толькі для тэставання)",
+ "Group": "Група",
+ "Monitor Group": "Група манітораў",
+ "monitorToastMessagesLabel": "Апавяшчэнні",
+ "monitorToastMessagesDescription": "Паведамленні для манітораў знікаюць праз зададзены час у секундах. Значэнне -1 адключае тайм-аўт. Значэнне 0 адключае апавяшчэнні.",
+ "toastErrorTimeout": "Таймаут для апавешчанняў пра памылкі",
+ "toastSuccessTimeout": "Таймаут для апавешчанняў пра паспяховасьць",
+ "Enter the list of brokers": "Увядзіце спіс брокераў",
+ "Kafka Brokers": "Kafka Brokers",
+ "Press Enter to add broker": "Націсніце Enter, каб дадаць брокера",
+ "Kafka Topic Name": "Назва тэмы Kafka",
+ "Kafka Producer Message": "Паведамленне продюсера Kafka",
+ "Enable Kafka SSL": "Уключэнне пратаколу Kafka SSL",
+ "Enable Kafka Producer Auto Topic Creation": "Уключэнне аўтаматычнага стварэння тэм у Kafka Producer",
+ "Kafka SASL Options": "Параметры SASL у Kafka",
+ "Mechanism": "Механізм",
+ "Pick a SASL Mechanism...": "Выберыце механізм SASL…",
+ "Authorization Identity": "Аўтарызацыйная ідэнтычнасць",
+ "AccessKey Id": "AccessKey Id",
+ "Secret AccessKey": "Сакрэтны ключ доступу",
+ "Session Token": "Токен сеансу",
+ "noGroupMonitorMsg": "Не даступна. Спачатку стварыце групу манітораў.",
+ "Close": "Закрыць",
+ "Request Body": "Цела запыту",
+ "wayToGetFlashDutyKey": "Вы можаце перайсці на старонку \"Канал\" -> (Выберыце канал) -> \"Інтэграцыі\" -> \"Дадаць новую старонку інтэграцыі\", дадаць \"Карыстацкую падзею\", каб атрымаць push-адрас, скапіяваць ключ інтэграцыі ў адрас. Для атрымання дадатковай інфармацыі, калі ласка, наведайце",
+ "FlashDuty Severity": "Сур'ёзнасць",
+ "nostrRecipients": "Адкрытыя ключы атрымальнікаў (npub)",
+ "nostrRelaysHelp": "Адзін URL-адрас рэтрансляцыі ў кожным радку",
+ "nostrSender": "Закрыты ключ адпраўшчыка (nsec)",
+ "nostrRecipientsHelp": "фармат npub, па адным у радку",
+ "showCertificateExpiry": "Паказваць пратэрмінаваны сертыфікат",
+ "noOrBadCertificate": "Адсутнасць сертыфіката",
+ "gamedigGuessPortDescription": "Порт, які выкарыстоўваецца пратаколам Valve Server Query Protocol, можа адрознівацца ад порта кліента. Паспрабуйце гэта, калі манітор не можа падключыцца да сервера.",
+ "authUserInactiveOrDeleted": "Карыстальнік неактыўны або выдалены.",
+ "authInvalidToken": "Няправільны токен.",
+ "authIncorrectCreds": "Няправільнае імя карыстальніка або пароль.",
+ "2faAlreadyEnabled": "2FA ўжо ўключана.",
+ "2faEnabled": "2FA ўключана.",
+ "2faDisabled": "2FA адключана.",
+ "successAdded": "Паспяхова дададзена.",
+ "successResumed": "Паспяхова прадоўжана.",
+ "successPaused": "Паспяхова спынена.",
+ "successDeleted": "Паспяхова выдалена.",
+ "successEdited": "Паспяхова зменена.",
+ "successAuthChangePassword": "Пароль паспяхова абноўлены.",
+ "successBackupRestored": "Рэзервовая копія паспяхова адноўлена.",
+ "successDisabled": "Паспяхова адключана.",
+ "successEnabled": "Паспяхова ўключана.",
+ "tagNotFound": "Тэг не знойдзены.",
+ "foundChromiumVersion": "Выяўлены Chromium/Chrome. Версіі: {0}",
+ "Remote Browsers": "Аддаленыя браўзеры",
+ "Remote Browser": "Аддалены браўзер",
+ "Add a Remote Browser": "Дадаць аддалены браўзер",
+ "Remote Browser not found!": "Аддалены браўзер не знойдзены!",
+ "remoteBrowsersDescription": "Аддаленыя браўзеры — альтэрнатыва лакальнаму запуску Chromium. Усталюйце такі сервіс, як browserless.io, або падлучыцеся да свайго ўласнага",
+ "self-hosted container": "кантэйнер, які хостыцца самастойна",
+ "remoteBrowserToggle": "Па змаўчаньні Chromium працуе ўнутры кантэйнера Uptime Kuma. Вы можаце выкарыстоўваць аддалены браўзер, пераключыўшы гэты пераключальнік.",
+ "useRemoteBrowser": "Выкарыстоўваць удалены браўзер",
+ "deleteRemoteBrowserMessage": "Вы ўпэўнены, што хочаце выдаліць гэты удалены браўзер для ўсіх манітораў?",
+ "Browser Screenshot": "Скрыншот браўзера",
+ "wayToGetSevenIOApiKey": "Зайдзіце на панэль кіравання па адрасе app.seven.io > распрацоўшчык > {api key} > зялёная кнопка дадаць",
+ "senderSevenIO": "Адпраўляе нумар або імя",
+ "receiverSevenIO": "Нумар атрымання",
+ "apiKeySevenIO": "SevenIO {API Key}",
+ "receiverInfoSevenIO": "Калі нумар атрымальніка не знаходзіцца ў Германіі, то перад нумарам неабходна дадаць код краіны (напрыклад, для ЗША код краіны 1, тады выкарыстоўвайце 117612121212, замест 017612121212)",
+ "wayToGetWhapiUrlAndToken": "Вы можаце атрымаць {API URL} і токен, зайдзяўшы ў патрэбны вам канал з {0}",
+ "whapiRecipient": "Нумар тэлефона / ID кантакта / ID групы",
+ "documentationOf": "{0} Дакументацыя",
+ "What is a Remote Browser?": "Што такое аддалены браўзер?",
+ "wayToGetHeiiOnCallDetails": "Як атрымаць ID трыгера і {API Keys}, напісана ў {documentation}",
+ "callMeBotGet": "Тут вы можаце стварыць {endpoint} для {0}, {1} і {2}. Майце на ўвазе, што вы можаце атрымаць абмежаванне па хуткасці. Абмежаванні па хуткасці выглядаюць наступным чынам: {3}",
+ "gtxMessagingApiKeyHint": "Вы можаце знайсці свой {API key} на старонцы: Мае уліковыя запісы маршрутызацыі > Паказаць інфармацыю аб уліковым запісе > Уліковыя даныя API > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "Нумар тэлефона / Адрас крыніцы шляху перадачы (АІПП)",
+ "To Phone Number": "На нумар тэлефона",
+ "gtxMessagingToHint": "Міжнародны фармат, з «+» ({e164}, {e212} або {e214})",
+ "Alphanumeric (recommended)": "Літарна-лічбавая (рэкамендуецца)",
+ "Telephone number": "Нумар тэлефона",
+ "cellsyntOriginatortypeAlphanumeric": "Літарна-лічбавы радок (не больш за 11 літарна-лічбавых сімвалаў). Атрымальнікі не могуць адказаць на гэта паведамленне.",
+ "cellsyntOriginatortypeNumeric": "Лічбавае значэнне (не больш за 15 лічбаў) з нумарам тэлефона ў міжнародным фармаце без 00 ў пачатку (напрыклад, нумар Вялікабрытаніі 07920 110 000 павінен быць заданы, як 447920110000). Атрымальнікі могуць адказаць на паведамленне.",
+ "Originator": "Крыніца",
+ "cellsyntOriginator": "Бачны на мабільным тэлефоне атрымальніка як адпраўшчыка паведамлення. Дапушчальныя значэнні і функцыя залежаць ад параметра {originatortype}.",
+ "cellsyntDestination": "Нумар тэлефона атрымальніка ў міжнародным фармаце з 00 ў пачатку, за якім следуе код краіны, напрыклад, 00447920110000 для нумара Вялікабрытаніі 07920 110 000 (не больш за 17 лічбаў у суме). Не больш за 25000 атрымальнікаў, раздзеленых коскамі, на адзін HTTP-запыт.",
+ "Allow Long SMS": "Дазволіць доўгія SMS",
+ "cellsyntSplitLongMessages": "Раздзеляць доўгія паведамленні на 6 частак. 153 x 6 = 918 сімвалаў.",
+ "max 15 digits": "макс. 15 лічбаў",
+ "max 11 alphanumeric characters": "максімум 11 літарна-лічбавых сімвалаў",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Увядзіце {Hostname} сервера, да якога вы хочаце падключыцца, або {localhost}, калі вы хочаце выкарыстоўваць {local_mta}",
+ "Saved.": "Захавана.",
+ "wayToWriteWhapiRecipient": "Нумар тэлефона з міжнародным прэфіксам, але без знака плюс у пачатку ({0}), ідэнтыфікатара кантакта ({1}) або ідэнтыфікатара групы ({2}).",
+ "gtxMessagingFromHint": "На мабільных тэлефонах атрымальнікі бачаць АІПП як адпраўшчыка паведамлення. Дапускаецца выкарыстаньне да 11 літарна-лічбавых сімвалаў, шорткода, мясцовага доўгага кода або міжнародных нумароў ({e164}, {e212} або {e214})",
+ "Send to channel": "Адправіць у канал",
+ "threadForumPostID": "Трэд / ID паста",
+ "whatHappensAtForumPost": "Стварыць новы пост на форуме. Гэта НЕ размяшчае паведамленні ў існуючым пасце. Для публікацыі ў існуючай публікацыі выкарыстоўвайце \"{option}\"",
+ "now": "зараз",
+ "-year": "-год"
+}
diff --git a/src/lang/bg-BG.json b/src/lang/bg-BG.json
index 25d24c24a..63af43da0 100644
--- a/src/lang/bg-BG.json
+++ b/src/lang/bg-BG.json
@@ -77,7 +77,7 @@
"Save": "Запази",
"Notifications": "Известия",
"Not available, please setup.": "Не са налични. Моля, настройте.",
- "Setup Notification": "Настрой известие",
+ "Setup Notification": "Настройка на известие",
"Light": "Светла",
"Dark": "Тъмна",
"Auto": "Автоматично",
@@ -146,7 +146,7 @@
"Options": "Опции",
"Keep both": "Запази двете",
"Verify Token": "Провери токен код",
- "Setup 2FA": "Настройка 2FA",
+ "Setup 2FA": "Настройка на 2FA",
"Enable 2FA": "Активирай 2FA",
"Disable 2FA": "Деактивирай 2FA",
"2FA Settings": "Настройка за 2FA",
@@ -312,7 +312,6 @@
"PasswordsDoNotMatch": "Паролите не съвпадат.",
"Current User": "Текущ потребител",
"recent": "Скорошни",
- "shrinkDatabaseDescription": "Инициира \"VACUUM\" за \"SQLite\" база данни. Ако Вашата база данни е създадена след версия 1.10.0, \"AUTO_VACUUM\" функцията е активна и това действие не е нужно.",
"Done": "Готово",
"Info": "Информация",
"Security": "Сигурност",
@@ -403,7 +402,7 @@
"Retry": "Повтори",
"Topic": "Тема",
"WeCom Bot Key": "WeCom бот ключ",
- "Setup Proxy": "Настрой прокси",
+ "Setup Proxy": "Настройка на прокси",
"Proxy Protocol": "Прокси протокол",
"Proxy Server": "Прокси сървър",
"Proxy server has authentication": "Прокси сървърът е с удостоверяване",
@@ -896,10 +895,10 @@
"DockerHostRequired": "Моля, задайте \"Docker\" хоста за този монитор.",
"Browser Screenshot": "Екранна снимка на браузър",
"remoteBrowserToggle": "По подразбиране Chromium работи в контейнера Uptime Kuma. Можете да използвате отдалечен браузър, като превключите този ключ.",
- "remoteBrowsersDescription": "Отдалечените браузъри са алтернатива на локалното стартиране на Chromium. Настройте с услуга като browserless.io или свържете с вашата собствена",
+ "remoteBrowsersDescription": "Отдалечените браузъри са алтернатива на локалното стартиране на Chromium. Настройте с услуга като \"browserless.io\" или свържете с Вашата собствена",
"Remove the expiry notification": "Премахни деня за известяване при изтичане",
"Add a new expiry notification day": "Добави нов ден за известяване при изтичане",
- "setup a new monitor group": "настройване на нова група от монитори",
+ "setup a new monitor group": "настройка на нова група от монитори",
"openModalTo": "отвори модален прозорец към {0}",
"Add a domain": "Добави домейн",
"Remove domain": "Премахни домейн '{0}'",
@@ -972,5 +971,152 @@
"Create new forum post": "Създай нова публикация във форум",
"postToExistingThread": "Публикувай в съществуваща тема/публикация във форум",
"forumPostName": "Име на публикацията във форума",
- "threadForumPostID": "ID на публикация в темата/форум"
+ "threadForumPostID": "ID на публикация в темата/форум",
+ "smspartnerApiurl": "Можете да намерите вашия API ключ в таблото на {0}",
+ "smspartnerPhoneNumber": "Телефон номер(а)",
+ "smspartnerPhoneNumberHelptext": "Номерът задължително е в международен формат {0}, {1}. Отделните номера трябва да бъдат разделени посредством {2}",
+ "smspartnerSenderName": "Име на изпращащия на SMS",
+ "smspartnerSenderNameInfo": "Трябва да е между 3..=11 стандартни знака",
+ "wayToGetThreemaGateway": "Можете да се регистрирате за Threema Gateway {0}.",
+ "threemaRecipient": "Получател",
+ "threemaRecipientType": "Тип получател",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Телефонен номер",
+ "threemaRecipientTypeEmail": "Имейл адрес",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaSenderIdentityFormat": "8 знака, обикновено започва с *",
+ "threemaApiAuthenticationSecret": "Gateway-ID Тайна фраза",
+ "threemaRecipientTypeIdentityFormat": "8 знака",
+ "threemaRecipientTypePhoneFormat": "E.164, без водещ +",
+ "threemaBasicModeInfo": "Забележка: Тази интеграция използва Threema Gateway в основен режим (сървърно базирано криптиране). Допълнителни подробности можете да намерите {0}.",
+ "apiKeysDisabledMsg": "API ключовете са деактивирани, защото удостоверяването е деактивирано.",
+ "jsonQueryDescription": "Анализира и извлича конкретни данни от JSON отговора на сървъра, използвайки JSON заявка или чрез \"$\" за необработения отговор, ако не очаква JSON. След това резултатът се сравнява с очакваната стойност като низове. Вижте {0} за документация и използвайте {1}, за да експериментирате със заявки.",
+ "starts with": "започва с",
+ "less than or equal to": "по-малко или равно на",
+ "now": "сега",
+ "time ago": "преди {0}",
+ "-year": "-година",
+ "Json Query Expression": "Json израз на заявка",
+ "and": "и",
+ "cacheBusterParam": "Добави параметъра {0}",
+ "cacheBusterParamDescription": "Произволно генериран параметър за пропускане на кешове.",
+ "Community String": "Общностен низ",
+ "snmpCommunityStringHelptext": "Този низ функционира като парола за удостоверяване и контрол на достъпа до устройства с активиран SNMP. Сравнете го с конфигурацията на вашето SNMP устройство.",
+ "OID (Object Identifier)": "OID (Идентификатор на обект)",
+ "snmpOIDHelptext": "Въведете OID за сензора или състоянието, които искате да мониторирате. Използвайте инструменти за управление на мрежата като MIB браузъри или SNMP софтуер, ако не сте сигурни за OID.",
+ "SNMP Version": "SNMP Версия",
+ "Please enter a valid OID.": "Моля, въведете валиден OID.",
+ "Host Onesender": "Onesender хост",
+ "Token Onesender": "Onesender токен",
+ "Recipient Type": "Тип получател",
+ "Private Number": "Частен номер",
+ "privateOnesenderDesc": "Уверете се, че телефонният номер е валиден. За да изпратите съобщение на личен телефонен номер, напр.: 628123456789",
+ "groupOnesenderDesc": "Уверете се, че GroupID е валиден. За да изпратите съобщение в група, напр.: 628123456789-342345",
+ "Group ID": "ID на групата",
+ "wayToGetOnesenderUrlandToken": "Можете да получите URL адреса и токена, като посетите уебсайта на Onesender. Повече информация {0}",
+ "Add Remote Browser": "Добави отдалечен браузър",
+ "New Group": "Нова група",
+ "Group Name": "Име на групата",
+ "OAuth2: Client Credentials": "OAuth2: Идентификационни данни на клиента",
+ "Condition": "Условие",
+ "Authentication Method": "Метод за удостоверяване",
+ "Authorization Header": "Хедър за оторизация",
+ "Form Data Body": "Тяло на формата за данни",
+ "OAuth Token URL": "URL адрес на OAuth токена",
+ "Client ID": "ID на клиента",
+ "Client Secret": "Тайна на клиента",
+ "OAuth Scope": "Обхват на OAuth",
+ "Optional: Space separated list of scopes": "По избор: разделен с интервал списък с обхвати",
+ "Go back to home page.": "Обратно към началната страница.",
+ "No tags found.": "Няма намерени етикети.",
+ "Lost connection to the socket server.": "Изгубена връзка със сокет сървъра.",
+ "Cannot connect to the socket server.": "Не може да се свърже със сокет сървъра.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 URL адрес на уеб кука",
+ "signl4Docs": "Повече информация относно конфигуриране на SIGNL4 и получаване на URL адрес за уеб кука SIGNL4 в {0}.",
+ "Conditions": "Условия",
+ "conditionAdd": "Добави условие",
+ "conditionDelete": "Изтрий условие",
+ "conditionAddGroup": "Добави група",
+ "conditionDeleteGroup": "Изтрий група",
+ "conditionValuePlaceholder": "Стойност",
+ "contains": "съдържа",
+ "equals": "равно на",
+ "not equals": "не е равно на",
+ "not contains": "не съдържа",
+ "not starts with": "не започва с",
+ "ends with": "завършва с",
+ "not ends with": "не завършва с",
+ "less than": "по-малко от",
+ "greater than": "по-голямо от",
+ "greater than or equal to": "по-голямо или равно на",
+ "record": "запис",
+ "CurlDebugInfo": "За да отстраните грешки в монитора, можете или да поставите това в терминала на Вашата машина, или в терминала на машината, на която работи \"Uptime Kuma\" и да видите заявката.{newiline}Моля, вземете под внимание мрежовите разлики като {firewalls}, {dns_resolvers} или {docker_networks}.",
+ "shrinkDatabaseDescriptionSqlite": "Инициира {vacuum} за база данни тип SQLite. Функцията {auto_vacuum} вече е активирана, но това не дефрагментира базата данни, нито препакетира отделните страници на базата данни по начина, по който го прави командата {vacuum}.",
+ "ignoredTLSError": "TLS/SSL грешките са игнорирани",
+ "Debug": "Отстраняване на грешки",
+ "Copy": "Копирай",
+ "CopyToClipboardError": "Неуспешно копиране в клипборда: {error}",
+ "CopyToClipboardSuccess": "Копирано!",
+ "firewalls": "защитни стени",
+ "dns resolvers": "DNS преобразуватели",
+ "docker networks": "docker мрежи",
+ "CurlDebugInfoOAuth2CCUnsupported": "Пълният oauth клиентски идентификационен поток не се поддържа в {curl}.{newline}Моля, вземете токен на носител и го предайте чрез опцията {oauth2_bearer}.",
+ "CurlDebugInfoProxiesUnsupported": "Поддръжката на прокси в горната команда {curl} в момента не е внедрена.",
+ "Message format": "Формат на съобщението",
+ "Send rich messages": "Изпращай съобщения в \"rich\" формат",
+ "Sound": "Звук",
+ "Notification Channel": "Канал за известяване",
+ "Alphanumerical string and hyphens only": "Само буквено-цифров низ и тирета",
+ "Arcade": "Arcade",
+ "Correct": "Правилно",
+ "Fail": "Грешка",
+ "Harp": "Арфа",
+ "Reveal": "Разкрий",
+ "Bubble": "Балон",
+ "Doorbell": "Звънец на врата",
+ "Flute": "Флейта",
+ "Money": "Пари",
+ "Scifi": "Nаучна фантастика",
+ "Clear": "Премахни",
+ "Elevator": "Асансьор",
+ "Guitar": "Китара",
+ "Pop": "Поп",
+ "Custom sound to override default notification sound": "Персонализиран звук, заменящ звука за известяване по подразбиране",
+ "Time Sensitive (iOS Only)": "Зависещи от часа (само за iOS)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Известията от типа \"Зависещи от часа\" ще бъдат доставени незабавно, дори ако устройството е в режим „Не безпокойте“.",
+ "From": "От",
+ "Can be found on:": "Можте да се откриете на: {0}",
+ "The phone number of the recipient in E.164 format.": "Телефонният номер на получателя във формат E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Идентификационен номер на подателя на текста или телефонен номер във формат E.164, в случай, че желаете да получавате отговори.",
+ "rabbitmqNodesRequired": "Моля, задайте възлите за този монитор.",
+ "rabbitmqNodesInvalid": "Моля, използвайте пълния URL адрес (започващ с 'http') за RabbitMQ възли.",
+ "RabbitMQ Password": "RabbitMQ парола",
+ "RabbitMQ Username": "RabbitMQ потребител",
+ "SendGrid API Key": "SendGrid API ключ",
+ "Separate multiple email addresses with commas": "Разделяйте отделните имейл адреси със запетаи",
+ "RabbitMQ Nodes": "Възли за управление на RabbitMQ",
+ "rabbitmqNodesDescription": "Въведете URL адреса на възлите за управление на RabbitMQ, включително протокол и порт. Пример: {0}",
+ "rabbitmqHelpText": "За да използвате монитора, ще трябва да активирате добавката за управление във вашата настройка на RabbitMQ. За повече информация моля, вижте {rabitmq_documentation}.",
+ "aboutSlackUsername": "Променя показваното име на подателя на съобщението. Ако желаете да споменете някого, вместо това го включете в приятелското име.",
+ "YZJ Robot Token": "YZJ Robot токен код",
+ "YZJ Webhook URL": "YZJ Уеб кука URL адрес",
+ "templateServiceName": "име на услугата",
+ "templateHostnameOrURL": "име на хоста или URL адрес",
+ "Plain Text": "Обикновен текст",
+ "Message Template": "Шаблон за съобщение",
+ "templateStatus": "статус",
+ "telegramUseTemplate": "Използвай персонализиран шаблон за съобщение",
+ "telegramUseTemplateDescription": "Ако е активирано, съобщението ще бъде изпратено чрез персонализиран шаблон.",
+ "telegramTemplateFormatDescription": "Telegram позволява използването на различни \"markup\" езици за съобщенията. Вижте Telegram {0} за детайли.",
+ "Template Format": "Формат на шаблона",
+ "wayToGetWahaApiUrl": "Вашият WAHA URL адрес.",
+ "wahaSession": "Сесия",
+ "wahaChatId": "Чат ID (телефонен номер / ID на контакт / ID на група)",
+ "wayToGetWahaApiKey": "API ключът, е стойността на променливата WHATSAPP_API_KEY, която сте използвали за стартиране на WAHA.",
+ "wayToWriteWahaChatId": "Телефонният номер с международния префикс, но без знака плюс в началото ({0}), ID на контакта ({1}) или ID на групата ({2}). Известията се изпращат до това чат ID от WAHA сесия.",
+ "wayToGetWahaSession": "От тази сесия WAHA изпраща известия до чат ID. Можете да го намерите в таблото за управление на WAHA.",
+ "telegramServerUrlDescription": "За премахване на API бот ограниченията за Telegram или за получаване на достъп в блокирани зони (Китай, Иран и др.). За повече информация щракнете върху {0}. По подразбиране: {1}",
+ "telegramServerUrl": "(По избор) URL адрес на сървъра",
+ "Font Twemoji by Twitter licensed under": "Шрифт Twemoji от Twitter, лицензиран под"
}
diff --git a/src/lang/bn.json b/src/lang/bn.json
index 0967ef424..22e360731 100644
--- a/src/lang/bn.json
+++ b/src/lang/bn.json
@@ -1 +1,229 @@
-{}
+{
+ "setupDatabaseChooseDatabase": "আপনি কোন ডাটাবেজটি ব্যবহার করতে চান?",
+ "setupDatabaseEmbeddedMariaDB": "আপনাকে কিছু সেটআপ করার প্রয়োজন নেই। এই ডকার ইমেজে স্বয়ংক্রিয়ভাবে MariaDB এম্বেড এবং কনফিগার করা হয়েছে। Uptime Kuma এই ডাটাবেজের সাথে ইউনিক্স সকেটের মাধ্যমে সংযুক্ত হবে।",
+ "setupDatabaseMariaDB": "বহিরাগত MariaDB ডাটাবেজের সাথে সংযোগ করতে হবে। আপনাকে ডাটাবেজের সংযোগ তথ্য সেট করতে হবে।",
+ "Add": "সংযোগ করুন",
+ "dbName": "ডাটাবেজের নাম",
+ "languageName": "বাংলা",
+ "Settings": "সেটিংস",
+ "Dashboard": "ড্যাশবোর্ড",
+ "Help": "সাহায্য",
+ "New Update": "নতুন আপডেট",
+ "Language": "ভাষা",
+ "Version": "সংস্করণ",
+ "Check Update On GitHub": "GitHub-এ আপডেট চেক করুন",
+ "List": "তালিকা",
+ "General": "সাধারণ",
+ "Game": "খেলা",
+ "disable authentication": "প্রমাণীকরণ বন্ধ করুন",
+ "pauseDashboardHome": "থামুন",
+ "disableauth.message2": "এটি Uptime Kuma এর সামনে {intendThirdPartyAuth} এর মতো পরিস্থিতির জন্য ডিজাইন করা হয়েছে, যেমন Cloudflare Access, Authelia অথবা অন্যান্য প্রমাণীকরণ ব্যবস্থা।",
+ "I understand, please disable": "আমি বুঝতে পারছি, দয়া করে অক্ষম করুন",
+ "Certificate Info": "সার্টিফিকেট তথ্য",
+ "Create your admin account": "আপনার অ্যাডমিন অ্যাকাউন্ট তৈরি করুন",
+ "Import": "ইমপোর্ট",
+ "Default enabled": "ডিফল্ট সক্রিয়",
+ "Heartbeats": "হার্টবিট",
+ "Affected Monitors": "প্রভাবিত মনিটরগুলো",
+ "All Status Pages": "সমস্ত স্ট্যাটাস পেজ",
+ "alertNoFile": "অনুগ্রহ করে আমদানির জন্য একটি ফাইল নির্বাচন করুন।",
+ "alertWrongFileType": "অনুগ্রহ করে একটি JSON ফাইল নির্বাচন করুন।",
+ "Clear all statistics": "সব পরিসংখ্যান মুছে ফেলুন",
+ "Setup 2FA": "2FA সেট আপ করুন",
+ "Two Factor Authentication": "দুই ফ্যাক্টর প্রমাণীকরণ",
+ "Add New Tag": "নতুন ট্যাগ যোগ করুন",
+ "Tag with this name already exist.": "এই নামের ট্যাগ আগে থেকেই আছে।",
+ "Pink": "গোলাপী",
+ "Search monitored sites": "পর্যবেক্ষণ করা সাইট অনুসন্ধান",
+ "statusPageNothing": "এখানে কিছুই নেই, অনুগ্রহ করে একটি গ্রুপ বা মনিটর যোগ করুন।",
+ "Degraded Service": "অধঃপতন সেবা",
+ "Go to Dashboard": "ড্যাশবোর্ডে যান",
+ "defaultNotificationName": "আমার {বিজ্ঞপ্তি} সতর্কতা ({number})",
+ "webhookJsonDesc": "{0} যেকোনো আধুনিক HTTP সার্ভার যেমন Express.js-এর জন্য ভালো",
+ "liquidIntroduction": "টেম্পলেটবিলিটি লিকুইড টেমপ্লেটিং ভাষার মাধ্যমে অর্জন করা হয়। ব্যবহারের নির্দেশাবলীর জন্য অনুগ্রহ করে {0} দেখুন। এই উপলব্ধ ভেরিয়েবল হল:",
+ "Notifications": "নোটিফিকেশন",
+ "Setup Notification": "নোটিফিকেশন সেটআপ করুন",
+ "Light": "আলো",
+ "Auto": "স্বয়ংক্রিয়",
+ "Theme - Heartbeat Bar": "থিম - হার্টবিট বার",
+ "styleElapsedTime": "হার্টবিট বারের নিচে ব্যবহৃত সময়",
+ "styleElapsedTimeShowNoLine": "শোর করুন (কোনো লাইন নেই)",
+ "styleElapsedTimeShowWithLine": "শো করুন (লাইন সহ)",
+ "Normal": "স্বাভাবিক",
+ "Bottom": "নীচে",
+ "Timezone": "টাইমজোন",
+ "Search Engine Visibility": "সার্চ ইঞ্জিন দৃশ্যমানতা",
+ "Allow indexing": "ইন্ডেক্সিং অনুমোদন করুন",
+ "Discourage search engines from indexing site": "সার্চ ইঞ্জিনগুলোকে সাইটের ইন্ডেক্সিং থেকে বিরত রাখুন",
+ "Change Password": "পাসওয়ার্ড পরিবর্তন করুন",
+ "Current Password": "বর্তমান পাসওয়ার্ড",
+ "New Password": "নতুন পাসওয়ার্ড",
+ "Repeat New Password": "নতুন পাসওয়ার্ডটি আবার দিন",
+ "Update Password": "পাসওয়ার্ড আপডেট করুন",
+ "Enable Auth": "প্রমাণীকরণ চালু করুন",
+ "disableauth.message1": "আপনি কি সত্যিই {disableAuth} করতে চান?",
+ "where you intend to implement third-party authentication": "যেখানে আপনি তৃতীয় পক্ষের প্রমাণীকরণ বাস্তবায়ন করতে চান",
+ "Please use this option carefully!": "দয়া করে এই অপশনটি সাবধানে ব্যবহার করুন!",
+ "Logout": "লগ আউট",
+ "Leave": "লিভ",
+ "Confirm": "নিশ্চিত",
+ "Yes": "হ্যাঁ",
+ "No": "না",
+ "Username": "ইউজার নেম",
+ "Password": "পাসওয়ার্ড",
+ "Remember me": "আমাকে মনে রাখুন",
+ "Login": "লগ ইন",
+ "add one": "একটি যোগ করুন",
+ "Notification Type": "নোটিফিকেশনের ধরন",
+ "Email": "ইমেইল",
+ "Test": "পরীক্ষা",
+ "Resolver Server": "সমাধানকারী সার্ভার",
+ "Resource Record Type": "রিসোর্স রেকর্ড টাইপ",
+ "Last Result": "শেষ ফলাফল",
+ "Repeat Password": "পাসওয়ার্ড পুনরায় দিন",
+ "Import Backup": "ইমপোর্ট ব্যাকআপ",
+ "Export Backup": "এক্সপোর্ট ব্যাকআপ",
+ "Export": "এক্সপোর্ট",
+ "respTime": "প্রতিক্রিয়া সময় (ms)",
+ "notAvailableShort": "প্রযোজ্য নয়",
+ "Apply on all existing monitors": "সমস্ত বিদ্যমান মনিটরে প্রয়োগ করুন",
+ "Create": "তৈরি",
+ "Clear Data": "ডেটা সাফ",
+ "Events": "ইভেন্ট সমূহ",
+ "Auto Get": "অটো গ্রহণ",
+ "Schedule maintenance": "রক্ষণাবেক্ষণ সূচী করুন",
+ "Pick Affected Monitors...": "প্রভাবিত মনিটর নির্বাচন করুন…",
+ "Start of maintenance": "রক্ষণাবেক্ষণের শুরু",
+ "Select status pages...": "স্ট্যাটাস পেজগুলো নির্বাচন করুন…",
+ "Skip existing": "বিদ্যমান এড়িয়ে যান",
+ "Overwrite": "ওভাররাইট",
+ "Options": "অপশন",
+ "Keep both": "দুটোই রাখুন",
+ "Verify Token": "টোকেন যাচাই করুন",
+ "Enable 2FA": "2FA সক্ষম করুন",
+ "Disable 2FA": "2FA নিষ্ক্রিয় করুন",
+ "2FA Settings": "2FA সেটিংস",
+ "filterActive": "সক্রিয়",
+ "filterActivePaused": "বিরতি",
+ "Active": "সক্রিয়",
+ "Inactive": "নিষ্ক্রিয়",
+ "Token": "টোকেন",
+ "Show URI": "URI দেখান",
+ "Tags": "ট্যাগ",
+ "Add New below or Select...": "নীচে নতুন যোগ করুন বা নির্বাচন করুন…",
+ "Tag with this value already exist.": "এই মান সহ ট্যাগ ইতিমধ্যেই বিদ্যমান।",
+ "color": "রং",
+ "value (optional)": "মান (ঐচ্ছিক)",
+ "Red": "লাল",
+ "Orange": "কমলা",
+ "Green": "সবুজ",
+ "Blue": "নীল",
+ "Indigo": "নীল",
+ "Purple": "বেগুনি",
+ "Custom": "কাস্টম",
+ "Search...": "অনুসন্ধান…",
+ "Avg. Ping": "গড় পিং",
+ "Avg. Response": "গড় প্রতিক্রিয়া",
+ "Entry Page": "প্রবেশ পৃষ্ঠা",
+ "statusPageRefreshIn": "রিফ্রেশ হবে: {0}",
+ "No Services": "কোনো পরিষেবা নেই",
+ "All Systems Operational": "সমস্ত সিস্টেম অপারেশনাল",
+ "Partially Degraded Service": "আংশিকভাবে অবনমিত পরিষেবা",
+ "Add Group": "গ্রুপ যোগ করুন",
+ "Add a monitor": "একটি মনিটর যোগ করুন",
+ "Edit Status Page": "এডিট স্টেটাস পেজ",
+ "Status Page": "স্ট্যাটাস পেজ",
+ "Status Pages": "স্ট্যাটাস পেজ সমূহ",
+ "here": "এখানে",
+ "Required": "প্রয়োজন",
+ "Post URL": "পোস্ট URL",
+ "Content Type": "বিষয়বস্তুর প্রকার",
+ "webhookFormDataDesc": "{multipart} PHP এর জন্য ভালো। JSON-কে {decodeFunction} দিয়ে পার্স করতে হবে",
+ "templateMsg": "বিজ্ঞপ্তির বার্তা",
+ "templateHeartbeatJSON": "হৃদস্পন্দন বর্ণনাকারী বস্তু",
+ "templateMonitorJSON": "মনিটরের বর্ণনাকারী বস্তু",
+ "templateLimitedToUpDownNotifications": "শুধুমাত্র UP/DOWN বিজ্ঞপ্তির জন্য উপলব্ধ",
+ "Gray": "ধূসর",
+ "Add New Monitor": "নতুন আপটাইম মনিটর যোগ করুন",
+ "statusMaintenance": "রক্ষণাবেক্ষণ",
+ "Friendly Name": "বন্ধুত্বপূর্ণ নাম",
+ "URL": "ইউআরএল",
+ "settingUpDatabaseMSG": "ডাটাবেস সেটআপ করা হচ্ছে। এটি কিছুটা সময় নিতে পারে, অনুগ্রহ করে ধৈর্য ধরুন।",
+ "Response": "রেসপন্স",
+ "Ping": "পিং",
+ "Keyword": "কীওয়ার্ড",
+ "Invert Keyword": "ইনভার্ট কীওয়ার্ড",
+ "setupDatabaseSQLite": "একটি সাধারণ ডাটাবেস ফাইল, যা ছোট পরিসরের ডিপ্লয়মেন্টের জন্য সুপারিশ করা হয়। v2.0.0 এর পূর্বে, Uptime Kuma ডিফল্ট ডাটাবেস হিসেবে SQLite ব্যবহার করত।",
+ "Unknown": "অজানা",
+ "Cannot connect to the socket server": "সকেট সার্ভারের সাথে সংযোগ স্থাপন করা যাচ্ছে না",
+ "Reconnecting...": "পুনরায় সংযোগ স্থাপন করা হচ্ছে...",
+ "Passive Monitor Type": "নিষ্ক্রিয় মনিটরের ধরন",
+ "markdownSupported": "মার্কডাউন সিনট্যাক্স সাপোর্ট",
+ "Pause": "থামুন",
+ "-day": "-দিন",
+ "hour": "ঘন্টা",
+ "Host URL": "হোস্ট ইউআরএল",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "আপনি যে সার্ভারে সংযোগ করতে চান তার হোস্টনেম প্রবেশ করুন অথবা যদি আপনি একটি {local_mta} ব্যবহার করার পরিকল্পনা করেন, তাহলে {localhost} লিখুন",
+ "ignoreTLSErrorGeneral": "সংযোগের জন্য TLS/SSL ত্রুটি উপেক্ষা করুন",
+ "Upside Down Mode": "আপসাইড ডাউন মোড",
+ "Pending": "প্রক্রিয়াধীন",
+ "Push URL": "পুশ URL",
+ "needPushEvery": "আপনাকে এই URL টি প্রতি {0} সেকেন্ডে কল করতে হবে।",
+ "Dark": "অন্ধকার",
+ "Up": "আপ",
+ "webhookAdditionalHeadersTitle": "অতিরিক্ত শিরোনাম",
+ "pushOthers": "অন্যান্য",
+ "programmingLanguages": "প্রোগ্রামিং ভাষাসমূহ",
+ "Not available, please setup.": "উপলব্ধ নয়, অনুগ্রহ করে সেটআপ করুন।",
+ "Down": "ডাউন",
+ "Monitor Type": "মনিটরের ধরন",
+ "Expected Value": "প্রত্যাশিত মান",
+ "Home": "হোম",
+ "Maintenance": "রক্ষণাবেক্ষণ",
+ "General Monitor Type": "সাধারণ মনিটরের ধরন",
+ "Specific Monitor Type": "নির্দিষ্ট মনিটরের ধরন",
+ "Monitor": "মনিটর | মনিটরগুলো",
+ "day": "দিন | দিনগুলো",
+ "-hour": "-ঘন্টা",
+ "Hostname": "হোস্টনেম",
+ "locally configured mail transfer agent": "লোকালি কনফিগারড মেইল ট্রান্সফার এজেন্ট",
+ "Port": "পোর্ট",
+ "Heartbeat Interval": "হার্টবিট ইন্টারভাল",
+ "Max. Redirects": "সর্বোচ্চ রিডাইরেক্ট",
+ "Primary Base URL": "প্রাথমিক বেস URL",
+ "Message": "বার্তা",
+ "Resume": "পুনরায় শুরু",
+ "Delete": "মুছে ফেলুন",
+ "now": "এখন",
+ "time ago": "{০} বয়স",
+ "-year": "-বছর",
+ "Json Query Expression": "JSON কোয়েরি এক্সপ্রেশন",
+ "timeoutAfter": "{0} সেকেন্ড পর টাইমআউট",
+ "Retries": "পুনরায় চেষ্টা করে",
+ "checkEverySecond": "প্রতিটি {0} সেকেন্ডে চেক করুন",
+ "retryCheckEverySecond": "প্রতিটি {0} সেকেন্ডে পুনরায় চেষ্টা করুন",
+ "resendEveryXTimes": "প্রতিটি {0} বার পুনরায় পাঠান",
+ "pushOptionalParams": "ঐচ্ছিক প্যারামিটারসমূহ: {0}",
+ "Save": "সংরক্ষণ",
+ "ignoredTLSError": "TLS/SSL ত্রুটিগুলি উপেক্ষা করা হয়েছে",
+ "Accepted Status Codes": "গ্রহণযোগ্য স্ট্যাটাস কোডসমূহ",
+ "Disable Auth": "প্রমাণীকরণ বন্ধ করুন",
+ "Theme": "থিম",
+ "Name": "নাম",
+ "Status": "অবস্থা",
+ "DateTime": "তারিখ ও সময়",
+ "No important events": "কোনো গুরুত্বপূর্ণ ইভেন্ট নেই",
+ "Edit": "সম্পাদনা",
+ "Current": "বর্তমান",
+ "Uptime": "আপটাইম",
+ "Request Timeout": "রিকোয়েস্ট টাইমআউট",
+ "Heartbeat Retry Interval": "হার্টবিট রিট্রাই ইন্টারভাল",
+ "Advanced": "অ্যাডভান্স",
+ "retriesDescription": "সার্ভিসটি ডাউন হিসেবে চিহ্নিত হওয়ার আগে এবং একটি নোটিফিকেশন পাঠানোর জন্য সর্বোচ্চ পুনরায় চেষ্টা করার সংখ্যা",
+ "upsideDownModeDescription": "স্ট্যাটাসটি উল্টো করে দিন। যদি সার্ভিসটি পৌঁছানো যায়, তবে এটি DOWN হবে।",
+ "maxRedirectDescription": "অনুসরণ করার জন্য সর্বোচ্চ রিডাইরেক্ট সংখ্যা। রিডাইরেক্ট নিষ্ক্রিয় করতে 0 সেট করুন।",
+ "ignoreTLSError": "HTTPS ওয়েবসাইটগুলির জন্য TLS/SSL ত্রুটিগুলি উপেক্ষা করুন",
+ "pushViewCode": "পুশ মনিটর কীভাবে ব্যবহার করবেন? (কোড দেখুন)",
+ "Appearance": "দেখানোর ধরন",
+ "Quick Stats": "তাৎক্ষণিক পরিসংখ্যান"
+}
diff --git a/src/lang/ca.json b/src/lang/ca.json
index 1758d236a..39d6bc77c 100644
--- a/src/lang/ca.json
+++ b/src/lang/ca.json
@@ -49,7 +49,7 @@
"Delete": "Eliminar",
"Current": "Actual",
"Uptime": "Temps actiu",
- "Cert Exp.": "Caducitat del certificat",
+ "Cert Exp.": "Caducitat del certificat.",
"Monitor": "Monitor | Monitors",
"day": "dia | dies",
"-day": "-dia",
@@ -65,10 +65,509 @@
"URL": "URL",
"Hostname": "Nom del servidor",
"Port": "Port",
- "timeoutAfter": "¡Timeout' després de {0",
+ "timeoutAfter": "¡Timeout' després de {0} segons",
"locally configured mail transfer agent": "Agent de transferència de correu configurat localment",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Introduïu el nom del servidor al qual voleu connectar-vos o {localhost} si voleu utilitzar un {local_mta}",
"Host URL": "URL del servidor",
"Friendly Name": "Nom senzill",
- "markdownSupported": "Sintaxi de Markdown suportada"
+ "markdownSupported": "Sintaxi de Markdown suportada",
+ "Retries": "Reintents",
+ "Advanced": "Avançat",
+ "ignoreTLSErrorGeneral": "Ignora errors TLS/SSL per connexió",
+ "maxRedirectDescription": "Nombre màxim de redireccions a seguir. Establiu a 0 per a desactivar les redireccions.",
+ "Upside Down Mode": "Mode al revés",
+ "Max. Redirects": "Redireccions Màx",
+ "Accepted Status Codes": "Codis d'Estat Acceptats",
+ "needPushEvery": "Hauries de cridar a aquesta URL cada {0} segons.",
+ "Heartbeat Retry Interval": "Reintent de l'interval de \"heartbeat\"",
+ "Resend Notification if Down X times consecutively": "Reenvia notificacions si Down X vegades consecutives",
+ "resendEveryXTimes": "Reenvia cada {0} vegades",
+ "retryCheckEverySecond": "Reintenta cada {0} segons",
+ "checkEverySecond": "Comprova cada {0} segons",
+ "resendDisabled": "Reenvia deshabilitat",
+ "retriesDescription": "Màxim d'intents abans de que el servei sigui marcat com a caigut i la notificació sigui enviada",
+ "ignoreTLSError": "Ignora errors de TLS/SSL per a pàgines web HTTPS",
+ "upsideDownModeDescription": "Canvia l'estat al revés. Si el servei és accessible, està CAIGUT.",
+ "Setup Notification": "Configurar Notificació",
+ "Allow indexing": "Permetre indexat",
+ "Discourage search engines from indexing site": "Desencoratjar als motors de cerca que indexin la pàgina",
+ "Current Password": "Contrasenya actual",
+ "Please use this option carefully!": "Per favor, empra aquesta opció amb cura !",
+ "disable authentication": "deshabilita autenticació",
+ "Partially Degraded Service": "Servei Parcialment Degradat",
+ "Degraded Service": "Servei Degradat",
+ "Add Group": "Afegir Grup",
+ "Add a monitor": "Afegir monitor",
+ "pushViewCode": "Com emprar el monitor de Push? (Veure Codi)",
+ "Notifications": "Notificacions",
+ "pushOthers": "Altres",
+ "programmingLanguages": "Llenguatges de programació",
+ "Dark": "Fosc",
+ "Remember me": "Recordar-me",
+ "Login": "Iniciar sessió",
+ "No Monitors, please": "Sense Monitors, per favor",
+ "notAvailableShort": "N/A",
+ "Two Factor Authentication": "Segon Factor d'Autenticació",
+ "Custom": "Personalitzat",
+ "Search...": "Cercar…",
+ "Search monitored sites": "Cercar llocs monitoritzats",
+ "Avg. Response": "Resp. Promig",
+ "Add New below or Select...": "Afegir nova o Seleccionar…",
+ "Tag with this name already exist.": "Aquesta etiqueta ja existeix.",
+ "color": "Color",
+ "Gray": "Gris",
+ "value (optional)": "valor (opcional)",
+ "Active": "Actiu",
+ "Push URL": "URL push",
+ "pushOptionalParams": "Paràmetres opcionals: {0}",
+ "Save": "Desa",
+ "Not available, please setup.": "No disponible, per favor configura-ho.",
+ "Light": "Clar",
+ "Auto": "Auto",
+ "Theme - Heartbeat Bar": "Tema - Heartbet Bar",
+ "styleElapsedTime": "Temps transcorregut a la barra",
+ "styleElapsedTimeShowNoLine": "Mostrar (Fora Línia)",
+ "styleElapsedTimeShowWithLine": "Mostrar (Amb línia)",
+ "Normal": "Normal",
+ "Bottom": "Inferior",
+ "None": "Cap",
+ "Timezone": "Zona Horària",
+ "Search Engine Visibility": "Visibilitat motor de cerca",
+ "Change Password": "Canviar contrasenya",
+ "New Password": "Nova Contrasenya",
+ "Repeat New Password": "Repeteix Nova Contrasenya",
+ "Update Password": "Actualitzar Contrasenya",
+ "Disable Auth": "Deshabilita autenticació",
+ "Enable Auth": "Habilita Autenticació",
+ "disableauth.message1": "Estau segur que voleu {disableAuth}?",
+ "disableauth.message2": "Està dissenyat per a escenaris {intendThirdPartyAuth} davant Uptime Kuma, com ara Cloudflare Access, Authelia o altres mecanismes d'autenticació.",
+ "where you intend to implement third-party authentication": "on es vol implementar l'autenticació de tercers",
+ "Logout": "Tancar sessió",
+ "Leave": "Marxar",
+ "I understand, please disable": "Ho entenc, per favor deshabilita-ho",
+ "Confirm": "Confirma",
+ "Yes": "Si",
+ "No": "No",
+ "Username": "Nom d'usuari",
+ "Password": "Contrasenya",
+ "add one": "afegir un",
+ "Notification Type": "Tipus de notificació",
+ "Test": "Test",
+ "Certificate Info": "Informació del certificat",
+ "Resolver Server": "Servidor DNS",
+ "Resource Record Type": "Tipus de registre",
+ "Create your admin account": "Crear compte d'administració",
+ "Repeat Password": "Repeteix Contrasenya",
+ "Export Backup": "Exportar Còpia",
+ "Import Backup": "Importar Còpia",
+ "Export": "Exporta",
+ "Import": "Importa",
+ "respTime": "Temps Resp. (ms)",
+ "Default enabled": "Habilitat per defecte",
+ "Apply on all existing monitors": "Aplicar a tots els monitors existents",
+ "Create": "Crear",
+ "Clear Data": "Esborra dades",
+ "Events": "Events",
+ "Heartbeats": "Heartbeat",
+ "Auto Get": "Obtenir automàticament",
+ "Schedule maintenance": "Programar manteniment",
+ "Affected Monitors": "Monitors Afectats",
+ "Pick Affected Monitors...": "Seleccionar Monitors Afectats…",
+ "Start of maintenance": "Inici del manteniment",
+ "All Status Pages": "Totes les pàgines d'estat",
+ "Select status pages...": "Selecciona pàgines d'estat…",
+ "alertNoFile": "Per favor, selecciona fitxer a importar.",
+ "alertWrongFileType": "Selecciona un fitxer JSON.",
+ "Clear all statistics": "Esborra totes les Estadístiques",
+ "Skip existing": "Ometre existent",
+ "Overwrite": "Sobreescriu",
+ "Options": "Opcions",
+ "Keep both": "Manté ambdos",
+ "Verify Token": "Verificar token",
+ "Setup 2FA": "Configurar 2FA",
+ "Enable 2FA": "Habilitar 2FA",
+ "Disable 2FA": "Deshabilitar 2FA",
+ "2FA Settings": "Ajustaments 2FA",
+ "filterActive": "Actiu",
+ "filterActivePaused": "Pausat",
+ "Inactive": "Inactiu",
+ "Token": "Token",
+ "Show URI": "Mostrar URI",
+ "Tags": "Etiquetes",
+ "Red": "Vermell",
+ "Orange": "Taronja",
+ "Green": "Verd",
+ "Blue": "Blau",
+ "Indigo": "Morat",
+ "Purple": "Porpra",
+ "Pink": "Rosa",
+ "Avg. Ping": "Ping promig",
+ "Entry Page": "Pàgina d'entrada",
+ "statusPageNothing": "Res per aquí, per favor afegeix un grup o un monitor.",
+ "statusPageRefreshIn": "Refrescat en: {0]",
+ "No Services": "Sense Servei",
+ "All Systems Operational": "Tots els sistemes operatius",
+ "Edit Status Page": "Editar pàgina Estat",
+ "Go to Dashboard": "Anar al Panell",
+ "Status Page": "Pàgina d'Estat",
+ "Email": "Correu",
+ "Last Result": "Darrer Resultat",
+ "Add New Tag": "Afegir nova etiqueta",
+ "Tag with this value already exist.": "Ja existeix una etiqueta amb aquest valor.",
+ "defaultNotificationName": "La meva {notification} Alerta ({number})",
+ "Required": "Obligatori",
+ "Post URL": "Posar URL",
+ "Content Type": "Content Type",
+ "Json Query Expression": "Expressió de consulta Json",
+ "now": "ara",
+ "-year": "-any",
+ "Status Pages": "Pàgines d'estat",
+ "here": "aquí",
+ "time ago": "fa {0}",
+ "ignoredTLSError": "Errors TLS/SSL ignorats",
+ "webhookFormDataDesc": "{multipart} es bo per PHP. El JSON haurà d'analitzar-se amb {decodeFunction}",
+ "webhookJsonDesc": "{0} es bo per qualsevol servidor HTTP modern com Express.js",
+ "templateMsg": "missatge de la notificació",
+ "webhookAdditionalHeadersTitle": "Capçaleres addicionals",
+ "Application Token": "Testimoni d'aplicació",
+ "Server URL": "URL del servidor",
+ "Priority": "Prioritat",
+ "Webhook URL": "URL del Webhook",
+ "emojiCheatSheet": "Full de trampa d'emoji: {0}",
+ "Read more": "Llegeix més",
+ "appriseInstalled": "S'ha instal·lat l'apèndix.",
+ "templateHeartbeatJSON": "objecte que descriu el batec del cor",
+ "templateMonitorJSON": "objecte que descriu el monitor",
+ "templateLimitedToUpDownCertNotifications": "només disponible per a notificacions de venciment UP/DOWN/Certificate",
+ "templateLimitedToUpDownNotifications": "només disponible per a notificacions UP/DOWN",
+ "webhookAdditionalHeadersDesc": "Estableix les capçaleres addicionals enviades amb el webhook. Cada capçalera s'ha de definir com una clau/valor JSON.",
+ "webhookBodyPresetOption": "Predefinit - {0}",
+ "webhookBodyCustomOption": "Cos personalitzat",
+ "Headers": "Capçaleres",
+ "Monitor History": "Historial del monitor",
+ "PasswordsDoNotMatch": "Les contrasenyes no coincideixen.",
+ "records": "registres",
+ "One record": "Un registre",
+ "Current User": "Usuari actual",
+ "topic": "Tema",
+ "topicExplanation": "tema MQTT a monitorar",
+ "successKeyword": "Paraula clau d'èxit",
+ "successKeywordExplanation": "Paraula clau MQTT que es considerarà un èxit",
+ "recent": "Recent",
+ "Reset Token": "Restableix el testimoni",
+ "Done": "Fet",
+ "Info": "Info",
+ "Steam API Key": "Clau API de Steam",
+ "Shrink Database": "Redueix la base de dades",
+ "Pick a RR-Type...": "Trieu un tipus RR…",
+ "Default": "Per defecte",
+ "HTTP Options": "Opcions HTTP",
+ "Create Incident": "Crear Incident",
+ "Title": "Títol",
+ "Content": "Contingut",
+ "Style": "Estil",
+ "info": "info",
+ "warning": "avís",
+ "danger": "perill",
+ "primary": "primària",
+ "light": "lleuger",
+ "dark": "fosc",
+ "Post": "Post",
+ "Created": "Creat",
+ "Last Updated": "Darrera actualització",
+ "Switch to Light Theme": "Canvia a tema clar",
+ "Switch to Dark Theme": "Canviar a tema fosc",
+ "Show Tags": "Mostra les etiquetes",
+ "Hide Tags": "Amaga les etiquetes",
+ "Description": "Descripció",
+ "No monitors available.": "No hi ha monitors disponibles.",
+ "Add one": "Afegeix-ne un",
+ "No Monitors": "Sense monitors",
+ "Untitled Group": "Grup sense títol",
+ "Services": "Serveis",
+ "Discard": "Descarta",
+ "Cancel": "Canel·la",
+ "Select": "Selecciona",
+ "Check/Uncheck": "Comprova/desmarca",
+ "Powered by": "Funciona amb",
+ "Customize": "Personalitza",
+ "Custom Footer": "Peu de pàgina personalitzat",
+ "Custom CSS": "CSS personalitzat",
+ "default": "Per defecte",
+ "enabled": "Habilitat",
+ "setAsDefault": "Estableix com a predeterminat",
+ "deleteProxyMsg": "Esteu segur que voleu suprimir aquest servidor intermediari per a tots els monitors?",
+ "setAsDefaultProxyDescription": "Aquest servidor intermediari s'habilitarà de manera predeterminada per als monitors nous. Encara podeu desactivar el servidor intermediari per separat per a cada monitor.",
+ "Certificate Chain": "Cadena de certificats",
+ "Valid": "Vàlid",
+ "Invalid": "Invàlid",
+ "User": "Usuari",
+ "Installed": "Instal·lat",
+ "Not installed": "No instal·lat",
+ "Running": "En execució",
+ "Not running": "No en execució",
+ "Remove Token": "Elimina el testimoni",
+ "Start": "Inicia",
+ "Stop": "Aturar",
+ "Add New Status Page": "Afegeix una pàgina d'estat nova",
+ "Slug": "Àlies",
+ "Accept characters:": "Accepta caràcters:",
+ "startOrEndWithOnly": "Inicia o acaba només amb {0}",
+ "No consecutive dashes": "Sense guions consecutius",
+ "Next": "Següent",
+ "The slug is already taken. Please choose another slug.": "L'àlias ja està agafat. Si us plau, escolliu un altre àlies.",
+ "No Proxy": "Sense servidor intermediari",
+ "Proxies": "Servidors intermediaris",
+ "HTTP Basic Auth": "Autenticació bàsica HTTP",
+ "New Status Page": "Pàgina d'estat nova",
+ "Reverse Proxy": "Servidor intermediari invertit",
+ "Backup": "Còpia de seguretat",
+ "About": "Quant a",
+ "wayToGetCloudflaredURL": "(Descarrega de cloudfared des de {0})",
+ "cloudflareWebsite": "Lloc web de Cloudflare",
+ "Message:": "Missatge:",
+ "HTTP Headers": "Capçaleres HTTP",
+ "Trust Proxy": "Confia en el servidor intermediari",
+ "Other Software": "Un altre programari",
+ "For example: nginx, Apache and Traefik.": "Per exemple: nginx, Apache i Traefik.",
+ "Please read": "Llegiu",
+ "Subject:": "Assumpte:",
+ "Valid To:": "Vàlid per a:",
+ "Days Remaining:": "Dies restants:",
+ "Issuer:": "Emissor:",
+ "Fingerprint:": "Empremta digital:",
+ "No status pages": "Sense pàgines d'estat",
+ "Domain Name Expiry Notification": "Notificació de venciment del nom de domini",
+ "Add a new expiry notification day": "Notificació de venciment del nom de domini",
+ "Remove the expiry notification": "Elimina el dia de notificació de venciment",
+ "Proxy": "Servidor intermediari",
+ "Date Created": "Data de creació",
+ "Footer Text": "Text del peu de pàgina",
+ "Refresh Interval Description": "La pàgina d'estat farà una actualització completa del lloc cada {0} segons",
+ "Show Powered By": "Mostra Impulsat per",
+ "Domain Names": "Noms de domini",
+ "signedInDisp": "Sessió iniciada com a {0}",
+ "RadiusSecret": "Secret de Radius",
+ "RadiusSecretDescription": "Secret compartit entre client i servidor",
+ "RadiusCalledStationId": "Id de l'estació cridada",
+ "RadiusCallingStationId": "Id de l'estació de trucada",
+ "RadiusCallingStationIdDescription": "Identificador del dispositiu de crida",
+ "Certificate Expiry Notification": "Notificació de venciment del certificat",
+ "API Username": "Nom d'usuari API",
+ "API Key": "Clau API",
+ "Show update if available": "Mostra l'actualització si està disponible",
+ "Using a Reverse Proxy?": "Usar un servidor intermediari invers?",
+ "Check how to config it for WebSocket": "Comprova com configurar-lo per a WebSocket",
+ "Steam Game Server": "Servidor de jocs Steam",
+ "Most likely causes:": "Causes més probables:",
+ "There might be a typing error in the address.": "Pot haver-hi un error d'escriptura a l'adreça.",
+ "What you can try:": "Què podeu provar:",
+ "Retype the address.": "Torneu a teclejar l'adreça.",
+ "Go back to the previous page.": "Torna a la pàgina anterior.",
+ "Coming Soon": "Properament",
+ "Connection String": "Cadena de connexió",
+ "Query": "Consulta",
+ "settingsCertificateExpiry": "Caducitat del certificat TLS",
+ "Setup Docker Host": "Configura l'amfitrió Docker",
+ "Connection Type": "Tipus de connexió",
+ "Docker Daemon": "Dimoni Docker",
+ "noDockerHostMsg": "No disponible. Primer configureu un amfitrió Docker.",
+ "DockerHostRequired": "Establiu l'amfitrió Docker per a aquest monitor.",
+ "socket": "Sòcol",
+ "tcp": "TCP / HTTP",
+ "Docker Container": "Contenidor Docker",
+ "Container Name / ID": "Nom del contenidor / ID",
+ "Docker Host": "Amfitrió Docker",
+ "Docker Hosts": "Amfitrions Docker",
+ "Domain": "Domini",
+ "Workstation": "Estació de treball",
+ "Packet Size": "Mida del paquet",
+ "Bot Token": "Testimoni de bot",
+ "wayToGetTelegramToken": "Podeu obtenir un testimoni de {0}.",
+ "Chat ID": "ID de xat",
+ "telegramMessageThreadID": "(Opcional) ID del fil del missatge",
+ "telegramMessageThreadIDDescription": "Identificador únic opcional per al fil del missatge de destinació (tema) del fòrum; només per als supergrups del fòrum",
+ "telegramSendSilently": "Envia silenciosament",
+ "telegramProtectContent": "Protegeix la reenviament/desament",
+ "supportTelegramChatID": "Admet xat directe / grup / ID de xat del canal",
+ "YOUR BOT TOKEN HERE": "EL VOSTRE TESTIMONI DE BOT AQUÍ",
+ "chatIDNotFound": "No s'ha trobat l'ID del xat; primer envieu un missatge a aquest bot",
+ "disableCloudflaredNoAuthMsg": "Esteu en mode No Auth, no cal una contrasenya.",
+ "wayToGetLineNotifyToken": "Podeu obtenir un testimoni d'accés des de {0}",
+ "Examples": "Exemples",
+ "Home Assistant URL": "URL de l'assistent d'inici",
+ "Long-Lived Access Token": "Testimoni d'accés viu",
+ "Notification Service": "Servei de notificacions",
+ "Automations can optionally be triggered in Home Assistant:": "Les automatitzacions es poden activar opcionalment a l'assistent d'inici:",
+ "Trigger type:": "Tipus d'activador:",
+ "Event type:": "Tipus d'esdeveniment:",
+ "Event data:": "Dades de l'esdeveniment:",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "A continuació, trieu una acció, per exemple, canvieu l'escena a on una llum RGB és vermella.",
+ "Frontend Version": "Versió del frontal",
+ "Frontend Version do not match backend version!": "La versió frontal no coincideix amb la versió del dorsal!",
+ "backupRecommend": "Si us plau, feu una còpia de seguretat del volum o de la carpeta de dades (./data/) directament.",
+ "Optional": "Opcional",
+ "and": "i",
+ "startDateTime": "Data/hora d'inici",
+ "endDateTime": "Data/hora final",
+ "cronExpression": "Expressió Cron",
+ "cronSchedule": "Planificació: ",
+ "invalidCronExpression": "Expressió Cron no vàlida: {0}",
+ "recurringInterval": "Interval",
+ "Recurring": "Recurrència",
+ "strategyManual": "Activa/Inactiva manualment",
+ "warningTimezone": "Està utilitzant la zona horària del servidor",
+ "weekdayShortMon": "Dill",
+ "weekdayShortTue": "Dim",
+ "weekdayShortWed": "Dim",
+ "weekdayShortThu": "Dij",
+ "weekdayShortFri": "Div",
+ "weekdayShortSat": "Diss",
+ "weekdayShortSun": "Dg",
+ "dayOfWeek": "Dia de la setmana",
+ "dayOfMonth": "Dia del mes",
+ "lastDay": "Últim dia",
+ "lastDay2": "2n últim dia del mes",
+ "lastDay3": "3r Darrer Dia del Mes",
+ "lastDay4": "4t Darrer Dia del Mes",
+ "No Maintenance": "Sense manteniment",
+ "maintenanceStatus-under-maintenance": "Sota manteniment",
+ "maintenanceStatus-inactive": "Inactiu",
+ "maintenanceStatus-scheduled": "Programat",
+ "maintenanceStatus-unknown": "Desconegut",
+ "Server Timezone": "Zona horària del servidor",
+ "statusPageMaintenanceEndDate": "Final",
+ "IconUrl": "URL de la icona",
+ "Enable DNS Cache": "(Obsolet) Habilita la memòria cau DNS per als monitors HTTP(s)",
+ "Enable": "Habilita",
+ "Disable": "Desactiva",
+ "chromeExecutable": "Executable Chrome/Chromium",
+ "chromeExecutableAutoDetect": "Detecció automàtica",
+ "dnsCacheDescription": "Pot ser que no funcioni treballant amb entorns IPv6, desactiva'l si detectes qualsevol problema.",
+ "Single Maintenance Window": "Finestra de Manteniment únic",
+ "Maintenance Time Window of a Day": "Finestra de Temps del manteniment d'un Dia",
+ "Effective Date Range": "Rang de data eficaç (Opcional)",
+ "Schedule Maintenance": "Programa de manteniment",
+ "Edit Maintenance": "Edita el manteniment",
+ "Date and Time": "Data i hora",
+ "DateTime Range": "Rang de data i temps",
+ "loadingError": "Impossible obtenir la data, si us plau prova-ho més endavant.",
+ "plugin": "Connector | Connectors",
+ "install": "Instal·la",
+ "installing": "Instal·lant",
+ "uninstall": "Desinstal·la",
+ "confirmUninstallPlugin": "Estàs segur de desinstal·lar aquest connector?",
+ "notificationRegional": "Local",
+ "Clone Monitor": "Clona el monitor",
+ "Clone": "Clona",
+ "cloneOf": "Clon de {0}",
+ "secureOptionNone": "Cap / STARTTLS (25, 587)",
+ "secureOptionTLS": "TLS (465)",
+ "Ignore TLS Error": "Ignora error TLS",
+ "From Email": "Des de Correu",
+ "emailCustomisableContent": "Contingut personalitzable",
+ "emailCustomSubject": "Tema personalitzable",
+ "leave blank for default subject": "deixar en blanc per tema per defecte",
+ "emailCustomBody": "Cos personalitzat",
+ "leave blank for default body": "deixa en blanc per un cos per defecte",
+ "emailTemplateServiceName": "Nom de servei",
+ "emailTemplateHostnameOrURL": "Nom de host o URL",
+ "emailTemplateStatus": "Estat",
+ "emailTemplateMonitorJSON": "objecte que descriu el monitor",
+ "emailTemplateHeartbeatJSON": "objecte que descriu el batec del cor",
+ "To Email": "Destí email",
+ "smtpCC": "CC",
+ "smtpBCC": "BCC",
+ "Discord Webhook URL": "URL del Webhook de Discord",
+ "wayToGetDiscordURL": "Pots rebre aquest per anar a Paràmetres de Servidor -> Integracions -> Vista *Webhooks -> Nou *Webhook",
+ "Bot Display Name": "Nom de pantalla de bot",
+ "Prefix Custom Message": "Prefix de missatge personalitzat",
+ "Hello @everyone is...": "Hola {'@'} a tothom …",
+ "Send to channel": "Envia al canal",
+ "Create new forum post": "Crea una nova publicació",
+ "postToExistingThread": "Publica a un fil existent",
+ "forumPostName": "Nom de publicació de fòrum",
+ "threadForumPostID": "Fil / identificador de fòrum",
+ "e.g. {discordThreadID}": "exemple {discordThreadID}",
+ "wayToGetTeamsURL": "Pot aprendre com crear una URL de webhook {0}.",
+ "wayToGetZohoCliqURL": "Pot aprendre com crear una URL de webhook {0}.",
+ "needSignalAPI": "Necessites tenir una senyal de client amb REST API.",
+ "wayToCheckSignalURL": "Pot comprovar aquesta URL per veure com configurar:",
+ "Number": "Número",
+ "Recipients": "Receptors",
+ "Access Token": "Fitxa d'accés",
+ "Channel access token (Long-lived)": "Fitxa d'accés del canal (de llarga vida)",
+ "Line Developers Console": "Consola de Desenvolupadors de la línia",
+ "appriseNotInstalled": "L'apèndix no està instal·lat. {0}",
+ "Method": "Mètode",
+ "clearDataOlderThan": "Conserva les dades de l'historial del monitor durant {0} dies.",
+ "steamApiKeyDescription": "Per a monitoritzar un servidor de jocs de vapor, necessiteu una clau Steam Web-API. Podeu registrar la vostra clau API aquí: ",
+ "shrinkDatabaseDescriptionSqlite": "Activa la base de dades {vacuum} per a SQLite. {auto.vacuum} ja està activat, però això no desfragmenta la base de dades ni reempaqueta les pàgines individuals de la base de dades de la manera com ho fa l'ordre {vacuum}.",
+ "liquidIntroduction": "S'aconsegueix la flexibilitat mitjançant el llenguatge de templatació líquid. Consulteu el {0} per a les instruccions d'ús. Aquestes són les variables disponibles:",
+ "selectedMonitorCount": "Seleccionat: {0}",
+ "deleteStatusPageMsg": "Esteu segur que voleu suprimir aquesta pàgina d'estat?",
+ "proxyDescription": "Els intermediaris s'han d'assignar a un monitor perquè funcioni.",
+ "enableProxyDescription": "Aquest servidor intermediari no afectarà les sol·licituds del monitor fins que estigui activat. Podeu controlar temporalment desactivar el servidor intermediari de tots els monitors per l'estat d'activació.",
+ "statusPageSpecialSlugDesc": "Àlies especial {0}: aquesta pàgina es mostrarà quan no es proporcioni l'àlies",
+ "Authentication": "Autenticació",
+ "Page Not Found": "Pàgina no trobada",
+ "Don't know how to get the token? Please read the guide:": "No saps com aconseguir el testimoni? Si us plau, llegiu la guia:",
+ "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "La connexió actual es pot perdre si esteu connectant a través del túnel Cloudflare. Segur que voleu aturar-ho? Escriviu la contrasenya actual per confirmar-la.",
+ "Refresh Interval": "Interval de refresc",
+ "signedInDispDisabled": "Autenticació desactivada.",
+ "RadiusCalledStationIdDescription": "Identificador del dispositiu anomenat",
+ "Also check beta release": "Comprova també la versió beta",
+ "The resource is no longer available.": "El recurs ja no està disponible.",
+ "certificationExpiryDescription": "Els monitors HTTPS activen la notificació quan el certificat TLS caduca a:",
+ "deleteDockerHostMsg": "Esteu segur que voleu suprimir aquest amfitrió de l'acoblador per a tots els monitors?",
+ "tailscalePingWarning": "Per utilitzar el monitor de Ping Tailscale, heu d'instal·lar el Kuma Uptime sense Docker i també instal·lar el client Tailscale al vostre servidor.",
+ "telegramSendSilentlyDescription": "Envia el missatge en silenci. Els usuaris rebran una notificació sense so.",
+ "telegramProtectContentDescription": "Si està activat, els missatges del bot del Telegram estaran protegits contra reenviaments i desaments.",
+ "wayToGetTelegramChatID": "Podeu obtenir el vostre ID de xat enviant un missatge al bot i anant a aquest URL per veure el xat id:",
+ "trustProxyDescription": "Confia en les capçaleres «X-Forwarded-*». Si voleu obtenir la IP del client correcta i el vostre Kuma Uptime està darrere d'un servidor intermediari com Nginx o Apache, hauríeu d'activar-ho.",
+ "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Es pot crear un testimoni d'accés de llarga durada fent clic al nom del vostre perfil (a baix a l'esquerra) i desplaçant-vos a la part inferior i després feu clic a Crea un testimoni. ",
+ "default: notify all devices": "per defecte: notifica tots els dispositius",
+ "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Podeu trobar una llista dels Serveis de Notificació a l'assistent d'inici a «Eines de revelador . Serveis» cerca «notificació» per trobar el nom del vostre dispositiu/telèfon.",
+ "backupOutdatedWarning": "Obsolet: Atès que s'han afegit moltes característiques i aquesta funció de còpia de seguretat és una mica inexistent, no pot generar o restaurar una còpia de seguretat completa.",
+ "lastDay1": "L'últim dia del mes",
+ "pauseMaintenanceMsg": "Segur que voleu fer una pausa?",
+ "maintenanceStatus-ended": "Finalitzat",
+ "Display Timezone": "Mostra la zona horària",
+ "enableNSCD": "Habilita NSCD (Dimoni de memòria cau de Servei del Nom ) per accelerar les sol·licituds de DNS",
+ "chromeExecutableDescription": "Per a usuaris de Docker, si el Chrome no està encara instal·lat, pot dur uns quants minuts per instal·lar i mostrar el resultat de prova. Duu 1*GB d'espai de disc.",
+ "uninstalling": "Desinstal·lant",
+ "smtp": "Correu electrònic (SMTP)",
+ "smtpLiquidIntroduction": "Els següents dos camps són personalitzables via \"Liquid templating Language\". Per favor refereix al {0} per a instruccions d'ús. Aquests són les variables disponibles:",
+ "emailTemplateMsg": "missatge de la notificació",
+ "emailTemplateLimitedToUpDownNotification": "només disponible per estats UP/Down, altrament null",
+ "Select message type": "Selecciona el tipus de missatge",
+ "whatHappensAtForumPost": "Crea una nova publicació de fòrum. Això no publica un missatge a un fòrum existent. Per publicar un fil existent utilitza \"{option}\"",
+ "Channel access token": "Fitxa d'accés del canal",
+ "Body": "Cos",
+ "or": "o",
+ "PushUrl": "URL de captura",
+ "HeadersInvalidFormat": "Les capçaleres de sol·licitud no són JSON vàlides: ",
+ "BodyInvalidFormat": "El cos de petició no és JSON vàlid: ",
+ "Security": "Seguretat",
+ "Pick Accepted Status Codes...": "Trieu els codis d'estat acceptats…",
+ "error": "error",
+ "critical": "crítica",
+ "Please input title and content": "Introduïu el títol i el contingut",
+ "telegramServerUrl": "(Opcional) Url del servidor",
+ "telegramServerUrlDescription": "Per saltar-se les limitacions del bot de Telegram o tenir accés a regions bloquejades (China, Iran, etc). Per a més informació fes click {0}. Per defecte {1}",
+ "templateServiceName": "Nom del servei",
+ "templateHostnameOrURL": "Adreça URL o nom del host",
+ "templateStatus": "Estat",
+ "telegramUseTemplate": "Fes servir una plantilla de missatge personalitzada",
+ "telegramUseTemplateDescription": "Si s'activa, el missatge s'enviarà fent servir una plantilla personalitzada.",
+ "telegramTemplateFormatDescription": "Telegram permet l'ús de diferents tipus de llenguatges de marcat, llegeix Telegram {0} per més detalls.",
+ "wayToGetDiscordThreadId": "Obtenir un identificador de publicació del fil/fòrum és semblant a obtenir un identificador de canal. Més informació sobre com obtenir identificadors {0}",
+ "lineDevConsoleTo": "Consola de desenvolupadors de linia - {0}",
+ "Basic Settings": "Configuracions bàsiques",
+ "User ID": "ID d'usuari",
+ "Your User ID": "El teu identificador d'usuari",
+ "Messaging API": "API de missatges",
+ "wayToGetLineChannelToken": "Primer accediu a {0}, creeu un proveïdor i un canal (API de missatgeria) i, a continuació, podeu obtenir el token d'accés al canal i l'identificador d'usuari dels elements del menú esmentats anteriorment.",
+ "Icon URL": "URL de la icona",
+ "aboutIconURL": "Pots donar un enllaç a la imatge a \"URL de la icona\" per sobreposar-la a la imatge de perfil pere defecte. No s'usarà si hi ha una icona d'emoji establerta."
}
diff --git a/src/lang/cs-CZ.json b/src/lang/cs-CZ.json
index 4936cdeac..fd2556d7a 100644
--- a/src/lang/cs-CZ.json
+++ b/src/lang/cs-CZ.json
@@ -387,7 +387,6 @@
"Discard": "Zahodit",
"Cancel": "Zrušit",
"Powered by": "Poskytuje",
- "shrinkDatabaseDescription": "Pomocí této možnosti provedete příkaz VACUUM nad SQLite databází. Pokud byla databáze vytvořena po vydání verze 1.10.0, AUTO_VACUUM je již povolena a tato akce není vyžadována.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API uživatelské jméno (včetně předpony webapi_)",
"serwersmsAPIPassword": "API heslo",
@@ -803,8 +802,8 @@
"Json Query": "Json dotaz",
"Badge Duration (in hours)": "Zobrazení odznaku (v hodinách)",
"Badge Preview": "Náhled odznaku",
- "Notify Channel": "Kanál nofitikací",
- "aboutNotifyChannel": "Upozornění kanálu spustí upozornění na počítači nebo v mobilu pro všechny členy kanálu, ať už jsou dostupní nebo ne.",
+ "Notify Channel": "Upozornit kanál",
+ "aboutNotifyChannel": "Upozornění na kanál spustí upozornění na počítači nebo v mobilním telefonu pro všechny členy kanálu, ať už je jejich dostupnost nastavena na aktivní nebo na nepřítomnost.",
"filterActive": "Aktivní",
"filterActivePaused": "Pozastaveno",
"Enter the list of brokers": "Vytvořte seznam zprostředkovatelů",
@@ -832,16 +831,16 @@
"nostrRelays": "Relé Nostr",
"FlashDuty Severity": "Závažnost",
"PushDeer Server": "Server PushDeer",
- "wayToGetFlashDutyKey": "Můžete přejít na stránku Kanál -> (Vyberte kanál) -> Integrace -> Přidat novou integraci, přidat \"Vlastní událost\" a získat adresu pro odeslání, zkopírovat klíč integrace do adresy. Další informace naleznete na adrese",
+ "wayToGetFlashDutyKey": "Můžete přejít na stránku \"Kanál -> (Vyberte kanál) -> Integrace -> Přidat novou integraci\", přidat \"Uptime Kuma\" a získat push adresu, zkopírovat integrační klíč v adrese. Další informace naleznete na adrese",
"Request Timeout": "Časový limit požadavku",
"timeoutAfter": "Vypršení časového limitu po {0} sekundách",
"styleElapsedTime": "Čas uplynulý pod heartbeat ukazatelem",
"styleElapsedTimeShowWithLine": "Zobrazit (s linkou)",
"gamedigGuessPortDescription": "Port používaný protokolem Valve Server Query Protocol se může lišit od portu klienta. Pokud se monitor nemůže připojit k serveru, zkuste to.",
"styleElapsedTimeShowNoLine": "Zobrazit (bez linky)",
- "gamedigGuessPort": "Gamedig: Guess Port",
+ "gamedigGuessPort": "Gamedig: Port",
"Saved.": "Uloženo.",
- "setupDatabaseChooseDatabase": "Kterou databázi chcete použít?",
+ "setupDatabaseChooseDatabase": "Kterou databázi byste chtěli používat?",
"setupDatabaseEmbeddedMariaDB": "Nemusíte nic nastavovat. Tento Docker obraz pro vás automaticky vložil a nakonfiguroval databázi MariaDB. Uptime Kuma se k této databázi připojí prostřednictvím unixového socketu.",
"setupDatabaseMariaDB": "Připojení k externí databázi MariaDB. Je třeba nastavit informace o připojení k databázi.",
"setupDatabaseSQLite": "Jednoduchý databázový soubor, doporučený pro malé instalace. Před verzí 2.0.0 používal Uptime Kuma jako výchozí databázi SQLite.",
@@ -894,9 +893,9 @@
"emailTemplateLimitedToUpDownNotification": "dostupné pouze pro heatbeaty BĚŽÍ/NEBĚŽÍ, jinak null",
"templateMonitorJSON": "objekt popisující dohled",
"templateLimitedToUpDownNotifications": "dostupné pouze pro oznámení BĚŽÍ/NEBĚŽÍ",
- "successKeyword": "Nalezení klíčového slova",
- "Search monitored sites": "Vyhledávání dohledů",
- "settingUpDatabaseMSG": "Vytvářím strukturu databáze. Může to chvíli trvat, buďte trpěliví.",
+ "successKeyword": "Úspěch Klíčové slovo",
+ "Search monitored sites": "Hledat v monitorovaných umístěních",
+ "settingUpDatabaseMSG": "Nastavuje se databáze. Prosím buďte trpělivý, může to chvíli trvat.",
"successKeywordExplanation": "Klíčové slovo MQTT, které bude považováno za úspěch",
"Browser Screenshot": "Snímek obrazovky prohlížeče",
"setup a new monitor group": "nastavení nové skupiny dohledů",
@@ -943,7 +942,7 @@
"remoteBrowserToggle": "Ve výchozím nastavení běží Chromium uvnitř kontejneru Uptime Kuma. Přepnutím tohoto přepínače můžete použít vzdálený prohlížeč.",
"wayToGetWhapiUrlAndToken": "URL rozhraní API a token získáte tak, že přejdete do požadovaného kanálu z {0}",
"wayToWriteWhapiRecipient": "Telefonní číslo s mezinárodní předvolbou, ale bez znaménka plus na začátku ({0}), ID kontaktu ({1}) nebo ID skupiny ({2}).",
- "remoteBrowsersDescription": "Vzdálené prohlížeče jsou alternativou k lokálně spuštěnému Chromu. Nastavte tuto možnost pomocí služby jako je browserless.io, nebo se připojte k vlastnímu vzdálenému prohlížeči",
+ "remoteBrowsersDescription": "Vzdálené prohlížeče jsou alternativou k místnímu spuštění Chromu. Nastavte se pomocí služby, jako je browserless.io, nebo se připojte k vlastnímu",
"statusPageSpecialSlugDesc": "Speciální slug {0}: tato stránka se zobrazí, pokud není definován žádný slug",
"Mentioning": "Zmínky",
"wayToGetSevenIOApiKey": "Navštivte ovládací panel v části app.seven.io > developer > api key > zelené tlačítko přidat",
@@ -952,5 +951,145 @@
"apiKeySevenIO": "API klíč SevenIO",
"locally configured mail transfer agent": "místně nakonfigurovaný agent pro přenos pošty",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadejte název hostitele serveru, ke kterému se chcete připojit, nebo {localhost}, pokud hodláte použít {local_mta}",
- "receiverInfoSevenIO": "Pokud se přijímající číslo nenachází v Německu, musíte před číslo přidat kód země (např. pro kód země 420 z ČR použijte 420603603603 místo 603603603)"
+ "receiverInfoSevenIO": "Pokud se přijímající číslo nenachází v Německu, musíte před číslo přidat kód země (např. pro kód země 420 z ČR použijte 420603603603 místo 603603603)",
+ "Command": "Příkaz",
+ "mongodbCommandDescription": "Spusťte příkaz MongoDB proti databázi. Informace o dostupných příkazech najdete v {dokumentaci}",
+ "ignoreTLSErrorGeneral": "Ignorování chyby TLS/SSL u připojení",
+ "smspartnerApiurl": "Svůj klíč API najdete v ovládacím panelu na adrese {0}",
+ "smspartnerPhoneNumber": "Telefonní číslo (čísla)",
+ "smspartnerPhoneNumberHelptext": "Číslo musí být v mezinárodním formátu {0}, {1}. Více čísel musí být odděleno znakem {2}",
+ "smspartnerSenderName": "Název odesílatele SMS",
+ "smspartnerSenderNameInfo": "Musí obsahovat 3..=11 běžných znaků",
+ "Bitrix24 Webhook URL": "Adresa URL webhooku služby Bitrix24",
+ "wayToGetBitrix24Webhook": "Webhook můžete vytvořit podle pokynů na adrese {0}",
+ "bitrix24SupportUserID": "Zadejte své uživatelské ID v Bitrix24. ID zjistíte z odkazu, který najdete v profilu uživatele.",
+ "Refresh Interval": "Interval obnovení",
+ "Refresh Interval Description": "Stavová stránka provede úplnou obnovu webu každých {0} sekund",
+ "Select message type": "Zvolte typ zprávy",
+ "Send to channel": "Poslat na kanál",
+ "Create new forum post": "Vytvořit nový příspěvek na fóru",
+ "postToExistingThread": "Příspěvek do existujícího vlákna / příspěvek na fóru",
+ "forumPostName": "Název příspěvku ve fóru",
+ "threadForumPostID": "Vlákno / ID příspěvku ve fóru",
+ "e.g. {discordThreadID}": "např. {discordThreadID}",
+ "whatHappensAtForumPost": "Vytvořte nový příspěvek ve fóru. Tímto způsobem NENÍ možné odesílat zprávy v existujících příspěvcích. Pro vložení příspěvku do existujícího příspěvku použijte \"{option}\"",
+ "wayToGetDiscordThreadId": "Získání ID vlákna / příspěvku ve fóru je podobné získání ID kanálu. Přečtěte si více o tom, jak získat id {0}",
+ "Don't mention people": "Nezmiňujte se o osobách",
+ "Mention group": "Zmínka o {skupině}",
+ "Host URL": "URL hosta",
+ "threemaRecipientType": "Typ příjemce",
+ "threemaRecipient": "Příjemce",
+ "threemaSenderIdentityFormat": "8 znaků, obvykle začíná na *",
+ "threemaRecipientTypeEmail": "Emailová adresa",
+ "threemaSenderIdentity": "ID brány",
+ "threemaApiAuthenticationSecret": "Tajný klíč ID brány",
+ "apiKeysDisabledMsg": "Klíče API jsou zakázány, protože je zakázáno ověřování.",
+ "threemaBasicModeInfo": "Poznámka: Tato integrace využívá bránu Threema v základním režimu (šifrování pomocí serveru). Další podrobnosti naleznete {0}.",
+ "threemaRecipientTypeIdentityFormat": "8 znaků",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Telefonní číslo",
+ "wayToGetThreemaGateway": "Můžete se zaregistrovat do služby brány Threema {0}.",
+ "privateOnesenderDesc": "Zkontrolujte, zda je telefonní číslo platné. Odeslání zprávy na soukromé telefonní číslo, např.: 628123456789",
+ "wayToGetOnesenderUrlandToken": "Adresu URL a token získáte na webových stránkách společnosti Onesender. Více informací {0}",
+ "now": "nyní",
+ "time ago": "před {0}",
+ "-year": "-rok",
+ "Json Query Expression": "Výraz dotazu JSON",
+ "and": "a",
+ "cacheBusterParam": "Přidání parametru {0}",
+ "cacheBusterParamDescription": "Náhodně generovaný parametr pro vynechání mezipaměti.",
+ "OID (Object Identifier)": "OID (identifikátor objektu)",
+ "Condition": "Stav",
+ "SNMP Version": "Verze SNMP",
+ "Please enter a valid OID.": "Zadejte prosím platný identifikátor OID.",
+ "Recipient Type": "Typ příjemce",
+ "Private Number": "Soukromé číslo",
+ "Group ID": "ID skupiny",
+ "Add Remote Browser": "Přidat vzdálený prohlížeč",
+ "New Group": "Nová skupina",
+ "Group Name": "Název skupiny",
+ "OAuth2: Client Credentials": "OAuth2: přihlašovací údaje klienta",
+ "Authentication Method": "Metoda ověřování",
+ "Authorization Header": "Hlavička autorizace",
+ "Form Data Body": "Tělo formuláře s daty",
+ "threemaRecipientTypePhoneFormat": "E.164, bez počátečního +",
+ "jsonQueryDescription": "Pro zpracování a získání konkrétních dat z JSON odpovědi serveru použijte JSON dotaz - případně \"$\" pro zdrojovou (raw) odpověď, pokud neočekáváte JSON výstup. Výsledek bude následně porovnán jako řetězec vůči očekávaní hodnotě. Dokumentaci naleznete na {0} a pro testování dotazů můžete využít {1}.",
+ "shrinkDatabaseDescriptionSqlite": "Podmínka spuštění příkazu {vacuum} nad SQLite databází. Příkaz {auto_vacuum} je již zapnutý, ale nedochází k defragmentaci databáze ani k přebalení jednotlivých stránek databáze tak, jak to dělá příkaz {vacuum}.",
+ "Community String": "Řetězec komunity",
+ "Host Onesender": "Onesender hostitel",
+ "Token Onesender": "Onesender token",
+ "snmpOIDHelptext": "Zadejte OID senzoru nebo stavu, který chcete monitorovat. Pokud si nejste jisti identifikátorem OID, použijte nástroje pro správu sítě, jako jsou prohlížeče MIB nebo SNMP software.",
+ "snmpCommunityStringHelptext": "Tento řetězec slouží jako heslo pro ověřování a řízení přístupu k zařízením podporujícím protokol SNMP. Shodujte se s konfigurací zařízení SNMP.",
+ "record": "záznam",
+ "Go back to home page.": "Vrátit se domovskou stránku.",
+ "No tags found.": "Nenalezeny žádné štítky.",
+ "Lost connection to the socket server.": "Ztraceno socketové spojení se serverem.",
+ "Cannot connect to the socket server.": "Nelze navázat socketové spojení se serverem.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL adresa webhooku SIGNL4",
+ "signl4Docs": "Další informace související s konfigurací SIGNL4 a postup jak získat URL webhooku SIGNL4 naleznete na {0}.",
+ "Conditions": "Podmínky",
+ "conditionAdd": "Přidat podmínku",
+ "conditionDelete": "Vymazat podmínku",
+ "conditionAddGroup": "Přidat skupinu",
+ "conditionDeleteGroup": "Smazat skupinu",
+ "conditionValuePlaceholder": "Hodnota",
+ "equals": "rovná se",
+ "not equals": "nerovná se",
+ "contains": "obsahuje",
+ "not contains": "neobsahuje",
+ "starts with": "začíná na",
+ "not starts with": "nezačíná na",
+ "ends with": "končí na",
+ "not ends with": "nekončí na",
+ "less than": "menší než",
+ "greater than": "větší než",
+ "less than or equal to": "menší nebo rovno",
+ "greater than or equal to": "větší nebo rovno",
+ "groupOnesenderDesc": "Ujistěte se, že jste zadali platné GroupID. Pro odeslání zprávy do skupiny zadejte například 628123456789-342345",
+ "OAuth Token URL": "URL OAuth tokenu",
+ "Client ID": "ID klienta",
+ "Client Secret": "Tajemství klienta",
+ "OAuth Scope": "OAuth rozsah",
+ "Optional: Space separated list of scopes": "Volitelné: seznam rozsahů oddělte mezerami",
+ "Debug": "Ladění",
+ "CopyToClipboardError": "Nelze zkopírovat do schránky: {error}",
+ "ignoredTLSError": "Chyby TLS/SSL byly ignorovány",
+ "Copy": "Kopírovat",
+ "aboutSlackUsername": "Mění zobrazované jméno odesílatele zprávy. Pokud někoho chcete zmínit, použijte raději pole obecný název.",
+ "Message format": "Formát zprávy",
+ "Notification Channel": "Kanál notifikací",
+ "Alphanumerical string and hyphens only": "Pouze alfanumerické řetězce a pomlčky",
+ "Sound": "Zvuk",
+ "Custom sound to override default notification sound": "Použít vlastní zvuk místo výchozího zvuku upozornění",
+ "Correct": "Správně",
+ "Fail": "Chyba",
+ "Reveal": "Odhalení",
+ "Doorbell": "Zvonek",
+ "Flute": "Flétna",
+ "Money": "Peníze",
+ "Elevator": "Výtah",
+ "Guitar": "Kytara",
+ "Time Sensitive (iOS Only)": "Časově kritické (pouze pro iOS)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Časově kritická upozornění budou doručena okamžitě, i když je zařízení v režimu nerušit.",
+ "From": "Od",
+ "Can be found on:": "Lze nalézt na: {0}",
+ "The phone number of the recipient in E.164 format.": "Telefonní číslo příjemce ve formátu E.164 (+420...).",
+ "RabbitMQ Nodes": "RabbitMQ uzly pro správu",
+ "rabbitmqNodesDescription": "URL RabbitMQ uzlů pro správu zadávejte včetně protokolu a portu. Příklad: {0}",
+ "rabbitmqNodesRequired": "Prosím, definujte uzly pro tento dohled.",
+ "rabbitmqNodesInvalid": "Prosím, použijte plně kvalifikované URL (začínající na 'http)' RabbitMQ uzlů.",
+ "RabbitMQ Username": "RabbitMQ uživatelské jméno",
+ "Send rich messages": "Poslat rozsáhlé zprávy",
+ "Arcade": "Arkáda",
+ "Harp": "Harfa",
+ "Bubble": "Bublinky",
+ "Scifi": "Scifi",
+ "Pop": "Prasknutí",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Pro zajištění příjmu odpovědí zadejte ID odesílatele textu nebo telefonní číslo ve formátu E.164.",
+ "RabbitMQ Password": "RabbitMQ heslo",
+ "rabbitmqHelpText": "Abyste mohli používat tento monitor, musíte v nastavení RabbitMQ povolit modul pro správu. Další informace naleznete na adrese {rabitmq_documentation}.",
+ "SendGrid API Key": "SendGrid API klíč",
+ "Separate multiple email addresses with commas": "Více e-mailových adres oddělte čárkami",
+ "Clear": "Odstranění"
}
diff --git a/src/lang/da-DK.json b/src/lang/da-DK.json
index 7f74ef767..9ddc3c3be 100644
--- a/src/lang/da-DK.json
+++ b/src/lang/da-DK.json
@@ -45,7 +45,7 @@
"Port": "Port",
"Heartbeat Interval": "Hjerteslag interval",
"Retries": "Gentagelser",
- "retriesDescription": "Maksimalt antal gentagelser, før tjenesten markeres som inaktiv og sender en meddelelse.",
+ "retriesDescription": "Maksimalt antal gentagelser, før tjenesten markeres som inaktiv og sender en meddelelse",
"Advanced": "Avanceret",
"ignoreTLSError": "Ignorér TLS/SSL fejl for HTTPS websteder",
"Upside Down Mode": "Omvendt tilstand",
@@ -99,7 +99,7 @@
"deleteNotificationMsg": "Er du sikker på, at du vil slette denne underretning for alle overvågere?",
"resolverserverDescription": "Cloudflare er standardserveren, den kan til enhver tid ændres.",
"Resolver Server": "Navne-server",
- "rrtypeDescription": "Vælg den type RR, du vil overvåge.",
+ "rrtypeDescription": "Vælg den type RR, du vil overvåge",
"Last Result": "Seneste resultat",
"pauseMonitorMsg": "Er du sikker på at du vil standse overvågningen?",
"Create your admin account": "Opret din administratorkonto",
@@ -125,7 +125,7 @@
"backupDescription3": "Følsom data, f.eks. underretnings-tokener, er inkluderet i eksportfilen. Gem den sikkert.",
"alertNoFile": "Vælg en fil der skal importeres.",
"alertWrongFileType": "Vælg venligst en JSON-fil.",
- "twoFAVerifyLabel": "Indtast venligst dit token for at bekræfte, at 2FA fungerer",
+ "twoFAVerifyLabel": "Indtast venligst dit token for at bekræfte, at 2FA fungerer:",
"tokenValidSettingsMsg": "Token er gyldigt! Du kan nu gemme 2FA -indstillingerne.",
"confirmEnableTwoFAMsg": "Er du sikker på at du vil aktivere 2FA?",
"confirmDisableTwoFAMsg": "Er du sikker på at du vil deaktivere 2FA?",
@@ -141,7 +141,7 @@
"Token": "Token",
"Show URI": "Vis URI",
"Clear all statistics": "Ryd alle Statistikker",
- "retryCheckEverySecond": "Prøv igen hvert {0} sekund.",
+ "retryCheckEverySecond": "Prøv igen hvert {0} sekund",
"importHandleDescription": "Vælg 'Spring over eksisterende', hvis du vil springe over hver overvåger eller underretning med samme navn. 'Overskriv' sletter alle eksisterende overvågere og underretninger.",
"confirmImportMsg": "Er du sikker på at importere sikkerhedskopien? Sørg for, at du har valgt den rigtige importindstilling.",
"Heartbeat Retry Interval": "Hjerteslag gentagelsesinterval",
@@ -277,7 +277,7 @@
"lineDevConsoleTo": "Line Udviklerkonsol - {0}",
"Basic Settings": "Basisindstillinger",
"User ID": "Bruger-ID",
- "Messaging API": "Messaging API",
+ "Messaging API": "Besked API",
"wayToGetLineChannelToken": "Tilgå først {0}, opret en udbyder og kanal (Messaging API), så kan du få kanaladgangstoken'et og bruger-ID'et fra de ovennævnte menupunkter.",
"Icon URL": "Ikon URL",
"aboutIconURL": "Du kan angive et link til et billede i \"Ikon URL\" for at tilsidesætte standardprofilbilledet. Vil ikke blive brugt, hvis Ikon Emoji er angivet.",
@@ -345,7 +345,6 @@
"Discard": "Kassér",
"Cancel": "Annullér",
"Powered by": "Drevet af",
- "shrinkDatabaseDescription": "Udfør database VACUUM for SQLite. Hvis din database er oprettet efter 1.10.0, er AUTO_VACUUM allerede aktiveret, og denne handling er ikke nødvendig.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Brugernavn (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Adgangskode",
@@ -416,7 +415,7 @@
"signedInDisp": "Logget ind som {0}",
"Certificate Expiry Notification": "Meddelelse om udløbsdato for certifikatet",
"API Username": "API Brugernavn",
- "API Key": "API Key",
+ "API Key": "API Nøgle",
"Steam Game Server": "Steam Game Server",
"What you can try:": "Hvad du kan prøve:",
"Go back to the previous page.": "Gå tilbage til forrige side.",
@@ -622,11 +621,11 @@
"confirmDeleteTagMsg": "Er du sikker på at du vil slette denne etiket? Overvågninger med denne etiket vil ikke blive slettet.",
"resendEveryXTimes": "Gensend hver {0} gang",
"resendDisabled": "Gensendelse deaktiveret",
- "Reconnecting...": "Genforbinder...",
+ "Reconnecting...": "Genopretter forbindelse...",
"successPaused": "Standset med succes.",
"Reset Token": "Nulstil nøgle",
"Show Clickable Link": "Vis klikbart link",
- "atLeastOneMonitor": "Vælg mindst én berørt overvågning.",
+ "atLeastOneMonitor": "Vælg mindst én berørt overvågning",
"authInvalidToken": "Ugyldig nøgle.",
"authIncorrectCreds": "Brugernavn eller adgangskode er ikke korrekt.",
"2faAlreadyEnabled": "2FA er allerede aktiveret.",
@@ -657,5 +656,147 @@
"telegramSendSilentlyDescription": "Send beskeden lydløst. Brugerne vil modtage en notifikation uden lyd.",
"pushoverMessageTtl": "Message TTL (Sekunder)",
"setupDatabaseEmbeddedMariaDB": "Du skal ikke opsætte noget. Docker billedet har integreret og konfigureret MariaDB automatisk. Uptime Kuma vil forbinde til databasen vha. en Unix socket.",
- "setupDatabaseMariaDB": "Oprette forbindelse til en ekstern MariaDB database. Du skal indstille databasens forbindelsesinformation."
+ "setupDatabaseMariaDB": "Oprette forbindelse til en ekstern MariaDB database. Du skal indstille databasens forbindelsesinformation.",
+ "styleElapsedTimeShowWithLine": "Vis (med linjer)",
+ "styleElapsedTime": "Forløbet tid under heartbeat-bjælken",
+ "templateMsg": "besked fra notifikationen",
+ "templateHeartbeatJSON": "objekt, der beskriver heartbeat",
+ "templateMonitorJSON": "objekt, der beskriver monitoren",
+ "templateLimitedToUpDownNotifications": "kun tilgængelig for UP/DOWN notifikationer",
+ "webhookAdditionalHeadersTitle": "Yderligere Headers",
+ "webhookAdditionalHeadersDesc": "Angiver yderligere headers, der sendes med webhooken. Hver header skal defineres som en JSON-nøgle/værdi.",
+ "webhookBodyCustomOption": "Brugerdefineret Body",
+ "successKeyword": "Succesnøgleord",
+ "startOrEndWithOnly": "Kun start eller slut med {0}",
+ "setAsDefaultProxyDescription": "Denne proxy vil som standard være aktiveret for nye monitorer. Du kan stadig deaktivere proxyen individuelt for hver monitor.",
+ "No consecutive dashes": "Ingen på hinanden følgende bindestreger",
+ "statusPageSpecialSlugDesc": "Speciel slug {0}: Denne side vises, når der ikke angives en slug",
+ "Query": "Kø",
+ "Add a new expiry notification day": "Tilføj en ny udløbsnotifikationsdag",
+ "Remove the expiry notification": "Fjern udløbsnotifikationsdagen",
+ "Refresh Interval": "Opdateringsinterval",
+ "Refresh Interval Description": "Statussiden vil udføre en fuld opdatering af sitet hvert {0} sekunder",
+ "RadiusSecret": "Radius-hemmelighed",
+ "RadiusCalledStationId": "Called Station ID",
+ "RadiusCalledStationIdDescription": "Identifikator for den kaldte enhed",
+ "RadiusCallingStationId": "Calling Station Id",
+ "RadiusCallingStationIdDescription": "Identifikator for den kaldende enhed",
+ "Check how to config it for WebSocket": "Tjek, hvordan det konfigureres til WebSocket",
+ "Connection String": "Forbindelsesstreng",
+ "Workstation": "Arbejdsstation",
+ "telegramMessageThreadID": "(Valgfrit) Beskedtråd-ID",
+ "telegramMessageThreadIDDescription": "Valgfri unik identifikator for målbeskedtråden (emnet) i forummet; kun for forum-supergrupper",
+ "telegramProtectContent": "Beskyt videresendelse/gemning",
+ "telegramProtectContentDescription": "Hvis aktiveret, vil bot-beskeder i Telegram være beskyttet mod videresendelse og gemning.",
+ "disableCloudflaredNoAuthMsg": "Du er i No Auth-tilstand, en adgangskode er ikke påkrævet.",
+ "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "En liste over notifikationstjenester kan findes i Home Assistant under “Developer Tools > Services”. Søg efter “notification” for at finde navnet på din enhed/telefon.",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "Vælg derefter en handling, for eksempel at skifte scenen til en, hvor et RGB-lys er rødt.",
+ "backupRecommend": "Sikkerhedskopier venligst volumen eller data-mappen (./data/) direkte i stedet.",
+ "and": "og",
+ "startDateTime": "Startdato/-tidspunkt",
+ "endDateTime": "Slutdato/-tidspunkt",
+ "cronExpression": "Cron-udtryk",
+ "cronSchedule": "Tidsplan: ",
+ "warningTimezone": "Den bruger serverens tidszone",
+ "enableNSCD": "Aktivér NSCD (Name Service Cache Daemon) for at cache alle DNS-forespørgsler",
+ "chromeExecutable": "Chrome/Chromium-eksekverbar fil",
+ "Single Maintenance Window": "Enkelt vedligeholdelsesvindue",
+ "Edit Maintenance": "Rediger vedligeholdelse",
+ "emailCustomisableContent": "Brugerdefinerbart indhold",
+ "leave blank for default subject": "lad stå tomt for standardemne",
+ "emailCustomBody": "Brugerdefineret body",
+ "leave blank for default body": "lad stå tomt for standard-body",
+ "emailTemplateServiceName": "Servicenavn",
+ "emailTemplateHostnameOrURL": "Værtsnavn eller URL",
+ "emailTemplateStatus": "Status",
+ "emailTemplateMonitorJSON": "objekt, der beskriver monitoren",
+ "emailTemplateHeartbeatJSON": "objekt, der beskriver heartbeat",
+ "emailTemplateMsg": "besked fra notifikationen",
+ "emailTemplateLimitedToUpDownNotification": "kun tilgængelig for UP/DOWN heartbeats, ellers null",
+ "Select message type": "Vælg beskedtype",
+ "Send to channel": "Send til kanal",
+ "Create new forum post": "Opret nyt forumpost",
+ "postToExistingThread": "Send til eksisterende tråd / forumpost",
+ "forumPostName": "Forumpost-navn",
+ "threadForumPostID": "Tråd- / Forumpost-ID",
+ "e.g. {discordThreadID}": "f.eks. {discordThreadID}",
+ "wayToGetDiscordThreadId": "At hente en tråd- / forumpost-ID ligner processen for at hente en kanal-ID. Læs mere om, hvordan du får IDs {0}",
+ "Channel access token (Long-lived)": "Kanaladgangstoken (langvarig)",
+ "Your User ID": "Din bruger-ID",
+ "dataRetentionTimeError": "Opbevaringsperioden skal være 0 eller højere",
+ "infiniteRetention": "Sæt til 0 for uendelig opbevaring.",
+ "enableGRPCTls": "Tillad afsendelse af gRPC-forespørgsel med TLS-forbindelse",
+ "affectedStatusPages": "Vis denne vedligeholdelsesbesked på udvalgte statussider",
+ "invertKeywordDescription": "Se efter, at nøgleordet mangler i stedet for at være til stede.",
+ "octopushAPIKey": "“API-nøgle” fra HTTP API-legitimationsoplysninger i kontrolpanelet",
+ "octopushLogin": "“Login” fra HTTP API-legitimationsoplysninger i kontrolpanelet",
+ "pushoversounds pushover": "Pushover (standard)",
+ "pushoversounds bike": "Cykel",
+ "pushoversounds bugle": "Signalhorn",
+ "pushoversounds cashregister": "Kasseapparat",
+ "pushoversounds cosmic": "Kosmisk",
+ "pushoversounds falling": "Faldende",
+ "pushoversounds gamelan": "Gamelan",
+ "pushoversounds incoming": "Indkommende",
+ "pushoversounds intermission": "Pause",
+ "pushoversounds spacealarm": "Rumalarm",
+ "pushoversounds tugboat": "Slæbebåd",
+ "pushoversounds climb": "Klatring (lang)",
+ "pushoversounds persistent": "Vedvarende (lang)",
+ "pushoversounds echo": "Pushover Echo (lang)",
+ "pushoversounds updown": "Op Ned (lang)",
+ "GoogleChat": "Google Chat (kun Google Workspace)",
+ "styleElapsedTimeShowNoLine": "Vis (ingen linjer)",
+ "Slug": "Slug",
+ "The slug is already taken. Please choose another slug.": "Denne slug er allerede i brug. Vælg venligst en anden.",
+ "There might be a typing error in the address.": "Der er muligvis en stavfejl i adressen.",
+ "Long-Lived Access Token": "Long-Lived Access Token",
+ "Search monitored sites": "Søg overvågede sites",
+ "liquidIntroduction": "Templatability opnås via Liquid-templeringssproget. Se venligst {0} for brugsanvisninger. Her er de tilgængelige variabler:",
+ "templateLimitedToUpDownCertNotifications": "kun tilgængelig for UP/DOWN/Certifikatudløb notifikationer",
+ "shrinkDatabaseDescriptionSqlite": "Udløs database-{vacuum} for SQLite. {auto_vacuum} er allerede aktiveret, men dette defragmenterer ikke databasen eller ompakker de enkelte database-sider på samme måde som {vacuum}-kommandoen gør.",
+ "Check/Uncheck": "Markér/Afjern markering",
+ "enableProxyDescription": "Denne proxy vil ikke påvirke monitor-forespørgsler, før den er aktiveret. Du kan midlertidigt deaktivere proxyen for alle monitorer via aktiveringsstatus.",
+ "RadiusSecretDescription": "Delt hemmelighed mellem klient og server",
+ "noDockerHostMsg": "Ikke tilgængelig. Opsæt en Docker-host først.",
+ "DockerHostRequired": "Angiv venligst Docker-hosten for denne monitor.",
+ "tailscalePingWarning": "For at bruge Tailscale Ping-monitoren skal du installere Uptime Kuma uden Docker og også installere Tailscale-klienten på din server.",
+ "trustProxyDescription": "Tillid til ‘X-Forwarded-*’ headers. Hvis du vil hente den korrekte klient-IP, og din Uptime Kuma er bag en proxy såsom Nginx eller Apache, bør du aktivere dette.",
+ "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "En langvarig adgangstoken kan oprettes ved at klikke på dit profilnavn (nederst til venstre), rulle ned til bunden og derefter klikke på “Opret token”. ",
+ "backupOutdatedWarning": "Forældet: Da mange funktioner er blevet tilføjet, og denne backup-funktion er lidt vedligeholdelsesfri, kan den ikke generere eller gendanne en komplet backup.",
+ "invalidCronExpression": "Ugyldigt Cron-udtryk: {0}",
+ "chromeExecutableDescription": "For Docker-brugere: Hvis Chromium endnu ikke er installeret, kan det tage et par minutter at installere og vise testresultatet. Det kræver 1 GB diskplads.",
+ "Effective Date Range": "Gyldig datointerval (Valgfrit)",
+ "DateTime Range": "Dato-/tidsinterval",
+ "notificationRegional": "Regional",
+ "smtpLiquidIntroduction": "De følgende to felter kan tilpasses via Liquid-templateringssproget. Se venligst {0} for brugsanvisninger. Her er de tilgængelige variabler:",
+ "whatHappensAtForumPost": "Opret en ny forumpost. Dette sender IKKE beskeder i en eksisterende post. For at sende i en eksisterende post, brug ”{option}”",
+ "grpcMethodDescription": "Metodenavnet konverteres til camelCase-format, såsom sayHello, check osv.",
+ "affectedMonitorsDescription": "Vælg de monitorer, der er påvirket af den aktuelle vedligeholdelse",
+ "jsonQueryDescription": "Parse og udtræk specifikke data fra serverens JSON-svar ved hjælp af en JSON-forespørgsel, eller brug ”$” for det rå svar, hvis JSON ikke forventes. Resultatet sammenlignes derefter med den forventede værdi som strenge. Se {0} for dokumentation, og brug {1} til at eksperimentere med forespørgsler.",
+ "pushoversounds classical": "Klassisk",
+ "pushoversounds pianobar": "Piano Bar",
+ "wayToGetKookBotToken": "Opret en applikation og få din bot-token på {0}",
+ "wayToGetKookGuildID": "Tænd for ‘Developer Mode’ i Kook-indstillingerne, og højreklik på guilden for at få dens ID",
+ "successKeywordExplanation": "MQTT-nøgleord, der vil blive betragtet som succes",
+ "endpoint": "endpoint",
+ "topicExplanation": "MQTT-emne til overvågning",
+ "settingUpDatabaseMSG": "Opsætter databasen. Det kan tage et stykke tid, så vær tålmodig.",
+ "now": "nu",
+ "Json Query Expression": "Json Query Expression",
+ "locally configured mail transfer agent": "lokalt konfigureret mail overførsels agent",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Indtast enten værtsnavnet på serveren du vil forbinde til eller {localhost} hvis du planlægger at bruge en {local_mta}",
+ "timeoutAfter": "Timeout efter {0} sekunder",
+ "ignoredTLSError": "TLS/SSL-fejl er blevet ignoreret",
+ "Invert Keyword": "Inverter Nøgleord",
+ "Resend Notification if Down X times consecutively": "Send meddelelse igen, hvis Ned X gange i træk",
+ "Expected Value": "Forventede Værdi",
+ "setupDatabaseSQLite": "En simpel database-fil, anbefalet til mindre implementeringer. Før v2.0.0, brugte Uptime Kuma SQLite som standard database.",
+ "ignoreTLSErrorGeneral": "Ignorér TLS/SSL-fejl for forbindelsen",
+ "time ago": "{0} siden",
+ "-year": "-år",
+ "Host URL": "Host URL",
+ "Request Timeout": "Anmod Timeout",
+ "Cannot connect to the socket server": "Kan ikke oprette forbindelse til socket serveren",
+ "pushViewCode": "Hvordan bruger man Push Monitor? (Se kode)"
}
diff --git a/src/lang/de-CH.json b/src/lang/de-CH.json
index ac1b51165..f45d41e89 100644
--- a/src/lang/de-CH.json
+++ b/src/lang/de-CH.json
@@ -1,7 +1,7 @@
{
"languageName": "Deutsch (Schweiz)",
"Settings": "Einstellungen",
- "Dashboard": "Dashboard",
+ "Dashboard": "Überblick",
"New Update": "Update verfügbar",
"Language": "Sprache",
"Appearance": "Erscheinungsbild",
@@ -355,7 +355,6 @@
"Discard": "Verwerfen",
"Cancel": "Abbrechen",
"Powered by": "Erstellt mit",
- "shrinkDatabaseDescription": "Löse VACUUM für die SQLite Datenbank aus. Wenn die Datenbank nach 1.10.0 erstellt wurde, ist AUTO_VACUUM bereits aktiviert und diese Aktion ist nicht erforderlich.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Passwort",
@@ -969,5 +968,152 @@
"ignoreTLSErrorGeneral": "TLS/SSL-Fehler für Verbindung ignorieren",
"threadForumPostID": "Themen-/Forumbeitrags-ID",
"e.g. {discordThreadID}": "z.B. {discordThreadID}",
- "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}"
+ "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}",
+ "smspartnerApiurl": "Den API-Schlüssel findest du im Dashboard unter {0}",
+ "smspartnerPhoneNumber": "Telefonnummer(n)",
+ "smspartnerSenderName": "SMS Absender Name",
+ "smspartnerSenderNameInfo": "Muss zwischen 3..=11 regulären Zeichen sein",
+ "smspartnerPhoneNumberHelptext": "Die Nummer muss das internationale Format {0}, {1} haben. Mehrere Nummern müssen durch {2} getrennt werden",
+ "threemaRecipient": "Empfänger",
+ "threemaRecipientType": "Empfänger Typ",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Telefonnummer",
+ "threemaRecipientTypePhoneFormat": "E.164, ohne führendes +",
+ "threemaRecipientTypeEmail": "E-Mail Adresse",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaApiAuthenticationSecret": "Gateway-ID Schlüssel",
+ "wayToGetThreemaGateway": "Du kannst dich für Threema Gateway {0} registrieren.",
+ "threemaRecipientTypeIdentityFormat": "8 Zeichen",
+ "threemaSenderIdentityFormat": "8 Zeichen, beginnt normalerweise mit *",
+ "threemaBasicModeInfo": "Hinweis: Diese Integration verwendet Threema Gateway im Basismodus (serverbasierte Verschlüsselung). Weitere Details siehe {0}.",
+ "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert, da die Authentifizierung deaktiviert ist.",
+ "Json Query Expression": "Json Query Ausdrck",
+ "Cannot connect to the socket server.": "Es kann keine Verbindung zum Socket-Server hergestellt werden.",
+ "not ends with": "endet nicht mit",
+ "signl4Docs": "Weitere Informationen zur Konfiguration von SIGNL4 und zum Abrufen der SIGNL4-Webhook-URL siehe {0}.",
+ "now": "jetzt",
+ "time ago": "vor {0}",
+ "-year": "-Jahr",
+ "and": "und",
+ "jsonQueryDescription": "Parsen und Extrahieren spezifischer Daten aus der JSON-Antwort des Servers mittels JSON-Abfrage oder Verwendung von \"$\" für die rohe Antwort, wenn kein JSON erwartet wird. Das Ergebnis wird dann mit dem erwarteten Wert in Form von Strings verglichen. Siehe {0} für die Dokumentation und verwende {1}, um mit Abfragen zu experimentieren.",
+ "cacheBusterParamDescription": "Zufällig generierter Parameter um den Cache zu umgehen.",
+ "cacheBusterParam": "Den Parameter {0} hinzufügen",
+ "Community String": "Gemeinschaftliche Zeichenkette",
+ "snmpCommunityStringHelptext": "Diese Zeichenfolge dient als Passwort zur Authentifizierung und Kontrolle des Zugriffs auf SNMP-fähigen Geräten. Pass sie an die Konfiguration des SNMP-Geräts an.",
+ "OID (Object Identifier)": "OID (Objekt-Identifikator)",
+ "Condition": "Bedingung",
+ "SNMP Version": "SNMP Version",
+ "Please enter a valid OID.": "Gib eine gültige OID ein.",
+ "Host Onesender": "Host Onesender",
+ "Token Onesender": "Token Onesender",
+ "Recipient Type": "Empfänger Typ",
+ "Private Number": "Private Nummer",
+ "Group ID": "Gruppen ID",
+ "wayToGetOnesenderUrlandToken": "Du kannst die URL und den Token auf der Onesender-Website erhalten. Weitere Infos {0}",
+ "Add Remote Browser": "Remote-Browser hinzufügen",
+ "New Group": "Neue Gruppe",
+ "Group Name": "Gruppenname",
+ "OAuth2: Client Credentials": "OAuth2: Client-Anmeldeinformationen",
+ "snmpOIDHelptext": "Gib die OID für den zu überwachenden Sensor oder Status ein. Verwende Netzwerkverwaltungstools wie MIB-Browser oder SNMP-Software, wenn du bezüglich OID unsicher bist.",
+ "privateOnesenderDesc": "Stell sicher, dass die Telefonnummer gültig ist. Um Nachrichten an private Telefonnummer zu senden, z. B.: 628123456789",
+ "groupOnesenderDesc": "Stell sicher, dass die GroupID gültig ist. Um Nachricht an die Gruppe zu senden, z.B.: 628123456789-342345",
+ "Authentication Method": "Authentifizierungsmethode",
+ "Authorization Header": "Autorisierungs-Header",
+ "Form Data Body": "Formular Data Body",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "Client ID",
+ "Client Secret": "Client Secret",
+ "OAuth Scope": "OAuth Scope",
+ "Optional: Space separated list of scopes": "Optional: Durch Leerzeichen getrennte Liste der Scopes",
+ "Go back to home page.": "Zurück zur Startseite.",
+ "No tags found.": "Keine Tags gefunden.",
+ "Lost connection to the socket server.": "Verbindung zum Socket-Server verloren.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "Conditions": "Bedingungen",
+ "conditionAdd": "Bedingung hinzufügen",
+ "conditionDelete": "Bedingung löschen",
+ "conditionAddGroup": "Gruppe hinzufügen",
+ "conditionDeleteGroup": "Gruppe löschen",
+ "conditionValuePlaceholder": "Wert",
+ "equals": "ist gleich",
+ "not equals": "ist nicht gleich",
+ "contains": "enthält",
+ "not contains": "enthält nicht",
+ "starts with": "beginnt mit",
+ "not starts with": "beginnt nicht mit",
+ "ends with": "endet mit",
+ "less than": "weniger als",
+ "greater than": "mehr als",
+ "less than or equal to": "kleiner als oder gleich",
+ "greater than or equal to": "grösser als oder gleich",
+ "record": "Eintrag",
+ "shrinkDatabaseDescriptionSqlite": "Datenbank {vacuum} für SQLite auslösen. {auto_vacuum} ist bereits aktiviert, aber dies defragmentiert die Datenbank nicht und packt auch nicht einzelne Datenbankseiten neu, wie es der Befehl {vacuum} tut.",
+ "ignoredTLSError": "TLS/SSL-Fehler wurden ignoriert",
+ "Debug": "Debug",
+ "Copy": "Kopieren",
+ "CurlDebugInfoOAuth2CCUnsupported": "Der vollständige OAuth-Client-Credential-Flow wird in {curl} nicht unterstützt.{newline}Bitte besorge dir ein Bearer-Token und übergebe ihn über die {oauth2_bearer}-Option.",
+ "Money": "Geld",
+ "Custom sound to override default notification sound": "Benutzerdefinierter Ton, um den standardmässigen Benachrichtigungston zu ersetzen",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Entweder eine Text-Absender-ID oder eine Telefonnummer im E.164-Format, wenn du Antworten erhalten möchtest.",
+ "CopyToClipboardError": "Konnte nicht in die Zwischenablage kopiert werden: {error}",
+ "CopyToClipboardSuccess": "Kopiert!",
+ "CurlDebugInfo": "Um den Monitor zu debuggen, kannst du dies entweder in das Terminal deines eigenen Rechners oder in das Terminal der Maschine, auf der Uptime Kuma läuft, einfügen und überprüfen, was du anforderst.{newiline}Bitte beachte Netzwerkunterschiede wie {firewalls}, {dns_resolvers} oder {docker_networks}.",
+ "firewalls": "Firewalls",
+ "dns resolvers": "DNS-Resolver",
+ "docker networks": "Docker-Netzwerke",
+ "CurlDebugInfoProxiesUnsupported": "Die Unterstützung von Proxys im oben genannten {curl}-Befehl ist derzeit nicht implementiert.",
+ "Message format": "Nachrichtenformat",
+ "Send rich messages": "Sende Rich-Text-Nachrichten",
+ "Notification Channel": "Benachrichtigungskanal",
+ "Sound": "Benachrichtigungston",
+ "Alphanumerical string and hyphens only": "Nur alphanumerische Zeichen und Bindestriche",
+ "Correct": "Korrekt",
+ "Fail": "Fehlgeschlagen",
+ "Harp": "Harfe",
+ "Reveal": "Enthüllen",
+ "Bubble": "Blase",
+ "Doorbell": "Türklingel",
+ "Flute": "Flöte",
+ "Scifi": "Science Fiction",
+ "Clear": "Klar",
+ "Elevator": "Lift",
+ "Guitar": "Gitarre",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "Zeitkritisch (nur iOS)",
+ "The phone number of the recipient in E.164 format.": "Die Telefonnummer des Empfängers im E.164-Format.",
+ "Can be found on:": "Ist zu finden auf: {0}",
+ "From": "Von",
+ "Arcade": "Spielhalle",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch wenn sich das Gerät im Nicht stören-Modus befindet.",
+ "RabbitMQ Nodes": "RabbitMQ-Verwaltungsknoten",
+ "rabbitmqNodesDescription": "Gib die URL für die RabbitMQ-Verwaltungsknoten einschliesslich Protokoll und Port ein. Beispiel: {0}",
+ "rabbitmqNodesRequired": "Setze die Knoten für diesen Monitor.",
+ "RabbitMQ Username": "RabbitMQ Benutzername",
+ "RabbitMQ Password": "RabbitMQ Passwort",
+ "SendGrid API Key": "SendGrid-API-Schlüssel",
+ "Separate multiple email addresses with commas": "Mehrere E-Mail-Adressen mit Kommas trennen",
+ "rabbitmqNodesInvalid": "Benutze eine vollständig qualifizierte URL (beginnend mit 'http') für RabbitMQ-Knoten.",
+ "rabbitmqHelpText": "Um den Monitor zu benutzen, musst du das Management Plugin in deinem RabbitMQ-Setup aktivieren. Weitere Informationen siehe {rabitmq_documentation}.",
+ "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Wenn du jemanden erwähnen möchtest, füge ihn stattdessen in den Namen ein.",
+ "templateHostnameOrURL": "Hostname oder URL",
+ "telegramUseTemplate": "Benutzerdefinierte Nachrichtenvorlage verwenden",
+ "telegramUseTemplateDescription": "Wenn diese Option aktiviert ist, wird die Nachricht unter Verwendung einer benutzerdefinierten Vorlage gesendet.",
+ "templateServiceName": "Service-Name",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "YZJ Robot Token": "YZJ Robot Token",
+ "templateStatus": "Status",
+ "telegramTemplateFormatDescription": "Telegram ermöglicht die Verwendung verschiedener Markup-Sprachen für Nachrichten, siehe Telegram {0} für spezifische Details.",
+ "Plain Text": "Nur Text",
+ "Message Template": "Nachrichtenvorlage",
+ "Template Format": "Vorlagenformat",
+ "wayToGetWahaApiUrl": "Die URL deiner WAHA-Instanz.",
+ "wayToGetWahaSession": "Von dieser Sitzung aus sendet WAHA Benachrichtigungen an die Chat-ID. Du kannst sie im WAHA Dashboard finden.",
+ "wahaSession": "Sitzung",
+ "wahaChatId": "Chat-ID (Telefonnummer / Kontakt-ID / Gruppen-ID)",
+ "wayToGetWahaApiKey": "API-Schlüssel ist der Wert der WHATSAPP_API_KEY-Umgebungsvariable, den du beim Ausführen von WAHA verwendet hast.",
+ "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.",
+ "telegramServerUrl": "(Optional) Server URL",
+ "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}",
+ "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter"
}
diff --git a/src/lang/de-DE.json b/src/lang/de-DE.json
index 303055d8f..dc07a6262 100644
--- a/src/lang/de-DE.json
+++ b/src/lang/de-DE.json
@@ -1,7 +1,7 @@
{
"languageName": "Deutsch",
"Settings": "Einstellungen",
- "Dashboard": "Dashboard",
+ "Dashboard": "Überblick",
"New Update": "Aktualisierung verfügbar",
"Language": "Sprache",
"Appearance": "Erscheinungsbild",
@@ -355,7 +355,6 @@
"Discard": "Verwerfen",
"Cancel": "Abbrechen",
"Powered by": "Erstellt mit",
- "shrinkDatabaseDescription": "Löse VACUUM für die SQLite Datenbank aus. Wenn die Datenbank nach 1.10.0 erstellt wurde, ist AUTO_VACUUM bereits aktiviert und diese Aktion ist nicht erforderlich.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Benutzername (inkl. webapi_ prefix)",
"serwersmsAPIPassword": "API Passwort",
@@ -972,5 +971,152 @@
"forumPostName": "Name des Forumsbeitrags",
"threadForumPostID": "Themen-/Forumbeitrags-ID",
"e.g. {discordThreadID}": "z.B. {discordThreadID}",
- "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}"
+ "wayToGetDiscordThreadId": "Das Abrufen einer Thread-/Forumspost-ID ist ähnlich wie das Abrufen einer Channel-ID. Lese mehr darüber, wie man IDs abruft {0}",
+ "smspartnerPhoneNumber": "Telefonnummer(n)",
+ "smspartnerSenderName": "SMS Absender Name",
+ "smspartnerSenderNameInfo": "Muss zwischen 3..=11 regulären Zeichen sein",
+ "smspartnerApiurl": "Den API-Schlüssel findest du im Dashboard unter {0}",
+ "smspartnerPhoneNumberHelptext": "Die Nummer muss das internationale Format {0}, {1} haben. Mehrere Nummern müssen durch {2} getrennt werden",
+ "threemaRecipient": "Empfänger",
+ "threemaRecipientType": "Empfänger Typ",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Telefonnummer",
+ "threemaRecipientTypePhoneFormat": "E.164, ohne führendes +",
+ "threemaRecipientTypeEmail": "E-Mail Adresse",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaApiAuthenticationSecret": "Gateway-ID Schlüssel",
+ "wayToGetThreemaGateway": "Du kannst dich für Threema Gateway {0} registrieren.",
+ "threemaRecipientTypeIdentityFormat": "8 Zeichen",
+ "threemaSenderIdentityFormat": "8 Zeichen, beginnt normalerweise mit *",
+ "threemaBasicModeInfo": "Hinweis: Diese Integration verwendet Threema Gateway im Basismodus (serverbasierte Verschlüsselung). Weitere Details siehe {0}.",
+ "apiKeysDisabledMsg": "API-Schlüssel sind deaktiviert, da die Authentifizierung deaktiviert ist.",
+ "wayToGetOnesenderUrlandToken": "Du kannst die URL und den Token auf der Onesender-Website erhalten. Weitere Infos {0}",
+ "Lost connection to the socket server.": "Verbindung zum Socket-Server verloren.",
+ "conditionDeleteGroup": "Gruppe löschen",
+ "greater than": "mehr als",
+ "snmpOIDHelptext": "Gib die OID für den zu überwachenden Sensor oder Status ein. Verwende Netzwerkverwaltungstools wie MIB-Browser oder SNMP-Software, wenn du bezüglich OID unsicher bist.",
+ "signl4Docs": "Weitere Informationen zur Konfiguration von SIGNL4 und zum Abrufen der SIGNL4-Webhook-URL siehe {0}.",
+ "now": "jetzt",
+ "time ago": "vor {0}",
+ "Json Query Expression": "Json Query Ausdrck",
+ "-year": "-Jahr",
+ "and": "und",
+ "jsonQueryDescription": "Parsen und Extrahieren spezifischer Daten aus der JSON-Antwort des Servers mittels JSON-Abfrage oder Verwendung von \"$\" für die rohe Antwort, wenn kein JSON erwartet wird. Das Ergebnis wird dann mit dem erwarteten Wert in Form von Strings verglichen. Siehe {0} für die Dokumentation und verwende {1}, um mit Abfragen zu experimentieren.",
+ "cacheBusterParamDescription": "Zufällig generierter Parameter um den Cache zu umgehen.",
+ "cacheBusterParam": "Den Parameter {0} hinzufügen",
+ "Community String": "Gemeinschaftliche Zeichenkette",
+ "snmpCommunityStringHelptext": "Diese Zeichenfolge dient als Passwort zur Authentifizierung und Kontrolle des Zugriffs auf SNMP-fähigen Geräten. Pass sie an die Konfiguration des SNMP-Geräts an.",
+ "OID (Object Identifier)": "OID (Objekt-Identifikator)",
+ "Condition": "Bedingung",
+ "SNMP Version": "SNMP Version",
+ "Please enter a valid OID.": "Gib eine gültige OID ein.",
+ "Host Onesender": "Host Onesender",
+ "Token Onesender": "Token Onesender",
+ "Recipient Type": "Empfänger Typ",
+ "Private Number": "Private Nummer",
+ "Group ID": "Gruppen ID",
+ "privateOnesenderDesc": "Stell sicher, dass die Telefonnummer gültig ist. Um Nachrichten an private Telefonnummer zu senden, z. B.: 628123456789",
+ "groupOnesenderDesc": "Stell sicher, dass die GroupID gültig ist. Um Nachricht an die Gruppe zu senden, z.B.: 628123456789-342345",
+ "Add Remote Browser": "Remote-Browser hinzufügen",
+ "New Group": "Neue Gruppe",
+ "Group Name": "Gruppenname",
+ "OAuth2: Client Credentials": "OAuth2: Client-Anmeldeinformationen",
+ "Authentication Method": "Authentifizierungsmethode",
+ "Authorization Header": "Autorisierungs-Header",
+ "Form Data Body": "Formular Data Body",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "Client ID",
+ "Client Secret": "Client Secret",
+ "OAuth Scope": "OAuth Scope",
+ "Optional: Space separated list of scopes": "Optional: Durch Leerzeichen getrennte Liste der Scopes",
+ "Go back to home page.": "Zurück zur Startseite.",
+ "No tags found.": "Keine Tags gefunden.",
+ "Cannot connect to the socket server.": "Es kann keine Verbindung zum Socket-Server hergestellt werden.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "Conditions": "Bedingungen",
+ "conditionAdd": "Bedingung hinzufügen",
+ "conditionDelete": "Bedingung löschen",
+ "conditionAddGroup": "Gruppe hinzufügen",
+ "conditionValuePlaceholder": "Wert",
+ "equals": "ist gleich",
+ "not equals": "ist nicht gleich",
+ "contains": "enthält",
+ "not contains": "enthält nicht",
+ "starts with": "beginnt mit",
+ "not starts with": "beginnt nicht mit",
+ "ends with": "endet mit",
+ "not ends with": "endet nicht mit",
+ "less than": "weniger als",
+ "less than or equal to": "kleiner als oder gleich",
+ "greater than or equal to": "größer als oder gleich",
+ "record": "Eintrag",
+ "shrinkDatabaseDescriptionSqlite": "Datenbank {vacuum} für SQLite auslösen. {auto_vacuum} ist bereits aktiviert, aber dies defragmentiert die Datenbank nicht und packt auch nicht einzelne Datenbankseiten neu, wie es der Befehl {vacuum} tut.",
+ "ignoredTLSError": "TLS/SSL-Fehler wurden ignoriert",
+ "Message format": "Nachrichtenformat",
+ "Notification Channel": "Benachrichtigungskanal",
+ "Custom sound to override default notification sound": "Benutzerdefinierter Ton, um den standardmäßigen Benachrichtigungston zu ersetzen",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Zeitkritische Benachrichtigungen werden sofort zugestellt, auch wenn sich das Gerät im Nicht stören-Modus befindet.",
+ "Debug": "Debug",
+ "Copy": "Kopieren",
+ "CopyToClipboardError": "Konnte nicht in die Zwischenablage kopiert werden: {error}",
+ "CopyToClipboardSuccess": "Kopiert!",
+ "CurlDebugInfo": "Um den Monitor zu debuggen, kannst du dies entweder in das Terminal deines eigenen Rechners oder in das Terminal der Maschine, auf der Uptime Kuma läuft, einfügen und überprüfen, was du anforderst.{newiline}Bitte beachte Netzwerkunterschiede wie {firewalls}, {dns_resolvers} oder {docker_networks}.",
+ "firewalls": "Firewalls",
+ "dns resolvers": "DNS-Resolver",
+ "docker networks": "Docker-Netzwerke",
+ "CurlDebugInfoOAuth2CCUnsupported": "Der vollständige OAuth-Client-Credential-Flow wird in {curl} nicht unterstützt.{newline}Bitte besorge dir ein Bearer-Token und übergebe ihn über die {oauth2_bearer}-Option.",
+ "CurlDebugInfoProxiesUnsupported": "Die Unterstützung von Proxys im oben genannten {curl}-Befehl ist derzeit nicht implementiert.",
+ "Alphanumerical string and hyphens only": "Nur alphanumerische Zeichen und Bindestriche",
+ "Correct": "Korrekt",
+ "Harp": "Harfe",
+ "Doorbell": "Türklingel",
+ "Flute": "Flöte",
+ "Money": "Geld",
+ "Scifi": "Science Fiction",
+ "Elevator": "Aufzug",
+ "Guitar": "Gitarre",
+ "Sound": "Benachrichtigungston",
+ "Time Sensitive (iOS Only)": "Zeitkritisch (nur iOS)",
+ "From": "Von",
+ "Can be found on:": "Ist zu finden auf: {0}",
+ "The phone number of the recipient in E.164 format.": "Die Telefonnummer des Empfängers im E.164-Format.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Entweder eine Text-Absender-ID oder eine Telefonnummer im E.164-Format, wenn du Antworten erhalten möchtest.",
+ "Send rich messages": "Sende Rich-Text-Nachrichten",
+ "Fail": "Fehlgeschlagen",
+ "Reveal": "Enthüllen",
+ "Bubble": "Blase",
+ "Clear": "Klar",
+ "Pop": "Pop",
+ "Arcade": "Spielhalle",
+ "rabbitmqNodesRequired": "Setze die Knoten für diesen Monitor.",
+ "RabbitMQ Username": "RabbitMQ Benutzername",
+ "RabbitMQ Password": "RabbitMQ Passwort",
+ "SendGrid API Key": "SendGrid-API-Schlüssel",
+ "Separate multiple email addresses with commas": "Mehrere E-Mail-Adressen mit Kommas trennen",
+ "RabbitMQ Nodes": "RabbitMQ-Verwaltungsknoten",
+ "rabbitmqNodesDescription": "Gib die URL für die RabbitMQ-Verwaltungsknoten einschließlich Protokoll und Port ein. Beispiel: {0}",
+ "rabbitmqNodesInvalid": "Benutze eine vollständig qualifizierte URL (beginnend mit 'http') für RabbitMQ-Knoten.",
+ "rabbitmqHelpText": "Um den Monitor zu benutzen, musst du das Management Plugin in deinem RabbitMQ-Setup aktivieren. Weitere Informationen siehe {rabitmq_documentation}.",
+ "aboutSlackUsername": "Ändert den Anzeigenamen des Absenders. Wenn du jemanden erwähnen möchtest, füge ihn stattdessen in den Namen ein.",
+ "templateHostnameOrURL": "Hostname oder URL",
+ "telegramUseTemplate": "Benutzerdefinierte Nachrichtenvorlage verwenden",
+ "telegramTemplateFormatDescription": "Telegram ermöglicht die Verwendung verschiedener Markup-Sprachen für Nachrichten, siehe Telegram {0} für spezifische Details.",
+ "Plain Text": "Nur Text",
+ "templateServiceName": "Service-Name",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "YZJ Robot Token": "YZJ Robot Token",
+ "templateStatus": "Status",
+ "telegramUseTemplateDescription": "Wenn diese Option aktiviert ist, wird die Nachricht unter Verwendung einer benutzerdefinierten Vorlage gesendet.",
+ "Message Template": "Nachrichtenvorlage",
+ "Template Format": "Vorlagenformat",
+ "wayToGetWahaApiUrl": "Die URL deiner WAHA-Instanz.",
+ "wahaSession": "Sitzung",
+ "wahaChatId": "Chat-ID (Telefonnummer / Kontakt-ID / Gruppen-ID)",
+ "wayToGetWahaApiKey": "API-Schlüssel ist der Wert der WHATSAPP_API_KEY-Umgebungsvariable, den du beim Ausführen von WAHA verwendet hast.",
+ "wayToGetWahaSession": "Von dieser Sitzung aus sendet WAHA Benachrichtigungen an die Chat-ID. Du kannst sie im WAHA Dashboard finden.",
+ "wayToWriteWahaChatId": "Die Telefonnummer mit internationaler Vorwahl, ohne den anfänglichen Pluszeichen ({0}), die Kontakt-ID ({1}) oder die Gruppen-ID ({2}). Die Benachrichtigungen werden an diese Chat-ID von der WAHA-Sitzung gesendet.",
+ "telegramServerUrlDescription": "Um die Telegram-Bot-API-Beschränkungen aufzuheben oder in gesperrten Gebieten (China, Iran usw.) Zugriff zu erhalten. Weitere Informationen findest du unter {0}. Standard: {1}",
+ "telegramServerUrl": "(Optional) Server URL",
+ "Font Twemoji by Twitter licensed under": "Schriftart Twemoji von Twitter lizenziert unter"
}
diff --git a/src/lang/el-GR.json b/src/lang/el-GR.json
index 7857e06e9..127666382 100644
--- a/src/lang/el-GR.json
+++ b/src/lang/el-GR.json
@@ -31,13 +31,13 @@
"confirmDisableTwoFAMsg": "Είστε βέβαιοι ότι θέλετε να απενεργοποιήσετε το 2FA;",
"Settings": "Ρυθμίσεις",
"Dashboard": "Πίνακας",
- "New Update": "Νέα αναβάθμιση",
+ "New Update": "Νέα ενημέρωση",
"Language": "Γλώσσα",
"Appearance": "Εμφάνιση",
"Theme": "Θέμα",
"General": "Γενικά",
"Primary Base URL": "Κύρια βασική διεύθυνση URL",
- "Version": "Εκδοχή",
+ "Version": "Έκδοση",
"Check Update On GitHub": "Ελέγξτε για Ενημέρωση στο GitHub",
"List": "Λίστα",
"Add": "Προσθήκη",
@@ -56,7 +56,7 @@
"Resume": "Συνέχιση",
"Edit": "Επεξεργασία",
"Delete": "Διαγράφη",
- "Current": "Τρέχον",
+ "Current": "Τωρινό",
"Uptime": "Χρόνος λειτουργίας",
"Cert Exp.": "Λήξη Πιστοπ.",
"day": "ημέρα | ημέρες",
@@ -363,7 +363,6 @@
"Discard": "Απορρίψει",
"Cancel": "Ακυρο",
"Powered by": "Με την υποστήριξη του",
- "shrinkDatabaseDescription": "Ενεργοποίηση βάσης δεδομένων VACUUM για SQLite. Εάν η βάση δεδομένων σας έχει δημιουργηθεί μετά την έκδοση 1.10.0, το AUTO_VACUUM είναι ήδη ενεργοποιημένο και αυτή η ενέργεια δεν χρειάζεται.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API κωδικός πρόσβασης",
@@ -700,13 +699,13 @@
"Add New Tag": "Πρόσθεσε νέα ετικέτα",
"setupDatabaseMariaDB": "Συνδεθείτε με εξωτερική βάση δεδομένων MariaDB. Θα πρέπει να ορίσετε τα στοιχεία σύνδεσης της βάσης δεδομένων.",
"setupDatabaseChooseDatabase": "Ποια βάση δεδομένων θέλετε να χρησιμοποιήσετε;",
- "setupDatabaseEmbeddedMariaDB": "Δεν χρειάζεται να ρυθμίσετε τίποτε. Η εικόνα Docker έχει ενσωματώσει και ρυθμίσει μια βάση δεδομένων MariaDB για εσάς αυτόματα. Το Uptime Kuma θα συνδεθεί με την βάση δεδομένων μέσω unix socket.",
+ "setupDatabaseEmbeddedMariaDB": "Δεν χρειάζεται να ορίσετε τίποτε. Το Docker Image έχει ενθέσειι και διαμορφώσει μια βάση δεδομένων MariaDB για εσάς αυτόματα. Το Uptime Kuma θα συνδεθεί με αυτήν την βάση δεδομένων μέσω unix socket.",
"setupDatabaseSQLite": "Ένα απλό αρχείο βάσης δεδομένων, προτεινόμενο για εγκαταστάσεις μικρής κλίμακας. Πρίν από την έκδοση 2.0.0, το Uptime Kuma χρησιμοποιούσε το SQLite ως την προεπιλεγμένη βάση δεδομένων.",
"Cannot connect to the socket server": "Δεν είναι δυνατή η σύνδεση με τον διακομιστή socket",
- "Reconnecting...": "Επανασύνδεση",
+ "Reconnecting...": "Επανασύνδεση...",
"Home": "Αρχική",
- "settingUpDatabaseMSG": "Ρύθμιση της βάσης δεδομένων. Μπορεί να διαρκέσει λίγο, παρακαλώ να είστε υπομονετικοί.",
- "dbName": "Όνομα Βάσης Δεδομένων",
+ "settingUpDatabaseMSG": "Ρύθμιση της βάσης δεδομένων. Μπορεί να διαρκέσει λίγη ώρα, παρακαλώ κάνετε υπομονετικοί.",
+ "dbName": "Όνομα βάσης δεδομένων",
"Invert Keyword": "Αντιστροφή Λέξης-Κλειδιού",
"Expected Value": "Αναμενόμενη Τιμή",
"Json Query": "Ερώτημα Json"
diff --git a/src/lang/en.json b/src/lang/en.json
index 1382707d5..d13cf3ae6 100644
--- a/src/lang/en.json
+++ b/src/lang/en.json
@@ -49,10 +49,13 @@
"Uptime": "Uptime",
"Cert Exp.": "Cert Exp.",
"Monitor": "Monitor | Monitors",
+ "now": "now",
+ "time ago": "{0} ago",
"day": "day | days",
"-day": "-day",
"hour": "hour",
"-hour": "-hour",
+ "-year": "-year",
"Response": "Response",
"Ping": "Ping",
"Monitor Type": "Monitor Type",
@@ -61,6 +64,7 @@
"Expected Value": "Expected Value",
"Json Query Expression": "Json Query Expression",
"Friendly Name": "Friendly Name",
+ "defaultFriendlyName": "New Monitor",
"URL": "URL",
"Hostname": "Hostname",
"Host URL": "Host URL",
@@ -79,8 +83,9 @@
"resendEveryXTimes": "Resend every {0} times",
"resendDisabled": "Resend disabled",
"retriesDescription": "Maximum retries before the service is marked as down and a notification is sent",
+ "ignoredTLSError": "TLS/SSL errors have been ignored",
"ignoreTLSError": "Ignore TLS/SSL errors for HTTPS websites",
- "ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection",
+ "ignoreTLSErrorGeneral": "Ignore TLS/SSL error for connection",
"upsideDownModeDescription": "Flip the status upside down. If the service is reachable, it is DOWN.",
"maxRedirectDescription": "Maximum number of redirects to follow. Set to 0 to disable redirects.",
"Upside Down Mode": "Upside Down Mode",
@@ -227,6 +232,9 @@
"templateMonitorJSON": "object describing the monitor",
"templateLimitedToUpDownCertNotifications": "only available for UP/DOWN/Certificate expiry notifications",
"templateLimitedToUpDownNotifications": "only available for UP/DOWN notifications",
+ "templateServiceName": "service name",
+ "templateHostnameOrURL": "hostname or URL",
+ "templateStatus": "status",
"webhookAdditionalHeadersTitle": "Additional Headers",
"webhookAdditionalHeadersDesc": "Sets additional headers sent with the webhook. Each header should be defined as a JSON key/value.",
"webhookBodyPresetOption": "Preset - {0}",
@@ -263,6 +271,7 @@
"Security": "Security",
"Steam API Key": "Steam API Key",
"Shrink Database": "Shrink Database",
+ "shrinkDatabaseDescriptionSqlite": "Trigger database {vacuum} for SQLite. {auto_vacuum} is already enabled but this does not defragment the database nor repack individual database pages the way that the {vacuum} command does.",
"Pick a RR-Type...": "Pick a RR-Type…",
"Pick Accepted Status Codes...": "Pick Accepted Status Codes…",
"Default": "Default",
@@ -299,7 +308,6 @@
"selectedMonitorCount": "Selected: {0}",
"Check/Uncheck": "Check/Uncheck",
"Powered by": "Powered by",
- "shrinkDatabaseDescription": "Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
"Customize": "Customize",
"Custom Footer": "Custom Footer",
"Custom CSS": "Custom CSS",
@@ -417,8 +425,13 @@
"telegramSendSilentlyDescription": "Sends the message silently. Users will receive a notification with no sound.",
"telegramProtectContent": "Protect Forwarding/Saving",
"telegramProtectContentDescription": "If enabled, the bot messages in Telegram will be protected from forwarding and saving.",
+ "telegramUseTemplate": "Use custom message template",
+ "telegramUseTemplateDescription": "If enabled, the message will be sent using a custom template.",
+ "telegramTemplateFormatDescription": "Telegram allows using different markup languages for messages, see Telegram {0} for specifc details.",
"supportTelegramChatID": "Support Direct Chat / Group / Channel's Chat ID",
"wayToGetTelegramChatID": "You can get your chat ID by sending a message to the bot and going to this URL to view the chat_id:",
+ "telegramServerUrl": "(Optional) Server Url",
+ "telegramServerUrlDescription": "To lift Telegram's bot api limitations or gain access in blocked areas (China, Iran, etc). For more information click {0}. Default: {1}",
"YOUR BOT TOKEN HERE": "YOUR BOT TOKEN HERE",
"chatIDNotFound": "Chat ID is not found; please send a message to this bot first",
"disableCloudflaredNoAuthMsg": "You are in No Auth mode, a password is not required.",
@@ -441,6 +454,7 @@
"backupOutdatedWarning": "Deprecated: Since a lot of features were added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
"backupRecommend": "Please backup the volume or the data folder (./data/) directly instead.",
"Optional": "Optional",
+ "and": "and",
"or": "or",
"sameAsServerTimezone": "Same as Server Timezone",
"startDateTime": "Start Date/Time",
@@ -504,6 +518,7 @@
"Clone": "Clone",
"cloneOf": "Clone of {0}",
"smtp": "Email (SMTP)",
+ "Use HTML for custom E-mail body": "Use HTML for custom E-mail body",
"secureOptionNone": "None / STARTTLS (25, 587)",
"secureOptionTLS": "TLS (465)",
"Ignore TLS Error": "Ignore TLS Error",
@@ -514,9 +529,6 @@
"leave blank for default subject": "leave blank for default subject",
"emailCustomBody": "Custom Body",
"leave blank for default body": "leave blank for default body",
- "emailTemplateServiceName": "Service Name",
- "emailTemplateHostnameOrURL": "Hostname or URL",
- "emailTemplateStatus": "Status",
"emailTemplateMonitorJSON": "object describing the monitor",
"emailTemplateHeartbeatJSON": "object describing the heartbeat",
"emailTemplateMsg": "message of the notification",
@@ -716,6 +728,7 @@
"Icon Emoji": "Icon Emoji",
"signalImportant": "IMPORTANT: You cannot mix groups and numbers in recipients!",
"aboutWebhooks": "More info about Webhooks on: {0}",
+ "aboutSlackUsername": "Changes the display name of the message sender. If you want to mention someone, include it in the friendly name instead.",
"aboutChannelName": "Enter the channel name on {0} Channel Name field if you want to bypass the Webhook channel. Ex: #other-channel",
"aboutKumaURL": "If you leave the Uptime Kuma URL field blank, it will default to the Project GitHub page.",
"smtpDkimSettings": "DKIM Settings",
@@ -746,12 +759,26 @@
"smseagleTo": "Phone number(s)",
"smseagleGroup": "Phonebook group name(s)",
"smseagleContact": "Phonebook contact name(s)",
+ "smseagleGroupV2": "Phonebook group ID(s)",
+ "smseagleContactV2": "Phonebook contact ID(s)",
"smseagleRecipientType": "Recipient type",
"smseagleRecipient": "Recipient(s) (multiple must be separated with comma)",
"smseagleToken": "API Access token",
"smseagleUrl": "Your SMSEagle device URL",
- "smseagleEncoding": "Send as Unicode",
- "smseaglePriority": "Message priority (0-9, default = 0)",
+ "smseagleEncoding": "Send as Unicode (default=GSM-7)",
+ "smseaglePriority": "Message priority (0-9, highest priority = 9)",
+ "smseagleMsgType": "Message type",
+ "smseagleMsgSms": "Sms message (default)",
+ "smseagleMsgRing": "Ring call",
+ "smseagleMsgTts": "Text-to-speech call",
+ "smseagleMsgTtsAdvanced": "Text-to-speech Advanced call",
+ "smseagleDuration": "Duration (in seconds)",
+ "smseagleTtsModel": "Text-to-speech model ID",
+ "smseagleApiType": "API version",
+ "smseagleApiv1": "APIv1 (for existing projects and backward compatibility)",
+ "smseagleApiv2": "APIv2 (recommended for new integrations)",
+ "smseagleDocs": "Check documentation or APIv2 availability: {0}",
+ "smseagleComma": "Multiple must be separated with comma",
"smspartnerApiurl": "You can find your API key in your dashboard at {0}",
"smspartnerPhoneNumber": "Phone number(s)",
"smspartnerPhoneNumberHelptext": "The number must be in the international format {0}, {1}. Multiple numbers must be separated by {2}",
@@ -773,6 +800,7 @@
"PushDeer Server": "PushDeer Server",
"pushDeerServerDescription": "Leave blank to use the official server",
"PushDeer Key": "PushDeer Key",
+ "SpugPush Template Code": "Template Code",
"wayToGetClickSendSMSToken": "You can get API Username and API Key from {0} .",
"Custom Monitor Type": "Custom Monitor Type",
"Google Analytics ID": "Google Analytics ID",
@@ -876,8 +904,12 @@
"nostrRecipientsHelp": "npub format, one per line",
"showCertificateExpiry": "Show Certificate Expiry",
"noOrBadCertificate": "No/Bad Certificate",
+ "cacheBusterParam": "Add the {0} parameter",
+ "cacheBusterParamDescription": "Randomly generated parameter to skip caches.",
"gamedigGuessPort": "Gamedig: Guess Port",
"gamedigGuessPortDescription": "The port used by Valve Server Query Protocol may be different from the client port. Try this if the monitor cannot connect to your server.",
+ "Message format": "Message format",
+ "Send rich messages": "Send rich messages",
"Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
"wayToGetBitrix24Webhook": "You can create a webhook by following the steps at {0}",
"bitrix24SupportUserID": "Enter your user ID in Bitrix24. You can find out the ID from the link by going to the user's profile.",
@@ -970,5 +1002,110 @@
"privateOnesenderDesc": "Make sure the number phone is valid. To send message into private number phone, ex: 628123456789",
"groupOnesenderDesc": "Make sure the GroupID is valid. To send message into Group, ex: 628123456789-342345",
"Group ID": "Group ID",
- "wayToGetOnesenderUrlandToken":"You can get the URL and Token by going to the Onesender website. More info {0}"
+ "wayToGetOnesenderUrlandToken": "You can get the URL and Token by going to the Onesender website. More info {0}",
+ "Add Remote Browser": "Add Remote Browser",
+ "New Group": "New Group",
+ "Group Name": "Group Name",
+ "OAuth2: Client Credentials": "OAuth2: Client Credentials",
+ "Authentication Method": "Authentication Method",
+ "Authorization Header": "Authorization Header",
+ "Form Data Body": "Form Data Body",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "Client ID",
+ "Client Secret": "Client Secret",
+ "OAuth Scope": "OAuth Scope",
+ "Optional: Space separated list of scopes": "Optional: Space separated list of scopes",
+ "Go back to home page.": "Go back to home page.",
+ "No tags found.": "No tags found.",
+ "Lost connection to the socket server.": "Lost connection to the socket server.",
+ "Cannot connect to the socket server.": "Cannot connect to the socket server.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "signl4Docs": "You can find more information about how to configure SIGNL4 and how to obtain the SIGNL4 webhook URL in the {0}.",
+ "Conditions": "Conditions",
+ "conditionAdd": "Add Condition",
+ "conditionDelete": "Delete Condition",
+ "conditionAddGroup": "Add Group",
+ "conditionDeleteGroup": "Delete Group",
+ "conditionValuePlaceholder": "Value",
+ "equals": "equals",
+ "not equals": "not equals",
+ "contains": "contains",
+ "not contains": "not contains",
+ "starts with": "starts with",
+ "not starts with": "not starts with",
+ "ends with": "ends with",
+ "not ends with": "not ends with",
+ "less than": "less than",
+ "greater than": "greater than",
+ "less than or equal to": "less than or equal to",
+ "greater than or equal to": "greater than or equal to",
+ "record": "record",
+ "Notification Channel": "Notification Channel",
+ "Sound": "Sound",
+ "Alphanumerical string and hyphens only": "Alphanumerical string and hyphens only",
+ "Arcade": "Arcade",
+ "Correct": "Correct",
+ "Fail": "Fail",
+ "Harp": "Harp",
+ "Reveal": "Reveal",
+ "Bubble": "Bubble",
+ "Doorbell": "Doorbell",
+ "Flute": "Flute",
+ "Money": "Money",
+ "Scifi": "Scifi",
+ "Clear": "Clear",
+ "Elevator": "Elevator",
+ "Guitar": "Guitar",
+ "Pop": "Pop",
+ "Custom sound to override default notification sound": "Custom sound to override default notification sound",
+ "Time Sensitive (iOS Only)": "Time Sensitive (iOS Only)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.",
+ "From": "From",
+ "Can be found on:": "Can be found on: {0}",
+ "The phone number of the recipient in E.164 format.": "The phone number of the recipient in E.164 format.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.",
+ "RabbitMQ Nodes": "RabbitMQ Management Nodes",
+ "rabbitmqNodesDescription": "Enter the URL for the RabbitMQ management nodes including protocol and port. Example: {0}",
+ "rabbitmqNodesRequired": "Please set the nodes for this monitor.",
+ "rabbitmqNodesInvalid": "Please use a fully qualified (starting with 'http') URL for RabbitMQ nodes.",
+ "RabbitMQ Username": "RabbitMQ Username",
+ "RabbitMQ Password": "RabbitMQ Password",
+ "rabbitmqHelpText": "To use the monitor, you will need to enable the Management Plugin in your RabbitMQ setup. For more information, please consult the {rabitmq_documentation}.",
+ "SendGrid API Key": "SendGrid API Key",
+ "Separate multiple email addresses with commas": "Separate multiple email addresses with commas",
+ "pingCountLabel": "Max Packets",
+ "pingCountDescription": "Number of packets to send before stopping",
+ "pingNumericLabel": "Numeric Output",
+ "pingNumericDescription": "If checked, IP addresses will be output instead of symbolic hostnames",
+ "pingGlobalTimeoutLabel": "Global Timeout",
+ "pingGlobalTimeoutDescription": "Total time in seconds before ping stops, regardless of packets sent",
+ "pingPerRequestTimeoutLabel": "Per-Ping Timeout",
+ "pingPerRequestTimeoutDescription": "This is the maximum waiting time (in seconds) before considering a single ping packet lost",
+ "pingIntervalAdjustedInfo": "Interval adjusted based on packet count, global timeout and per-ping timeout",
+ "smtpHelpText": "'SMTPS' tests that SMTP/TLS is working; 'Ignore TLS' connects over plaintext; 'STARTTLS' connects, issues a STARTTLS command and verifies the server certificate. None of these send an email.",
+ "Custom URL": "Custom URL",
+ "customUrlDescription": "Will be used as the clickable URL instead of the monitor's one.",
+ "OneChatAccessToken": "OneChat Access Token",
+ "OneChatUserIdOrGroupId": "OneChat User ID or Group ID",
+ "OneChatBotId": "OneChat Bot ID",
+ "wahaSession": "Session",
+ "wahaChatId": "Chat ID (Phone Number / Contact ID / Group ID)",
+ "wayToGetWahaApiUrl": "Your WAHA Instance URL.",
+ "wayToGetWahaApiKey": "API Key is WHATSAPP_API_KEY environment variable value you used to run WAHA.",
+ "wayToGetWahaSession": "From this session WAHA sends notifications to Chat ID. You can find it in WAHA Dashboard.",
+ "wayToWriteWahaChatId": "The phone number with the international prefix, but without the plus sign at the start ({0}), the Contact ID ({1}) or the Group ID ({2}). Notifications are sent to this Chat ID from WAHA Session.",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "YZJ Robot Token": "YZJ Robot token",
+ "Plain Text": "Plain Text",
+ "Message Template": "Message Template",
+ "Template Format": "Template Format",
+ "Font Twemoji by Twitter licensed under": "Font Twemoji by Twitter licensed under",
+ "smsplanetApiToken": "Token for the SMSPlanet API",
+ "smsplanetApiDocs": "Detailed information on obtaining API tokens can be found in {the_smsplanet_documentation}.",
+ "the smsplanet documentation": "the smsplanet documentation",
+ "Phone numbers": "Phone numbers",
+ "Sender name": "Sender name",
+ "smsplanetNeedToApproveName": "Needs to be approved in the client panel",
+ "Disable URL in Notification": "Disable URL in Notification"
}
diff --git a/src/lang/enm.json b/src/lang/enm.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/src/lang/enm.json
@@ -0,0 +1 @@
+{}
diff --git a/src/lang/es-ES.json b/src/lang/es-ES.json
index 3151ef954..91b221f99 100644
--- a/src/lang/es-ES.json
+++ b/src/lang/es-ES.json
@@ -9,7 +9,7 @@
"passwordNotMatchMsg": "La contraseña repetida no coincide.",
"notificationDescription": "Por favor asigna una notificación a el/los monitor(es) para hacerlos funcional(es).",
"keywordDescription": "Buscar palabra clave en HTML plano o respuesta JSON. La búsqueda es sensible a mayúsculas.",
- "pauseDashboardHome": "Pausado",
+ "pauseDashboardHome": "Pausar",
"deleteMonitorMsg": "¿Seguro que quieres eliminar este monitor?",
"deleteNotificationMsg": "¿Seguro que quieres eliminar esta notificación para todos los monitores?",
"resolverserverDescription": "Cloudflare es el servidor por defecto, puedes cambiar el servidor de resolución en cualquier momento.",
@@ -396,7 +396,6 @@
"successMessage": "Mensaje de éxito",
"Pick Accepted Status Codes...": "Seleccione Códigos de Estado Aceptados…",
"Post": "Post",
- "shrinkDatabaseDescription": "Activar VACUUM para SQLite. Si tu base de datos fue creada después 1.10.0, AUTO_VACUUM ya está habilitada y esta acción no es necesaria.",
"deleteStatusPageMsg": "¿Estas seguro que quieres eliminar esta página de estado?",
"default": "Predeterminado",
"enabled": "Habilitado",
@@ -558,7 +557,7 @@
"affectedMonitorsDescription": "Selecciona los monitores que se ven afectados por el mantenimiento actual",
"affectedStatusPages": "Muestra este mensaje de mantenimiento en las páginas de estado seleccionadas",
"atLeastOneMonitor": "Selecciona al menos un monitor afectado",
- "endpoint": "endpoint",
+ "endpoint": "punto final",
"promosmsPassword": "Contraseña API",
"pushoversounds pushover": "Pushover (predeterminado)",
"pushoversounds bike": "Bicicleta",
@@ -655,7 +654,7 @@
"gorush": "Gorush",
"squadcast": "Squadcast",
"Maintenance Time Window of a Day": "Ventana de tiempo de mantenimiento de un día",
- "Effective Date Range": "Rango de fecha efectivo (opcional)",
+ "Effective Date Range": "Rango de Fecha Efectivo(Opcional)",
"Free Mobile User Identifier": "Identificador de Usuario de Free Mobile",
"Gateway Type": "Tipo de puerta de enlace",
"SMSManager": "SMSManager",
@@ -678,7 +677,7 @@
"alertaRecoverState": "Estado de Recuperación",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "Nombre de usuario de API (inc. webapi_ prefix)",
- "smseagleGroup": "Nombre/s del grupo de la guía telefónica",
+ "smseagleGroup": "Nombre(s) de grupo(s) de Guía Telefónica",
"Unpin": "Dejar de Fijar",
"Prefix Custom Message": "Prefijo personalizado",
"markdownSupported": "Sintaxis de Markdown soportada",
@@ -819,7 +818,7 @@
"showCertificateExpiry": "Mostrar caducidad del certificado",
"noOrBadCertificate": "Certificado Nulo/Incorrecto",
"aboutNotifyChannel": "Notificar canal activará una notificación de escritorio o móvil para todos los miembros del canal, ya sea que su disponibilidad esté activa o ausente.",
- "Server URL should not contain the nfty topic": "La URL del servidor no debe contener el tema nfty",
+ "Server URL should not contain the nfty topic": "La URL del servidor no puede incluír el tópico de ntfy",
"PushDeer Server": "Servidor PushDeer",
"pushDeerServerDescription": "Dejar en blanco para usar el servidor oficial",
"Badge Duration (in hours)": "Duración de la insignia (en horas)",
@@ -830,7 +829,7 @@
"Badge value (For Testing only.)": "Valor de la insignia (Solo para pruebas.)",
"Enable Kafka Producer Auto Topic Creation": "Habilitar la Creación Automática de Temas del Productor de Kafka",
"noGroupMonitorMsg": "No disponible. Cree primero un monitor de grupo.",
- "wayToGetFlashDutyKey": "Puede ir a Canal -> (Seleccionar un canal) -> Integraciones -> Agregar una nueva página de integración, agregar un 'Evento personalizado' para obtener una dirección push, copiar la clave de integración en la dirección. Para mayor información por favor visite",
+ "wayToGetFlashDutyKey": "Puedes ir a Canal -> (Seleccionar un Canal) -> Integraciones -> Agregar una nueva integración, agregar un 'Uptime Kuma' para obtener una dirección de envío, copiar la Clave de Integración en la dirección. Para más información, por favor visita",
"gamedigGuessPort": "Gamedig: Adivinar el puerto",
"gamedigGuessPortDescription": "El puerto utilizado por Valve Server Query Protocol puede ser diferente del puerto del cliente. Pruebe esto si el monitor no puede conectarse a su servidor.",
"twilioApiKey": "Clave de la API (opcional)",
@@ -838,7 +837,7 @@
"styleElapsedTimeShowNoLine": "Mostrar (sin línea)",
"styleElapsedTimeShowWithLine": "Mostrar (Con línea)",
"webhookCustomBodyDesc": "Define un cuerpo HTTP personalizado para la petición. Las variables que puedes usar como plantillas son {msg}, {heartbeat}, y {monitor}.",
- "webhookBodyPresetOption": "Preajuste- {0}",
+ "webhookBodyPresetOption": "Preajuste - {0}",
"tailscalePingWarning": "Para utilizar el monitor Tailscale Ping, debe instalar Uptime Kuma sin Docker y también instalar el cliente Tailscale en su servidor.",
"Bark API Version": "Versión de la API Bark",
"monitorToastMessagesDescription": "Las notificaciones Toast para monitores desaparecen después de un tiempo dado en segundos. Establecer a -1 desactiva el tiempo de espera. Si se establece en 0, se desactivan las notificaciones.",
@@ -846,7 +845,7 @@
"monitorToastMessagesLabel": "Monitorizar las notificaciones Toast",
"toastSuccessTimeout": "Tiempo de espera para notificaciones de éxito",
"toastErrorTimeout": "Tiempo de espera para notificaciones de error",
- "setupDatabaseChooseDatabase": "¿Qué base de datos desea utilizar?",
+ "setupDatabaseChooseDatabase": "¿Qué base de datos te gustaría usar?",
"setupDatabaseEmbeddedMariaDB": "No necesitas configurar nada. Esta imagen de Docker tiene incorporado y configurado MariaDB para ti automáticamente. Uptime Kuma se conectará a esta base de datos a través de un socket Unix.",
"setupDatabaseMariaDB": "Conectarse a una base de datos MariaDB externa. Debe configurar la información de conexión a la base de datos.",
"setupDatabaseSQLite": "Un archivo de base de datos simple, recomendado para despliegues a pequeña escala. Antes de la versión 2.0.0, Uptime Kuma utilizaba SQLite como base de datos predeterminada.",
@@ -856,26 +855,26 @@
"2faEnabled": "2FA habilitado.",
"2faDisabled": "2FA deshabilitado.",
"liquidIntroduction": "La plantilla se logra a través del lenguaje de plantillas Liquid. Consulte {0} para obtener instrucciones de uso. Estas son las variables disponibles:",
- "templateLimitedToUpDownCertNotifications": "sólo disponible para las notificaciones de LEVANTADO/CAÍDO/Caducidad de certificado",
+ "templateLimitedToUpDownCertNotifications": "solo disponible para notificaciones FUNCIONAL/CAÍDO/Caducidad de certificado",
"emailTemplateMsg": "mensaje de la notificación",
- "emailTemplateLimitedToUpDownNotification": "sólo disponible para pulsos LEVANTADO/CAÍDO, en caso contrario null",
+ "emailTemplateLimitedToUpDownNotification": "sólo disponible para latidos FUNCIONAL/CAÍDO, de lo contrario nulo",
"setup a new monitor group": "configurar un nuevo grupo de monitores",
"authUserInactiveOrDeleted": "El usuario está inactivo o eliminado.",
- "2faAlreadyEnabled": "2FA ya está activado.",
- "remoteBrowsersDescription": "Los navegadores remotos son una alternativa a la ejecución local de Chromium. Configúralos con un servicio como browserless.io o conéctate a uno propio",
+ "2faAlreadyEnabled": "2FA ya está habilitado.",
+ "remoteBrowsersDescription": "Los navegadores remotos son una alternativa a ejecutar Chromium localmente. Configúralos con un servicio como browserless.io o conéctalos a tu propio servidor",
"successKeyword": "Palabra clave de éxito",
"successKeywordExplanation": "MQTT Palabra clave que se considerará como éxito",
"Remove the expiry notification": "Eliminar la notificación de vencimiento",
"Browser Screenshot": "Captura de pantalla del navegador",
- "emailCustomisableContent": "Contenidos personalizables",
- "smtpLiquidIntroduction": "Los dos campos siguientes son planificables mediante el lenguaje de plantillas Liquid. Consulte las instrucciones de uso en {0}. Estas son las variables disponibles:",
- "leave blank for default subject": "dejar en blanco para el asunto por defecto",
+ "emailCustomisableContent": "Contenido personalizable",
+ "smtpLiquidIntroduction": "Los dos campos siguientes pueden crear plantillas mediante el lenguaje de plantillas Liquid. Consulte {0} para obtener instrucciones de uso. Estas son las variables disponibles:",
+ "leave blank for default subject": "dejar en blanco para el asunto predeterminado",
"emailCustomBody": "Cuerpo personalizado",
"successAuthChangePassword": "La contraseña se ha actualizado correctamente.",
- "successDeleted": "Eliminado con éxito.",
+ "successDeleted": "Borrado exitosamente.",
"successEdited": "Editado con éxito.",
- "successDisabled": "Desactivado con éxito.",
- "GrafanaOncallUrl": "Grafana URL de llamada",
+ "successDisabled": "Deshabilitado con éxito.",
+ "GrafanaOncallUrl": "URL de llamada de Grafana",
"Reset Token": "Restablecer Token",
"Remote Browsers": "Navegadores remotos",
"Remote Browser": "Navegador remoto",
@@ -886,19 +885,19 @@
"successResumed": "Reanudado con éxito.",
"successPaused": "Pausado con éxito.",
"successBackupRestored": "Copia de seguridad restaurada correctamente.",
- "successEnabled": "Activado con éxito.",
+ "successEnabled": "Habilitado exitosamente.",
"tagNotFound": "Etiqueta no encontrada.",
- "foundChromiumVersion": "Encontrado Chromium/Chrome. Versión: {0}",
+ "foundChromiumVersion": "Se encontró Chromium/Chrome. Versión: {0}",
"pushViewCode": "¿Cómo utilizar el monitor Push? (Ver código)",
"pushOthers": "Otros",
"programmingLanguages": "Lenguajes de Programación",
"templateMsg": "mensaje de la notificación",
"templateMonitorJSON": "objeto que describe el monitor",
- "templateLimitedToUpDownNotifications": "sólo disponible para notificaciones LEVANTADO/CAÍDO",
+ "templateLimitedToUpDownNotifications": "sólo disponible para notificaciones FUNCIONAL/CAIDO",
"Add a new expiry notification day": "Añadir una nueva notificación de vencimiento",
- "leave blank for default body": "dejar en blanco para el cuerpo por defecto",
- "emailTemplateServiceName": "Nombre del servicio",
- "emailTemplateHostnameOrURL": "Nombre del host o URL",
+ "leave blank for default body": "dejar en blanco para el cuerpo predeterminado",
+ "emailTemplateServiceName": "Nombre del Servicio",
+ "emailTemplateHostnameOrURL": "Nombre del Host o URL",
"emailTemplateStatus": "Estado",
"emailTemplateMonitorJSON": "objeto que describe el monitor",
"openModalTo": "abrir modal a {0}",
@@ -912,16 +911,181 @@
"settingUpDatabaseMSG": "Configurando la base de datos. Puede tomar un tiempo, sea paciente, por favor.",
"Search monitored sites": "Buscar sitios monitoreados",
"statusPageSpecialSlugDesc": "Identificador único especial {0}: esta página será mostrada cuando no se proporcione ningún identificador único",
- "emailTemplateHeartbeatJSON": "Objeto que describe la señal de vida",
- "ntfyPriorityHelptextAllEvents": "Todos los eventos son enviados con la máxima prioridad",
+ "emailTemplateHeartbeatJSON": "objeto que describe el latido",
+ "ntfyPriorityHelptextAllEvents": "Todos los eventos se envían con la máxima prioridad",
"ntfyPriorityHelptextAllExceptDown": "Todos los eventos son enviados con esta prioridad, excepto los eventos {0}, que tienen una prioridad de {1}",
- "templateHeartbeatJSON": "Objeto que describe el latido",
+ "templateHeartbeatJSON": "objeto que describe el latido",
"What is a Remote Browser?": "¿Qué es un Navegador Remoto?",
- "Your User ID": "Tu ID de usuario",
+ "Your User ID": "Su ID de usuario",
"Alphanumeric (recommended)": "Alfanumérico (recomendado)",
"Destination": "Destino",
"wayToGetWhapiUrlAndToken": "Puedes obtener la URL de la API y el token accediendo al canal que desee desde {0}",
"API URL": "API URL",
"Allow Long SMS": "Permitir SMS largo",
- "cellsyntDestination": "Número de teléfono del destinatario en formato internacional precedido de 00, seguido del código de país, ej. 00447920110000 para el número del Reino Unido 07920 110 000 (máximo 17 dígitos en total). Máximo 25.000 destinatarios, separados por comas, por solicitud HTTP."
+ "cellsyntDestination": "Número de teléfono del destinatario en formato internacional precedido de 00, seguido del código de país, ej. 00447920110000 para el número del Reino Unido 07920 110 000 (máximo 17 dígitos en total). Máximo 25.000 destinatarios, separados por comas, por solicitud HTTP.",
+ "Refresh Interval Description": "La página de estado se refrescará cada {0} segundos",
+ "Refresh Interval": "Intervalo de refresco",
+ "ignoreTLSErrorGeneral": "Ignorar errores SSL/TLS durante la conexión",
+ "documentationOf": "Documentación de {0}",
+ "wayToGetHeiiOnCallDetails": "Cómo obtener el Trigger ID y las API Keys se explica en la {documentación}",
+ "Command": "Comando",
+ "wayToGetThreemaGateway": "Puedes registrarte para Threema Gateway {0}.",
+ "threemaRecipient": "Destinatario",
+ "threemaRecipientType": "Tipo de Destinatario",
+ "threemaRecipientTypeIdentity": "ID de Threema",
+ "threemaRecipientTypeIdentityFormat": "8 caracteres",
+ "threemaRecipientTypePhone": "Número de Teléfono",
+ "threemaRecipientTypeEmail": "Dirección de Correo Electrónico",
+ "threemaSenderIdentity": "ID de Gateway",
+ "threemaSenderIdentityFormat": "8 caracteres, generalmente comienza con *",
+ "Host URL": "URL del anfitrión",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Ingresa el nombre del host del servidor al que deseas conectarte o {localhost} si deseas usar un {local_mta}",
+ "smspartnerPhoneNumberHelptext": "El número debe estar en el formato internacional {0}, {1}. Múltiples números deben estar separados por {2}",
+ "smspartnerSenderName": "Nombre del emisor del SMS",
+ "smspartnerApiurl": "Puedes encontrar tu clave API en tu panel de control en {0}",
+ "smspartnerPhoneNumber": "Número(s) de teléfono",
+ "max 11 alphanumeric characters": "máximo 11 caracteres alfanuméricos",
+ "gtxMessagingFromHint": "En teléfonos móviles, tus destinatarios ven el TPOA mostrado como el remitente del mensaje. Se permiten hasta 11 caracteres alfanuméricos, un código corto, el código largo local o números internacionales ({e164}, {e212} o {e214})",
+ "cellsyntOriginatortypeAlphanumeric": "Cadena alfanumérica (máximo 11 caracteres alfanuméricos). Los destinatarios no pueden responder al mensaje.",
+ "cellsyntOriginatortypeNumeric": "Valor numérico (máximo 15 dígitos) con el número de teléfono en formato internacional sin el prefijo 00 (por ejemplo, el número del Reino Unido 07920 110 000 debe establecerse como 447920110000). Los destinatarios pueden responder al mensaje.",
+ "Originator type": "Tipo de originador",
+ "Telephone number": "Número de teléfono",
+ "Mentioning": "Mencionando",
+ "Don't mention people": "No mencionar personas",
+ "Mention group": "Mencionar a {group}",
+ "Bitrix24 Webhook URL": "URL del Webhook de Bitrix24",
+ "wayToGetBitrix24Webhook": "Puedes crear un webhook siguiendo los pasos en {0}",
+ "gtxMessagingApiKeyHint": "Puedes encontrar tu clave API en: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "Originator": "Originador",
+ "bitrix24SupportUserID": "Ingresa tu ID de usuario en Bitrix24. Puedes encontrar el ID en el enlace al ir al perfil del usuario.",
+ "wayToWriteWhapiRecipient": "El número de teléfono con el prefijo internacional, pero sin el signo más al inicio ({0}), el ID de Contacto ({1}) o el ID de Grupo ({2}).",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "Número de Teléfono del Remitente / Dirección de Origen de la Ruta de Transmisión (TPOA)",
+ "To Phone Number": "Al Número de Teléfono",
+ "Select message type": "Seleccionar el tipo de mensaje",
+ "Send to channel": "Enviar al canal",
+ "max 15 digits": "máximo 15 dígitos",
+ "mongodbCommandDescription": "Ejecuta un comando de MongoDB contra la base de datos. Para obtener información sobre los comandos disponibles, consulta la {documentación}",
+ "whapiRecipient": "Número de teléfono / ID del contacto / ID del grupo",
+ "cellsyntSplitLongMessages": "Divide mensajes largos en hasta 6 partes. 153 x 6 = 918 caracteres.",
+ "receiverSevenIO": "Número receptor",
+ "apiKeySevenIO": "Clave API de SevenIO",
+ "wayToGetSevenIOApiKey": "Visita el panel de control en app.seven.io > developer > api key > el botón verde de agregar",
+ "senderSevenIO": "Número o nombre del remitente",
+ "gtxMessagingToHint": "Formato internacional, con el signo \"+\" al inicio ({e164}, {e212} o {e214})",
+ "locally configured mail transfer agent": "agente de transferencia de correo configurado localmente",
+ "wayToGetDiscordThreadId": "Obtener un ID de hilo / publicación en el foro es similar a obtener un ID de canal. Lee más sobre cómo obtener IDs {0}",
+ "smspartnerSenderNameInfo": "Debe ser entre 3..=11 carácteres regulares",
+ "receiverInfoSevenIO": "Si el número receptor no está ubicado en Alemania, debes agregar el código de país delante del número (por ejemplo, para el código de país 1 de EE. UU. usa 117612121212 en lugar de 017612121212)",
+ "callMeBotGet": "Aquí puedes generar un endpoint para {0}, {1} y {2}. Ten en cuenta que podrías recibir limitaciones de tasa. Las limitaciones de tasa parecen ser: {3}",
+ "cellsyntOriginator": "Visible en el teléfono móvil del destinatario como originador del mensaje. Los valores permitidos y la función dependen del parámetro originatortype.",
+ "threemaRecipientTypePhoneFormat": "E.164, sin el signo + al inicio",
+ "threemaApiAuthenticationSecret": "Clave Secreta del Gateway-ID",
+ "threemaBasicModeInfo": "Nota: Esta integración utiliza Threema Gateway en modo básico (encriptación basada en servidor). Puedes encontrar más detalles en {0}.",
+ "apiKeysDisabledMsg": "Las claves API están desactivadas porque la autenticación está desactivada.",
+ "Channel access token (Long-lived)": "Token de acceso al canal (Larga duración)",
+ "Create new forum post": "Crear un nuevo post en el foro",
+ "postToExistingThread": "Publicar en hilo / publicación existente",
+ "forumPostName": "Nombre de la publicación en el foro",
+ "threadForumPostID": "ID del hilo / publicación en el foro",
+ "e.g. {discordThreadID}": "por ejemplo, {discordThreadID}",
+ "whatHappensAtForumPost": "Crear una nueva publicación en el foro. Esto NO publica mensajes en una publicación existente. Para publicar en una publicación existente usa \"{option}\"",
+ "jsonQueryDescription": "Analice y extraiga datos específicos de la respuesta JSON del servidor mediante una consulta JSON o utilice \"$\" para la respuesta sin formato, si no espera JSON. Luego, el resultado se compara con el valor esperado, como cadenas. Consulte {0} para obtener documentación y use {1} para experimentar con consultas.",
+ "aboutSlackUsername": "Cambia el nombre que se muestra del remitente del mensaje. Si quieres mencionar a alguien, inclúyelo en el nombre descriptivo.",
+ "cacheBusterParam": "Añade el parámetro {0}",
+ "cacheBusterParamDescription": "Parámetro generado aleatoriamente para omitir cachés.",
+ "Community String": "Cadena comunitaria",
+ "snmpCommunityStringHelptext": "Esta cadena funciona como contraseña para autenticar y controlar el acceso a dispositivos habilitados para SNMP. Compárela con la configuración de su dispositivo SNMP.",
+ "privateOnesenderDesc": "Asegúrese de que el número de teléfono sea válido. Para enviar un mensaje a un número de teléfono privado, por ejemplo: 628123456789",
+ "wayToGetOnesenderUrlandToken": "Puedes obtener la URL y el token en el sitio web de Onesender. Más información {0}",
+ "Optional: Space separated list of scopes": "Opcional: Lista de ámbitos separados por espacios",
+ "No tags found.": "No se han encontrado etiquetas.",
+ "signl4Docs": "Puede encontrar más información sobre cómo configurar SIGNL4 y cómo obtener la URL del webhook de SIGNL4 en {0}.",
+ "shrinkDatabaseDescriptionSqlite": "Desencadena la base de datos {vacuum} para SQLite. {auto_vacuum} ya está habilitado, pero esto no desfragmenta la base de datos ni reempaqueta páginas de base de datos individuales como lo hace el comando {vacuum}.",
+ "and": "y",
+ "Message format": "Formato del mensaje",
+ "Send rich messages": "Enviar mensajes enriquecidos",
+ "OID (Object Identifier)": "(Identificador de Objeto) OID",
+ "snmpOIDHelptext": "Ingrese el OID del sensor o el estado que desea monitorear. Use herramientas de administración de red como navegadores MIB o software SNMP si no está seguro acerca del OID.",
+ "Condition": "Condición",
+ "SNMP Version": "Versión SNMP",
+ "Please enter a valid OID.": "Por favor escribe un OID válido.",
+ "Host Onesender": "Host de Onesender",
+ "Token Onesender": "Token de Onesender",
+ "Recipient Type": "Tipo de Receptor",
+ "Private Number": "Número Privado",
+ "groupOnesenderDesc": "Asegúrese de que el ID del grupo sea válido. Para enviar un mensaje al grupo, por ejemplo: 628123456789-342345",
+ "Group ID": "ID del grupo",
+ "Add Remote Browser": "Agregar navegador remoto",
+ "New Group": "Nuevo grupo",
+ "Group Name": "Nombre del grupo",
+ "OAuth2: Client Credentials": "OAuth2: Credenciales del Cliente",
+ "Authentication Method": "Método de autentificación",
+ "Authorization Header": "Cabecera de Autorización",
+ "Form Data Body": "Cuerpo de datos del formulario",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "ID del Cliente",
+ "Client Secret": "Secreto de Cliente",
+ "OAuth Scope": "Alcance OAuth",
+ "Go back to home page.": "Volver a la página de inicio.",
+ "Lost connection to the socket server.": "Se perdió la conexión con el servidor de socket.",
+ "Cannot connect to the socket server.": "No se puede conectar al servidor de socket.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL de SIGNL4 WebhooK",
+ "Conditions": "Condiciones",
+ "conditionAdd": "Añadir condición",
+ "now": "ahora",
+ "time ago": "hace {0}",
+ "-year": "-año",
+ "Json Query Expression": "Expresión de consulta Json",
+ "ignoredTLSError": "Se han ignorado errores TLS/SSL",
+ "conditionDelete": "Borrar condición",
+ "conditionAddGroup": "Añadir grupo",
+ "conditionDeleteGroup": "Borrar grupo",
+ "conditionValuePlaceholder": "Valor",
+ "equals": "igual",
+ "not equals": "no es igual",
+ "contains": "contiene",
+ "not contains": "no contiene",
+ "starts with": "empieza por",
+ "not starts with": "no empieza por",
+ "ends with": "termina con",
+ "not ends with": "No termina en",
+ "less than": "menor que",
+ "greater than": "mayor que",
+ "less than or equal to": "Menor o igual a",
+ "greater than or equal to": "Mayor o igual a",
+ "Notification Channel": "Canal de notificación",
+ "Sound": "Sonido",
+ "record": "Registro",
+ "RabbitMQ Username": "Usuario RabbitMQ",
+ "RabbitMQ Password": "Contraseña RabbitMQ",
+ "RabbitMQ Nodes": "Nodos de Gestión RabbitMQ",
+ "rabbitmqNodesRequired": "Por favor, configure los nodos para este monitor.",
+ "rabbitmqNodesInvalid": "Por favor, utilice una URL totalmente cualificada (comenzando por 'http') para los nodos RabbitMQ.",
+ "Separate multiple email addresses with commas": "Separa las múltiples direcciones de correo con comas",
+ "rabbitmqHelpText": "Para utilizar el monitor, necesitará habilitar el Plugin de Gestión en su configuración RabbitMQ. Para más información, por favor consulte {rabitmq_documentation}.",
+ "SendGrid API Key": "Clave de la API de SendGrid",
+ "rabbitmqNodesDescription": "Introduzca la URL para los nodos de gestión de RabbitMQ incluyendo el protocolo y el puerto. Ejemplo: {0}",
+ "Money": "Dinero",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "O bien un texto de ID de origen o un número de teléfono en formato E.164 si quiere ser capaz de recibir respuestas.",
+ "Harp": "Arpa",
+ "Scifi": "Ciencia Ficción",
+ "Alphanumerical string and hyphens only": "Sólo cadenas alfanuméricas y guiones",
+ "Time Sensitive (iOS Only)": "Sensible a la Hora (Solo iOS)",
+ "Doorbell": "Timbre",
+ "Flute": "Flauta",
+ "Guitar": "Guitarra",
+ "Correct": "Correcto",
+ "Bubble": "Burbuja",
+ "Elevator": "Ascensor",
+ "Fail": "Fallo",
+ "Reveal": "Mostrar",
+ "Pop": "Pop",
+ "From": "De",
+ "Clear": "Limpiar",
+ "Can be found on:": "Se puede encontrar en: {0}",
+ "Custom sound to override default notification sound": "Sonidos personalizados prevalecen sobre los sonidos por defecto de las notificaciones",
+ "The phone number of the recipient in E.164 format.": "El número de teléfono del receptor en formato E.164.",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Las notificaciones sensibles en el tiempo se enviarán inmediatamente, incluso si el dispositivo está en modo no molestar.",
+ "Arcade": "Arcade"
}
diff --git a/src/lang/et-EE.json b/src/lang/et-EE.json
index c68314a9e..aa519ec1c 100644
--- a/src/lang/et-EE.json
+++ b/src/lang/et-EE.json
@@ -242,7 +242,6 @@
"Running": "Töötab",
"resendEveryXTimes": "Saada uuesti {0} korda",
"statusMaintenance": "Hooldus",
- "Webhook URL": "",
"Server URL": "Serveri URL",
"Priority": "Tähtsus",
"emojiCheatSheet": "Emotikoni spikker: {0}",
@@ -254,7 +253,6 @@
"PushUrl": "Lükka URL",
"Monitor History": "Monitori ajalugu",
"PasswordsDoNotMatch": "Paroolid ei ühti.",
- "records": "",
"Current User": "Praegune kasutaja",
"topic": "Teema",
"successMessage": "Edukas sõnum",
@@ -308,7 +306,6 @@
"General Monitor Type": "Üldine monitori tüüp",
"webhookAdditionalHeadersDesc": "Lisab täiendavad päised saadetud webhookiga.",
"Read more": "Loe rohkem",
- "HeadersInvalidFormat": "",
"clearDataOlderThan": "Hoia monitori ajalugu alles {0} päeva.",
"steamApiKeyDescription": "Steam Game Serveri monitoorimiseks on vaja sul Steam Web-API võtit. Sa saad registreerida enda API võtme siin: ",
"Done": "Tehtud",
diff --git a/src/lang/eu.json b/src/lang/eu.json
index 42b5f642b..fd6c7e09e 100644
--- a/src/lang/eu.json
+++ b/src/lang/eu.json
@@ -106,7 +106,7 @@
"disableauth.message2": "Egoera jakin batzuetarako diseinatuta dago, Uptime Kumaren {intendThirdPartyAuth} (Cloudflare Access, Authelia edo beste autentifikazio-mekanismo batzuk).",
"where you intend to implement third-party authentication": "aurrean hirugarrengo autentifikazio batzuek jartzeko",
"Please use this option carefully!": "Mesedez, kontuz erabili aukera hau!",
- "Logout": "Saioa amaitu",
+ "Logout": "Itxi saioa",
"Leave": "Utzi",
"I understand, please disable": "Ulertzen dut, mesedez desgaitu",
"Confirm": "Baieztatu",
@@ -115,7 +115,7 @@
"Username": "Erabiltzailea",
"Password": "Pasahitza",
"Remember me": "Gogora nazazu",
- "Login": "Saioa hasi",
+ "Login": "Hasi saioa",
"No Monitors, please": "Monitorizaziorik ez, mesedez",
"add one": "gehitu bat",
"Notification Type": "Jakinarazpen mota",
@@ -164,11 +164,11 @@
"Add New below or Select...": "Gehitu beste bat behean edo hautatu…",
"Tag with this name already exist.": "Izen hau duen etiketa dagoeneko badago.",
"Tag with this value already exist.": "Balio hau duen etiketa dagoeneko badago.",
- "color": "kolorea",
+ "color": "Kolorea",
"value (optional)": "balioa (hautazkoa)",
"Gray": "Grisa",
"Red": "Gorria",
- "Orange": "Naranja",
+ "Orange": "Laranja",
"Green": "Berdea",
"Blue": "Urdina",
"Indigo": "Indigo",
@@ -190,7 +190,7 @@
"Status Page": "Egoera orria",
"Status Pages": "Egoera orriak",
"defaultNotificationName": "Nire {notification} Alerta ({number})",
- "here": "Hemen",
+ "here": "hemen",
"Required": "Beharrezkoa",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
@@ -216,19 +216,19 @@
"smtpCC": "CC",
"smtpBCC": "BCC",
"discord": "Discord",
- "Discord Webhook URL": "Discord Webhook URL",
- "wayToGetDiscordURL": "You can get this by going to Server Settings -> Integrations -> Create Webhook",
- "Bot Display Name": "Bot Display Name",
+ "Discord Webhook URL": "Discord Webhook URLa",
+ "wayToGetDiscordURL": "Hona joanda lortu dezakezu: Server Settings -> Integrations -> View Webhooks -> New Webhook",
+ "Bot Display Name": "Botaren erakusteko izena",
"Prefix Custom Message": "Prefix Custom Message",
"Hello @everyone is...": "Kaixo {'@'}edonor da…",
"teams": "Microsoft Teams",
- "Webhook URL": "Webhook URL",
+ "Webhook URL": "Webhook URLa",
"wayToGetTeamsURL": "You can learn how to create a webhook URL {0}.",
"wayToGetZohoCliqURL": "You can learn how to create a webhook URL {0}.",
"signal": "Signal",
"Number": "Zenbakia",
- "Recipients": "Recipients",
- "needSignalAPI": "You need to have a signal client with REST API.",
+ "Recipients": "Hartzaileak",
+ "needSignalAPI": "REST APIarekin signal bezeroa eduki behar duzu.",
"wayToCheckSignalURL": "You can check this URL to view how to set one up:",
"signalImportant": "IMPORTANT: You cannot mix groups and numbers in recipients!",
"gotify": "Gotify",
@@ -280,8 +280,8 @@
"Read more": "Irakurri gehiago",
"appriseInstalled": "Apprise instalatuta.",
"appriseNotInstalled": "Apprise ez dago instalatuta. {0}",
- "Access Token": "Access Token",
- "Channel access token": "Channel access token",
+ "Access Token": "Access Tokena",
+ "Channel access token": "Kanalaren access tokena",
"Line Developers Console": "Line Developers Console",
"lineDevConsoleTo": "Line Developers Console - {0}",
"Basic Settings": "Oinarrizko ezarpenak",
@@ -316,7 +316,7 @@
"One record": "One record",
"steamApiKeyDescription": "For monitoring a Steam Game Server you need a Steam Web-API key. You can register your API key here: ",
"Current User": "Uneko erabiltzailea",
- "topic": "Topic",
+ "topic": "Gaia",
"topicExplanation": "MQTT topic to monitor",
"successMessage": "Arrakasta mezua",
"successMessageExplanation": "MQTT message that will be considered as success",
@@ -360,7 +360,6 @@
"Discard": "Baztertu",
"Cancel": "Ezeztatu",
"Powered by": "Honekin egina:",
- "shrinkDatabaseDescription": "Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API erabiltzailea (webapi_ aurre-hizkia barne)",
"serwersmsAPIPassword": "API pasahitza",
@@ -402,7 +401,7 @@
"proxyDescription": "Proxies must be assigned to a monitor to function.",
"enableProxyDescription": "This proxy will not effect on monitor requests until it is activated. You can control temporarily disable the proxy from all monitors by activation status.",
"setAsDefaultProxyDescription": "This proxy will be enabled by default for new monitors. You can still disable the proxy separately for each monitor.",
- "Certificate Chain": "Certificate Chain",
+ "Certificate Chain": "Zertifikatu katea",
"Valid": "Baliozkoa",
"Invalid": "Baliogabea",
"AccessKeyId": "AccessKey ID",
@@ -477,7 +476,7 @@
"Footer Text": "Oineko testua",
"Show Powered By": "Erakutsi Honekin egina:",
"Domain Names": "Domeinu izenak",
- "signedInDisp": "Signed in as {0}",
+ "signedInDisp": "{0} bezala logeatua",
"signedInDispDisabled": "Auth desgaituta.",
"Certificate Expiry Notification": "Zertifikatu iraungitze jakinarazpena",
"API Username": "API Erabiltzailea",
@@ -583,6 +582,118 @@
"Mechanism": "Mekanismoa",
"Home": "Hasiera",
"filterActive": "Aktibo",
- "filterActivePaused": "Geldituta",
- "Expected Value": "Esperotako balioa"
+ "filterActivePaused": "Pausatua",
+ "Expected Value": "Esperotako balioa",
+ "statusPageRefreshIn": "{0} barru freskatuko da.",
+ "now": "orain",
+ "time ago": "duela {0}",
+ "-year": "-urte",
+ "styleElapsedTimeShowNoLine": "Erakutsi (Lerrorik ez)",
+ "styleElapsedTimeShowWithLine": "Erakutsi (Lerroarekin)",
+ "Select": "Hautatu",
+ "Docker Container": "Docker edukiontzia",
+ "Container Name / ID": "Edukiontzi izena / ID",
+ "Packet Size": "Pakete tamaina",
+ "telegramSendSilently": "Bidali isilik",
+ "Examples": "Adibideak",
+ "default: notify all devices": "Defektuz: jakinarazi gailu guztiak",
+ "Event type:": "Ekintza mota:",
+ "Event data:": "Ekintza mota:",
+ "Optional": "Hautazkoa",
+ "and": "eta",
+ "sameAsServerTimezone": "Zerbitzariaren ordu-zona bera",
+ "endDateTime": "Bukaera data/ordua",
+ "cronExpression": "Cron espresioa",
+ "cronSchedule": "Programatu: ",
+ "invalidCronExpression": "Cron espresio baliogabea: {0}",
+ "recurringInterval": "Tartea",
+ "No Maintenance": "Mantenurik ez",
+ "maintenanceStatus-under-maintenance": "Mantenuan",
+ "maintenanceStatus-inactive": "Aktibatu gabe",
+ "maintenanceStatus-scheduled": "Programatuta",
+ "Display Timezone": "Erakutsi ordu zona",
+ "statusPageMaintenanceEndDate": "Bukatu",
+ "IconUrl": "Ikono URLa",
+ "chromeExecutableAutoDetect": "Auto detektatu",
+ "Schedule Maintenance": "Programatu mantenua",
+ "Edit Maintenance": "Editatu mantenua",
+ "Date and Time": "Data eta ordua",
+ "plugin": "Plugin | Pluginak",
+ "installing": "Instalatzen",
+ "uninstalling": "Desinstalatzen",
+ "confirmUninstallPlugin": "Ziur zaude plugin hau desinstalatu nahi duzula?",
+ "Clone": "Klonatu",
+ "cloneOf": "{0}-(a)ren klona",
+ "emailTemplateStatus": "Egoera",
+ "emailTemplateMsg": "jakinarazpenaren mezua",
+ "Select message type": "Hautatu mezu mota",
+ "Send to channel": "Bidali kanalera",
+ "Enable TLS": "Gaitu TLS",
+ "webhookAdditionalHeadersTitle": "Goiburu gehigarriak",
+ "Reset Token": "Berrezarri tokena",
+ "selectedMonitorCount": "Hautatuta: {0}",
+ "HTTP Headers": "HTTP goiburuak",
+ "Refresh Interval": "Eguneratze tartea",
+ "tcp": "TCP / HTTP",
+ "Notification Service": "Jakinarazpen zerbitzua",
+ "or": "edo",
+ "startDateTime": "Hasiera data/ordua",
+ "pauseMaintenanceMsg": "Ziur zaude gelditu nahi duzula?",
+ "install": "Instalatu",
+ "uninstall": "Desinstalatu",
+ "emailTemplateServiceName": "Zerbitzu izena",
+ "Your User ID": "Zure erabiltzaile IDa",
+ "Connection Type": "Konexio mota",
+ "pushOthers": "Besteak",
+ "programmingLanguages": "Programatze lengoaiak",
+ "dbName": "Datubase izena",
+ "resendEveryXTimes": "Berbidali {0} aldiz",
+ "Reconnecting...": "Birkonektatzen...",
+ "setupDatabaseChooseDatabase": "Zein datubase erabili nahi duzu?",
+ "Recurring": "Errepikakorra",
+ "Mentioning": "Aipatzen",
+ "Condition": "Baldintza",
+ "RabbitMQ Username": "RabbitMQ erabiltzailea",
+ "Expiry": "Iraungitzea",
+ "pagertreeSilent": "Isildu",
+ "Group": "Taldea",
+ "Saved.": "Gordeta.",
+ "Conditions": "Baldintzak",
+ "smseagleTo": "Telefono zenbakia(k)",
+ "Enable Kafka SSL": "Gaitu Kafka SSL",
+ "Continue": "Jarraitu",
+ "apiKey-active": "Aktibo",
+ "apiKey-expired": "Iraungita",
+ "apiKey-inactive": "Ez-aktibo",
+ "Expires": "Iraungitzen da",
+ "Generate": "Sortu",
+ "pagertreeUrgency": "Larritasuna",
+ "pagertreeLow": "Baxua",
+ "pagertreeHigh": "Altua",
+ "pagertreeCritical": "Larria",
+ "Destination": "Helburua",
+ "conditionValuePlaceholder": "Balioa",
+ "RabbitMQ Password": "RabbitMQ pasahitza",
+ "Correct": "Zuzena",
+ "Fail": "Akatsa",
+ "Elevator": "Igogailua",
+ "Guitar": "Gitarra",
+ "pagertreeMedium": "Ertaina",
+ "Host URL": "Host URLa",
+ "Affected Monitors": "Kaltetutako monitoreak",
+ "Pick Affected Monitors...": "Hautatu kaltetutako monitoreak…",
+ "deleteMaintenanceMsg": "Ziur zaude mantentze lan hau ezabatu nahi duzula?",
+ "smseagleEncoding": "Unicode gisa bidali",
+ "Add Another": "Gehitu beste bat",
+ "Google Analytics ID": "Google Analytics IDa",
+ "Edit Tag": "Editatu etiketa",
+ "PushDeer Server": "PushDeer zerbitzaria",
+ "Show Clickable Link": "Erakutsi lotura klikagarria",
+ "twilioToNumber": "zenbakira",
+ "twilioFromNumber": "zenbakitik",
+ "ntfyUsernameAndPassword": "Erabiltzailea eta pasahitza",
+ "lunaseaUserID": "Erabiltzaile IDa",
+ "pagertreeDoNothing": "Ez egin ezer",
+ "Separate multiple email addresses with commas": "Banatu email helbideak koma ikurrekin",
+ "settingUpDatabaseMSG": "Datubasea ezartzen. Denbora pixka bat iraun dezake, pazientzia eduki."
}
diff --git a/src/lang/fa.json b/src/lang/fa.json
index 9a32c0be2..b66bed8f8 100644
--- a/src/lang/fa.json
+++ b/src/lang/fa.json
@@ -76,7 +76,7 @@
"Accepted Status Codes": "وضعیتهای (Status Code) های قابل قبول",
"Save": "ذخیره",
"Notifications": "اطلاعرسانیها",
- "Not available, please setup.": "هیچ موردی موجود نیست، اولین مورد را راه اندازی کنید.",
+ "Not available, please setup.": "هیچ موردی موجود نیست، اولین مورد را راهاندازی کنید.",
"Setup Notification": "راه اندازی اطلاعرسانی",
"Light": "روشن",
"Dark": "تاریک",
@@ -335,7 +335,6 @@
"About": "درباره آپتایم کوما",
"wayToGetCloudflaredURL": "(دریافت Cloudflared از {0})",
"cloudflareWebsite": "وب سایت کلادفلر",
- "shrinkDatabaseDescription": "تریگر VACUUM برای SQLite. اگر دیتابیس شما بعد از 1.10.0 ایجاد شده باشد، AUTO_VACUUM قبلاً فعال شده است و لازم نیست این عمل انجام شود. (Trigger database VACUUM for SQLite. If your database is created after 1.10.0, AUTO_VACUUM is already enabled and this action is not needed.).",
"Message:": "پیام:",
"HTTP Headers": "هدر های HTTP",
"Bot Token": "توکن بات",
@@ -352,7 +351,7 @@
"statusPageRefreshIn": "تا بارگذاری مجدد: {0}",
"Content Type": "نوع محتوا (Content Type)",
"Server URL": "آدرس سرور",
- "Priority": "اهمیت",
+ "Priority": "اولویت",
"emojiCheatSheet": "چیت شیت ایموجی ها: {0}",
"Read more": "بیشتر بدانید",
"webhookJsonDesc": "{0} برای هر HTTP سرور جدیدی مانند Express.js مناسب است",
@@ -386,7 +385,7 @@
"Switch to Dark Theme": "تغییر به حالت تیره",
"Show Tags": "نمایش تگ ها",
"Hide Tags": "مخفی سازی تگ ها",
- "Description": "توضحیات",
+ "Description": "توضیحات",
"Custom CSS": "CSS اختصاصی",
"deleteStatusPageMsg": "آیا بابت حذف این استاتوس پیچ مطمئن هستید؟",
"Proxies": "پروکسی ها",
@@ -643,7 +642,7 @@
"Push URL": "URL پوش",
"Schedule maintenance": "زمانبندی نگهداری (غیرفعال سازی دستی)",
"webhookFormDataDesc": "{multipart} برای PHP مناسب است. آرایه JSON نیاز است تا به این شکل باز شود {decodeFunction}",
- "webhookAdditionalHeadersTitle": "هدر اضافی",
+ "webhookAdditionalHeadersTitle": "هدرهای اضافی",
"webhookAdditionalHeadersDesc": "تنظیم هدر های اضافی که نیاز است با وب هوک ارسال شود. هر هدر باید به کیلد/مقدار JSON تعریف شده باشد.",
"Webhook URL": "آدرس وب هوک",
"Application Token": "توکن اپلیکیشن",
@@ -762,7 +761,7 @@
"Enter the list of brokers": "لیست بروکر هارا وارد کنید",
"Enable Kafka Producer Auto Topic Creation": "فعال سازی ایجاپ موضوع اتوماتیک تهیه کننده",
"Secret AccessKey": "کلید محرمانه AccessKey",
- "wayToGetFlashDutyKey": "می توانید به کانال -> (انتخاب یک کانال) -> یکپارچه سازی -> صفحه یکپارچه سازی جدید بروید، یک \"رویداد سفارشی\" را برای دریافت یک آدرس فشار اضافه کنید، کلید یکپارچه سازی را در آدرس کپی کنید. برای اطلاعات بیشتر لطفا مراجعه کنید به",
+ "wayToGetFlashDutyKey": "می توانید به کانال -> (انتخاب یک کانال) -> یکپارچه سازی -> یکپارچه سازی جدید بروید، یک \"Uptime Kuma\" را برای دریافت یک آدرس پوش اضافه کنید، کلید یکپارچه سازی را در آدرس کپی کنید. برای اطلاعات بیشتر لطفا مراجعه کنید به",
"showCertificateExpiry": "نمایش زمان به پایان رسیدن اعتبار سرتیفیکیت",
"gamedigGuessPortDescription": "پورت مورد استفاده توسط پروتکل Query Valve Server ممکن است با پورت مشتری متفاوت باشد. اگر مانیتور نمی تواند به سرور شما متصل شود، این را امتحان کنید.",
"invertKeywordDescription": "دنبال کلمات کلیدی ناموجود باشید تا آنهایی که موجود است.",
@@ -811,8 +810,8 @@
"Expected Value": "مقدار مورد انتظار",
"Json Query": "کوئری جیسون",
"Saved.": "ذخیره شده.",
- "setupDatabaseChooseDatabase": "از چه دیتابیسی میخواهید استفاده کنید؟",
- "setupDatabaseEmbeddedMariaDB": "شما نیازی نیست چیزی را تنظیم کنید . این Image داکر MariaDB را به طور خودکار برای شما جاسازی و پیکربندی کرده است. آپتایم کوما از طریق سوکت یونیکس به این دیتابیس متصل می شود.",
+ "setupDatabaseChooseDatabase": "از چه دیتابیسی میخواهید استفاده کنید؟",
+ "setupDatabaseEmbeddedMariaDB": "شما نیازی نیست چیزی را تنظیم کنید . این Image داکر، MariaDB را به طور خودکار برای شما جاسازی و پیکربندی کرده است. آپتایم کوما از طریق سوکت یونیکس به این دیتابیس متصل می شود.",
"setupDatabaseSQLite": "یک فایل دیتابیس ساده که برای استقرار در مقیاس کوچک توصیه می شود. قبل از نسخه 2.0.0، Uptime Kuma از SQLite به عنوان دیتابیس پیش فرض استفاده می کرد.",
"enableNSCD": "فعال سازی NSCD (Name Service Cache Daemon) برای کش کردن تمام ریکوئست های DNS",
"setupDatabaseMariaDB": "به یک دیتابیس خارجی MariaDB متصل شوید. شما باید اطلاعات اتصال دیتابیس را تنظیم کنید.",
@@ -891,5 +890,183 @@
"documentationOf": "کلید مطلب ها",
"wayToGetHeiiOnCallDetails": "روش دریافت ایدی کلید و کلید ای پی آی درمطلب توضیح داده شده است",
"Channel access token (Long-lived)": "توکن دسترسی به کانال",
- "Your User ID": "آیدی حساب کاربری شما"
+ "Your User ID": "آیدی حساب کاربری شما",
+ "ignoreTLSErrorGeneral": "نادیده گرفتن ارور TLS/SSL برای برقراری ارتباط",
+ "Originator": "ایجاد کننده",
+ "cellsyntOriginatortypeNumeric": "مقدار عددی (حداکثر 15 رقم) با شماره تلفن در قالب بین المللی بدون 00 اول (به عنوان مثال شماره 07920 110 000 بریتانیا باید به عنوان 447920110000 تنظیم شود). گیرندگان می توانند به پیام پاسخ دهند.",
+ "threemaRecipient": "گیرنده",
+ "threemaRecipientType": "نوع گیرنده",
+ "threemaRecipientTypeIdentity": "شناسه Threema",
+ "threemaRecipientTypeIdentityFormat": "8 کاراکتر",
+ "threemaRecipientTypePhone": "شماره موبایل",
+ "threemaRecipientTypePhoneFormat": "E.164، بدون پیشوند +",
+ "threemaRecipientTypeEmail": "آدرس ایمیل",
+ "threemaSenderIdentity": "شناسه ورودی",
+ "threemaApiAuthenticationSecret": "کلید شناسه ورودی",
+ "threemaBasicModeInfo": "توجه: این ادغام از ورودی Threema در حالت اولیه (رمزگذاری مبتنی بر سرور) استفاده می کند. جزئیات بیشتر را می توان در {0} یافت.",
+ "smspartnerApiurl": "شما میتوانید کلید API را در داشبورد خود در {0} پیدا کنید",
+ "smspartnerPhoneNumber": "شماره موبایل(ها)",
+ "Host URL": "آدرس هاست",
+ "gtxMessagingApiKeyHint": "شما میتوانید کلید API خود را در این آدرس پیدا کنید: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "Bitrix24 Webhook URL": "آدرس وب هوک Bitrix24",
+ "wayToGetBitrix24Webhook": "شما می توانید با دنبال کردن مراحل در {0} یک وب هوک ایجاد کنید",
+ "whapiRecipient": "شماره تلفن / شناسه ارتباط / شناسه گروه",
+ "gtxMessagingToHint": "قالب بینالمللی، با پیشوند \"+\" ({e164}، {e212} یا {e214})",
+ "Mentioning": "منشن کردن",
+ "Send to channel": "ارسال به کانال",
+ "forumPostName": "نام پست انجمن",
+ "threadForumPostID": "شناسه پست رشته / انجمن",
+ "e.g. {discordThreadID}": "به عنوان مثال: {discordThreadID}",
+ "wayToGetDiscordThreadId": "دریافت شناسه پست / انجمن شبیه به دریافت شناسه کانال است. درباره نحوه دریافت شناسه بیشتر بخوانید {0}",
+ "senderSevenIO": "شماره یا نام ارسال کننده",
+ "receiverSevenIO": "شماره گیرنده",
+ "Don't mention people": "این آدم هارا منشن نکن",
+ "Mention group": "منشن {group}",
+ "smspartnerSenderName": "نام ارسال کننده اس ام اس",
+ "apiKeySevenIO": "کلید SevenIO API",
+ "API URL": "آدرس API",
+ "callMeBotGet": "اینجا شما می توانید یک نقطه پایانی برای {0}، {1} و {2} ایجاد کنید. به خاطر داشته باشید که ممکن است ریت لیمیت (Rate Limit) دریافت کنید. به نظر می رسد ریت لیمیت ها عبارتند از: {3}",
+ "To Phone Number": "به شماره موبایل",
+ "Originator type": "نوع Originator",
+ "Destination": "مقصد",
+ "Allow Long SMS": "اجازه ارسال پیام بلند",
+ "max 15 digits": "حداکثر 15 عدد",
+ "max 11 alphanumeric characters": "حداکثر 11 کاراکتر الفبا و اعداد",
+ "locally configured mail transfer agent": "نماینده انتقال نامه به صورت لوکال",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "یا آدرس هاست سروری که میخواهید به آن متصل شوید را وارد کنید یا {localhost} اگر میخواهید از یک {local_mta} استفاده کنید",
+ "Refresh Interval": "وقفه بین بارگزاری مجدد",
+ "Refresh Interval Description": "صفحه وضعیت هر {0} ثانیه یک بار سایت را بهروزرسانی میکند",
+ "Select message type": "انتخاب نوع پیام",
+ "Create new forum post": "ایحاد یک پست جدید در انجمن",
+ "postToExistingThread": "پست در یک رشته / انجمن موجود",
+ "whatHappensAtForumPost": "ایحاد یک پست جدید در انجمن. این گزینه در یک پست موجود پیامی را ارسال نمی کند. برای پست در یک پیام موجود از گزینه\"{option}\" استفاده کنید",
+ "smspartnerPhoneNumberHelptext": "شماره باید در قالب بین المللی {0}، {1} باشد. شماره ها باید با {2} از هم جدا شوند",
+ "smspartnerSenderNameInfo": "باید بین 3..=11 کاراکتر معمولی باشد",
+ "bitrix24SupportUserID": "لطفا شناسه کاربری خود را در Bitrix24 وارد کنید. با رفتن به پروفایل کاربر می توانید شناسه را از لینک دریافت کنید.",
+ "Command": "دستور",
+ "mongodbCommandDescription": "یک دستور MongoDB را در پایگاه داده اجرا کنید. برای اطلاعات در مورد دستورات موجود، {documentation} را بررسی کنید",
+ "wayToGetSevenIOApiKey": "دز داشبورد به آدرس app.seven.io > developer > api key بر روی دکمه سبز اضافه کلیک کنید",
+ "receiverInfoSevenIO": "اگر شماره دریافت کننده در آلمان نیست، شما باید کد کشور را در مقابل شماره اضافه کنید (به عنوان مثال برای کد کشور 1 از ایالات متحده به جای 017612121212 از 117612121212 استفاده کنید)",
+ "wayToWriteWhapiRecipient": "شماره تلفن با پیشوند بینالمللی، اما بدون علامت مثبت در شروع ({0})، شناسه تماس ({1}) یا شناسه گروه ({2}).",
+ "wayToGetWhapiUrlAndToken": "شما با رفتن به کانال مورد نظر خود از {0} می توانید URL API و توکن را دریافت کنید",
+ "gtxMessagingFromHint": "در موبایل ها، گیرندگان شما TPOA را که به عنوان فرستنده پیام نمایش داده می شود، می بینند. حداکثر 11 کاراکتر (فقط الفبا و اعداد)، یک کد کوتاه، کد طولانی محلی یا اعداد بینالمللی مجاز هستند ({e164}، {e212} یا {e214})",
+ "cellsyntOriginator": "روی تلفن همراه گیرنده به عنوان Originator پیام قابل مشاهده است. مقادیر و تابع مجاز به پارامتر مبدا بستگی دارد.",
+ "cellsyntDestination": "شماره تلفن گیرنده با استفاده از فرمت بینالمللی با 00 اصلی و به دنبال آن کد کشور، به عنوان مثال. 00447920110000 برای بریتانیا شماره 07920 110 000 (حداکثر 17 رقم در کل). حداکثر 25000 گیرنده جدا شده با کاما در هر درخواست HTTP.",
+ "cellsyntSplitLongMessages": "پیام های طولانی را به حداکثر 6 قسمت تقسیم کنید. 153 x 6 = 918 کاراکتر.",
+ "wayToGetThreemaGateway": "شما می توانید برای Threema Gateway {0} ثبت نام کنید.",
+ "threemaSenderIdentityFormat": "8 کاراکتر، معمولا با * (ستاره) شروع می شود",
+ "apiKeysDisabledMsg": "کلیدهای API غیرفعال هستند زیرا احراز هویت غیرفعال است.",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "از شماره تلفن / آدرس مبدأ مسیر انتقال (TPOA)",
+ "Alphanumeric (recommended)": "الفبا و اعداد (پیشنهاد شده)",
+ "Telephone number": "شماره تلفن",
+ "cellsyntOriginatortypeAlphanumeric": "الفبا و اعداد (حداکثر 11 کاراکتر). گیرندگان نمی توانند به پیام پاسخ دهند.",
+ "cacheBusterParam": "افزودن پارامتر {0}",
+ "Private Number": "شماره شخصی",
+ "jsonQueryDescription": "با استفاده از JSON query پاسخ JSON سرور را تحلیل و استخراج کنید یا از «$» برای پاسخ خام استفاده کنید، در صورتی که JSON نباشد. سپس نتیجه با مقدار مورد نظر به عنوان رشته مقایسه میشود. برای مستندات به {0} بروید و از {1} برای آزمایش کوئریها استفاده کنید.",
+ "now": "الان",
+ "-year": "-سال",
+ "time ago": "{0} پیش",
+ "and": "و",
+ "Condition": "شرط",
+ "SNMP Version": "نسخه SNMP",
+ "privateOnesenderDesc": "مطمئن شوید که شماره تلفن درست است. برای ارسال پیام به شماره شخصی، مثل: 09123456789",
+ "Group ID": "شناسه گروه",
+ "Add Remote Browser": "افزودن مرورگر ریموت",
+ "New Group": "گروه جدید",
+ "Group Name": "نام گروه",
+ "Authentication Method": "روش احراز هویت",
+ "Client ID": "شناسه کلاینت",
+ "Client Secret": "رمز کلاینت",
+ "Go back to home page.": "بازگشت به صفحه اصلی.",
+ "No tags found.": "برچسبی یافت نشد.",
+ "Lost connection to the socket server.": "اتصال به سوکت سرور از دست رفت.",
+ "Cannot connect to the socket server.": "نمیتوان به سوکت سرور متصل شد.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "پیوند وبهوک SIGNL4",
+ "Conditions": "شرایط",
+ "conditionAdd": "افزودن شرط",
+ "conditionDelete": "حذف شرط",
+ "conditionAddGroup": "افزودن گروه",
+ "conditionDeleteGroup": "حذف گروه",
+ "conditionValuePlaceholder": "مقدار",
+ "equals": "برابر",
+ "not equals": "نابرابر",
+ "contains": "شامل",
+ "starts with": "شروع با",
+ "not starts with": "عدم شروع با",
+ "not contains": "شامل نباشد",
+ "ends with": "پایان با",
+ "not ends with": "عدم پایان با",
+ "less than": "کمتر از",
+ "greater than": "بیشتر از",
+ "less than or equal to": "کمتر یا مساوی با",
+ "greater than or equal to": "بیشتر یا مساوی با",
+ "record": "رکورد",
+ "snmpCommunityStringHelptext": "این رشته به عنوان پسورد برای احراز هویت و کنترل دسترسی به دستگاههای آماده SNMP استفاده میشود. این پسورد را با توجه به تنظیمات دستگاه SNMP خود مطابقت دهید.",
+ "snmpOIDHelptext": "OID برای سنسور یا وضعیتی که میخواهید مانیتور کنید را وارد کنید. اگر درباره مقدار OID اطمینان ندارید از ابزارهای مدیریت شبکهای مانند MIB یا SNMP استفاده کنید.",
+ "Json Query Expression": "عبارت کوئری JSON",
+ "cacheBusterParamDescription": "پارامتر تولید شده رندوم برای رد کردن کش.",
+ "Community String": "رشته انجمن",
+ "OID (Object Identifier)": "OID (شناسه شئ)",
+ "Please enter a valid OID.": "لطفا یک OID معتبر وارد کنید.",
+ "Host Onesender": "هاست Onesender",
+ "Token Onesender": "توکن Onesender",
+ "Recipient Type": "نوع دریافت کننده",
+ "groupOnesenderDesc": "از معتبر بودن GroupID اطمینان حاصل کنید. برای ارسال پیام در گروه، برای مثال: 628123456789-342345",
+ "wayToGetOnesenderUrlandToken": "برای دریافت URL و توکن میتوانید به وبسایت Onesender مراجعه گنید. اطلاعات بیشتر {0}",
+ "OAuth2: Client Credentials": "OAuth2: گواهی مشتری",
+ "Authorization Header": "هدر Authorization",
+ "Form Data Body": "از اطلاعات بدنه",
+ "OAuth Token URL": "URL توکن OAuth",
+ "OAuth Scope": "اسکوپ OAuth",
+ "Optional: Space separated list of scopes": "اختیاری: لیست جدا شده با فاصله از اسکوپها",
+ "signl4Docs": "شما میتوانید اطلاعات بیشتر در رابطه با نحوه تنظیم SIGNL4 و به دست آوردن URL وبهوک SIGNL4 را در {0} پیدا کنید.",
+ "ignoredTLSError": "خطاهای TLS/SSL نادیده گرفته میشود",
+ "Bubble": "حباب",
+ "Message format": "ساختار پیام",
+ "Notification Channel": "کانال اطلاعرسانی",
+ "Doorbell": "زنگ",
+ "The phone number of the recipient in E.164 format.": "شماره تلفن گیرنده به فرمت E.164.",
+ "Sound": "صدا",
+ "Correct": "درست",
+ "Reveal": "نمایش",
+ "Flute": "فلوت",
+ "Money": "پول",
+ "Scifi": "علمیتخیلی",
+ "Elevator": "آسانسور",
+ "Guitar": "گیتار",
+ "Pop": "پاپ",
+ "From": "از",
+ "telegramServerUrl": "(اختیاری) آدرس سرور",
+ "telegramServerUrlDescription": "برای کاهش محدودیتهای بات تلگرام یا دسترسی در مناطقی که تلگرام فیلتر شده است (مثل ایران یا چین و ...). برای اطلاعات بیشتر {0} را ببینید. مقدار پیشفرض: {1}",
+ "Alphanumerical string and hyphens only": "فقط حروف الفبا، اعداد و -",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "اعلانهای حساس به زمان در لحظه ارسال خواهند شد، حتی اگر دستگاه در حالت بدون مزاحمت قرار داشته باشد.",
+ "rabbitmqNodesRequired": "لطفا گرههای این پایشگر را تنظیم کنید.",
+ "RabbitMQ Password": "گذرواژه RabbitMQ",
+ "RabbitMQ Nodes": "گرههای مدیریت RabbitMQ",
+ "rabbitmqHelpText": "برای پایش، لازم است افزونه مدیریت (Management) در RabbitMQ را فعال کنید. برای اطلاعات بیشتر به {rabitmq_documentation} مراجعه کنید.",
+ "wayToWriteWahaChatId": "شماره موبایل در قالب بینالمللی و بدون علامت مثبت ابتدایی ({0})، شناسه مخاطب ({1}) یا شناسه گروه ({2}). اعلانها از نشست WAHA به این شناسه گفتگو ارسال خواهند شد.",
+ "wahaSession": "نشست",
+ "wahaChatId": "شناسه گفتگو (شماره موبایل / شناسه مخاطب / شناسه گروه)",
+ "wayToGetWahaSession": "با این نشست WAHA اعلانها را به شناسه گفتگو ارسال میکند. قابل مشاهده در پنل کاربری WAHA.",
+ "Message Template": "قالب پیام",
+ "Template Format": "فرمت قالب",
+ "YZJ Webhook URL": "آدرس وبهوک YZJ",
+ "Fail": "شکست",
+ "Custom sound to override default notification sound": "نوای دلخواه به جای نوای پیشفرض اعلان",
+ "Time Sensitive (iOS Only)": "حساس به زمان (فقط iOS)",
+ "Can be found on:": "در {0} یافت میشود",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "شناسه ارسال کننده متنی و در صورتی که میخواهید پاسخها را دریافت کنید، شماره موبایل در قالب E.164.",
+ "rabbitmqNodesDescription": "آدرس گرههای مدیریت RabbitMQ را به همراه پروتکل و شماره پورت وارد کنید. مثال: {0}",
+ "RabbitMQ Username": "نام کاربری RabbitMQ",
+ "Separate multiple email addresses with commas": "آدرسهای ایمیل را با استفاده از ویرگول انگلیسی یا کاما جدا کنید",
+ "Plain Text": "متن ساده",
+ "aboutSlackUsername": "نام نمایشی ارسال کننده پیام را تغییر میدهد. اگر میخواهید شخصی را نام ببرید، در قسمت نام دوستانه بنویسید.",
+ "Clear": "پاکسازی",
+ "templateServiceName": "نام خدمت",
+ "templateHostnameOrURL": "آدرس یا نام میزبان",
+ "templateStatus": "وضعیت",
+ "telegramUseTemplate": "استفاده از قالب پیام دلخواه",
+ "telegramUseTemplateDescription": "در صورت فعالسازی، پیام با قالب دلخواه ارسال خواهد شد.",
+ "telegramTemplateFormatDescription": "در تلگرام امکان استفاده از زبانهای نشانهگذاری مختلفی وجود دارد، برای جزئیات بیشتر {0} را ببینید."
}
diff --git a/src/lang/fi.json b/src/lang/fi.json
index 628bfa1b6..bf203a749 100644
--- a/src/lang/fi.json
+++ b/src/lang/fi.json
@@ -328,7 +328,7 @@
"Query": "Tiedustelu (Query)",
"settingsCertificateExpiry": "TLS-varmenteen vanheneminen",
"certificationExpiryDescription": "HTTPS-seuraimet käynnistävät ilmoituksen, kun TLS-varmenne vanhenee:",
- "Setup Docker Host": "Asenna Docker-isäntä",
+ "Setup Docker Host": "Määritä Docker-isäntä",
"Connection Type": "Yhteystyyppi",
"tcp": "TCP / HTTP",
"Docker Container": "Docker-kontti",
@@ -341,7 +341,7 @@
"Packet Size": "Paketin koko",
"telegram": "Telegram",
"ZohoCliq": "ZohoCliq",
- "Bot Token": "Botin token",
+ "Bot Token": "Botin tokeni",
"wayToGetTelegramToken": "Voit saada tunnuksen osoitteesta {0}.",
"Chat ID": "Chat-tunnus",
"wayToGetTelegramChatID": "Saat chat-tunnuksesi lähettämällä viestin botille ja siirtymällä tähän URL-osoitteeseen nähdäksesi chat_id:",
@@ -554,7 +554,7 @@
"High": "Korkea",
"Topic": "Aihe",
"WeCom Bot Key": "WeCom-bottiavain",
- "Setup Proxy": "Asenna välityspalvelin",
+ "Setup Proxy": "Määritä välityspalvelin",
"Proxy Protocol": "Välityspalvelinprotokolla",
"Proxy Server": "Välityspalvelin",
"matrix": "Matriisi",
@@ -640,7 +640,6 @@
"light": "vaalea",
"Switch to Light Theme": "Vaihda vaaleaan teemaan",
"Powered by": "Voimanlähteenä",
- "shrinkDatabaseDescription": "Käynnistä tietokannan VACUUM SQLitelle. Jos tietokanta on luotu 1.10.0:n jälkeen, AUTO_VACUUM on jo käytössä eikä tätä toimintoa tarvita.",
"Accept characters:": "Hyväksy merkit:",
"New Status Page": "Uusi tilasivu",
"wayToGetCloudflaredURL": "(Lataa cloudflared osoitteesta {0})",
@@ -970,5 +969,152 @@
"threadForumPostID": "Langan / Keskustelualueketjun ID",
"e.g. {discordThreadID}": "esim. {discordThreadID}",
"whatHappensAtForumPost": "Luo uusi keskustelualueketju. Tämä EI jatka edellistä ketjua. Lähettääksesi olemassaolevaan ketjuun käytä toimintoa \"{option}\"",
- "Command": "Komento"
+ "Command": "Komento",
+ "smspartnerApiurl": "Löydät API-avaimesi kojelaudalta osoitteesta {0}",
+ "smspartnerPhoneNumber": "Puhelinnumero(t)",
+ "smspartnerPhoneNumberHelptext": "Numeron täytyy olla kansainvälisessä muodossa {0},{1}. Jos numeroita on useita, ne täytyy erottaa merkillä {2}",
+ "smspartnerSenderName": "SMS-lähettäjän nimi",
+ "smspartnerSenderNameInfo": "Täytyy sisältää 3..=11 tavallista merkkiä",
+ "threemaRecipient": "Vastaanottaja",
+ "threemaRecipientType": "Vastaanottajan tyyppi",
+ "threemaRecipientTypeIdentityFormat": "8 merkkiä",
+ "threemaRecipientTypePhone": "Puhelinnumero",
+ "threemaRecipientTypePhoneFormat": "E.164, ilman etuliitettä +",
+ "threemaRecipientTypeEmail": "Sähköpostiosoite",
+ "threemaSenderIdentity": "Yhdyskäytävän tunnus (Gateway-ID)",
+ "threemaApiAuthenticationSecret": "Gateway-ID salaisuus",
+ "wayToGetThreemaGateway": "Voit rekisteröityä Threema Gateway:n käyttäjäksi {0}.",
+ "threemaRecipientTypeIdentity": "Threema-tunnus (Threema-ID)",
+ "threemaSenderIdentityFormat": "8 merkkiä, alkaa useimmiten merkillä *",
+ "threemaBasicModeInfo": "Huomio: Tämä integraatio käyttää Threema Gateway:tä perustilassa (palvelinpohjainen salaus). Lisätietoja löytyy {0}.",
+ "apiKeysDisabledMsg": "API-avaimet eivät ole käytössä koska tunnistautuminen ei ole käytössä.",
+ "snmpCommunityStringHelptext": "Tämä merkkijono toimii salasanana ja pääsyoikeutena SNMP-laitteisiin. Aseta se samaksi kuin SNMP-laitteen asetuksissa.",
+ "privateOnesenderDesc": "Varmista, että puhelinnumero on kelvollinen. Lähettääksesi viestin yksityiseen numeroon esim. 628123456789",
+ "Authorization Header": "Tunnistautumisen otsikko (Authorization Header)",
+ "Optional: Space separated list of scopes": "Valinnainen: Luettelo näkyvyysalueista (scope) välilyönnillä erotettuna",
+ "jsonQueryDescription": "Valitse sisältö palvelimen JSON-vastauksesta käyttämällä JSON-kyselyä tai käytä alkuperäistä sisältöä merkillä \"$\", jos palvelimen vastaus ei ole JSON-muodossa. Tämän jälkeen sisältöä verrataan odotettuun arvoon (merkkijonona). Katso kyselykielen ohjeita osoitteesta {0}. Leikkikenttä löytyy osoitteesta {1}.",
+ "now": "nyt",
+ "time ago": "{0} sitten",
+ "-year": "-vuosi",
+ "Json Query Expression": "Json-kyselylauseke",
+ "and": "ja",
+ "cacheBusterParam": "Lisää parametri {0}",
+ "cacheBusterParamDescription": "Satunnaisesti luotu parametri välimuistien ohittamiseksi.",
+ "Community String": "Yhteisömerkkijono",
+ "OID (Object Identifier)": "OID (Objektin tunniste)",
+ "snmpOIDHelptext": "Syötä OID anturille tai tilalle jota haluat valvoa. Käytä verkonvalvontatyökaluja kuten MIB-selaimia tai SNMP-ohjelmistoja jos olet epävarma OID:n valinnasta.",
+ "Condition": "Ehto",
+ "SNMP Version": "SNMP-versio",
+ "Please enter a valid OID.": "Ole hyvä ja syötä kelvollinen OID.",
+ "Host Onesender": "OneSender-isäntä",
+ "Token Onesender": "OneSender-tokeni",
+ "Recipient Type": "Vastaanottajan tyyppi",
+ "Private Number": "Yksityinen numero",
+ "Group ID": "Ryhmän tunnus (Group ID)",
+ "groupOnesenderDesc": "Varmista, että ryhmän tunnus (Group ID) on kelvollinen. Lähettääksesi viestin ryhmälle, esim. 628123456789-342345",
+ "wayToGetOnesenderUrlandToken": "Saat URL-osoitteen ja tokenin vierailemalla OneSenderin verkkosivulla. Lisätietoja osoitteesta {0}",
+ "Add Remote Browser": "Lisää etäselain",
+ "New Group": "Uusi ryhmä",
+ "Group Name": "Ryhmän nimi",
+ "OAuth2: Client Credentials": "OAuth2: Asiakkaan tunnukset",
+ "Authentication Method": "Tunnistustapa",
+ "Form Data Body": "Lomakkeen tietosisältö (Form data body)",
+ "OAuth Token URL": "OAuth tokenin URL",
+ "Client ID": "Asiakkaan ID",
+ "Client Secret": "Asiakkaan salaisuus",
+ "OAuth Scope": "OAuth-näkyvyysalue (scope)",
+ "Go back to home page.": "Palaa etusivulle.",
+ "No tags found.": "Tunnisteita ei löytynyt.",
+ "Lost connection to the socket server.": "Menetettiin yhteys Socket-palvelimeen.",
+ "Cannot connect to the socket server.": "Socket-palvelimeen ei voi yhdistää.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhookin URL",
+ "signl4Docs": "Löydät lisätietoja SIGNL4-asetuksista ja webhook URLin hankinnasta osoitteesta {0}.",
+ "Conditions": "Ehdot",
+ "conditionAdd": "Lisää ehto",
+ "conditionDelete": "Poista ehto",
+ "conditionAddGroup": "Lisää ryhmä",
+ "conditionDeleteGroup": "Poista ryhmä",
+ "conditionValuePlaceholder": "Arvo",
+ "contains": "sisältää",
+ "not contains": "ei sisällä",
+ "not equals": "ei yhtä suuri kuin",
+ "equals": "yhtä suuri kuin",
+ "starts with": "alkaa",
+ "not starts with": "ei ala",
+ "ends with": "päättyy",
+ "not ends with": "ei pääty",
+ "less than": "vähemmän kuin",
+ "greater than": "enemmän kuin",
+ "less than or equal to": "vähemmän tai yhtä paljon kuin",
+ "greater than or equal to": "enemmän tai yhtä paljon kuin",
+ "record": "tietue",
+ "Notification Channel": "Ilmoituskanava",
+ "Custom sound to override default notification sound": "Mukautettu ääni oletusäänen sijaan",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Aikaherkät ilmoitukset toimitetaan välittömästi vaikka laite olisi Älä Häiritse-tilassa.",
+ "ignoredTLSError": "TLS/SSL-virheitä ei huomioida",
+ "Debug": "Debug",
+ "Copy": "Kopioi",
+ "CopyToClipboardError": "Leikepöydälle kopiointi ei onnistunut: {error}",
+ "CopyToClipboardSuccess": "Kopioitu!",
+ "CurlDebugInfo": "Debugataksesi seurainta, voit joko kopioida tämän oman tietokoneesi komentoriville tai sen tietokoneen komentoriville jossa uptime kuma on käynissä nähdäksesi pyyntösi.{newiline}Otathan huomioon verkkoympäristöjen erot kuten {firewalls}, {dns_resolvers} tai {docker_networks}.",
+ "firewalls": "palomuurit",
+ "dns resolvers": "DNS-palvelimet",
+ "docker networks": "Docker-verkot",
+ "CurlDebugInfoOAuth2CCUnsupported": "{curl} ei tue täydellistä oauth-asiakkaan kirjautumistietojen välittämistä.{newline}Hanki bearer token -tunnus ja välitä se {oauth2_bearer}-vaihtoehdon kautta.",
+ "CurlDebugInfoProxiesUnsupported": "Välityspalvelimen tukea yllä olevassa {curl}-komennossa ei ole tällä hetkellä toteutettu.",
+ "shrinkDatabaseDescriptionSqlite": "Käynnistä tietokannan {vacuum} SQLitelle. {auto_vacuum} on jo käytössä, mutta se ei eheytä tietokantaa tai uudelleenpakkaa yksittäisiä tietokantasivuja samoin kuin {vacuum}.",
+ "Message format": "Viestin muoto",
+ "Send rich messages": "Lähetä monipuolisia viestejä (rich messages)",
+ "Sound": "Ääni",
+ "Alphanumerical string and hyphens only": "Vain aakkosnumeerinen merkkijono ja yhdysmerkit",
+ "Arcade": "Pelihalli",
+ "Harp": "Harppu",
+ "Fail": "Virhe",
+ "Correct": "Onnistuminen",
+ "Reveal": "Ilmestys",
+ "Bubble": "Kupla",
+ "Doorbell": "Ovikello",
+ "Flute": "Huilu",
+ "Money": "Raha",
+ "Clear": "Kirkas",
+ "Elevator": "Hissi",
+ "Guitar": "Kitara",
+ "Time Sensitive (iOS Only)": "Aikaherkkä (vain iOS)",
+ "From": "Lähettäjä",
+ "Can be found on:": "Löydettävissä: {0}",
+ "The phone number of the recipient in E.164 format.": "Vastaanottajan puhelinnumero E.164-muodossa.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Joko lähettäjätunnus (sender ID) tai puhelinnumero E-164-muodossa jos haluat pystyä vastaanottamaan vastausviestejä.",
+ "Scifi": "Tieteisseikkailu",
+ "Pop": "Poksahdus",
+ "rabbitmqNodesRequired": "Aseta tämän seuraimen solmut.",
+ "rabbitmqNodesInvalid": "Käytä RabbitMQ-solmuille täysin hyväksyttyä ('http' alkavaa) URL-osoitetta.",
+ "RabbitMQ Username": "RabbitMQ Käyttäjänimi",
+ "RabbitMQ Password": "RabbitMQ Salasana",
+ "SendGrid API Key": "SendGrid API-avain",
+ "Separate multiple email addresses with commas": "Erottele useammat sähköpostiosoitteet pilkuilla",
+ "RabbitMQ Nodes": "RabbitMQ-hallintasolmut",
+ "rabbitmqNodesDescription": "Anna URL RabbitMQ-hallintasolmuille sisältäen protokollan ja portin. Esimerkki: {0}",
+ "rabbitmqHelpText": "Jotta voit käyttää seurainta, sinun on otettava hallintalaajennus käyttöön RabbitMQ-asetuksissa. Lisätietoja saat osoitteesta {rabitmq_documentation}.",
+ "aboutSlackUsername": "Muuttaa viestin lähettäjän näyttönimeä. Jos haluat mainita jonkun, lisää se ystävälliseen nimeen.",
+ "Font Twemoji by Twitter licensed under": "Twemoji-fontti (Twitter) on lisensoitu seuraavalla lisenssillä",
+ "wayToGetWahaSession": "Tästä istunnosta WAHA lähettää ilmoituksia Chat ID:hen. Löydät sen WAHA kojelaudasta.",
+ "wayToWriteWahaChatId": "Puhelinnumero kansainvälisellä etuliitteellä, mutta ilman plusmerkkiä alussa ({0}), yhteystietotunnusta ({1}) tai ryhmätunnusta ({2}). Ilmoitukset lähetetään tähän chat-tunnukseen WAHA-istunnosta.",
+ "wahaSession": "Istunto",
+ "wahaChatId": "Viesti ID (Puhelinnumero / Yhteystieto ID / Ryhmä ID)",
+ "Template Format": "Malli Muotoilu",
+ "wayToGetWahaApiUrl": "Sinun WAHA instanssin URL.",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "telegramServerUrl": "(Valinnainen) Palvelin Url",
+ "telegramServerUrlDescription": "Telegramin bot-api-rajoitusten poistamiseksi tai pääsyn saamiseksi estetyille alueille (Kiina, Iran jne.). Saat lisätietoja napsauttamalla {0}. Oletus: {1}",
+ "Message Template": "Viesti Malli",
+ "YZJ Robot Token": "YZJ Robotti tokeni",
+ "wayToGetWahaApiKey": "API Key on WHATSAPP_API_KEY ympäristömuuttujan arvo, jota käytit WAHA käynnistämiseen.",
+ "Plain Text": "Pelkkää tekstiä",
+ "templateServiceName": "palvelin nimi",
+ "templateHostnameOrURL": "isäntänimi tai URL",
+ "templateStatus": "tila",
+ "telegramUseTemplate": "Käytä mukautettua viesti mallia",
+ "telegramUseTemplateDescription": "Jos aktivoitu, viesti lähetetään käyttämällä mukautettua mallia.",
+ "telegramTemplateFormatDescription": "Telegram sallii erilaisten merkintäkielien käytön viesteissä, katso Telegram {0} tarkempia tietoja."
}
diff --git a/src/lang/fr-FR.json b/src/lang/fr-FR.json
index 5838a3cd3..2d09b0bac 100644
--- a/src/lang/fr-FR.json
+++ b/src/lang/fr-FR.json
@@ -4,7 +4,7 @@
"retryCheckEverySecond": "Réessayer toutes les {0} secondes",
"resendEveryXTimes": "Renvoyez toutes les {0} fois",
"resendDisabled": "Renvoi désactivé",
- "retriesDescription": "Nombre d'essais avant que le service ne soit déclaré hors ligne et qu'une notification soit envoyée",
+ "retriesDescription": "Nombre de tentatives avant que le service ne soit déclaré hors ligne et qu'une notification soit envoyée",
"ignoreTLSError": "Ignorer les erreurs liées au certificat SSL/TLS",
"upsideDownModeDescription": "Si le service est en ligne, il sera alors noté hors ligne et vice-versa.",
"maxRedirectDescription": "Nombre maximal de redirections avant que le service ne soit marqué comme hors ligne.",
@@ -87,8 +87,8 @@
"Hostname": "Nom d'hôte / adresse IP",
"Port": "Port",
"Heartbeat Interval": "Intervalle de vérification",
- "Retries": "Essais",
- "Heartbeat Retry Interval": "Intervalle de ré-essai",
+ "Retries": "Tentatives",
+ "Heartbeat Retry Interval": "Intervalle entre chaque nouvelle tentative",
"Resend Notification if Down X times consecutively": "Renvoyer la notification si hors ligne X fois consécutivement",
"Advanced": "Avancé",
"Upside Down Mode": "Mode inversé",
@@ -310,7 +310,7 @@
"lineDevConsoleTo": "Console développeurs Line - {0}",
"Basic Settings": "Paramètres de base",
"User ID": "Identifiant utilisateur",
- "Messaging API": "Messaging API",
+ "Messaging API": "API de messagerie",
"wayToGetLineChannelToken": "Premièrement accédez à {0}, créez un provider et définissez un type de salon à «Messaging API». Vous obtiendrez alors le jeton d'accès du salon et l'identifiant utilisateur demandés.",
"Icon URL": "URL vers l'icône",
"aboutIconURL": "Vous pouvez mettre un lien vers une image dans « URL vers l'icône » pour remplacer l'image de profil par défaut. Elle ne sera utilisé que si « Icône émoji » n'est pas défini.",
@@ -384,7 +384,6 @@
"Discard": "Abandonner",
"Cancel": "Annuler",
"Powered by": "Propulsé par",
- "shrinkDatabaseDescription": "Déclenche la commande VACUUM pour SQLite. Si votre base de données a été créée après la version 1.10.0, AUTO_VACUUM est déjà activé et cette action n'est pas nécessaire.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "Nom d'utilisateur de l'API (incl. webapi_ prefix)",
"serwersmsAPIPassword": "Mot de passe API",
@@ -456,7 +455,7 @@
"Huawei": "Huawei",
"High": "Haute",
"Retry": "Recommencez",
- "Topic": "Topic",
+ "Topic": "Sujet",
"WeCom Bot Key": "Clé de robot WeCom",
"Setup Proxy": "Configurer le proxy",
"Proxy Protocol": "Protocole proxy",
@@ -518,7 +517,7 @@
"Domain Names": "Noms de domaine",
"signedInDisp": "Connecté en tant que {0}",
"signedInDispDisabled": "Authentification désactivée.",
- "RadiusSecret": "Radius Secret",
+ "RadiusSecret": "Secret Radius",
"RadiusSecretDescription": "Secret partagé entre le client et le serveur",
"RadiusCalledStationId": "Identifiant de la station appelée",
"RadiusCalledStationIdDescription": "Identifiant de l'appareil appelé",
@@ -827,7 +826,7 @@
"nostrSender": "Émetteur clé privée (nsec)",
"nostrRecipientsHelp": "Format npub, un par ligne",
"nostrRelays": "Relais Nostr",
- "PushDeer Server": "PushDeer Server",
+ "PushDeer Server": "Serveur PushDeer",
"showCertificateExpiry": "Afficher l'expiration du certificat",
"noOrBadCertificate": "Pas/Mauvais certificat",
"pushDeerServerDescription": "Laissez le champ vide pour utiliser le serveur officiel",
@@ -972,5 +971,152 @@
"ignoreTLSErrorGeneral": "Ignorer l'erreur TLS/SSL pour la connexion",
"Bitrix24 Webhook URL": "URL du Webhook Bitrix24",
"wayToGetBitrix24Webhook": "Vous pouvez créer un webhook en suivant les étapes de {0}",
- "bitrix24SupportUserID": "Entrez votre identifiant d'utilisateur dans Bitrix24. Vous pouvez trouver l'ID à partir du lien en allant sur le profil de l'utilisateur."
+ "bitrix24SupportUserID": "Entrez votre identifiant d'utilisateur dans Bitrix24. Vous pouvez trouver l'ID à partir du lien en allant sur le profil de l'utilisateur.",
+ "smspartnerPhoneNumber": "Numéro(s) de téléphone",
+ "smspartnerPhoneNumberHelptext": "Le numéro doit être au format international {0}, {1}. Plusieurs numéros doivent être séparés par {2}",
+ "smspartnerSenderName": "Nom de l'expéditeur SMS",
+ "smspartnerSenderNameInfo": "Doit être compris entre 3 et 11 caractères réguliers",
+ "smspartnerApiurl": "Vous pouvez trouver votre clé API dans votre tableau de bord à {0}",
+ "threemaRecipient": "Destinataire",
+ "threemaRecipientType": "Type de destinataire",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8 caractères",
+ "threemaRecipientTypePhone": "Numéro de téléphone",
+ "threemaRecipientTypePhoneFormat": "E.164, sans le signe + initial",
+ "threemaRecipientTypeEmail": "Adresse email",
+ "threemaSenderIdentity": "Identifiant de passerelle",
+ "threemaSenderIdentityFormat": "8 caractères, commence généralement par *",
+ "threemaApiAuthenticationSecret": "Secret de l'identifiant de la passerelle",
+ "wayToGetThreemaGateway": "Vous pouvez vous inscrire à Threema Gateway {0}.",
+ "threemaBasicModeInfo": "Note : Cette intégration utilise Threema Gateway en mode basique (chiffrement basé sur le serveur). Vous pouvez trouver plus de détails {0}.",
+ "apiKeysDisabledMsg": "Les clés API sont désactivées car l'authentification est désactivée.",
+ "cacheBusterParam": "Ajoutez le paramètre {0}",
+ "snmpCommunityStringHelptext": "Cette chaîne fonctionne comme un mot de passe pour authentifier et contrôler l'accès aux appareils compatibles SNMP. Faites-le correspondre à la configuration de votre périphérique SNMP.",
+ "privateOnesenderDesc": "Assurez-vous que le numéro de téléphone est valide. Pour envoyer un message vers un numéro de téléphone privé, ex : 628123456789",
+ "groupOnesenderDesc": "Assurez-vous que le GroupID est valide. Pour envoyer un message dans le groupe, ex : 628123456789-342345",
+ "Optional: Space separated list of scopes": "Facultatif : liste des étendues séparées par des espaces",
+ "jsonQueryDescription": "Analyser et extraire des données spécifiques de la réponse JSON du serveur en utilisant une requête JSON ou utiliser « $ » pour la réponse brute, si un JSON n'est pas attendu. Le résultat est ensuite comparé à la valeur attendue, en tant que chaînes de caractères. Consultez {0} pour la documentation et utilisez {1} pour expérimenter avec des requêtes.",
+ "now": "Maintenant",
+ "time ago": "il y a {0}",
+ "-year": "-année",
+ "Json Query Expression": "Expression de requête JSON",
+ "and": "et",
+ "cacheBusterParamDescription": "Paramètre généré aléatoirement pour ignorer les caches.",
+ "Community String": "Chaîne de communauté",
+ "OID (Object Identifier)": "OID (identifiant d'objet)",
+ "snmpOIDHelptext": "Entrez l'OID du capteur ou de l'état que vous souhaitez surveiller. Utilisez des outils de gestion de réseau tels que les navigateurs MIB ou le logiciel SNMP si vous n'êtes pas sûr de l'OID.",
+ "Condition": "Condition",
+ "SNMP Version": "Version SNMP",
+ "Please enter a valid OID.": "Veuillez saisir un OID valide.",
+ "Host Onesender": "Héberger un expéditeur",
+ "Token Onesender": "Jeton Onesender",
+ "Recipient Type": "Type de destinataire",
+ "Private Number": "Numéro privé",
+ "Group ID": "Identifiant du groupe",
+ "wayToGetOnesenderUrlandToken": "Vous pouvez obtenir l'URL et le jeton en accédant au site Web Onesender. Plus d'informations {0}",
+ "Add Remote Browser": "Ajouter un navigateur distant",
+ "New Group": "Nouveau groupe",
+ "Group Name": "Nom du groupe",
+ "OAuth2: Client Credentials": "OAuth2 : informations d'identification du client",
+ "Authentication Method": "Méthode d'authentification",
+ "Authorization Header": "En-tête d'autorisation",
+ "Form Data Body": "Corps des données du formulaire",
+ "OAuth Token URL": "URL du jeton OAuth",
+ "Client ID": "Identifiant client",
+ "Client Secret": "Secret client",
+ "OAuth Scope": "Portée OAuth",
+ "Go back to home page.": "Retournez à la page d'accueil.",
+ "No tags found.": "Aucune étiquettes trouvée.",
+ "Lost connection to the socket server.": "Connexion au serveur de socket perdue.",
+ "Cannot connect to the socket server.": "Impossible de se connecter au serveur de socket.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL du webhook SIGNL4",
+ "signl4Docs": "Vous pouvez trouver plus d'informations sur la façon de configurer SIGNL4 et sur la façon d'obtenir l'URL du webhook SIGNL4 dans le {0}.",
+ "Conditions": "Conditions",
+ "conditionAdd": "Ajouter une condition",
+ "conditionDelete": "Supprimer la condition",
+ "conditionAddGroup": "Ajouter un groupe",
+ "conditionDeleteGroup": "Supprimer le groupe",
+ "conditionValuePlaceholder": "Valeur",
+ "equals": "est égal",
+ "not equals": "pas égal",
+ "contains": "contient",
+ "not contains": "ne contient pas",
+ "starts with": "commence par",
+ "not starts with": "ne commence pas par",
+ "ends with": "se termine par",
+ "not ends with": "ne se termine pas par",
+ "less than": "moins que",
+ "greater than": "supérieur à",
+ "less than or equal to": "inférieur ou égal à",
+ "greater than or equal to": "supérieur ou égal à",
+ "record": "enregistrer",
+ "shrinkDatabaseDescriptionSqlite": "Déclencher la commande {vacuum} pour la base de données SQLite. {auto_vacuum} est déjà activé, mais cela ne défragmente pas la base de données ni ne réorganise les pages individuelles de la base de données de la même manière que la commande {vacuum}.",
+ "ignoredTLSError": "Les erreurs TLS/SSL ont été ignorées",
+ "CopyToClipboardError": "Impossible de copier dans le presse-papiers : {error}",
+ "CurlDebugInfo": "Pour déboguer la sonde, vous pouvez soit le coller dans le terminal de votre propre machine, soit dans le terminal de la machine sur lequel kuma de disponibilité s'exécute et voir ce qui vous est demandé. {newiline} Veuillez être conscient des différences de réseau telles que {firewalls}, {dns_resolvers}. ou {docker_networks}.",
+ "Notification Channel": "Canal de notification",
+ "Alphanumerical string and hyphens only": "Chaîne alphanumérique et tirets uniquement",
+ "Custom sound to override default notification sound": "Son personnalisé pour remplacer le son de notification par défaut",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Les notifications urgentes seront envoyées immédiatement, même si l'appareil est en mode Ne pas déranger.",
+ "Debug": "Déboguer",
+ "Copy": "Copie",
+ "CopyToClipboardSuccess": "Copié !",
+ "firewalls": "pare-feu",
+ "dns resolvers": "résolveurs DNS",
+ "docker networks": "réseaux dockers",
+ "CurlDebugInfoOAuth2CCUnsupported": "Le flux complet des informations d'identification du client OAuth n'est pas pris en charge dans {curl}. {newline}Veuillez obtenir un jeton d'accès bearer token et le transmettre via l'option {oauth2_bearer}.",
+ "CurlDebugInfoProxiesUnsupported": "La prise en charge du proxy dans la commande {curl} ci-dessus n'est actuellement pas implémentée.",
+ "Message format": "Format des messages",
+ "Send rich messages": "Envoyer des messages enrichis",
+ "Sound": "Son",
+ "Arcade": "Arcade",
+ "Correct": "Correcte",
+ "Fail": "Échouer",
+ "Harp": "Harpe",
+ "Reveal": "Révéler",
+ "Bubble": "Bulle",
+ "Doorbell": "Sonnette",
+ "Flute": "Flûte",
+ "Money": "Argent",
+ "Scifi": "Science-fiction",
+ "Clear": "Effacer",
+ "Elevator": "Ascenseur",
+ "Guitar": "Guitare",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "Sensible au temps (iOS uniquement)",
+ "From": "De",
+ "Can be found on:": "Disponible sur : {0}",
+ "The phone number of the recipient in E.164 format.": "Le numéro de téléphone du destinataire au format E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Soit un identifiant d'expéditeur de texte, soit un numéro de téléphone au format E.164 si vous souhaitez pouvoir recevoir des réponses.",
+ "RabbitMQ Nodes": "Nœuds de gestion RabbitMQ",
+ "rabbitmqNodesDescription": "Entrez l'URL des nœuds de gestion RabbitMQ, y compris le protocole et le port. Exemple : {0}",
+ "rabbitmqNodesRequired": "Veuillez définir les nœuds pour cette sonde.",
+ "rabbitmqNodesInvalid": "Veuillez utiliser une URL complète (commençant par « http ») pour les nœuds RabbitMQ.",
+ "RabbitMQ Username": "Nom d'utilisateur RabbitMQ",
+ "RabbitMQ Password": "Mot de passe RabbitMQ",
+ "rabbitmqHelpText": "Pour utiliser la sonde, vous devrez activer le plug-in de gestion dans votre configuration RabbitMQ. Pour plus d'informations, veuillez consulter la {rabitmq_documentation}.",
+ "SendGrid API Key": "Clé API SendGrid",
+ "Separate multiple email addresses with commas": "Séparez plusieurs adresses e-mail par des virgules",
+ "aboutSlackUsername": "Modifie le nom d'affichage de l'expéditeur du message. Si vous souhaitez mentionner quelqu’un, incluez-le plutôt dans le nom convivial.",
+ "templateHostnameOrURL": "Nom d'hôte ou URL",
+ "telegramUseTemplate": "Utiliser un modèle de message personnalisé",
+ "telegramTemplateFormatDescription": "Telegram permet d'utiliser différents langages de balisage pour les messages, voir Telegram {0} pour plus de détails.",
+ "Plain Text": "Texte brut",
+ "YZJ Webhook URL": "URL du webhook YZJ",
+ "YZJ Robot Token": "Jeton robot YZJ",
+ "templateServiceName": "Nom du service",
+ "templateStatus": "Status",
+ "telegramUseTemplateDescription": "Si cette option est activée, le message sera envoyé à l'aide d'un modèle personnalisé.",
+ "Message Template": "Modèle de message",
+ "Template Format": "Format du modèle",
+ "wayToGetWahaApiUrl": "L’URL de votre instance WAHA.",
+ "wayToGetWahaSession": "À partir de cette session, WAHA envoie des notifications à l'ID de discussion. Vous pouvez le trouver dans le tableau de bord WAHA.",
+ "wahaSession": "Session",
+ "wahaChatId": "ID de discussion (numéro de téléphone / ID de contact / ID de groupe)",
+ "wayToGetWahaApiKey": "La clé API est la valeur de la variable d'environnement WHATSAPP_API_KEY que vous avez utilisée pour exécuter WAHA.",
+ "wayToWriteWahaChatId": "Le numéro de téléphone avec le préfixe international, mais sans le signe plus ({0}), l'identifiant de contact ({1}) ni l'identifiant de groupe ({2}). Les notifications sont envoyées à cet identifiant de chat depuis la session WAHA.",
+ "telegramServerUrlDescription": "Pour lever les limitations de l’API des bots Telegram ou accéder aux zones bloquées (Chine, Iran, etc.). Pour plus d’informations, cliquez sur {0}. Par défaut : {1}",
+ "telegramServerUrl": "(Facultatif) URL du serveur",
+ "Font Twemoji by Twitter licensed under": "La police Twemoji de Twitter est sous licence"
}
diff --git a/src/lang/ga.json b/src/lang/ga.json
index f5287b387..45fbec8e6 100644
--- a/src/lang/ga.json
+++ b/src/lang/ga.json
@@ -89,7 +89,7 @@
"programmingLanguages": "Teangacha Programála",
"Save": "Sábháil",
"Notifications": "Fógraí",
- "Setup Notification": "Fógraí Socruithe",
+ "Setup Notification": "Socrú Fógra",
"Light": "Solas",
"Dark": "Dorcha",
"Auto": "Uathoibríoch",
@@ -348,7 +348,7 @@
"Connection String": "Teaghrán Ceangail",
"Query": "Ceist",
"certificationExpiryDescription": "Spreagann Monatóirí HTTPS fógra nuair a théann teastas TLS in éag i:",
- "Setup Docker Host": "Socrú Óstach Docker",
+ "Setup Docker Host": "Socraigh Suas Óstach Docker",
"Connection Type": "Cineál Ceangail",
"Docker Daemon": "Deamhan Docker",
"DockerHostRequired": "Socraigh an tÓstríomhaire Docker don mhonatóir seo.",
@@ -397,7 +397,6 @@
"steamApiKeyDescription": "Chun monatóireacht a dhéanamh ar Fhreastalaí Cluiche Gaile is gá duit eochair Steam Web-API. Is féidir leat d’eochair API a chlárú anseo: ",
"Shrink Database": "Laghdaigh Bunachar Sonraí",
"No monitors available.": "Níl monatóirí ar fáil.",
- "shrinkDatabaseDescription": "Truicear bunachar sonraí Folamh do SQLite. Má chruthaítear do bhunachar sonraí tar éis 1.10.0, tá AUTO_VACUUM cumasaithe cheana féin agus níl an gníomh seo de dhíth.",
"deleteStatusPageMsg": "An bhfuil tú cinnte gur mhaith leat an leathanach stádais seo a scriosadh?",
"deleteProxyMsg": "An bhfuil tú cinnte gur mhaith leat an seachfhreastalaí seo a scriosadh do gach monatóir?",
"enableProxyDescription": "Ní bheidh éifeacht ag an seachfhreastalaí seo ar iarratais ar mhonatóir go dtí go ngníomhófar é. Is féidir leat an seachfhreastalaí a dhíchumasú go sealadach ó gach monatóir de réir stádas gníomhachtaithe.",
@@ -639,7 +638,7 @@
"Channel Name": "Ainm Cainéal",
"Notify Channel": "Cainéal a chur ar an eolas",
"Uptime Kuma URL": "URL Uptime Kuma",
- "setup a new monitor group": "grúpa monatóireachta nua a shocrú",
+ "setup a new monitor group": "grúpa monatóireachta nua a bhunú",
"openModalTo": "módúil a oscailt go {0}",
"Add a domain": "Cuir fearann leis",
"Remove domain": "Bain an fearann '{0}'",
@@ -937,5 +936,122 @@
"Alphanumeric (recommended)": "Alfa-uimhriúil (molta)",
"Telephone number": "Uimhir theileafóin",
"cellsyntSplitLongMessages": "Roinn teachtaireachtaí fada suas le 6 chuid. 153 x 6 = 918 carachtar.",
- "max 15 digits": "15 dhigit ar a mhéad"
+ "max 15 digits": "15 dhigit ar a mhéad",
+ "threemaRecipient": "Faighteoir",
+ "threemaRecipientType": "Cineál Faighteoir",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8 gcarachtar",
+ "threemaRecipientTypePhone": "Uimhir teileafón",
+ "threemaRecipientTypePhoneFormat": "E.164, gan tosaigh +",
+ "threemaRecipientTypeEmail": "Seoladh ríomhphoist",
+ "threemaSenderIdentity": "Geata-ID",
+ "threemaApiAuthenticationSecret": "Rún Geata-ID",
+ "smspartnerPhoneNumber": "Uimhir(neacha) fóin",
+ "smspartnerSenderName": "Ainm Seoltóra SMS",
+ "smspartnerSenderNameInfo": "Caithfidh sé a bheith idir 3..=11 charachtar rialta",
+ "apiKeysDisabledMsg": "Tá eochracha API díchumasaithe toisc go bhfuil fíordheimhniú díchumasaithe.",
+ "smspartnerApiurl": "Is féidir leat d'eochair API a aimsiú ar do dheais ag {0}",
+ "smspartnerPhoneNumberHelptext": "Caithfidh an uimhir a bheith san fhormáid idirnáisiúnta {0}, {1}. Ní mór uimhreacha iolracha a dheighilt le {2}",
+ "wayToGetThreemaGateway": "Is féidir leat clárú le haghaidh Threema Gateway {0}.",
+ "threemaSenderIdentityFormat": "8 gcarachtar, a thosaíonn le * de ghnáth",
+ "threemaBasicModeInfo": "Nóta: Úsáideann an comhtháthú seo Threema Gateway i mód bunúsach (criptiúchán freastalaí-bhunaithe). Is féidir tuilleadh sonraí a fháil {0}.",
+ "jsonQueryDescription": "Parsáil agus bain sonraí ar leith ó fhreagra JSON an fhreastalaí ag baint úsáide as ceist JSON nó úsáid \"$\" don fhreagra amh, mura bhfuil tú ag súil le JSON. Cuirtear an toradh i gcomparáid ansin leis an luach ionchais, mar teaghráin. Féach ar {0} le haghaidh doiciméadú agus úsáid {1} chun triail a bhaint as fiosruithe.",
+ "snmpCommunityStringHelptext": "Feidhmíonn an teaghrán seo mar phasfhocal chun rochtain ar ghléasanna SNMP-chumasaithe a fhíordheimhniú agus a rialú. Meaitseáil sé le cumraíocht do ghléis SNMP.",
+ "snmpOIDHelptext": "Cuir isteach an OID don braiteoir nó don stádas ar mhaith leat monatóireacht a dhéanamh air. Úsáid uirlisí bainistíochta líonra ar nós brabhsálaithe MIB nó bogearraí SNMP mura bhfuil tú cinnte faoin OID.",
+ "wayToGetOnesenderUrlandToken": "Is féidir leat an URL agus Token a fháil ach dul chuig láithreán gréasáin Onesender. Tuilleadh eolais {0}",
+ "Lost connection to the socket server.": "Ceangal caillte leis an bhfreastalaí soicéad.",
+ "signl4Docs": "Is féidir leat tuilleadh faisnéise a fháil faoi conas SIGNL4 a chumrú agus conas an URL SIGNL4 a fháil sa {0}.",
+ "not starts with": "ní thosaíonn le",
+ "greater than or equal to": "níos mó ná nó cothrom le",
+ "now": "anois",
+ "time ago": "{0} ó shin",
+ "-year": "-bliain",
+ "Json Query Expression": "Léiriú Ceist Json",
+ "and": "agus",
+ "cacheBusterParam": "Cuir an {0} paraiméadar leis",
+ "cacheBusterParamDescription": "Paraiméadar ginte go randamach chun scipeáil a dhéanamh ar thaisce.",
+ "Community String": "Teaghrán Pobail",
+ "OID (Object Identifier)": "OID (Aitheantóir Oibiachta)",
+ "Condition": "Coinníoll",
+ "SNMP Version": "Leagan SNMP",
+ "Please enter a valid OID.": "Cuir isteach OID bailí.",
+ "Host Onesender": "Óstach Onesender",
+ "Token Onesender": "Licín Onesender",
+ "Recipient Type": "Cineál Faighteoir",
+ "Private Number": "Uimhir Phríobháideach",
+ "privateOnesenderDesc": "Cinntigh go bhfuil an uimhir theileafóin bailí. Chun teachtaireacht a sheoladh chuig uimhir ghutháin phríobháideach, sean: 628123456789",
+ "groupOnesenderDesc": "Cinntigh go bhfuil an GroupID bailí. Chun teachtaireacht a sheoladh chuig an nGrúpa, sean: 628123456789-342345",
+ "Group ID": "ID grúpa",
+ "Add Remote Browser": "Cuir Brabhsálaí Cianda leis",
+ "New Group": "Grúpa Nua",
+ "Group Name": "Ainm an Ghrúpa",
+ "OAuth2: Client Credentials": "OAuth2: Dintiúir Cliant",
+ "Authentication Method": "Modh Fíordheimhnithe",
+ "Authorization Header": "Ceanntásc Údaraithe",
+ "Form Data Body": "Comhlacht Sonraí Foirm",
+ "OAuth Token URL": "URL OAuth Token",
+ "Client ID": "ID Cliant",
+ "Client Secret": "Rúnda Cliant",
+ "OAuth Scope": "OAuth Scóip",
+ "Optional: Space separated list of scopes": "Roghnach: Liosta scóip spásscartha",
+ "Go back to home page.": "Téigh ar ais go dtí an leathanach baile.",
+ "No tags found.": "Níor aimsíodh clibeanna.",
+ "Cannot connect to the socket server.": "Ní féidir ceangal leis an bhfreastalaí soicéad.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL SIGNL4 Cabhrán Gréasáin",
+ "Conditions": "Coinníollacha",
+ "conditionAdd": "Cuir Coinníoll leis",
+ "conditionDelete": "Scrios Coinníoll",
+ "conditionAddGroup": "Cuir Grúpa leis",
+ "conditionDeleteGroup": "Scrios Grúpa",
+ "conditionValuePlaceholder": "Luach",
+ "equals": "comhionann",
+ "not equals": "ní ionann",
+ "contains": "ina bhfuil",
+ "not contains": "nach bhfuil",
+ "starts with": "thosaíonn le",
+ "ends with": "chríochnaíonn le",
+ "not ends with": "ní chríochnaíonn le",
+ "less than": "níos lú ná",
+ "greater than": "níos mó ná",
+ "less than or equal to": "níos lú ná nó cothrom le",
+ "record": "taifead",
+ "shrinkDatabaseDescriptionSqlite": "Bunachar sonraí truicear {vacuum} le haghaidh SQLite. Tá {auto_vacuum} cumasaithe cheana féin ach ní dhéanann sé seo scoilt ar an mbunachar sonraí ná athphacáil leathanaigh aonair an bhunachair sonraí mar a dhéanann an t-ordú {vacuum}.",
+ "aboutSlackUsername": "Athraítear ainm taispeána sheoltóir na teachtaireachta. Más mian leat duine éigin a lua, cuir san ainm cairdiúil é ina ionad sin.",
+ "Custom sound to override default notification sound": "Fuaim shaincheaptha chun fuaim fógra réamhshocraithe a shárú",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Déanfar fógraí atá íogair ó thaobh ama a sheachadadh láithreach, fiú má tá an gléas i mód ná cuir isteach.",
+ "rabbitmqNodesInvalid": "Bain úsáid as URL láncháilithe (ag tosú le 'http') le haghaidh nóid RabbitMQ.",
+ "rabbitmqHelpText": "Chun an monatóir a úsáid, beidh ort an Breiseán Bainistíochta a chumasú i do chumrú RabbitMQ. Le haghaidh tuilleadh faisnéise, féach ar an {rabitmq_documentation}.",
+ "Pop": "Popcheol",
+ "Time Sensitive (iOS Only)": "Am-íogair (iOS amháin)",
+ "From": "Ó",
+ "Can be found on:": "Is féidir é a fháil ar: {0}",
+ "The phone number of the recipient in E.164 format.": "Uimhir theileafóin an fhaighteora san fhormáid E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Aitheantas seoltóir téacs nó uimhir theileafóin i bhformáid E.164 más mian leat a bheith in ann freagraí a fháil.",
+ "RabbitMQ Nodes": "Nóid Bainistíochta RabbitMQ",
+ "rabbitmqNodesDescription": "Cuir isteach an URL do na nóid bhainistíochta RabbitMQ lena n-áirítear prótacal agus port. Sampla: {0}",
+ "rabbitmqNodesRequired": "Socraigh na nóid don mhonatóir seo le do thoil.",
+ "RabbitMQ Username": "Ainm Úsáideora RabbitMQ",
+ "RabbitMQ Password": "RabbitMQ Pasfhocal",
+ "SendGrid API Key": "Eochair API SendGrid",
+ "Separate multiple email addresses with commas": "Scar seoltaí ríomhphoist iolracha le camóga",
+ "ignoredTLSError": "Níor tugadh aird ar earráidí TLS/SSL",
+ "Message format": "Formáid teachtaireachta",
+ "Send rich messages": "Seol teachtaireachtaí saibhir",
+ "Notification Channel": "Cainéal Fógraí",
+ "Sound": "Fuaim",
+ "Alphanumerical string and hyphens only": "Teaghrán alfa-uimhriúil agus fleiscíní amháin",
+ "Arcade": "Stuara",
+ "Correct": "Ceart",
+ "Fail": "Teip",
+ "Harp": "Cláirseach",
+ "Reveal": "Nocht",
+ "Bubble": "Mboilgeog",
+ "Doorbell": "Cloigín an dorais",
+ "Flute": "Fliúit",
+ "Money": "Airgead",
+ "Clear": "Glan",
+ "Elevator": "Ardaitheoir",
+ "Guitar": "Giotár",
+ "Scifi": "Ficsean eolaíochta"
}
diff --git a/src/lang/he-IL.json b/src/lang/he-IL.json
index 50f67cfd6..fc79889a4 100644
--- a/src/lang/he-IL.json
+++ b/src/lang/he-IL.json
@@ -378,7 +378,6 @@
"Discard": "להשליך",
"Cancel": "לְבַטֵל",
"Powered by": "פועל על",
- "shrinkDatabaseDescription": "ואקום מסד נתונים להפעיל עבור SQLITE.אם בסיס הנתונים שלך נוצר לאחר 1.10.0, Auto_VACUUM כבר מופעל ואין צורך בפעולה זו.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "שם משתמש ל-API (כולל webapi_prefix)",
"serwersmsAPIPassword": "סיסמת API",
diff --git a/src/lang/hi.json b/src/lang/hi.json
index 08efa6ff5..101cb3a85 100644
--- a/src/lang/hi.json
+++ b/src/lang/hi.json
@@ -40,5 +40,71 @@
"Down": "बंद",
"Passive Monitor Type": "निष्क्रिय मॉनिटर प्रकार",
"Status": "स्थिति",
- "showCertificateExpiry": "प्रमाणपत्र समाप्ति दिखाएँ"
+ "showCertificateExpiry": "प्रमाणपत्र समाप्ति दिखाएँ",
+ "setupDatabaseEmbeddedMariaDB": "आपको कुछ भी सेट करने की जरूरत नहीं है. इस डॉकर छवि ने आपके लिए मारियाडीबी को स्वचालित रूप से एम्बेड और कॉन्फ़िगर किया है। अपटाइम कुमा यूनिक्स सॉकेट के माध्यम से इस डेटाबेस से कनेक्ट होगा।",
+ "setupDatabaseChooseDatabase": "आप किस डेटाबेस का उपयोग करना चाहेंगे?",
+ "setupDatabaseMariaDB": "किसी बाहरी मारियाडीबी डेटाबेस से कनेक्ट करें। आपको डेटाबेस कनेक्शन जानकारी सेट करने की आवश्यकता है।",
+ "setupDatabaseSQLite": "एक सरल डेटाबेस फ़ाइल, जो छोटे पैमाने पर तैनाती के लिए अनुशंसित है। V2.0.0 से पहले, अपटाइम कुमा ने डिफ़ॉल्ट डेटाबेस के रूप में SQLite का उपयोग किया था।",
+ "settingUpDatabaseMSG": "डेटाबेस की स्थापना. इसमें थोड़ा समय लग सकता है, कृपया धैर्य रखें।",
+ "markdownSupported": "मार्कडाउन सिंटैक्स समर्थित",
+ "time ago": "समय पहले",
+ "day": "दिन",
+ "Primary Base URL": "प्राथमिक आधार यूआरएल",
+ "-hour": "-घंटा",
+ "-day": "-दिन",
+ "hour": "घंटे",
+ "DateTime": "दिनांक समय",
+ "Uptime": "उपरिकाल",
+ "Cert Exp.": "प्रमाणपत्र अनुभव.",
+ "dbName": "डेटाबेस का नाम",
+ "now": "अभी",
+ "-year": "-वर्ष",
+ "Not available, please setup.": "उपलब्ध नहीं है, कृपया सेट अप करें।",
+ "Auto": "स्वतः",
+ "styleElapsedTime": "हार्टबीट बार के नीचे बीता हुआ समय",
+ "Setup Notification": "सूचना सेट अप करें",
+ "Light": "प्रकाश",
+ "Dark": "अंधकार",
+ "Theme - Heartbeat Bar": "थीम - हार्टबीट बार",
+ "Host URL": "होस्ट यूआरएल",
+ "Request Timeout": "अनुरोध समय सीमा",
+ "Accepted Status Codes": "स्वीकृत स्थिति कोड",
+ "Response": "प्रतिक्रिया",
+ "locally configured mail transfer agent": "स्थानीय रूप से कॉन्फ़िगर किया गया मेल ट्रांसफर एजेंट",
+ "Heartbeat Interval": "हार्टबीट अंतराल",
+ "Retries": "पुनः प्रयासों की संख्या",
+ "Heartbeat Retry Interval": "हार्टबीट पुनः प्रयास अंतराल",
+ "Port": "पोर्ट",
+ "checkEverySecond": "हर {0} सेकंड में जांच करें",
+ "retryCheckEverySecond": "हर {0} सेकंड में पुनः प्रयास करें",
+ "ignoreTLSErrorGeneral": "कनेक्शन के लिए TLS/SSL त्रुटि को अनदेखा करें",
+ "needPushEvery": "आपको हर {0} सेकंड में इस URL को कॉल करना चाहिए।",
+ "pushOptionalParams": "वैकल्पिक पैरामीटर: {0}",
+ "Save": "सहेजें",
+ "retriesDescription": "सेवा को डाउन के रूप में चिह्नित करने और सूचना भेजने से पहले अधिकतम पुनः प्रयासों की संख्या",
+ "Notifications": "सूचनाएँ",
+ "Check Update On GitHub": "गिटहब पर अपडेट जांचें",
+ "timeoutAfter": "{0} सेकंड के बाद समय सीमा समाप्त",
+ "upsideDownModeDescription": "स्थिति को उल्टा करें। यदि सेवा पहुंच योग्य है, तो यह DOWN है।",
+ "Upside Down Mode": "उल्टा मोड",
+ "Max. Redirects": "अधिकतम पुनर्निर्देश",
+ "Push URL": "पुश यूआरएल",
+ "Monitor": "मॉनिटर | मॉनिटर्स",
+ "maxRedirectDescription": "अनुसरण करने के लिए अधिकतम पुनर्निर्देशनों की संख्या। पुनर्निर्देशनों को अक्षम करने के लिए 0 पर सेट करें।",
+ "Advanced": "उन्नत",
+ "Invert Keyword": "कीवर्ड उलटें",
+ "Json Query Expression": "JSON क्वेरी अभिव्यक्ति",
+ "URL": "यूआरएल",
+ "Hostname": "होस्टनेम",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "या तो उस सर्वर का होस्टनेम दर्ज करें जिससे आप कनेक्ट करना चाहते हैं या {localhost} यदि आप {local_mta} का उपयोग करना चाहते हैं",
+ "Resend Notification if Down X times consecutively": "यदि लगातार X बार डाउन हो, तो पुनः सूचना भेजें",
+ "resendEveryXTimes": "हर {0} बार में पुनः भेजें",
+ "resendDisabled": "पुनः भेजना निष्क्रिय किया गया है",
+ "ignoredTLSError": "TLS/SSL त्रुटियों को अनदेखा किया गया है",
+ "pushOthers": "अन्य",
+ "programmingLanguages": "प्रोग्रामिंग भाषाएँ",
+ "styleElapsedTimeShowNoLine": "दिखाएँ (कोई रेखा नहीं)",
+ "Expected Value": "अपेक्षित मान",
+ "ignoreTLSError": "HTTPS वेबसाइटों के लिए TLS/SSL त्रुटियों को अनदेखा करें",
+ "pushViewCode": "पुश मॉनिटर का उपयोग कैसे करें? (कोड देखें)"
}
diff --git a/src/lang/hr-HR.json b/src/lang/hr-HR.json
index a0246bd1c..164cd217f 100644
--- a/src/lang/hr-HR.json
+++ b/src/lang/hr-HR.json
@@ -194,11 +194,11 @@
"telegram": "Telegram",
"Bot Token": "Token bota",
"wayToGetTelegramToken": "Token možete nabaviti preko {0}.",
- "Chat ID": "ID razgovora",
- "supportTelegramChatID": "Podržani su ID-jevi izravnih razgovora, grupa i kanala",
- "wayToGetTelegramChatID": "ID razgovora možete saznati tako da botu pošaljete poruku te odete na ovaj URL:",
- "YOUR BOT TOKEN HERE": "OVDJE IDE TOKEN BOTA",
- "chatIDNotFound": "ID razgovora nije pronađen; prvo morate poslati poruku botu",
+ "Chat ID": "Identifikator razgovora",
+ "supportTelegramChatID": "Podržani su identifikatori izravnih razgovora, grupa i kanala",
+ "wayToGetTelegramChatID": "Identifikator razgovora možete saznati tako da botu pošaljete poruku te odete na ovaj URL:",
+ "YOUR BOT TOKEN HERE": "TOKEN BOTA STAVITI OVDJE",
+ "chatIDNotFound": "Identifikator razgovora nije pronađen; prvo morate poslati poruku botu",
"webhook": "Webhook",
"Post URL": "URL Post zahtjeva",
"Content Type": "Tip sadržaja (Content Type)",
@@ -267,7 +267,7 @@
"Check octopush prices": "Provjerite cijene usluge Octopush {0}.",
"octopushPhoneNumber": "Telefonski broj (međunarodni format, primjerice: +38512345678) ",
"octopushSMSSender": "Naziv SMS pošiljatelja : 3-11 alfanumeričkih znakova i razmak (a-zA-Z0-9)",
- "LunaSea Device ID": "LunaSea ID Uređaja",
+ "LunaSea Device ID": "LunaSea identifikator uređaja",
"Apprise URL": "URL usluge Apprise",
"Example:": "Primjerice: {0}",
"Read more:": "Pročitajte više: {0}",
@@ -280,9 +280,9 @@
"Line Developers Console": "LINE razvojnoj konzoli",
"lineDevConsoleTo": "LINE razvojna konzola - {0}",
"Basic Settings": "Osnovne Postavke",
- "User ID": "Korisnički ID",
+ "User ID": "Korisnički identifikator",
"Messaging API": "API za razmjenu poruka",
- "wayToGetLineChannelToken": "Prvo, pristupite {0}, kreirajte pružatelja usluga te kanal (API za razmjenu poruka), zatim možete dobiti token za pristup kanalu te korisnički ID za polja iznad.",
+ "wayToGetLineChannelToken": "Prvo, pristupite {0}, kreirajte pružatelja usluga te kanal (API za razmjenu poruka), zatim možete dobiti token za pristup kanalu te identifikator korisnika za polja iznad.",
"Icon URL": "URL slike",
"aboutIconURL": "Možete postaviti poveznicu na sliku u polju \"URL slike\" kako biste spriječili korištenje zadane slike. Ovo se polje neće koristiti ako je postavljeno polje \"Emotikon\".",
"aboutMattermostChannelName": "Možete promijeniti kanal u kojeg webhook šalje tako da ispunite polje \"Naziv kanala\". Ta opcija mora biti omogućena unutar Mattermost postavki za webhook. Primjerice: #neki-kanal",
@@ -353,7 +353,6 @@
"Saved.": "Spremljeno.",
"PushByTechulus": "Push by Techulus",
"GoogleChat": "Google Chat (preko platforme Google Workspace)",
- "shrinkDatabaseDescription": "Pokreni VACUUM operaciju za SQLite. Ako je baza podataka kreirana nakon inačice 1.10.0, AUTO_VACUUM opcija već je uključena te ova akcija nije nužna.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API korisničko ime (uključujući webapi_ prefiks)",
"serwersmsAPIPassword": "API lozinka",
@@ -555,7 +554,7 @@
"socket": "Docker socket",
"tcp": "TCP / HTTP",
"Docker Container": "Docker kontejner",
- "Container Name / ID": "Naziv / ID kontejnera",
+ "Container Name / ID": "Naziv / identifikator kontejnera",
"Docker Host": "Docker domaćin",
"Docker Hosts": "Docker domaćini",
"ntfy Topic": "ntfy tema",
@@ -633,7 +632,7 @@
"Authorization Identity": "Identitet autorizacije",
"weekdayShortThu": "Čet",
"setupDatabaseChooseDatabase": "Koju bazu podataka želite koristiti?",
- "setupDatabaseEmbeddedMariaDB": "Ne morate ništa dodatno postavljati. Ovaj docker image ima ugrađenu i konfiguriranu MariaDB bazu podataka za Vas. Uptime Kuma će se spojiti na ovu bazu preko UNIX socketa.",
+ "setupDatabaseEmbeddedMariaDB": "Ne morate ništa dodatno postavljati. Ovaj Docker image ima ugrađenu i konfiguriranu MariaDB bazu podataka za Vas. Uptime Kuma će se spojiti na ovu bazu preko UNIX socketa.",
"setupDatabaseMariaDB": "Spojite vanjsku MariaDB bazu podataka. Morate unijeti informacije o konekciji prema bazi.",
"setupDatabaseSQLite": "Jednostavna datoteka s bazom podataka, preporuča se samo za manje implementacije. Prije inačice v2.0.0, Uptime Kuma je koristila SQLite kao zadanu bazu podataka.",
"dbName": "Naziv baze podataka",
@@ -649,7 +648,7 @@
"webhookBodyCustomOption": "Prilagođeno tijelo zahtjeva",
"selectedMonitorCount": "Odabrano: {0}",
"Check/Uncheck": "Označi/odznači",
- "telegramMessageThreadID": "(Neobavezno) ID dretve poruka",
+ "telegramMessageThreadID": "(Neobvezno) Identivikator dretve poruka",
"telegramMessageThreadIDDescription": "Neobavezni jedinstveni identifikator za dretvu poruka (temu) foruma; samo za forumske supergrupe",
"telegramSendSilently": "Pošalji nečujno",
"telegramSendSilentlyDescription": "Šalje poruku nečujno. Primatelji će dobiti obavijest bez zvuka.",
@@ -690,7 +689,7 @@
"confirmDeleteTagMsg": "Jeste li sigurni da želite izbrisati ovu oznaku? Monitori povezani s ovom oznakom neće biti izbrisani.",
"enableGRPCTls": "Omogući sigurno slanje gRPC zahtjeva koristeći TLS",
"deleteMaintenanceMsg": "Jeste li sigurni da želite izbrisati ovo održavanje?",
- "Guild ID": "ID za guild",
+ "Guild ID": "Identifikator za guild",
"pushoverMessageTtl": "Vrijeme isteka poruke (u sekundama)",
"Proto Method": "Metoda poziva",
"Proto Content": "Proto sadržaj",
@@ -938,7 +937,7 @@
"cellsyntOriginator": "Vidljivo na mobilnom telefonu primatelja kao autor poruke. Dopuštene vrijednosti i funkcija ovise o vrsti izvorišta.",
"cellsyntDestination": "Telefonski broj primatelja u međunarodnom formatu s početnim 00 iza kojeg slijedi pozivni broj države (maksimalno 17 znamenki). Primjerice, za broj iz UK-a 07920-110-000 vrijednost mora biti 00447920110000 . Maksimalno 25.000 primatelja odvojenih zarezom po HTTP zahtjevu.",
"Channel access token (Long-lived)": "Pristupni token za kanal (dugovječni)",
- "Your User ID": "Vaš korisnički identifikator",
+ "Your User ID": "Vaš korisnički identifikator (ID)",
"wayToGetSevenIOApiKey": "Posjetite nadzornu ploču odlaskom na app.seven.io > Developer > API Key i dodajte novi ključ koristeći zeleni gumb za dodavanje",
"Command": "Naredba",
"mongodbCommandDescription": "Pokreni MongoDB naredbu na bazi podataka. Za informacije o dostupnim naredbama posjetite {documentation}",
@@ -966,5 +965,151 @@
"Mention group": "Spomeni {group}",
"senderSevenIO": "Broj ili naziv pošiljatelja",
"receiverSevenIO": "Broj primatelja",
- "receiverInfoSevenIO": "Ako broj primatelja nije registriran u Njemačkoj, potrebno je uključiti i pozivni broj države (primjerice, umjesto 023123123 potrebno je koristiti 36523123123 ako je riječ o hrvatskom broju)"
+ "receiverInfoSevenIO": "Ako broj primatelja nije registriran u Njemačkoj, potrebno je uključiti i pozivni broj države (primjerice, umjesto 023123123 potrebno je koristiti 36523123123 ako je riječ o hrvatskom broju)",
+ "threemaRecipient": "Primatelj",
+ "threemaRecipientType": "Tip pošiljatelja",
+ "threemaRecipientTypeIdentity": "Threema ID",
+ "threemaRecipientTypeIdentityFormat": "8 znakova",
+ "threemaRecipientTypeEmail": "Adresa e-pošte",
+ "threemaSenderIdentity": "ID pristupnika",
+ "threemaSenderIdentityFormat": "8 znakova, obično počinje znakom *",
+ "threemaApiAuthenticationSecret": "Tajna pristupnika",
+ "smspartnerApiurl": "Možete pronaći svoj API ključ na nadzornoj ploči: {0}",
+ "smspartnerPhoneNumber": "Broj(evi) telefona",
+ "smspartnerPhoneNumberHelptext": "Broj mora biti u međunarodnom formatu {0}, {1}. Višestruki unosi moraju biti odvojeni znakom {2}",
+ "smspartnerSenderName": "Naziv SMS pošiljatelja",
+ "apiKeysDisabledMsg": "API ključevi su onemogućeni jer je provjera autentičnosti onemogućena.",
+ "wayToGetThreemaGateway": "Možete se registrirati za uslugu Threema Gateway {0}.",
+ "threemaRecipientTypePhone": "Telefonski broj",
+ "threemaRecipientTypePhoneFormat": "E.164, bez vodećeg znaka +",
+ "threemaBasicModeInfo": "Napomena: Ova integracija koristi Threema Gateway u osnovnom načinu rada (enkripcija temeljena na poslužitelju). Dodatne pojedinosti možete pronaći na {0}.",
+ "smspartnerSenderNameInfo": "Mora biti između 3 i 11 znakova",
+ "shrinkDatabaseDescriptionSqlite": "Pokreni {vacuum} baze podataka za SQLite. Opcija {auto_vacuum} je već omogućena, ali to ne defragmentira bazu podataka niti ponovno pakira pojedinačne stranice baze podataka na način na koji to radi naredba {vacuum}.",
+ "ignoredTLSError": "TLS/SSL greške se ignoriraju",
+ "cacheBusterParam": "Dodaj parametar {0}",
+ "cacheBusterParamDescription": "Nasumično generirani parametar, za preskakanje predmemorije.",
+ "snmpCommunityStringHelptext": "Ovaj niz funkcionira kao lozinka za provjeru autentičnosti i kontrolu pristupa uređajima s omogućenim SNMP-om. Uskladite ga sa svojom konfiguracijom SNMP uređaja.",
+ "privateOnesenderDesc": "Provjerite je li broj telefona valjan. Za slanje poruke na privatni telefonski broj, npr. 628123456789",
+ "Go back to home page.": "Vratite se na početnu stranicu.",
+ "signl4Docs": "Više informacija o tome kako konfigurirati SIGNL4 i kako dobiti SIGNL4 URL webhooka možete pronaći na {0}.",
+ "not starts with": "ne počinje s",
+ "less than or equal to": "manje od ili jednako",
+ "Doorbell": "Zvono na vratima",
+ "Custom sound to override default notification sound": "Prilagođeni zvuk za zamjenu zadanog zvuka obavijesti",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Vremenski osjetljive obavijesti bit će isporučene odmah, čak i ako je uređaj u načinu rada bez ometanja.",
+ "now": "sada",
+ "time ago": "prije {0}",
+ "-year": "-godišnje",
+ "Json Query Expression": "Upit u JSON obliku",
+ "Community String": "Zajednički niz teksta",
+ "conditionAddGroup": "Dodaj grupu",
+ "conditionDeleteGroup": "Obriši grupu",
+ "Debug": "Otklanjanje grešaka",
+ "Copy": "Kopirati",
+ "CopyToClipboardError": "Greška pri kopiranju u međuspremnik: {error}",
+ "CopyToClipboardSuccess": "Kopirano!",
+ "dns resolvers": "DNS razrješivači",
+ "firewalls": "vatrozidi",
+ "CurlDebugInfo": "Za otklanjanje grešaka u Monitoru, možete zalijepiti ovo u terminal na vlastitom računalu ili računalu na kojem se Uptime Kuma pokreće, kako biste isprobali Vaš mrežni zahtjev.{newiline}Budite svjesni mrežnih razlika koje mogu činiti {firewalls}, {dns_resolvers} ili {docker_networks}.",
+ "docker networks": "Dockerove mreže",
+ "CurlDebugInfoOAuth2CCUnsupported": "Potpuni tok vjerodajnica klijenta OAuth nije podržan u {curl}.{newline}Nabavite token nositelja i proslijedite ga koristeći opciju {oauth2_bearer}.",
+ "CurlDebugInfoProxiesUnsupported": "Proxy podrška u gornjoj naredbi {curl} trenutno nije implementirana.",
+ "and": "i",
+ "Message format": "Format poruke",
+ "Send rich messages": "Slanje poruka s obogaćenim tekstom",
+ "OID (Object Identifier)": "OID (Identifikator objekta)",
+ "snmpOIDHelptext": "Unesite OID za senzor ili status kojeg želite monitorirati. Koristite alate za upravljanje mrežom poput MIB preglednika ili SNMP programa ako niste sigurni koja je vrijednost OID-a.",
+ "Condition": "Uvjet",
+ "SNMP Version": "Inačica SNMP-a",
+ "Please enter a valid OID.": "Unesite važeći OID.",
+ "Recipient Type": "Tip primatelja",
+ "Private Number": "Privatni broj",
+ "wayToGetOnesenderUrlandToken": "URL i token možete dobiti odlaskom na OneSender web stranicu. Više informacija na {0}",
+ "Token Onesender": "OneSender Token",
+ "Host Onesender": "Adresa OneSender domaćina",
+ "Group ID": "Identifikator Grupe",
+ "groupOnesenderDesc": "Provjerite je li Identifikator Grupe valjan. Za slanje poruke na Grupu, npr. 628123456789-342345",
+ "Add Remote Browser": "Dodaj udaljeni preglednik",
+ "New Group": "Nova grupa",
+ "Group Name": "Naziv grupe",
+ "OAuth2: Client Credentials": "OAuth2: vjerodajnice klijenta",
+ "Authentication Method": "Metoda provjere autentičnosti",
+ "Authorization Header": "Zaglavlje autorizacije",
+ "Form Data Body": "Tijelo podataka obrasca",
+ "OAuth Token URL": "URL OAuth tokena",
+ "Client ID": "Klijentski identifikator",
+ "Client Secret": "Klijentska tajna",
+ "OAuth Scope": "OAuth opseg",
+ "Optional: Space separated list of scopes": "Neobavezno: popis opsega odvojen razmakom",
+ "No tags found.": "Nema pronađenih oznaka.",
+ "Lost connection to the socket server.": "Izgubljena veza sa socket poslužiteljem.",
+ "Cannot connect to the socket server.": "Nije moguće spojiti se na socket poslužitelj.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 URL webhooka",
+ "Conditions": "Uvjeti",
+ "conditionAdd": "Dodaj uvjet",
+ "conditionDelete": "Obriši uvjet",
+ "conditionValuePlaceholder": "Vrijednost",
+ "equals": "je jednako",
+ "not equals": "nije jednako",
+ "contains": "sadržava",
+ "not contains": "ne sadržava",
+ "starts with": "počinje s",
+ "ends with": "završava s",
+ "not ends with": "ne završava s",
+ "less than": "manje od",
+ "greater than": "veće od",
+ "greater than or equal to": "veće od ili jednako",
+ "record": "zapis",
+ "Notification Channel": "Kanal obavijesti",
+ "Sound": "Zvuk",
+ "Alphanumerical string and hyphens only": "Samo alfanumerički niz i crtice",
+ "Arcade": "Arkadno",
+ "Fail": "Neuspjeh",
+ "Correct": "Ispravno",
+ "Harp": "Harfa",
+ "Reveal": "Otkrivanje",
+ "Bubble": "Mjehurić",
+ "Flute": "Flauta",
+ "Money": "Novac",
+ "Scifi": "Znanstvena fantastika",
+ "Clear": "Čisto",
+ "Elevator": "Dizalo",
+ "Guitar": "Gitara",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "Vremenski osjetljivo (samo iOS)",
+ "From": "Od",
+ "Can be found on:": "Može se pronaći na: {0}",
+ "The phone number of the recipient in E.164 format.": "Telefonski broj primatelja u formatu E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Ili identifikator pošiljatelja tekstualne poruke ili telefonski broj u formatu E.164 ako želite primati odgovore.",
+ "jsonQueryDescription": "Izvršite JSON upit nad primljenim odgovorom i provjerite očekivanu povratnu vrijednost. Koristite \"$\" za zahtjeve u kojima ne očekujete JSON odgovor. Povratna vrijednost će se za usporedbu pretvoriti u niz znakova (string). Pogledajte stranicu {0} za dokumentaciju o jeziku upita. Testno okruženje možete pronaći na {1}.",
+ "rabbitmqNodesRequired": "Postavite čvorove za ovaj Monitor.",
+ "rabbitmqNodesInvalid": "Koristite potpuni URL (onaj koji počinje s 'http') za RabbitMQ čvorove.",
+ "RabbitMQ Username": "RabbitMQ korisničko ime",
+ "RabbitMQ Password": "RabbitMQ lozinka",
+ "SendGrid API Key": "SendGrid API ključ",
+ "Separate multiple email addresses with commas": "Više adresa e-pošte potrebno je odvojiti zarezima",
+ "RabbitMQ Nodes": "RabbitMQ upravljački čvorovi",
+ "rabbitmqNodesDescription": "Unesite URL za upravljačke čvorove RabbitMQ uključujući protokol i port. Primjer: {0}",
+ "rabbitmqHelpText": "Za korištenje ovog Monitora morat ćete omogućiti dodatak \"Management Plugin\" u svom RabbitMQ-u. Za više informacija pogledajte {rabitmq_documentation}.",
+ "aboutSlackUsername": "Mijenja ime pošiljatelja vidljivo svima ostalima.",
+ "templateServiceName": "naziv servisa",
+ "telegramUseTemplate": "Koristi prilagođeni predložak poruke",
+ "telegramTemplateFormatDescription": "Telegram dozvoljava korištenje različitih markup jezika za formatiranje poruka, pogledajte {0} za više detalja.",
+ "YZJ Robot Token": "YZJ token robota",
+ "YZJ Webhook URL": "YZJ URL webhooka",
+ "templateHostnameOrURL": "domaćin ili URL",
+ "templateStatus": "status",
+ "telegramUseTemplateDescription": "Ako je omogućeno, poruka će biti poslana koristeći prilagođeni predložak.",
+ "Plain Text": "Obični tekst",
+ "Message Template": "Predložak poruke",
+ "Template Format": "Format predloška",
+ "wahaSession": "Sjednica",
+ "wahaChatId": "Identifikator razgovora (telefonski broj / ID kontakta / ID grupe)",
+ "wayToGetWahaApiUrl": "URL instance WAHA.",
+ "wayToGetWahaApiKey": "API ključ je vrijednost varijable okruženja WHATSAPP_API_KEY koju ste koristili za pokretanje servisa WAHA.",
+ "wayToGetWahaSession": "Iz ove sjednice WAHA šalje obavijesti na identifikator razgovora. Može se pronaći na WAHA nadzornoj ploči.",
+ "wayToWriteWahaChatId": "Telefonski broj s međunarodnim prefiksom, ali bez znaka plus na početku ({0}), identifikator kontakta ({1}) ili identifikator grupe ({2}). Obavijesti se šalju na ovaj identifikator chata iz WAHA sesije.",
+ "telegramServerUrl": "(Neobvezno) URL Poslužitelja",
+ "telegramServerUrlDescription": "Za ukidanje ograničenja API-ja za botove Telegrama ili dobivanje pristupa u blokiranim područjima (Kina, Iran, itd.). Za više informacija kliknite {0}. Zadano: {1}"
}
diff --git a/src/lang/hu.json b/src/lang/hu.json
index 4945dd2e7..2eb829c68 100644
--- a/src/lang/hu.json
+++ b/src/lang/hu.json
@@ -9,7 +9,7 @@
"acceptedStatusCodesDescription": "Válassza ki az állapot kódokat amelyek sikeres válasznak fognak számítani.",
"passwordNotMatchMsg": "A megismételt jelszó nem egyezik.",
"notificationDescription": "Kérem, rendeljen egy értesítést a figyeléshez, hogy működjön.",
- "keywordDescription": "Kulcsszó keresése a HTML-ben vagy a JSON válaszban. (kis-nagybetű érzékeny)",
+ "keywordDescription": "Kulcsszó keresése a HTML-ben vagy a JSON válaszban. A keresés kis-nagybetű érzékeny.",
"pauseDashboardHome": "Szünetel",
"deleteMonitorMsg": "Biztos, hogy törölni akarja ezt a figyelőt?",
"deleteNotificationMsg": "Biztos, hogy törölni akarja ezt az értesítést az összes figyelőnél?",
@@ -259,8 +259,8 @@
"pushoverDesc1": "A vészhelyzeti prioritásnak (2) 30 másodperc az újrapróbálkozási alapértéke és egy óra után lejár.",
"pushoverDesc2": "Ha különböző eszközökre szeretne értesítést küldeni, töltse ki az Eszköz mezőt.",
"SMS Type": "SMS típusa",
- "octopushTypePremium": "Premium (Fast - recommended for alerting)",
- "octopushTypeLowCost": "Low Cost (Slow - sometimes blocked by operator)",
+ "octopushTypePremium": "Prémium (Gyors - riasztáshoz ajánlott)",
+ "octopushTypeLowCost": "Alacsony költség (lassú - néha az üzemeltető blokkolja)",
"checkPrice": "Ellenőrizze {0} árat:",
"apiCredentials": "API kulcsok",
"octopushLegacyHint": "Az Octopush régi (2011-2020) verzióját használod vagy az újat?",
@@ -349,7 +349,6 @@
"Discard": "Elvet",
"Cancel": "Mégsem",
"Powered by": "A megoldást szállítja az",
- "shrinkDatabaseDescription": "VACUUM futtatása az SQLite-on. Ha az adatbázisod 1.10.0-nál újabb, akkor az AUTO_VACUUM engedélyezve van, nincs szükség a műveletre.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API felhasználónév (webapi_ előtaggal együtt)",
"serwersmsAPIPassword": "API jelszó",
@@ -447,7 +446,7 @@
"Next": "Következő",
"The slug is already taken. Please choose another slug.": "Ez a slug már használatban van. Kérlek válassz másikat.",
"No Proxy": "Nincs Proxy",
- "HTTP Basic Auth": "HTTP Basic Auth",
+ "HTTP Basic Auth": "HTTP Alap Hitelesítés",
"New Status Page": "Új Állapot Oldal",
"Page Not Found": "Oldal Nem Található",
"Reverse Proxy": "Reverse Proxy",
@@ -543,7 +542,7 @@
"chromeExecutableAutoDetect": "Automatikus felismerés",
"emailTemplateStatus": "Státusz",
"deleteMaintenanceMsg": "Biztosan törölni szeretné ezt a karbantartást?",
- "apiKeyAddedMsg": "Az ön API kulcsa létrejött. Kérjük jegyezze fel, mert nem lesz a felületen elérhető.",
+ "apiKeyAddedMsg": "Az ön API kulcsa létrejött. Kérjük jegyezze fel, mert nem lesz a felületen elérhető a jövőben!",
"Expires": "Lejár",
"disableAPIKeyMsg": "Biztosan le fel szeretné függeszteni ezt az API kulcsot?",
"Key Added": "Kulcs létrehozva",
@@ -632,7 +631,7 @@
"Connection String": "Csatlakozási karakterlánc",
"statusPageSpecialSlugDesc": "Speciális slug {0}: ez az oldal akkor jelenik meg, ha nincs slug megadva",
"certificationExpiryDescription": "A HTTPS-monitorok értesítést váltanak ki, ha a TLS-tanúsítvány lejár:",
- "Setup Docker Host": "Docker hoszt beállítása",
+ "Setup Docker Host": "Docker Gazda beállítása",
"Connection Type": "Csatlakozás Típusa",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Biztos, hogy törölni akarod ezt a docker hostot az összes monitorról?",
@@ -642,7 +641,7 @@
"Docker Hosts": "Docket Hosztok",
"Domain": "Domain",
"Docker Host": "Docket Hoszt",
- "noDockerHostMsg": "Nem elérhető. Először állíts be egy Docker Hosztot.",
+ "noDockerHostMsg": "Nem elérhető. Először állítson be egy Docker Gazdát.",
"DockerHostRequired": "Kérlek állítsd be a Docker Hosztot ehhez a monitorhoz.",
"tailscalePingWarning": "A Tailscale Ping monitor használatához telepítenie kell az Uptime Kuma-t Docker nélkül, és telepíteni kell a Tailscale klienst is a szerverre.",
"Workstation": "Munkaállomás",
@@ -736,7 +735,7 @@
"RadiusSecretDescription": "Megosztott titok az ügyfél és a szerver között",
"RadiusCalledStationId": "Hívott állomás azonosítója",
"Date and Time": "Dátum és idő",
- "enableNSCD": "Az NSCD (Name Service Cache Daemon) engedélyezése az összes DNS-kérés gyorsítótárba helyezéséhez",
+ "enableNSCD": "Az NSCD (Name Service Cache Daemon) engedélyezése az összes DNS-kérés gyorsítótárazásához.",
"Edit Maintenance": "Karbantartás szerkesztése",
"smseagleGroup": "Telefonkönyv csoport neve(i)",
"styleElapsedTime": "Az eltelt idő a heartbeat sáv alatt",
@@ -752,7 +751,7 @@
"Automations can optionally be triggered in Home Assistant:": "Az automatizálás opcionálisan elindítható a Home Assistantban:",
"Event type:": "Esemény típusa:",
"Topic": "Téma",
- "WeCom Bot Key": "WeCom Bot Key",
+ "WeCom Bot Key": "WeCom Bot Kulcs",
"Setup Proxy": "Proxy beállítása",
"Proxy Protocol": "Proxy Protokol",
"Proxy Server": "Proxy szerver",
@@ -763,7 +762,7 @@
"smseagleUrl": "Az Ön SMSEagle eszközének URL címe",
"smseagleEncoding": "Unicode-ként küldés",
"smseaglePriority": "Üzenet prioritása (0-9, alapértelmezett = 0)",
- "Recipient Number": "Recipient Number",
+ "Recipient Number": "Fogadó telefonszáma",
"From Name/Number": "A névtől/számtól",
"Leave blank to use a shared sender number.": "Hagyd üresen, ha megosztott feladószámot szeretnél használni.",
"Octopush API Version": "Octopush API verzió",
@@ -776,7 +775,7 @@
"For safety, must use secret key": "Biztonsági okoból kötelező a titkos kulcs használata",
"emailCustomisableContent": "Testreszabható tartalom",
"leave blank for default subject": "hagyja üresen az alapértelmezett email tárgyát",
- "smtpLiquidIntroduction": "A következő két mező a Liquid sablonozási nyelven keresztül szerkezthető. Kérjük, olvassa el a következőt: {0} a használati utasításokért. Ezek az elérhető változók:",
+ "smtpLiquidIntroduction": "A következő két mező a Liquid sablonozási nyelven keresztül szerkeszthető. Kérjük, olvassa el a következőt: {0} a használati utasításokért. Ezek az elérhető változók:",
"Learn More": "Tudjon meg többet",
"Notify Channel": "Csatorna értesítése",
"install": "Telepítés",
@@ -827,5 +826,278 @@
"Mechanism": "Mechanizmus",
"No API Keys": "Nincsenek API kulcsok",
"Monitor Group": "Monitor csoport",
- "ntfyAuthenticationMethod": "Hitelesítési metódus"
+ "ntfyAuthenticationMethod": "Hitelesítési metódus",
+ "Host URL": "Gazda URL",
+ "Select message type": "Válasszon üzenet típust",
+ "Send to channel": "Küldés erre a csatornára",
+ "Create new forum post": "Új fórum üzenet készítése",
+ "Refresh Interval Description": "Az állapot megfigyelő {0} másodpercenként teljesen újra frissíti a weboldalt",
+ "Refresh Interval": "Frissítési intervallum",
+ "postToExistingThread": "Létező szál / fórum -ra küldés",
+ "forumPostName": "Fórum üzenet neve",
+ "threadForumPostID": "Szál / Fórum üzenet ID",
+ "e.g. {discordThreadID}": "például. {discordThreadID}",
+ "locally configured mail transfer agent": "helyileg beállított email továbbító",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Adja meg a csatlakoztatni kívánt szerver gazdagép nevét vagy {localhost} ha a {local_mta}-t szeretné használni",
+ "ignoreTLSErrorGeneral": "Mellőzze a TLS/SSL hibákat a csatlakozáshoz",
+ "threemaRecipientTypeIdentityFormat": "8 karakter",
+ "threemaRecipientTypeEmail": "Email cím",
+ "threemaSenderIdentity": "Gateway-azonosító",
+ "threemaRecipientTypeIdentity": "Threema-azonosító",
+ "threemaSenderIdentityFormat": "8 karakter, általában *-al kezdődik",
+ "threemaRecipientTypePhone": "Telefonszám",
+ "max 15 digits": "max 15 karakter",
+ "cellsyntDestination": "A címzett telefonszáma nemzetközi formátumban megadva. A kezdő 00-t követően az országkód, pl. 003612127654 egy magyarországi 0612127654 szám esetében (max 17 karakter összesen). HTTP lekérdezésenként max 25000, vesszővel elválaszott címzett.",
+ "Telephone number": "Telefonszám",
+ "Allow Long SMS": "Hosszú SMS engedélyezve",
+ "now": "most",
+ "Channel access token (Long-lived)": "Csatorna-hozzáférési token (Hosszú-élettartamú)",
+ "Mentioning": "Megemlítés",
+ "Don't mention people": "Ne említsen embereket",
+ "aboutSlackUsername": "Megváltoztatja az üzenet feladójának megjelenített nevét. Ha valakit meg akar említeni, helyette írja be a barátságos névbe.",
+ "smspartnerApiurl": "Az API-kulcsot az irányítópulton találja {0}",
+ "smspartnerPhoneNumberHelptext": "A számnak nemzetközi formátumúnak kell lennie {0}, {1}. Több szám elválasztása esetén jelölje {2}",
+ "toastSuccessTimeout": "Sikerértesítések időkorlátja",
+ "and": "és",
+ "Your User ID": "Felhasználói azonosítód",
+ "Mention group": "Említ {csoport}",
+ "smspartnerPhoneNumber": "Telefonszám(ok)",
+ "smspartnerSenderName": "SMS feladó neve",
+ "Generate": "Generálás",
+ "pagertreeIntegrationUrl": "Integrációs URL",
+ "pagertreeUrgency": "Sürgősség",
+ "pagertreeSilent": "Csendes",
+ "pagertreeLow": "Alacsony",
+ "pagertreeMedium": "Közepes",
+ "pagertreeCritical": "Kritikus",
+ "twilioAuthToken": "Hitelesítési Token / API Kulcs",
+ "Show Clickable Link": "Kattintható link megjelenítése",
+ "Group": "Csoport",
+ "monitorToastMessagesLabel": "Toast értesítések figyelése",
+ "toastErrorTimeout": "Hibaértesítések időkorlátja",
+ "Json Query Expression": "Json lekérdezés",
+ "ignoredTLSError": "TLS/SSL hibák figyelmen kívül hagyva",
+ "time ago": "előtt",
+ "-year": "- év",
+ "deleteAPIKeyMsg": "Biztosan törölni szeretné ezt az API kulcsot?",
+ "RabbitMQ Nodes": "RabbitMQ menedszer csomópontok",
+ "jsonQueryDescription": "Végezzen JSON-lekérdezést a válasz alapján, és ellenőrizze a várt értéket (a visszatérési értéket a rendszer karakterlánccá alakítja az összehasonlításhoz). Nézze meg a {0} webhelyet a lekérdezés paramétereivel kapcsolatos dokumentációért. A test környezet itt található: {1}.",
+ "Authorization Identity": "Jogosultság Identitás",
+ "noGroupMonitorMsg": "Nem lehetséges. Először létre kell hozni egy monitorozandó csoportot.",
+ "wayToGetFlashDutyKey": "Menjen a Csatorna -> (Csatorna kiválasztása) -> Integrációk -> Új integráció hozzáadása oldalra, adjon hozzá egy 'Uptime Kuma' push címet, másolja az Integrációs kulcsot a címbe. További információkért kérjük, látogasson el a",
+ "gamedigGuessPortDescription": "A Valve Server Query Protocol által használt port eltérhet az kliens portjától. Próbáld ki ezt, ha a monitor nem tud csatlakozni a kiszolgálóhoz.",
+ "remoteBrowsersDescription": "A távoli böngészők a Chromium helyi futtatásának alternatívája. Állítsa be egy olyan szolgáltatással, mint a browserless.io, vagy csatlakozzon a sajátjával",
+ "mongodbCommandDescription": "Egy utasítás futtatásának kérése a MongoDB adatbázishoz. A rendelkezésre álló parancsokról a {documentation}",
+ "receiverInfoSevenIO": "Ha a fogadó szám nem Németországban van, akkor a szám elé kell írni az országkódot (pl. az USA-ból érkező 1-es országkódhoz a 017612121212 helyett a 117612121212 címet kell használni)",
+ "conditionAddGroup": "Csoport hozzáadása",
+ "less than or equal to": "kisebb vagy egyenlő, mint",
+ "Alphanumerical string and hyphens only": "Csak alfanumerikus karakterlánc és kötőjelek",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Időérzékeny értesítések azonnal kézbesítve lesznek, még akkor is ha az eszköz ne zavarjanak üzemmódban van.",
+ "successEnabled": "Sikeresen engedélyezve.",
+ "smspartnerSenderNameInfo": "3..=11 általános karakternek kell lennie",
+ "Show Clickable Link Description": "Ha be van jelölve, mindenkinek akinek hozzáférése van ehhez a státusz oldalhoz, hozzáférése van a monitor URL-hez is.",
+ "Enter the list of brokers": "Adja meg a brókerek listáját",
+ "Press Enter to add broker": "Bróker hozzáadásához nyomja meg az ENTER billentyűt",
+ "Enable Kafka SSL": "Kafka SSL engedélyezése",
+ "Enable Kafka Producer Auto Topic Creation": "Kafka Producer automatikus téma létrehozásának engedélyezése",
+ "Kafka Producer Message": "Kafka Producer üzenet",
+ "Kafka SASL Options": "Kafka SASL opciók",
+ "Pick a SASL Mechanism...": "Válassz egy SASL mechanizmus-t…",
+ "AccessKey Id": "Hozzáférési Kulcs ID",
+ "Secret AccessKey": "Titkos Hozzáférési Kulcs",
+ "Session Token": "Munkamenet-azonosító",
+ "nostrRelaysHelp": "Soronként egy közvetítő URL",
+ "nostrSender": "Küldő privát kulcsa (nsec)",
+ "nostrRecipients": "Címzettek nyilvános kulcsai (npub)",
+ "nostrRecipientsHelp": "npub formátum, soronként egy",
+ "showCertificateExpiry": "Tanúsítvány lejáratának megjelenítése",
+ "cacheBusterParam": "Adja hozzá a {0} paramétert",
+ "cacheBusterParamDescription": "Véletlenszerűen generált paraméter a gyorsítótárak kihagyásához.",
+ "Message format": "Üzenet formátuma",
+ "Send rich messages": "RCS üzenetek küldése",
+ "wayToGetBitrix24Webhook": "Webhookot a következő lépésekkel hozhat létre {0}",
+ "nostrRelays": "Nostr közvetítők",
+ "bitrix24SupportUserID": "Adja meg felhasználói azonosítóját a Bitrix24-ben. Az azonosítót a felhasználó profiljába lépve a linkről tudhatja meg.",
+ "authInvalidToken": "Érvénytelen token.",
+ "2faEnabled": "Kétlépcsős azonosítás engedélyezve.",
+ "successDisabled": "Sikeresen letiltva.",
+ "Remote Browsers": "Távoli böngészők",
+ "Remote Browser": "Távoli böngésző",
+ "Add a Remote Browser": "Távoli böngésző hozzáadása",
+ "Remote Browser not found!": "Távoli böngésző nem található!",
+ "self-hosted container": "Helyi futtatású konténer",
+ "useRemoteBrowser": "Távoli böngésző használata",
+ "deleteRemoteBrowserMessage": "Biztos-e Ön benne, hogy törölni akarja ezt a távoli böngészőt az összes monitorozandó számára?",
+ "GrafanaOncallUrl": "Grafana Hívás URL",
+ "Browser Screenshot": "Böngésző képernyőkép",
+ "Command": "Utasítás",
+ "wayToGetSevenIOApiKey": "Látogasson el a műszerfalra az app.seven.io > developer > api key > a zöld hozzáadás gombra",
+ "senderSevenIO": "Szám vagy név küldése",
+ "receiverSevenIO": "Fogadó telefonszáma",
+ "apiKeySevenIO": "SevenIO API kulcs",
+ "wayToWriteWhapiRecipient": "A telefonszám a nemzetközi előtaggal, de az elején lévő pluszjel nélkül ({0}), a kapcsolattartó azonosítója ({1}) vagy a csoport azonosítója ({2}).",
+ "Separate multiple email addresses with commas": "Több e-mail cím elválasztása vesszővel",
+ "conditionDeleteGroup": "Csoport törlése",
+ "conditionValuePlaceholder": "Érték",
+ "equals": "egyenlő",
+ "not equals": "nem egyenlő",
+ "contains": "tartalmaz",
+ "not contains": "nem tartalmaz",
+ "ends with": "végződik a",
+ "not ends with": "nem végződik a",
+ "greater than": "nagyobb, mint",
+ "less than": "kisebb, mint",
+ "greater than or equal to": "nagyobb vagy egyenlő, mint",
+ "record": "sor",
+ "Notification Channel": "Értesítési csatorna",
+ "Sound": "Hang",
+ "Arcade": "Árkád",
+ "Correct": "Helyes",
+ "Harp": "Hárfa",
+ "Reveal": "Felfed",
+ "Bubble": "Buborék",
+ "Doorbell": "Ajtócsengő",
+ "Flute": "Fuvola",
+ "Money": "Pénz",
+ "Scifi": "Tudományos-fantasztikus",
+ "Clear": "Törlés",
+ "Elevator": "Felvonó",
+ "Guitar": "Gitár",
+ "Time Sensitive (iOS Only)": "Időérzékeny (Csak iOS)",
+ "From": "Tól",
+ "Can be found on:": "Megtalálható: {0}",
+ "The phone number of the recipient in E.164 format.": "A címzett telefonszáma E.164-es formában.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Vagy egy feladó azonosító, vagy egy telefonszám E.164 formátumban kell lennie, ha válaszokat szeretne fogadni.",
+ "RabbitMQ Username": "RabbitMQ felhaszálónév",
+ "RabbitMQ Password": "RabbitMQ jelszó",
+ "SendGrid API Key": "SendGrid API kulcs",
+ "pagertreeHigh": "Magas",
+ "noOrBadCertificate": "Nincs/rossz tanúsítvány",
+ "whatHappensAtForumPost": "Új fórumbejegyzés létrehozása. NEM küldi el a meglévő hozzászólásokhoz. Meglévő hozzászólásokhoz az \"{option}\" használatával lehet hozzászólni",
+ "snmpCommunityStringHelptext": "Ez a karakterlánc jelszóként szolgál az SNMP-kompatibilis eszközök hitelesítésére és a hozzáférés ellenőrzésére. Egyeztesse az SNMP-eszköz konfigurációjával.",
+ "snmpOIDHelptext": "Adja meg a megfigyelni kívánt érzékelő vagy állapot OID azonosítóját. Ha nem biztos az OID-ben, használjon hálózatirányítási eszközöket, például MIB-böngészőket vagy SNMP-szoftvereket.",
+ "privateOnesenderDesc": "Győződjön meg róla, hogy a telefonszám érvényes. Üzenet küldése privát telefonszámra, például: 628123456789",
+ "Authorization Header": "Hitelesítési Fejléc",
+ "wayToGetDiscordThreadId": "Szál / fórum bejegyzés ID lekérése hasonló, a csatorna ID lekéréséhez. Itt olvashatsz tovább az ID-k lekérésől{0}",
+ "Badge Type": "Jelvény típusa",
+ "Badge Duration (in hours)": "Jelvény Időtartam (órákban)",
+ "Badge Label": "Jelvény Címke",
+ "Badge Prefix": "Jelvény Érték Előtag",
+ "Badge Suffix": "Jelvény Érték Utótag",
+ "Badge Label Color": "Jelvény Címke Szín",
+ "Badge Color": "Jelvény Szín",
+ "Badge Label Prefix": "Jelvény Címke Előtag",
+ "Badge Preview": "Jelvény Előnézet",
+ "Badge Label Suffix": "Jelvény Címke Utótag",
+ "Badge Up Color": "Jelvény Online Szín",
+ "Badge Down Color": "Jelvény Offline Szín",
+ "Badge Pending Color": "Jelvény Folyamatban Levő Szín",
+ "Badge Maintenance Color": "Jelvény Karbantartás Szín",
+ "Badge Warn Color": "Jelvény Figyelmeztetés Szín",
+ "Badge Warn Days": "Jelvény Figyelmeztetés Napok",
+ "Badge Down Days": "Jelvény Offline Napok",
+ "Badge value (For Testing only.)": "Jelvény érték (Csak tesztelés számára.)",
+ "Badge URL": "Jelvény URL",
+ "Kafka Brokers": "Kafka brókerek",
+ "Kafka Topic Name": "Kafka Téma Név",
+ "wayToGetWhapiUrlAndToken": "Az API URL-t és a tokent lekérheted a kívánt csatornára belépve a {0}",
+ "API URL": "API URL",
+ "What is a Remote Browser?": "Mi az a távol böngésző?",
+ "gtxMessagingApiKeyHint": "Az API kulcsokat megtalálhatod: Útvonalválasztási fiókom > Fiók megtekintése > API hitelesítőadatok > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "Telefonszámból / Átviteli útvonal kiindulási címe (TPOA)",
+ "gtxMessagingFromHint": "Mobiltelefonokon a címzettek az üzenet feladójaként a TPOA-t látják. Legfeljebb 11 alfanumerikus karakter, egy rövidkód, a helyi hosszúkód vagy nemzetközi számok ({e164}, {e212} vagy {e214}) engedélyezettek",
+ "To Phone Number": "Telefonszámmá",
+ "gtxMessagingToHint": "Nemzetközi formátum, vezető \"+\" jel és ({e164}, {e212} vagy {e214})",
+ "Alphanumeric (recommended)": "Alfanumerikus (ajánlott)",
+ "cellsyntOriginatortypeAlphanumeric": "Alfanumerikus karakterlánc (legfeljebb 11 alfanumerikus karakter). A címzettek nem tudnak válaszolni az üzenetre.",
+ "Originator": "Kezdeményező",
+ "cellsyntOriginator": "Látható a címzett mobiltelefonján az üzenet küldőjeként. A megengedett értékek és a funkció az kezdeményező-típus(originatortype) paramétertől függ.",
+ "Destination": "Cél",
+ "cellsyntSplitLongMessages": "Hosszú üzenetek tördelése legfeljebb 6 részre. 153 x 6 = 918 karakter.",
+ "max 11 alphanumeric characters": "legfeljebb 11 alfanumerikus karakter",
+ "Community String": "Közösségi Karakterlánc",
+ "OID (Object Identifier)": "OID (Objektum azonosító)",
+ "Condition": "Feltétel",
+ "SNMP Version": "SNMP Verzió",
+ "Please enter a valid OID.": "Kérem adjon meg egy helyes OID-t.",
+ "wayToGetThreemaGateway": "Regisztrálhat a Threema Gatewayre {0}.",
+ "threemaRecipient": "Címzett",
+ "threemaRecipientTypePhoneFormat": "E.164, vezető \"+\" nélkül",
+ "threemaApiAuthenticationSecret": "Gateway-ID Kulcs",
+ "threemaBasicModeInfo": "Megjegyzés: Ez az integráció a Threema Gateway-t alapmódban használja (szerver alapú titkosítás). További részletek {0} találhatók.",
+ "apiKeysDisabledMsg": "Az API-kulcsok le vannak tiltva, mivel a hitelesítés le van tiltva.",
+ "Host Onesender": "Onesender futtató gép",
+ "Token Onesender": "Onesender Token",
+ "Recipient Type": "Címzett Típusa",
+ "Private Number": "Privát Telefonszám",
+ "groupOnesenderDesc": "Győződjön meg róla, hogy a GroupID érvényes. Üzenet küldése a csoportba, például: 628123456789-342345",
+ "Group ID": "Group ID",
+ "wayToGetOnesenderUrlandToken": "Az URL-t és a Tokent az Onesender weboldalán keresztül kaphatja meg. További információ {0}",
+ "Add Remote Browser": "Távoli böngésző hozzáadása",
+ "New Group": "Új csoport",
+ "Group Name": "Csoport név",
+ "OAuth2: Client Credentials": "OAuth2: Ügyfél hitelesítő adatok",
+ "Authentication Method": "Hitelesítési metódus",
+ "Form Data Body": "Adat törzsből",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "Ügyfél Azonosító",
+ "Client Secret": "Ügyfél Kulcs",
+ "OAuth Scope": "OAuth hatókör",
+ "Badge Style": "Jelvény Stílus",
+ "whapiRecipient": "Telefonszám / Kontakt ID / Csoport ID",
+ "documentationOf": "{0} Dokumentáció",
+ "threemaRecipientType": "Címzett Típusa",
+ "rabbitmqNodesRequired": "Állítsa be a csomópontokat ehhez a figyelőhöz.",
+ "rabbitmqNodesDescription": "Adja meg a RabbitMQ menedszer csomópontok URL-jét beleértve a protokollt és a port számát is. Példa: {0}",
+ "shrinkDatabaseDescriptionSqlite": "SQLite adatbázis {vacuum} indítása. Az {auto_vacuum} már engedélyezve van, de ez nem defragmentálja az adatbázist, és nem csomagolja újra az egyes adatbázisoldalakat, ahogyan a {vacuum} parancs teszi.",
+ "invertKeywordDescription": "Keresse meg, hogy a kulcsszó inkább hiányzik-e, mint jelen van.",
+ "No tags found.": "Nem található címkék.",
+ "twilioToNumber": "Címzett szám",
+ "twilioFromNumber": "Feladó szám",
+ "Open Badge Generator": "Nyílt jelvény generátor",
+ "Badge Generator": "{0} jelvény generátora",
+ "monitorToastMessagesDescription": "A figyelőktől érkező Toast értesítések eltűnnek megadott másodpercen belül. Eltűnés kikapcsolásához állítsd \"-1\"-re. Toast értesítések kikapcsolásához pedig \"0\"-ra.",
+ "gamedigGuessPort": "Gamedig: Port",
+ "remoteBrowserToggle": "Alapértelmezetten Chromium böngésző fut az Uptime Kuma konténerben. Távoli böngésző használatához aktiválja a kapcsolót.",
+ "callMeBotGet": "Itt létre tud hozni egy végpontot {0}, {1} és {2} számára. Tartsa észben, lehet le lesz korlátozva. A korlátozások a következők: {3}",
+ "Originator type": "A kezdeményező típusa",
+ "cellsyntOriginatortypeNumeric": "Numerikus érték (legfeljebb 15 számjegy) nemzetközi formátumú telefonszámmal, 00 előtag nélkül (például a 06-20-534-6789 magyar számot 36205346789-ként kell beállítani). A címzettek válaszolhatnak az üzenetre.",
+ "Optional: Space separated list of scopes": "Opcionális: A hatókörök (scopes) listája szóközzel elválasztva",
+ "Go back to home page.": "Vissza a fő oldalra.",
+ "Lost connection to the socket server.": "Kapcsolat megszakadt a socket szerverrel.",
+ "Cannot connect to the socket server.": "Nem képes kapcsolódni a socket szerverhez.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "Conditions": "Feltételek",
+ "conditionAdd": "Feltétel hozzáadása",
+ "conditionDelete": "Feltétel törlése",
+ "signl4Docs": "A SIGNL4 konfigurálásával és a SIGNL4 webhook URL-címének beszerzésével kapcsolatos további információkat itt talál: {0}.",
+ "starts with": "kezdődik",
+ "not starts with": "nem kezdődik",
+ "Custom sound to override default notification sound": "Eredeti értesítési hang felülírása egyedi hanggal",
+ "rabbitmqNodesInvalid": "Kérjük, használjon teljesen minősített (\"http\"-vel kezdődő) URL-t a RabbitMQ csomópontokhoz.",
+ "rabbitmqHelpText": "Figyelő használatához, engedélyeznie kell a Management Plugin-t a RabbitMQ beállításai között. További információért, tekintse meg {rabitmq_documentation} dokumentumot.",
+ "Fail": "Hiba",
+ "Pop": "Megjelen",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
+ "wayToGetHeiiOnCallDetails": "A Trigger ID és az API kulcsok megszerzésének módja a {dokumentáció}",
+ "telegramServerUrl": "(Választható) Szerver Url",
+ "telegramServerUrlDescription": "A Telegram bot api korlátozásainak feloldása vagy hozzáférés a blokkolt területekhez (Kína, Irán stb.). További információért kattintson a {0} gombra. Alapértelmezett: {1}",
+ "wahaSession": "Munkamenet",
+ "wahaChatId": "Beszélgetés azonosító (Telefonszám / Kontakt azonosító / Csoport azonosító)",
+ "wayToGetWahaApiUrl": "WAHA példányod URL-je.",
+ "wayToGetWahaApiKey": "Az API-kulcs a WHATSAPP_API_KEY környezeti változó értéke, amelyet a WAHA futtatásához használt.",
+ "wayToWriteWahaChatId": "A telefonszám nemzetközi előtaggal, de az elején lévő pluszjel ({0}), a kapcsolattartó azonosítója ({1}) vagy a csoportazonosító ({2}) nélkül. A WAHA Session értesítéseket küld erre a beszélgetési azonosítóra.",
+ "Plain Text": "Sima Szöveg",
+ "Message Template": "Üzenet Sablon",
+ "Template Format": "Sablon Formátum",
+ "wayToGetWahaSession": "A munkamenetből WAHA küld egy értesítést a Beszélgetés azonosítóra. Az értesítést megtalálhatod a WAHA műszerfalon.",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "YZJ Robot Token": "YZJ Robot token",
+ "templateServiceName": "szolgáltatás név",
+ "templateHostnameOrURL": "kiszolgáló név vagy URL",
+ "templateStatus": "státusz",
+ "telegramUseTemplate": "Egyéni üzenetsablon használata",
+ "telegramUseTemplateDescription": "Ha engedélyezve van, az üzenet egy egyéni sablon szerint lesz elküldve.",
+ "telegramTemplateFormatDescription": "Telegram különböző jelölőnyelvek használatát engedi, további információkért lásd {0}."
}
diff --git a/src/lang/id-ID.json b/src/lang/id-ID.json
index edaeffa97..d2a3245bd 100644
--- a/src/lang/id-ID.json
+++ b/src/lang/id-ID.json
@@ -4,10 +4,10 @@
"retryCheckEverySecond": "Coba lagi setiap {0} detik",
"resendEveryXTimes": "Kirim ulang setiap {0} kali",
"resendDisabled": "Kirim ulang dinonaktifkan",
- "retriesDescription": "Percobaan ulang maksimum sebelum layanan dinyatakan tidak aktif dan notifikasi dikirim",
+ "retriesDescription": "Percobaan ulang maksimum sebelum layanan ditandai sebagai tidak aktif dan pemberitahuan dikirim",
"ignoreTLSError": "Abaikan kesalahan TLS/SSL untuk situs web HTTPS",
- "upsideDownModeDescription": "Balikkan statusnya. Jika layanan dapat dijangkau, TIDAK AKTIF.",
- "maxRedirectDescription": "Jumlah maksimum pengalihan untuk diikuti. Setel ke 0 untuk menonaktifkan pengalihan.",
+ "upsideDownModeDescription": "Balikkan status menjadi terbalik. Jika layanan dapat dijangkau, statusnya adalah TIDAK AKTIF.",
+ "maxRedirectDescription": "Jumlah maksimum pengalihan yang harus diikuti. Atur ke 0 untuk menonaktifkan pengalihan.",
"acceptedStatusCodesDescription": "Pilih kode status yang dianggap sebagai tanggapan yang berhasil.",
"passwordNotMatchMsg": "Kata sandi kedua tidak cocok.",
"notificationDescription": "Harap atur notifikasi ke monitor agar berfungsi.",
@@ -36,13 +36,13 @@
"Appearance": "Tampilan",
"Theme": "Tema",
"General": "Umum",
- "Primary Base URL": "URL Dasar Utama",
+ "Primary Base URL": "Base URL Utama",
"Version": "Versi",
"Check Update On GitHub": "Cek Pembaruan di GitHub",
"List": "Daftar",
"Add": "Tambah",
"Add New Monitor": "Tambah Monitor Baru",
- "Quick Stats": "Statistik",
+ "Quick Stats": "Statistik Singkat",
"Up": "Aktif",
"Down": "Tidak Aktif",
"Pending": "Tertunda",
@@ -50,7 +50,7 @@
"Pause": "Dijeda",
"Name": "Nama",
"Status": "Status",
- "DateTime": "Tanggal Waktu",
+ "DateTime": "Tanggal/Waktu",
"Message": "Pesan",
"No important events": "Tidak ada peristiwa penting",
"Resume": "Lanjut",
@@ -59,25 +59,25 @@
"Current": "Saat ini",
"Uptime": "Waktu aktif",
"Cert Exp.": "Sertifikat Kedaluwarsa.",
- "day": "hari | hari-hari",
+ "day": "hari",
"-day": "-hari",
- "hour": "Jam",
- "-hour": "-Jam",
- "Response": "Tanggapan",
+ "hour": "jam",
+ "-hour": "-jam",
+ "Response": "Respon",
"Ping": "Ping",
"Monitor Type": "Tipe Monitor",
"Keyword": "Kata Kunci",
- "Friendly Name": "Nama yang Ramah",
+ "Friendly Name": "Nama Yang Bersahabat",
"URL": "URL",
"Hostname": "Nama Host",
"Port": "Port",
- "Heartbeat Interval": "Jeda Waktu Heartbeat",
- "Retries": "Coba lagi",
- "Heartbeat Retry Interval": "Jeda Pengulangan Heartbeat",
- "Resend Notification if Down X times consecutively": "Kirim Ulang Notifikasi jika Tidak Aktif X kali",
+ "Heartbeat Interval": "Interval Heartbeat",
+ "Retries": "Mencoba lagi",
+ "Heartbeat Retry Interval": "Interval Pengulangan Heartbeat",
+ "Resend Notification if Down X times consecutively": "Kirim Ulang Pemberitahuan jika Tidak Aktif X kali berturut-turut",
"Advanced": "Tingkat Lanjut",
"Upside Down Mode": "Mode Terbalik",
- "Max. Redirects": "Maksimal Pengalihan",
+ "Max. Redirects": "Pengalihan Maksimum",
"Accepted Status Codes": "Kode Status yang Diterima",
"Push URL": "Push URL",
"needPushEvery": "Anda harus memanggil URL berikut setiap {0} detik..",
@@ -85,7 +85,7 @@
"Save": "Simpan",
"Notifications": "Notifikasi",
"Not available, please setup.": "Tidak tersedia, silakan atur.",
- "Setup Notification": "Setelan Notifikasi",
+ "Setup Notification": "Atur Pemberitahuan",
"Light": "Terang",
"Dark": "Gelap",
"Auto": "Otomatis",
@@ -95,48 +95,48 @@
"None": "Tidak ada",
"Timezone": "Zona Waktu",
"Search Engine Visibility": "Visibilitas Mesin Pencari",
- "Allow indexing": "Mengizinkan untuk diindex",
- "Discourage search engines from indexing site": "Mencegah mesin pencari untuk mengindex situs",
- "Change Password": "Ganti Sandi",
- "Current Password": "Sandi Lama",
- "New Password": "Sandi Baru",
- "Repeat New Password": "Ulangi Sandi Baru",
+ "Allow indexing": "Izinkan pengindeksan",
+ "Discourage search engines from indexing site": "Mencegah mesin pencari untuk mengindeks situs",
+ "Change Password": "Ubah Kata Sandi",
+ "Current Password": "Kata Sandi Saat Ini",
+ "New Password": "Kata Sandi Baru",
+ "Repeat New Password": "Ulangi Kata Sandi Baru",
"Update Password": "Perbarui Kata Sandi",
- "Disable Auth": "Matikan Autentikasi",
- "Enable Auth": "Aktifkan Autentikasi",
+ "Disable Auth": "Nonaktifkan Auth",
+ "Enable Auth": "Aktifkan Auth",
"disableauth.message1": "Apakah Anda yakin ingin {disableAuth}?",
"disable authentication": "menonaktifkan autentikasi",
- "disableauth.message2": "Ini untuk {intendThirdPartyAuth} diletakkan di depan Uptime Kuma, misalnya akses Cloudflare.",
- "where you intend to implement third-party authentication": "mereka yang memiliki autentikasi pihak ketiga",
- "Please use this option carefully!": "Gunakan pilihan ini dengan hati-hati!",
+ "disableauth.message2": "Ini dirancang untuk skenario {intendThirdPartyAuth} di depan Uptime Kuma seperti Cloudflare Access, Authelia, atau mekanisme autentikasi lainnya.",
+ "where you intend to implement third-party authentication": "di mana Anda bermaksud menerapkan autentikasi pihak ketiga",
+ "Please use this option carefully!": "Harap gunakan opsi ini dengan hati-hati!",
"Logout": "Keluar",
- "Leave": "Pergi",
- "I understand, please disable": "Saya mengerti, silakan dinonaktifkan",
+ "Leave": "Tinggalkan",
+ "I understand, please disable": "Saya mengerti, tolong nonaktifkan",
"Confirm": "Konfirmasi",
"Yes": "Ya",
"No": "Tidak",
"Username": "Nama Pengguna",
- "Password": "Sandi",
+ "Password": "Kata Sandi",
"Remember me": "Ingat saya",
"Login": "Masuk",
- "No Monitors, please": "Tolong, jangan ada Monitor",
+ "No Monitors, please": "Tidak ada monitor, silakan",
"add one": "tambahkan satu",
- "Notification Type": "Tipe Notifikasi",
+ "Notification Type": "Tipe Pemberitahuan",
"Email": "Surel",
"Test": "Tes",
- "Certificate Info": "Info Sertifikasi",
- "Resolver Server": "Server Penjawab",
- "Resource Record Type": "Jenis Rekam Sumber Daya",
+ "Certificate Info": "Info Sertifikat",
+ "Resolver Server": "Server Penyelesai",
+ "Resource Record Type": "Jenis Rekaman Sumber Daya",
"Last Result": "Hasil Terakhir",
"Create your admin account": "Buat akun admin Anda",
- "Repeat Password": "Ulangi Sandi",
+ "Repeat Password": "Ulangi Kata Sandi",
"Import Backup": "Impor Cadangan",
"Export Backup": "Ekspor Cadangan",
"Export": "Ekspor",
"Import": "Impor",
- "respTime": "Tanggapan. Waktu (milidetik)",
+ "respTime": "Waktu Respons (ms)",
"notAvailableShort": "N/A",
- "Default enabled": "Bawaan diaktifkan",
+ "Default enabled": "Diaktifkan secara default",
"Apply on all existing monitors": "Terapkan pada semua monitor yang ada",
"Create": "Buat",
"Clear Data": "Bersihkan Data",
@@ -146,15 +146,15 @@
"backupDescription": "Anda dapat mencadangkan semua monitor dan semua notifikasi ke dalam berkas JSON.",
"backupDescription2": "Catatan: Data sejarah dan peristiwa tidak disertakan.",
"backupDescription3": "Data sensitif seperti notifikasi token disertakan dalam berkas ekspor, harap simpan dengan hati-hati.",
- "alertNoFile": "Silakan pilih berkas untuk diimpor.",
+ "alertNoFile": "Silakan pilih berkas yang akan diimpor.",
"alertWrongFileType": "Silakan pilih berkas JSON.",
"Clear all statistics": "Hapus semua statistik",
- "Skip existing": "Lewati yang ada",
+ "Skip existing": "Lewati yang sudah ada",
"Overwrite": "Timpa",
"Options": "Opsi",
"Keep both": "Simpan keduanya",
"Verify Token": "Verifikasi Token",
- "Setup 2FA": "Pengaturan 2FA",
+ "Setup 2FA": "Siapkan 2FA",
"Enable 2FA": "Aktifkan 2FA",
"Disable 2FA": "Nonaktifkan 2FA",
"2FA Settings": "Pengaturan 2FA",
@@ -164,12 +164,12 @@
"Token": "Token",
"Show URI": "Lihat URI",
"Tags": "Tanda",
- "Add New below or Select...": "Tambahkan Baru di bawah atau Pilih…",
+ "Add New below or Select...": "Tambahkan Baru di Bawah ini atau Pilih…",
"Tag with this name already exist.": "Tanda dengan nama ini sudah ada.",
"Tag with this value already exist.": "Tanda dengan nilai ini sudah ada.",
- "color": "warna",
- "value (optional)": "nilai (tidak harus diisi)",
- "Gray": "Abu-abu",
+ "color": "Warna",
+ "value (optional)": "nilai (opsional)",
+ "Gray": "Abu-Abu",
"Red": "Merah",
"Orange": "Jingga",
"Green": "Hijau",
@@ -361,7 +361,6 @@
"Discard": "Buang",
"Cancel": "Batal",
"Powered by": "Dipersembahkan oleh",
- "shrinkDatabaseDescription": "Trigger database VACUUM untuk SQLite. Jika database Anda dibuat setelah 1.10.0, AUTO_VACUUM sudah otomatis diaktifkan dan aksi berikut tidak dibutuhkan.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "Nama Pengguna API ( termamsuk awalan webapi_ )",
"serwersmsAPIPassword": "Kata Sandi API",
@@ -584,7 +583,7 @@
"backupRecommend": "Silahkan backup volume atau folder (./data/) secara langsung.",
"Help": "Bantuan",
"Game": "Permainan",
- "markdownSupported": "Dukungan sintaks markdown",
+ "markdownSupported": "Sintaks markdown didukung",
"statusMaintenance": "Pemeliharaan",
"Maintenance": "Tidak Ada Pemeliharaan",
"General Monitor Type": "Tipe Monitor Umum",
@@ -636,7 +635,7 @@
"Badge Label Prefix": "Prefiks Label Lencana",
"telegramSendSilently": "Kirim Secara Senyap",
"Invert Keyword": "Balikkan Kata Kunci",
- "Pick Affected Monitors...": "Pilih Monitor yang Terkena Dampak…",
+ "Pick Affected Monitors...": "Pilih Monitor yang Terpengaruh…",
"Badge Label Suffix": "Suffix Label Lencana",
"statusPageMaintenanceEndDate": "berakhir",
"Add API Key": "Tambahkan Kunci API",
@@ -746,7 +745,7 @@
"smseagleRecipientType": "Tipe Penerima",
"smseagleToken": "Token Akses API",
"smseagleUrl": "URL perangkat SMSEagle Anda",
- "Schedule maintenance": "Perbaikan Terjadwal",
+ "Schedule maintenance": "Jadwalkan Pemeliharaan",
"Affected Monitors": "Monitor yang Terpengaruh",
"Start of maintenance": "Mulai pemeliharaan",
"All Status Pages": "Semua Halaman Status",
@@ -789,7 +788,7 @@
"promosmsAllowLongSMS": "Izinkan SMS panjang",
"Badge Pending Color": "Warna Lencana Tertunda",
"Monitor Group": "Monitor Grup",
- "Expected Value": "Parameter yang diharapkan",
+ "Expected Value": "Nilai Yang Diharapkan",
"Json Query": "Kueri JSON",
"setupDatabaseSQLite": "File database sederhana, direkomendasikan untuk penerapan skala kecil. Sebelum v2.0.0, Uptime Kuma menggunakan SQLite sebagai database default.",
"setupDatabaseMariaDB": "Hubungkan ke database MariaDB eksternal. Anda perlu mengatur informasi koneksi database.",
@@ -805,7 +804,7 @@
"emailTemplateLimitedToUpDownNotification": "hanya tersedia untuk detak jantung ATAS/BAWAH, jika tidak, null",
"aboutNotifyChannel": "Beritahu saluran akan memicu pemberitahuan desktop atau seluler untuk semua anggota saluran, baik ketersediaannya diatur ke aktif atau tidak.",
"monitorToastMessagesDescription": "Notifikasi Toast untuk monitor hilang setelah waktu tertentu dalam hitungan detik. Setel ke -1 akan menonaktifkan batas waktu. Setel ke 0 akan menonaktifkan notifikasi Toast.",
- "wayToGetFlashDutyKey": "Anda dapat membuka Saluran -> (Pilih Saluran) -> Integrasi -> Tambahkan halaman integrasi baru, tambahkan 'Acara Khusus' untuk mendapatkan alamat push, salin Kunci Integrasi di alamat tersebut. Untuk informasi lebih lanjut, silahkan kunjungi",
+ "wayToGetFlashDutyKey": "Anda dapat membuka Saluran -> (Pilih Saluran) -> Integrasi -> Tambahkan halaman integrasi baru, tambahkan 'Uptime Kuma' untuk mendapatkan alamat push, salin Kunci Integrasi di alamat tersebut. Untuk informasi lebih lanjut, silakan kunjungi",
"Saved.": "Tersimpan.",
"authUserInactiveOrDeleted": "Pengguna tidak aktif atau dihapus.",
"authInvalidToken": "Token Tidak Valid.",
@@ -874,7 +873,7 @@
"Session Token": "Sesi Token",
"pushOthers": "Lainnya",
"programmingLanguages": "Bahasa Pemrograman",
- "filterActivePaused": "Berhenti",
+ "filterActivePaused": "Dijeda",
"templateMsg": "pesan pemberitahuan",
"templateHeartbeatJSON": "objek yang menggambarkan heartbeat",
"templateMonitorJSON": "objek yang menggambarkan monitor",
@@ -884,10 +883,10 @@
"selectedMonitorCount": "Terpilih: {0}",
"Check/Uncheck": "Centang/Hapus centang",
"Authorization Identity": "Identitas Otorisasi",
- "styleElapsedTime": "Waktu yang berlalu pada bilah heartbeat",
+ "styleElapsedTime": "Waktu yang telah berlalu di bawah bilah heartbeat",
"styleElapsedTimeShowNoLine": "Tampilkan (Tanpa Garis)",
"styleElapsedTimeShowWithLine": "Tampilkan (Dengan Garis)",
- "Request Timeout": "Batas Waktu Habis",
+ "Request Timeout": "Batas Waktu Permintaan",
"timeoutAfter": "Waktu habis setelah {0} detik",
"successKeywordExplanation": "Kata Kunci MQTT yang akan dianggap sukses",
"Remove the expiry notification": "Hapus hari pemberitahuan kedaluwarsa",
@@ -896,7 +895,7 @@
"Remote Browser": "Peramban Jarak Jauh",
"Add a Remote Browser": "Tambahkan Remote Browser",
"Remote Browser not found!": "Remote Browser tidak ditemukan!",
- "remoteBrowsersDescription": "Remote Browsers adalah alternatif untuk menjalankan Chromium secara lokal. Siapkan dengan layanan seperti browserless.io atau sambungkan ke layanan Anda sendiri",
+ "remoteBrowsersDescription": "Remote Browsers adalah cara alternatif untuk menjalankan Chromium secara lokal. Siapkan dengan layanan seperti browserless.io atau sambungkan ke layanan Anda sendiri",
"self-hosted container": "kontainer self-hosted",
"remoteBrowserToggle": "Secara default, Chromium berjalan di dalam kontainer Uptime Kuma. Anda dapat menggunakan remote browser dengan menekan tombol ini.",
"useRemoteBrowser": "Gunakan Remote Browser",
@@ -909,7 +908,7 @@
"successKeyword": "Kata Kunci Sukses",
"ntfyPriorityHelptextAllExceptDown": "Semua peristiwa dikirim dengan prioritas ini, kecuali peristiwa {0}, yang memiliki prioritas {1}",
"statusPageSpecialSlugDesc": "Tanda khusus {0}: halaman ini akan ditampilkan jika tidak ada tanda khusus yang disediakan",
- "settingUpDatabaseMSG": "Menyiapkan basis data. Mungkin perlu waktu beberapa saat, harap bersabar.",
+ "settingUpDatabaseMSG": "Menyiapkan database. Mungkin perlu waktu beberapa saat, harap bersabar.",
"Search monitored sites": "Mencari situs yang dipantau",
"ntfyPriorityHelptextAllEvents": "Semua peristiwa dikirim dengan prioritas maksimum",
"What is a Remote Browser?": "Apa itu Remote Browser?",
@@ -919,7 +918,7 @@
"To Phone Number": "Untuk Nomor Telepon",
"gtxMessagingToHint": "Format internasional, dimulai dengan tanda plus \"+\" ({e164}, {e212} or {e214})",
"gtxMessagingApiKeyHint": "Anda dapat menemukan Kunci API Anda di: Perutean Akun Saya > Lihat Informasi Akun > Kredensial API > REST API (v2.x)",
- "Originator type": "Tipe Pencetus",
+ "Originator type": "Tipe Originator",
"Alphanumeric (recommended)": "Alfanumerik (direkomendasikan)",
"Telephone number": "Nomor telepon",
"cellsyntOriginatortypeAlphanumeric": "String alfanumerik (maks 11 karakter). Penerima tidak dapat membalas pesan tersebut.",
@@ -928,8 +927,8 @@
"Allow Long SMS": "Izinkan SMS Panjang",
"max 15 digits": "Maksimal 15 digit",
"callMeBotGet": "Anda dapat membuat endpoint untuk {0}, {1} dan {2}. Ingatlah bahwa Anda mungkin akan terkena batas tarif. Batas tarif saat ini adalah: {3}",
- "Originator": "Pencetus",
- "cellsyntOriginator": "Terlihat di ponsen penerima sebagai pencetus pesan. Nilai dan fungsi yang diizinkan bergantung pada parameter tipe pencetus.",
+ "Originator": "Originator",
+ "cellsyntOriginator": "Terlihat di ponsel penerima sebagai pencetus pesan. Nilai dan fungsi yang diizinkan bergantung pada parameter tipe pencetus.",
"Destination": "Tujuan",
"wayToGetWhapiUrlAndToken": "Anda dapat menggunakan URL API dan token dengan bergabung ke saluran yang Anda inginkan dari {0}",
"whapiRecipient": "Nomor Telepon / Kontak ID / Grup ID",
@@ -939,5 +938,155 @@
"wayToWriteWhapiRecipient": "Nomor telepon dalam format internasional, tanpa tanda tambah ({0}), Kontak ID ({1}) atau Grup ID ({2}).",
"documentationOf": "{0} Dokumentasi",
"Channel access token (Long-lived)": "Token akses saluran (durasi panjang)",
- "Your User ID": "User ID Anda"
+ "Your User ID": "User ID Anda",
+ "mongodbCommandDescription": "Jalankan perintah MongoDB terhadap database. Untuk informasi tentang perintah yang tersedia, lihat {documentation}",
+ "Command": "Perintah",
+ "threemaRecipient": "Penerima",
+ "threemaRecipientType": "Tipe Penerima",
+ "threemaRecipientTypeIdentity": "Threem-ID",
+ "threemaRecipientTypeIdentityFormat": "8 karakter",
+ "threemaRecipientTypePhone": "Nomor Telepon",
+ "threemaRecipientTypePhoneFormat": "E.164, tanpa awalan +",
+ "threemaRecipientTypeEmail": "Alamat Email",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaApiAuthenticationSecret": "Gateway-ID Secret",
+ "smspartnerPhoneNumber": "Nomor telepon",
+ "smspartnerSenderName": "Nama Pengirim SMS",
+ "Mentioning": "Menyebut",
+ "Don't mention people": "Jangan menyebut orang",
+ "bitrix24SupportUserID": "Masukkan ID pengguna Anda di Bitrix24. Anda dapat mengetahui ID dari tautan dengan membuka profil pengguna.",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
+ "wayToGetBitrix24Webhook": "Anda dapat membuat webhook dengan mengikuti langkah-langkah di {0}",
+ "receiverSevenIO": "Menerima nomor",
+ "receiverInfoSevenIO": "Jika nomor penerima tidak berlokasi di Jerman, Anda harus menambahkan kode negara di depan nomor tersebut (misalnya untuk kode negara 1 dari AS gunakan 117612121212, bukan 017612121212)",
+ "Host URL": "URL Host",
+ "senderSevenIO": "Mengirim nomor atau nama",
+ "apiKeysDisabledMsg": "Kunci API dinonaktifkan karena autentikasi dinonaktifkan.",
+ "forumPostName": "Nama postingan forum",
+ "threadForumPostID": "Thread / ID postingan Forum",
+ "e.g. {discordThreadID}": "misalnya {discordThreadID}",
+ "Select message type": "Pilih jenis pesan",
+ "Send to channel": "Kirim ke saluran",
+ "Create new forum post": "Buat postingan forum baru",
+ "postToExistingThread": "Posting ke thread/postingan forum yang ada",
+ "whatHappensAtForumPost": "Buat postingan forum baru. Ini TIDAK mempublikasikan pesan di postingan yang sudah ada. Untuk mempublikasikan di postingan yang sudah ada gunakan '{option}'",
+ "smspartnerApiurl": "Anda dapat menemukan kunci API di dasbor Anda di {0}",
+ "smspartnerPhoneNumberHelptext": "Nomor harus dalam format internasional {0}, {1}. Beberapa angka harus dipisahkan dengan {2}",
+ "smspartnerSenderNameInfo": "Harus di antara 3..=11 karakter biasa",
+ "wayToGetSevenIOApiKey": "Kunjungi dasbor di bawah app.seven.io > pengembang > api key > tombol yang berwarna hijau",
+ "wayToGetThreemaGateway": "Anda dapat mendaftar ke Threema Gateway {0}.",
+ "threemaSenderIdentityFormat": "8 karakter, biasanya diawali dengan *",
+ "threemaBasicModeInfo": "Catatan: Integrasi ini menggunakan Threema Gateway dalam mode dasar (enkripsi berbasis server). Detail lebih lanjut dapat ditemukan {0}.",
+ "wayToGetDiscordThreadId": "Mendapatkan id postingan thread/forum mirip dengan mendapatkan id saluran. Baca selengkapnya tentang cara mendapatkan ID {0}",
+ "Mention group": "Sebutkan {grup}",
+ "Refresh Interval Description": "Laman status akan melakukan penyegaran situs secara penuh setiap {0} detik",
+ "Refresh Interval": "Interval muat ulang",
+ "apiKeySevenIO": "Kunci API SevenIO",
+ "locally configured mail transfer agent": "transfer email agent yang dikonfigurasi secara lokal",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Masukkan nama host server yang ingin Anda sambungkan atau {localhost} jika Anda ingin menggunakan {local_mta}",
+ "ignoreTLSErrorGeneral": "Abaikan kesalahan TLS/SSL untuk koneksi",
+ "jsonQueryDescription": "Mengurai dan mengekstrak data spesifik dari respons JSON server menggunakan query JSON atau menggunakan “$” untuk respons mentah, jika tidak menginginkan JSON. Hasilnya kemudian dibandingkan dengan nilai yang diharapkan, sebagai string. Lihat {0} untuk dokumentasi dan gunakan {1} untuk bereksperimen dengan query.",
+ "now": "sekarang",
+ "time ago": "{0} yang lalu",
+ "-year": "-tahun",
+ "Json Query Expression": "Ekspresi Kueri Json",
+ "and": "dan",
+ "cacheBusterParam": "Tambahkan parameter {0}",
+ "cacheBusterParamDescription": "Parameter yang dihasilkan secara acak untuk melewati cache.",
+ "Community String": "Community String",
+ "snmpCommunityStringHelptext": "String ini berfungsi sebagai kata sandi untuk autentikasi dan mengontrol akses ke perangkat SNMP. Cocokkan dengan konfigurasi perangkat SNMP Anda.",
+ "OID (Object Identifier)": "OID (Object Identifier)",
+ "snmpOIDHelptext": "Masukkan OID untuk sensor atau status yang ingin Anda pantau. Gunakan alat manajemen jaringan seperti browser MIB atau perangkat lunak SNMP jika Anda tidak yakin tentang OID.",
+ "signl4Docs": "Anda dapat menemukan informasi selengkapnya tentang cara mengonfigurasi SIGNL4 dan cara mendapatkan URL webhook SIGNL4 di {0}.",
+ "greater than or equal to": "lebih dari atau sama dengan",
+ "wayToGetOnesenderUrlandToken": "Anda bisa mendapatkan URL dan Token dengan mengunjungi situs Onesender. Informasi lebih lanjut {0}",
+ "Condition": "Kondisi",
+ "SNMP Version": "Versi SNMP",
+ "Please enter a valid OID.": "Silakan masukkan OID yang tepat.",
+ "Host Onesender": "Host Onesender",
+ "Token Onesender": "Token Onesender",
+ "Recipient Type": "Tipe Penerima",
+ "Private Number": "Nomor Pribadi",
+ "privateOnesenderDesc": "Pastikan nomor telepon valid. Untuk mengirim pesan ke nomor telepon pribadi, contoh: 628123456789",
+ "Authorization Header": "Authorization Header",
+ "Form Data Body": "Form Data Body",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "ID Klien",
+ "Client Secret": "Client Secret",
+ "OAuth Scope": "OAuth Scope",
+ "Optional: Space separated list of scopes": "Opsional: Daftar cakupan yang dipisahkan spasi",
+ "Go back to home page.": "Kembali ke halaman beranda.",
+ "No tags found.": "Tidak ada tag yang ditemukan.",
+ "Lost connection to the socket server.": "Kehilangan koneksi ke server soket.",
+ "Cannot connect to the socket server.": "Tidak dapat terhubung ke server soket.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "Conditions": "Kondisi",
+ "conditionAdd": "Tambahkan Kondisi",
+ "conditionDelete": "Menghapus Kondisi",
+ "conditionAddGroup": "Tambahkan Grup",
+ "conditionDeleteGroup": "Menghapus Grup",
+ "conditionValuePlaceholder": "Nilai",
+ "equals": "sama dengan",
+ "not equals": "tidak sama dengan",
+ "contains": "berisi",
+ "not contains": "tidak berisi",
+ "starts with": "dimulai dengan",
+ "not starts with": "tidak dimulai dengan",
+ "ends with": "diakhiri dengan",
+ "not ends with": "tidak diakhiri dengan",
+ "less than": "kurang dari",
+ "greater than": "lebih dari",
+ "less than or equal to": "kurang dari atau sama dengan",
+ "record": "rekaman",
+ "groupOnesenderDesc": "Pastikan GroupIDnya valid. Untuk mengirim pesan ke Grup, misal: 628123456789-342345",
+ "Group ID": "ID Grup",
+ "Add Remote Browser": "Tambahkan Remote Browser",
+ "New Group": "Grup Baru",
+ "Group Name": "Nama Grup",
+ "OAuth2: Client Credentials": "OAuth2: Kredensial Klien",
+ "Authentication Method": "Metode Autentikasi",
+ "shrinkDatabaseDescriptionSqlite": "Memicu pangkalan data {vacuum} untuk SQLite. {auto_vacuum} sudah diaktifkan, tetapi tidak mendefragmentasi pangkalan data atau mengemas ulang halaman individual dari pangkalan data seperti yang dilakukan oleh perintah {vacuum}.",
+ "ignoredTLSError": "Galat TLS/SSL sudah diabaikan",
+ "Debug": "Awakutu",
+ "Copy": "Salin",
+ "CopyToClipboardError": "Tidak bisa menyalin ke papan klip: {galat}",
+ "CopyToClipboardSuccess": "Tersalin!",
+ "CurlDebugInfo": "Untuk pengawakutuan monitor, Anda bisa menempelkan ini ke terminal mesin Anda sendiri atau ke terminal mesin di mana uptime kuma sedang berjalan dan melihat apa yang Anda harapkan. Mohon perhatikan perbedaan jaringan seperti {firewalls}, {dns_resolvers}, atau {docker_networks}.",
+ "aboutSlackUsername": "Mengubah nama tampilan pengirim pesan. Jika Anda ingin menyebut seseorang, sertakan dalam nama yang mudah diingat.",
+ "Message format": "Format pesan",
+ "Sound": "Suara",
+ "Alphanumerical string and hyphens only": "Hanya string alfanumerik dan tanda hubung",
+ "Elevator": "Pengundak",
+ "Custom sound to override default notification sound": "Suara khusus untuk mengganti suara notifikasi bawaan",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Pemberitahuan yang sensitif terhadap waktu akan segera dikirimkan, meskipun perangkat dalam mode jangan ganggu.",
+ "RabbitMQ Nodes": "RabbitMQ Management Nodes",
+ "rabbitmqNodesDescription": "Masukkan URL untuk node manajemen RabbitMQ termasuk protokol dan port. Contoh: {0}",
+ "RabbitMQ Password": "Kata kunci RabbitMQ",
+ "rabbitmqHelpText": "Untuk menggunakan monitor, Anda perlu mengaktifkan Plugin Manajemen di pengaturan RabbitMQ Anda. Untuk informasi lebih lanjut, silakan baca {rabitmq_documentation}.",
+ "rabbitmqNodesRequired": "Harap atur node untuk monitor ini.",
+ "rabbitmqNodesInvalid": "Harap gunakan URL yang memenuhi syarat (dimulai dengan 'http') untuk node RabbitMQ.",
+ "RabbitMQ Username": "Nama pengguna RabbitMQ",
+ "Notification Channel": "Notifikasi Kanal",
+ "Send rich messages": "Kirim rich messages",
+ "Arcade": "Arkade",
+ "Correct": "Benar",
+ "Fail": "Gagal",
+ "Harp": "Harpa",
+ "Reveal": "Mengungkap",
+ "Bubble": "Gelembung",
+ "Doorbell": "Bel pintu",
+ "Flute": "Seruling",
+ "Money": "Uang",
+ "Scifi": "Fiksi ilmiah",
+ "Clear": "Jernih",
+ "Guitar": "Gitar",
+ "Pop": "Letupan",
+ "Time Sensitive (iOS Only)": "Sensitif terhadap Waktu (Khusus iOS)",
+ "From": "Dari",
+ "Can be found on:": "Bisa ditemukan di: {0}",
+ "The phone number of the recipient in E.164 format.": "Nomor telepon penerima dalam format E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Antara ID pengirim teks atau nomor telepon dalam format E.164 jika Anda ingin menerima balasan.",
+ "SendGrid API Key": "Kunci API SendGrid",
+ "Separate multiple email addresses with commas": "Pisahkan beberapa alamat email dengan koma"
}
diff --git a/src/lang/it-IT.json b/src/lang/it-IT.json
index 5f0ce8822..3104e5fcb 100644
--- a/src/lang/it-IT.json
+++ b/src/lang/it-IT.json
@@ -59,7 +59,7 @@
"day": "giorno | giorni",
"-day": "-giorni",
"hour": "ora",
- "-hour": "-ore",
+ "-hour": "-ora",
"Response": "Risposta",
"Ping": "Ping",
"Monitor Type": "Modalità di monitoraggio",
@@ -80,7 +80,7 @@
"pushOptionalParams": "Parametri aggiuntivi: {0}",
"Save": "Salva",
"Notifications": "Notifiche",
- "Not available, please setup.": "Non disponibili, richiesta configurazione manuale.",
+ "Not available, please setup.": "Non disponibile, richiesta configurazione manuale.",
"Setup Notification": "Configura le notifiche",
"Light": "Chiaro",
"Dark": "Scuro",
@@ -114,7 +114,7 @@
"Username": "Nome utente",
"Password": "Password",
"Remember me": "Ricorda credenziali",
- "Login": "Accesso",
+ "Login": "Accedi",
"No Monitors, please": "Nessun monitor presente,",
"add one": "aggiungine uno",
"Notification Type": "Servizio di notifica",
@@ -349,7 +349,6 @@
"Discard": "Scarta modifiche",
"Cancel": "Annulla",
"Powered by": "Powered by",
- "shrinkDatabaseDescription": "Lancia il comando \"VACUUM\" sul database SQLite. Se il database è stato creato dopo la versione 1.10.0, la funzione \"AUTO_VACUUM\" è già abilitata di default e quindi questa azione non è necessaria.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "Nome utente API (incl. prefisso webapi_)",
"serwersmsAPIPassword": "Password API",
@@ -423,7 +422,7 @@
"styleElapsedTimeShowWithLine": "Mostra (con linea)",
"webhookBodyPresetOption": "Predefinito - {0}",
"webhookBodyCustomOption": "Corpo personalizzato",
- "topic": "Topic",
+ "topic": "Argomento",
"selectedMonitorCount": "Selezionato: {0}",
"Check/Uncheck": "Seleziona/Deseleziona",
"Proxies": "Proxy",
@@ -433,7 +432,7 @@
"HTTP Basic Auth": "Autenticazione di base HTTP",
"Reverse Proxy": "Proxy inverso",
"Backup": "Backup",
- "About": "Di",
+ "About": "Info",
"wayToGetCloudflaredURL": "(Scarica cloudflared da {0})",
"cloudflareWebsite": "Sito web di Cloudflare",
"Message:": "Messaggio:",
@@ -445,7 +444,7 @@
"Subject:": "Soggetto:",
"Valid To:": "Valido per:",
"Days Remaining:": "Giorni rimanenti:",
- "Issuer:": "Emittente",
+ "Issuer:": "Emittente:",
"Fingerprint:": "Impronta digitale:",
"No status pages": "Nessuna pagina di stato",
"Domain Name Expiry Notification": "Notifica di scadenza del nome di dominio",
@@ -535,10 +534,10 @@
"Server Timezone": "Fuso orario del server",
"statusPageMaintenanceEndDate": "Fine",
"IconUrl": "URL dell'icona",
- "Enable DNS Cache": "(Obsoleto) Abilita la cache DNS per i monitor HTTP(s).",
+ "Enable DNS Cache": "(Obsoleto) Abilita la cache DNS per i monitor HTTP(s)",
"Enable": "Abilitare",
"Disable": "Disattivare",
- "chromeExecutableAutoDetect": "Trovato automaticamente",
+ "chromeExecutableAutoDetect": "Trova automaticamente",
"dnsCacheDescription": "Potrebbe non funzionare in alcuni ambienti IPv6, disabilitalo in caso di problemi.",
"Single Maintenance Window": "Singola finestra di manutenzione",
"Maintenance Time Window of a Day": "Finestra temporale di manutenzione di un giorno",
@@ -554,13 +553,13 @@
"uninstall": "Disinstalla",
"confirmUninstallPlugin": "Sei sicuro di voler disinstallare questo plugin?",
"notificationRegional": "Regionale",
- "Clone": "Clone",
+ "Clone": "Duplica",
"cloneOf": "Clone di {0}",
"wayToGetZohoCliqURL": "Puoi scoprire come creare un URL webhook {0}.",
"dataRetentionTimeError": "Il periodo di conservazione deve essere pari o superiore a 0",
"infiniteRetention": "Impostare su 0 per la conservazione infinita.",
"enableGRPCTls": "Consenti l'invio di richieste gRPC con connessione TLS",
- "grpcMethodDescription": "Il nome del metodo viene convertito nel formato cammelCase come sayHello, check, ecc.",
+ "grpcMethodDescription": "Il nome del metodo viene convertito nel formato camelCase come sayHello, check, ecc.",
"styleElapsedTimeShowNoLine": "Mostra (nessuna riga)",
"Add New Tag": "Aggiungi nuova etichetta",
"webhookCustomBodyDesc": "Definire un corpo HTTP personalizzato per la richiesta. Le variabili modello {msg}, {heartbeat}, {monitor} sono accettate.",
@@ -586,7 +585,7 @@
"invalidCronExpression": "Espressione Cron non valida: {0}",
"lastDay2": "2° ultimo giorno del mese",
"maintenanceStatus-under-maintenance": "In manutenzione",
- "chromeExecutable": "Cromo/cromo eseguibile",
+ "chromeExecutable": "Eseguibile Chrome/Chromium",
"chromeExecutableDescription": "Per gli utenti Docker, se Chromium non è ancora installato, potrebbero essere necessari alcuni minuti per l'installazione e la visualizzazione del risultato del test. Richiede 1 GB di spazio su disco.",
"uninstalling": "Disinstallazione",
"confirmDeleteTagMsg": "Sei sicuro di voler eliminare questo tag? I monitor associati a questo tag non verranno eliminati.",
@@ -668,12 +667,80 @@
"templateMsg": "Messaggio della notifica",
"Search monitored sites": "Ricerca tra i siti monitorati",
"settingUpDatabaseMSG": "Configurazione del database in corso. Potrebbe richiedere un po' di tempo...",
- "templateHeartbeatJSON": "oggetto che descrive il battito cardiaco",
+ "templateHeartbeatJSON": "oggetto che descrive il controllo",
"templateLimitedToUpDownNotifications": "disponibile solo per le notifiche UP/DOWN",
"Add a new expiry notification day": "Aggiungi un nuovo giorno di notifica di scadenza",
"DockerHostRequired": "Per favore, imposta l'host Docker per questo monitor.",
"smtpLiquidIntroduction": "I due campi seguenti sono adattabili tramite il linguaggio di templating Liquid. Consulta {0} per le istruzioni d'uso. Queste sono le variabili disponibili:",
"emailCustomisableContent": "Contenuto personalizzabile",
"noDockerHostMsg": "Non disponibile. Configura prima un host Docker.",
- "Remove the expiry notification": "Rimuovi il giorno di notifica di scadenza"
+ "Remove the expiry notification": "Rimuovi il giorno di notifica di scadenza",
+ "emailTemplateHeartbeatJSON": "oggetto che descrive il controllo",
+ "leave blank for default subject": "Lasciare vuoto per oggetto predefinito",
+ "emailCustomBody": "Messaggio personalizzato",
+ "Select message type": "Seleziona il tipo di messaggio",
+ "Send to channel": "Invia al canale",
+ "Create new forum post": "Crea un nuovo post sul forum",
+ "postToExistingThread": "Scrivi in una conversazione / post esistente",
+ "forumPostName": "Nome forum del post",
+ "threadForumPostID": "ID della conversazione / Forum del post",
+ "e.g. {discordThreadID}": "es. {discordThreadID}",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Inserisci l'hostname del server a cui ti vuoi connettere o {localhost} se vuoi usare {local_mta}",
+ "templateLimitedToUpDownCertNotifications": "disponibile solo per le notifiche UP/DOWN/Scadenza certificato",
+ "emailTemplateMsg": "Messaggio della notifica",
+ "emailTemplateLimitedToUpDownNotification": "disponibile solo per controlli UP/DOWN, altrimenti nullo",
+ "Refresh Interval": "Intervallo di aggiornamento",
+ "Refresh Interval Description": "La pagina di stato si aggiornerà completamente ogni {0} secondi",
+ "emailTemplateServiceName": "Nome servizio",
+ "leave blank for default body": "Lasciare vuoto per messaggio predefinito",
+ "emailTemplateHostnameOrURL": "Nome host o URL",
+ "emailTemplateStatus": "Stato",
+ "ignoreTLSErrorGeneral": "Ignora gli errori TLS/SSL per la connessione",
+ "statusPageSpecialSlugDesc": "Slug speciale {0}: questa pagina verrà mostrata quando non viene fornito alcuno slug",
+ "successKeywordExplanation": "Parola chiave MQTT che verrà considerata come corretta",
+ "signl4Docs": "Puoi trovare maggiori informazioni su come configurare SIGNL4 e su come ottenere l'URL del webhook SIGNL4 in {0}.",
+ "contains": "contiene",
+ "not contains": "non contiene",
+ "starts with": "inizia con",
+ "equals": "uguale",
+ "not equals": "non uguale",
+ "less than": "meno di",
+ "greater than": "maggiore di",
+ "successKeyword": "Parola chiave corretta",
+ "templateMonitorJSON": "oggetto che descrive il monitor",
+ "Cannot connect to the socket server.": "Impossibile connettersi al server socket.",
+ "wayToGetDiscordThreadId": "Ottenere l'ID di un thread/post del forum è simile a ottenere un ID di canale. Scopri di più su come ottenere gli ID {0}",
+ "pushoversounds pushover": "Pushover (predefinita)",
+ "pushoversounds none": "Nessuno (silenzioso)",
+ "Don't mention people": "Non menzionare le persone",
+ "Mention group": "Menzionare {group}",
+ "Host URL": "URL dell'host",
+ "emailTemplateMonitorJSON": "oggetto che descrive il monitor",
+ "Channel access token (Long-lived)": "Token di accesso al canale (di lunga durata)",
+ "Your User ID": "Il tuo ID utente",
+ "pushoverMessageTtl": "Messaggio TTL (secondi)",
+ "SendKey": "SendKey",
+ "Sms template must contain parameters: ": "Il modello SMS deve contenere i parametri: ",
+ "Bark API Version": "Versione API Bark",
+ "Bark Group": "Gruppo Bark",
+ "Bark Endpoint": "Endpoint Bark",
+ "Bark Sound": "Suono Bark",
+ "aboutNotifyChannel": "Notify channel attiverà una notifica desktop o mobile per tutti i membri del canale, indipendentemente dal fatto che la loro disponibilità sia impostata su attivo o assente.",
+ "promosmsPassword": "Password API",
+ "You can divide numbers with": "Puoi dividere i numeri con",
+ "Base URL": "URL base",
+ "-year": "-anno",
+ "now": "ora",
+ "time ago": "fa",
+ "Json Query Expression": "Espressione di query JSON",
+ "and": "e",
+ "whatHappensAtForumPost": "Crea un nuovo post sul forum. Questo NON pubblica messaggi in post esistenti. Per pubblicare in un post esistente utilizzare \"{option}\"",
+ "invertKeywordDescription": "Cerca la parola chiave essere assente anziché presente.",
+ "octopushAPIKey": "\"API Key\" dalle credenziali API HTTP nel pannello di controllo",
+ "Enable TLS": "Abilita TLS",
+ "ignoredTLSError": "Ignora errori TLS/SSL",
+ "templateHostnameOrURL": "nome host o URL",
+ "templateStatus": "stato",
+ "templateServiceName": "nome del servizio",
+ "locally configured mail transfer agent": "agente mail configurato localmente"
}
diff --git a/src/lang/ja.json b/src/lang/ja.json
index d029f3ef6..cb46b1500 100644
--- a/src/lang/ja.json
+++ b/src/lang/ja.json
@@ -30,7 +30,7 @@
"Quick Stats": "統計",
"Up": "正常",
"Down": "停止",
- "Pending": "中止",
+ "Pending": "待機中",
"Unknown": "不明",
"Pause": "一時停止",
"Name": "名前",
@@ -52,7 +52,7 @@
"Ping": "Ping",
"Monitor Type": "監視タイプ",
"Keyword": "キーワード",
- "Friendly Name": "分かりやすい名前",
+ "Friendly Name": "モニター表示名",
"URL": "URL",
"Hostname": "ホスト名",
"Port": "ポート",
@@ -92,7 +92,7 @@
"No": "いいえ",
"Username": "ユーザー名",
"Password": "パスワード",
- "Remember me": "パスワードを忘れた場合",
+ "Remember me": "ログインしたままにする",
"Login": "ログイン",
"No Monitors, please": "監視がありません",
"add one": "add one",
@@ -131,7 +131,7 @@
"confirmDisableTwoFAMsg": "2段階認証を「無効」にします。よろしいですか?",
"Apply on all existing monitors": "既存のすべてのモニターに適用する",
"Verify Token": "認証する",
- "Setup 2FA": "2段階認証の設定",
+ "Setup 2FA": "二要素認証 (2FA) の設定",
"Enable 2FA": "2段階認証を有効にする",
"Disable 2FA": "2段階認証を無効にする",
"2FA Settings": "2段階認証の設定",
@@ -210,7 +210,7 @@
"Content Type": "コンテンツタイプ",
"webhookAdditionalHeadersTitle": "追加ヘッダー",
"Server URL": "Server URL",
- "Priority": "優先順位",
+ "Priority": "優先度",
"Read more": "続きを読む",
"Show Tags": "タグを表示",
"Switch to Dark Theme": "ダークテーマに切り替える",
@@ -225,9 +225,9 @@
"Pink": "ピンク",
"Required": "必須",
"Select status pages...": "ステータスページを選択してください…",
- "webhookAdditionalHeadersDesc": "Webhook で送信される追加ヘッダーを設定します。",
+ "webhookAdditionalHeadersDesc": "Webhook で送信される追加ヘッダーを設定します。各ヘッダーは JSON の key/value 型で定義されている必要があります。",
"Webhook URL": "Webhook URL",
- "Application Token": "Application Token",
+ "Application Token": "アプリケーショントークン",
"steamApiKeyDescription": "Steam Game Server を監視するためには、Steam Web-API キーが必要です。APIキーの登録はこちらから行えます。 ",
"Monitor History": "監視履歴",
"clearDataOlderThan": "監視履歴データを {0} 日間、保持します。",
@@ -270,7 +270,7 @@
"Page Not Found": "ページが見つかりません",
"Reverse Proxy": "リバースプロキシ",
"Backup": "バックアップ",
- "About": "About",
+ "About": "情報",
"cloudflareWebsite": "Cloudflare Website",
"Don't know how to get the token? Please read the guide:": "トークンの取得方法が分かりませんか?ガイドをお読みください。",
"Custom": "カスタム",
@@ -315,8 +315,8 @@
"signedInDisp": "{0}としてログイン中",
"RadiusSecret": "Radius シークレット",
"RadiusSecretDescription": "クライアントとサーバー間の共有シークレット",
- "RadiusCalledStationId": "Called Station Id",
- "RadiusCallingStationId": "Calling Station Id",
+ "RadiusCalledStationId": "Called-Station-Id",
+ "RadiusCallingStationId": "Calling-Station-Id",
"Subject:": "サブジェクト:",
"trustProxyDescription": "ヘッダー「X-Forwarded-*」を信頼します。Uptime Kumaがリバースプロキシの中にあり、正しいクライアントIPを取得する場合は、有効化してください。",
"Home Assistant URL": "ホームアシスタントURL",
@@ -349,7 +349,6 @@
"No monitors available.": "監視対象がありません。",
"Add one": "追加",
"No Monitors": "監視対象なし",
- "shrinkDatabaseDescription": "SQLiteデーターベースにVACUUMを実行します。データーベースがv1.10.0以降に作成されている場合、AUTO_VACUUMが既に有効なため実行する必要はありません。",
"enableProxyDescription": "このプロキシは有効化されない限り、監視リクエストには影響しません。無効化した場合、一時的にプロキシをすべての監視から無効化することができます。",
"Certificate Chain": "証明書チェーン",
"Valid": "有効",
@@ -454,21 +453,21 @@
"maintenanceStatus-unknown": "不明",
"Server Timezone": "サーバータイムゾーン",
"IconUrl": "アイコンURL",
- "Enable DNS Cache": "DNSキャッシュを有効にする",
+ "Enable DNS Cache": "【廃止】HTTP(s)モニターに対してDNSキャッシュを有効にする",
"Enable": "有効",
"Disable": "無効",
"Schedule Maintenance": "スケジュールメンテナンス",
"loadingError": "データを取得できません。後でもう一度試してください。",
"uninstall": "アンインストール",
"installing": "インストール中",
- "Ignore TLS Error": "TLSエラーを無視",
+ "Ignore TLS Error": "TLS エラーを無視",
"smtpCC": "CC",
"secureOptionTLS": "TLS (465)",
"smtpBCC": "BCC",
"Discord Webhook URL": "Discord ウェブフック URL",
"wayToCheckSignalURL": "こちらから設定方法を確認できます:",
"Number": "Number",
- "Line Developers Console": "Line Developers Console",
+ "Line Developers Console": "LINE Developersコンソール",
"Access Token": "アクセストークン",
"Channel access token": "チャンネルアクセストークン",
"enableGRPCTls": "TLS接続でgRPCリクエストを送信できるようにする",
@@ -482,10 +481,10 @@
"No Maintenance": "メンテナンスはありません",
"dnsCacheDescription": "一部のIPv6環境では動作しない場合があります。問題が発生した場合は無効にしてください。",
"uninstalling": "アンインストール中",
- "confirmUninstallPlugin": "本当にこのプラグインをアンインストールしていいですか?",
+ "confirmUninstallPlugin": "本当にこのプラグインをアンインストールしますか?",
"wayToGetDiscordURL": "サーバー設定 -> 連携サービス -> ウェブフックを確認 -> 新しいウェブフック から新たに取得できます",
- "wayToGetTeamsURL": "ウェブフックの作成方法は {0}",
- "wayToGetZohoCliqURL": "ウェブフックの作成方法は {0}",
+ "wayToGetTeamsURL": "Webhook URLの作成方法は {0}",
+ "wayToGetZohoCliqURL": "Webhook URLの作成方法は {0}",
"confirmDeleteTagMsg": "このタグを本当に削除してよろしいですか?このタグが付けられたモニターは削除されません。",
"deleteMaintenanceMsg": "このメンテナンスを本当に削除していいですか?",
"promosmsLogin": "APIログイン名",
@@ -506,7 +505,7 @@
"backupRecommend": "代わりにボリュームまたはデータフォルダ(./data/)を直接バックアップしてください。",
"recurringInterval": "インターバル",
"Recurring": "繰り返し",
- "lineDevConsoleTo": "Line Developers Console - {0}",
+ "lineDevConsoleTo": "LINE Developersコンソール - {0}",
"Basic Settings": "基本設定",
"User ID": "User ID",
"Huawei": "Huawei",
@@ -553,9 +552,9 @@
"octopushSMSSender": "SMS送信者名:3~11文字の英数字とスペース(a~zA~z0~9)",
"Lowcost": "低コスト",
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "通知サービスの一覧からデバイス名を見つけるには、Home Assistantの「開発者ツール > サービス」から通知で検索してください。",
- "Notify Channel": "通知チャンネル",
+ "Notify Channel": "チャンネル通知",
"Icon Emoji": "絵文字アイコン",
- "setupDatabaseChooseDatabase": "どのデータベースを利用しますか?",
+ "setupDatabaseChooseDatabase": "どのデータベースを使いたいですか?",
"setupDatabaseEmbeddedMariaDB": "何も設定する必要はありません。この Docker イメージは設定済みの MariaDB が組み込まれています。Uptime Kuma はこのデータベースに unix ソケットを通じて接続します。",
"setupDatabaseSQLite": "小規模な開発のために推奨される小さなデータベースファイルです。v2.0.0 以前は、Uptime Kuma は SQLite を標準のデータベースとして使用していました。",
"tailscalePingWarning": "Tailscale Ping モニターを使用するためには、Uptime Kuma を Docker を利用せずインストールし、そのうえで Tailscale Client をサーバーにインストールしてください。",
@@ -567,5 +566,524 @@
"selectedMonitorCount": "選択済み: {0}",
"Long-Lived Access Token": "長期アクセストークン",
"Invert Keyword": "「含まない」キーワード",
- "Expected Value": "期待値"
+ "Expected Value": "期待値",
+ "dataRetentionTimeError": "保持期間は 0 か、それ以上である必要があります",
+ "settingUpDatabaseMSG": "データベースをセットアップしています。しばらくお待ちください。",
+ "Check/Uncheck": "選択あり/なし",
+ "Alphanumeric (recommended)": "半角英数字(推奨)",
+ "GrafanaOncallUrl": "Grafana オンコール URL",
+ "Command": "コマンド",
+ "Browser Screenshot": "ブラウザ・スクリーンショット",
+ "mongodbCommandDescription": "データベースに対して MongoDB コマンドを実行します。使用できるコマンドについては {documentation} を参照ください",
+ "2faDisabled": "二要素認証 (2FA) を無効にしました。",
+ "Telephone number": "電話番号",
+ "remoteBrowsersDescription": "リモートブラウザは Chromium を実行するための代替手段です。ローカルで実行する代わりに、browserless.io のようなサービスや、独自のサービスに接続します",
+ "max 15 digits": "最大15桁",
+ "What is a Remote Browser?": "リモート・ブラウザとは何ですか?",
+ "Remote Browsers": "リモート・ブラウザ",
+ "Remote Browser": "リモート・ブラウザ",
+ "wayToGetSevenIOApiKey": "app.seven.io > developer > api key > 緑色の追加ボタンの下にあるダッシュボードをご覧ください",
+ "senderSevenIO": "番号もしくは名前を送信しています",
+ "receiverSevenIO": "番号を受信しています",
+ "Search monitored sites": "監視対象サイトの検索",
+ "liquidIntroduction": "Templatability は Liquid テンプレート言語を利用します。使い方は {0} をご覧ください。以下は利用可能な変数です:",
+ "templateMsg": "通知の内容",
+ "templateHeartbeatJSON": "死活監視 (heartbeat) を記述している JSON オブジェクト",
+ "templateMonitorJSON": "監視対象",
+ "Remove the expiry notification": "有効期限の通知日を削除する",
+ "authInvalidToken": "無効なトークンです。",
+ "authIncorrectCreds": "無効なユーザー名かパスワードです。",
+ "self-hosted container": "セルフ・ホストのコンテナ",
+ "useRemoteBrowser": "リモート・ブラウザを使う",
+ "Add a Remote Browser": "リモート・ブラウザを追加する",
+ "remoteBrowserToggle": "デフォルトでは、Chromium は Uptime Kuma コンテナ内で実行されます。このスイッチを切り替えることで、リモート・ブラウザを使用できます。",
+ "Remote Browser not found!": "リモート・ブラウザがありません!",
+ "Select message type": "メッセージ・タイプを選択してください",
+ "Send to channel": "チャンネルに送信",
+ "Create new forum post": "新規フォーラムに投稿",
+ "needSignalAPI": "REST API に対応したシグナリング用のクライアントが必要です。",
+ "aboutIconURL": "「アイコン URL」に画像へのリンクを指定することで、デフォルトのプロフィール画像を上書きすることができます。「アイコン絵文字」が指定されている場合は使用されません。",
+ "octopushAPIKey": "コントロールパネルの HTTP API 認証情報にある「API キー」",
+ "2faEnabled": "二要素認証 (2FA) を有効にしました。",
+ "successAdded": "正常に追加されました。",
+ "successResumed": "正常に再開しました。",
+ "2faAlreadyEnabled": "二要素認証 (2FA) は、すでに有効になっています。",
+ "successDeleted": "正常に削除しました。",
+ "successPaused": "正常に一時停止しました。",
+ "successAuthChangePassword": "正常にパスワードを更新しました。",
+ "successEdited": "正常に編集できました。",
+ "successBackupRestored": "正常にバックアップから復元しました。",
+ "successEnabled": "正常に有効化しました。",
+ "tagNotFound": "タグが見つかりませんでした。",
+ "foundChromiumVersion": "Chromium/Chrome を見つけました。 Version: {0}",
+ "Select": "選択",
+ "Add a new expiry notification day": "有効期限の通知日を追加する",
+ "emailCustomSubject": "カスタム件名",
+ "emailTemplateMsg": "通知の内容",
+ "To Email": "Email へ",
+ "emailTemplateLimitedToUpDownNotification": "UP/DOWN 死活監視 (heartbeat) の場合のみ有効",
+ "deleteRemoteBrowserMessage": "本当にこのリモートブラウザをすべての監視から削除しますか?",
+ "Refresh Interval": "更新間隔",
+ "Refresh Interval Description": "ステータスページは {0} 秒ごとに全面更新されます",
+ "wayToGetLineChannelToken": "まず {0} にアクセスし、プロバイダーとチャネル(Messaging API)を作成します。次に、上記のメニューからアクセストークンとチャネルのユーザー ID を取得します。",
+ "aboutMattermostChannelName": "「チャンネル名」フィールドにチャンネル名を入力することで、Webhook から送信されるデフォルトのチャンネル名を上書きできます。これは Mattermost の Webhook 設定で有効にしておく必要があります。例 #other-channel",
+ "Saved.": "保存しました。",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "接続するサーバーのホスト名を入力するか、{local_mta} を使用する場合は {localhost} を入力します",
+ "e.g. {discordThreadID}": "例 {discordThreadID}",
+ "postToExistingThread": "既存のスレッド/フォーラムに投稿",
+ "forumPostName": "投稿先のフォーラム名",
+ "threadForumPostID": "投稿先のスレッド/フォーラム ID",
+ "whatHappensAtForumPost": "新規フォーラム投稿。既存の投稿がある場合は投稿しません。既存の投稿の中に投稿を作成するには「{option}」を使用してください",
+ "emailTemplateHeartbeatJSON": "死活監視 (heartbeat) を記述している JSON オブジェクト",
+ "leave blank for default subject": "空の場合はデフォルトの件名を使用します",
+ "cellsyntSplitLongMessages": "長文メッセージは最大 6 つに分割してください。153 x 6 = 918文字です。",
+ "Allow Long SMS": "ロングコード SMS を許可する",
+ "cellsyntDestination": "受信者の電話番号。00 に続けて国番号を付ける国際形式である必要があります。たとえば、英国の番号 07920 110 000 の場合は 00447920110000(合計17桁まで)になります。HTTP リクエストごとに指定できる受信者数は、カンマ区切りで最大 25,000 件です。",
+ "emailTemplateMonitorJSON": "監視対象を記述している JSON オブジェクト",
+ "successDisabled": "正常に無効化しました。",
+ "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "長期アクセストークンは、プロフィール名(左下)をクリックし、下にスクロールして「トークンを作成」をクリックすると作成できます。 ",
+ "Effective Date Range": "有効範囲(オプション)",
+ "DateTime Range": "日付範囲",
+ "Maintenance Time Window of a Day": "今日のメンテナンス時間のウィンドウ",
+ "octopushLogin": "コントロールパネルの HTTP API 認証情報にある「ログイン」",
+ "notificationRegional": "リージョナル(一部の地域のみ)",
+ "pushOthers": "その他",
+ "Host URL": "ホストURL",
+ "enableNSCD": "NSCD (Name Service Cache Daemon) を有効にして、すべての DNS クエリをキャッシュする",
+ "successKeywordExplanation": "成功としてカウントされる MQTT のキーワード",
+ "DockerHostRequired": "この監視の Docker ホストを設定してください。",
+ "noDockerHostMsg": "利用できません。Docker ホストを先にセットアップしてください。",
+ "styleElapsedTime": "経過時間を監視バーの下に表示",
+ "styleElapsedTimeShowNoLine": "表示(改行なし)",
+ "styleElapsedTimeShowWithLine": "表示(改行あり)",
+ "lastDay": "最終日",
+ "lastDay1": "月末",
+ "lastDay2": "月末の 2 日前",
+ "lastDay3": "月末の 3 日前",
+ "lastDay4": "月末の 4 日前",
+ "chromeExecutable": "Chrome/Chromium の実行ファイル",
+ "chromeExecutableDescription": "Docker を使用しており、Chromium がインストールされていない場合、インストールしてからテスト結果の表示するのに数分かかることがあります。1 GB の容量を必要とします。",
+ "jsonQueryDescription": "サーバーのJSONレスポンスから特定のデータを抽出するにはJSONクエリを使用してください。\"$\"で生のレスポンスが取得できます。抽出結果は文字列として期待結果と比較されます。ドキュメントについては{0}を参照し、クエリの検証には{1}を使用してください。",
+ "leave blank for default body": "空の場合はデフォルトの本文を使用します",
+ "apprise": "Apprise (50以上の通知サービスをサポートしています)",
+ "Apprise URL": "AppriseのURL",
+ "emailTemplateHostnameOrURL": "ホスト名/URL",
+ "emailCustomisableContent": "カスタマイズ可能なコンテンツ",
+ "emailCustomBody": "カスタム本文",
+ "emailTemplateServiceName": "サービス名",
+ "smtpLiquidIntroduction": "次の 2 つのテンプレート・フィールドは Liquid テンプレート言語で記述できます。これらの使い方は {0} にあります。以下は利用可能な変数です:",
+ "emailTemplateStatus": "ステータス",
+ "now": "現在",
+ "time ago": "{0}前",
+ "-year": "年",
+ "Json Query Expression": "Jsonクエリ表現",
+ "ignoredTLSError": "TLS/SSLエラーは無視されました",
+ "locally configured mail transfer agent": "独自設定されたメール転送エージェント",
+ "ignoreTLSErrorGeneral": "接続時のTLS/SSLエラーを無視する",
+ "successKeyword": "成功時のキーワード",
+ "pushViewCode": "Push モニターの使い方(コードを見る)",
+ "Reset Token": "トークンのリセット",
+ "templateLimitedToUpDownCertNotifications": "監視対象の UP/DOWN と証明書の有効期限通知でのみ利用可能",
+ "templateLimitedToUpDownNotifications": "監視対象の UP/DOWN の通知でのみ利用可能",
+ "webhookBodyPresetOption": "プリセット - {0}",
+ "Optional": "オプション",
+ "and": "かつ",
+ "From Email": "送信元メールアドレス",
+ "CurlDebugInfoProxiesUnsupported": "上記コマンド {curl} のProxyサポートは現在、実装されていません。",
+ "Your User ID": "あなたのユーザーID",
+ "programmingLanguages": "プログラミング言語",
+ "Debug": "デバッグ",
+ "Copy": "コピー",
+ "CopyToClipboardError": "クリップボードにコピーできません: {error}",
+ "CopyToClipboardSuccess": "コピーしました!",
+ "firewalls": "ファイアウォール",
+ "dns resolvers": "DNSリゾルバ",
+ "docker networks": "Dockerネットワーク",
+ "sameAsServerTimezone": "サーバーのタイムゾーンと同じ",
+ "cronExpression": "cron表記",
+ "invalidCronExpression": "不正なcron表記です: {0}",
+ "Single Maintenance Window": "単体メンテナンス・ウィンドウ",
+ "shrinkDatabaseDescriptionSqlite": "SQLiteデータベースで{vacuum}をトリガーしてください。{auto_vacuum}は既に有効化されていますが、これは{vacuum}コマンドが行うようなデータベースのデフラグメントや個々のデータベースページの再パックを行いません。",
+ "statusPageSpecialSlugDesc": "特別なスラッグ{0}:スラッグが指定されていない場合にこのページが表示されます",
+ "Automations can optionally be triggered in Home Assistant:": "オートメーションは Home Assistant を使って動作させることもできます:",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "次にアクションを選択します。例えば、RGB ライトが赤になるようにシーンを切り替えるなどです。",
+ "wayToGetDiscordThreadId": "スレッド/フォーラム投稿IDを取得する方法は、チャンネルIDを取得する方法に似ています。IDの取得方法について詳しくはこちらをご覧ください{0}",
+ "Recipients": "受信者",
+ "Channel access token (Long-lived)": "チャンネルアクセストークン(長期)",
+ "grpcMethodDescription": "メソッド名はsayHello、checkのようにキャメルケースに変換されます。",
+ "rabbitmqNodesRequired": "このモニターのノードを設定してください。",
+ "rabbitmqNodesInvalid": "RabbitMQノードには完全修飾('http'で始まる)URLを使用してください。",
+ "RabbitMQ Username": "RabbitMQユーザー名",
+ "RabbitMQ Password": "RabbitMQパスワード",
+ "SendGrid API Key": "SendGrid APIキー",
+ "pushoversounds pushover": "Pushover (デフォルト)",
+ "pushoversounds gamelan": "Gamelan",
+ "pushoversounds persistent": "Persistent (long)",
+ "wayToGetKookBotToken": "アプリケーション作成とボットトークンの取得はこちら: {0}",
+ "pushoverDesc1": "緊急優先度(2)を設定すると、リトライ中のタイムアウトはデフォルトで30秒に設定されます。また、1時間が経過すると再試行は行われなくなります。",
+ "octopushTypeLowCost": "Low Cost (低速 - 時々オペレーターにブロックされることがあります)",
+ "octopushLegacyHint": "Octopushの旧バージョン(2011-2020)を使用していますか?それとも新バージョンを使用していますか?",
+ "You can divide numbers with": "数字を次のキーワードで分割できます",
+ "goAlertInfo": "GoAlertはオンコールスケジューリング、自動エスカレーション、通知(SMSや音声通話など)を行うオープンソースのアプリケーションです。適切な人物を、適切な方法で、適切なタイミングで自動的に招集できます! {0}",
+ "Mention group": "メンション {group}",
+ "matrixDesc2": "新しいユーザーを作成し、自分のMatrixユーザーのアクセストークンを使用しないことを強く推奨します。アクセストークンを使用すると、アカウント自体や参加している全てのルームにフルアクセスできてしまいます。代わりに、新しいユーザーを作成して通知を受け取りたいルームにのみ招待してください。アクセストークンは{0}を実行すると取得できます。",
+ "aboutSlackUsername": "メッセージ送信者の表示名を変更します。誰かにメンションしたい場合は、そのメンションをモニター表示名に含めてください。",
+ "aboutChannelName": "Webhookチャンネルをバイパスしたい場合は「チャンネル名」フィールドにWebhookチャンネル名を入力してください。例:#other-channel",
+ "wayToGetPagerDutyKey": "キーを取得するには、サービス -> サービスディレクトリ -> (サービスを選択) -> インテグレーション -> インテグレーション と進み、「Events API V2」で検索してください。詳細情報はこちら: {0}",
+ "smseagleRecipient": "受信者(複数の場合はカンマで区切る)",
+ "smspartnerPhoneNumberHelptext": "番号は次のような国際形式で入力してください: {0}, {1}。複数の場合は{2}で区切ってください。",
+ "Server URL should not contain the nfty topic": "サーバーURLはntfyトピックを含むべきではありません",
+ "onebotSafetyTips": "安全のためにアクセストークンを設定してください",
+ "PushDeer Server": "PushDeerサーバー",
+ "pushDeerServerDescription": "公式サーバーを使用する場合は空白のままにしてください",
+ "apiKeyAddedMsg": "APIキーが追加されました。APIキーは再表示できないため、メモなどに保存してください。",
+ "wayToGetPagerTreeIntegrationURL": "PagerTreeでUptime Kumaインテグレーションを作成後、エンドポイントをコピーしてください。詳細は {0}",
+ "twilioAuthToken": "認証トークン/APIキーシークレット",
+ "Show Clickable Link Description": "チェックを入れると、このステータスページにアクセスできる全ての人がモニターURLにアクセスできるようになります。",
+ "Open Badge Generator": "オープンバッジの生成",
+ "Badge Generator": "{0}のバッジ生成",
+ "Badge Label Color": "バッジラベルの色",
+ "Badge Up Color": "Upを示すバッジの色",
+ "Badge Maintenance Color": "Maintenanceを示すバッジの色",
+ "monitorToastMessagesLabel": "モニターのトースト通知",
+ "monitorToastMessagesDescription": "モニターのトースト通知は、指定された秒数後に消えます。-1に設定するとタイムアウトが無効になり、0に設定するとトースト通知が無効になります。",
+ "Pick a SASL Mechanism...": "SASLメカニズムを選択してください",
+ "noGroupMonitorMsg": "利用できません。先にグループモニターを作成してください。",
+ "wayToGetFlashDutyKey": "チャンネル -> (チャンネルを選択) -> 統合 -> 新しい統合を追加 のページに移動し、「Uptime Kuma」を追加してプッシュアドレスを取得し、アドレス内の統合キーをコピーしてください。詳細はこちら:",
+ "cacheBusterParamDescription": "キャッシュをスキップするためにランダム生成したパラメータ",
+ "gamedigGuessPortDescription": "Valve Server Query Protocolで使用されるポートはクライアントポートとは異なる場合があります。モニターがサーバーに接続できない場合は、この設定を試してください。",
+ "receiverInfoSevenIO": "受信側番号がドイツの番号ではない場合、番号の前に国コードを追加する必要があります(例:アメリカの国コード1の場合は、017612121212の代わりに117612121212を使用します)。",
+ "wayToWriteWhapiRecipient": "電話番号には国コードが必要ですが、先頭のプラス記号は不要です({0})。連絡先IDの場合({1})、グループIDの場合({2})。",
+ "callMeBotGet": "{0}、{1}、および{2}のエンドポイントを生成できます。レート制限がかかる可能性があるため注意してください。レート制限は次のようになります: {3}",
+ "gtxMessagingFromHint": "携帯電話の受信者にはメッセージの送信者としてTPOAが表示されます。最大11文字の英数字、ショートコード、ローカルロングコード、または国際電話番号({e164}、{e212}、または{e214})が使用できます。",
+ "cellsyntOriginatortypeNumeric": "数値(最大15桁)で、先頭に00を付けない国際フォーマットの電話番号(例:イギリスの番号07920 110 000は447920110000として設定する必要があります)。受信者はメッセージに返信できます。",
+ "snmpCommunityStringHelptext": "この文字列はSNMP対応デバイスへの認証とアクセス制御用のパスワードとして機能します。SNMPデバイスの文字列設定と一致させてください。",
+ "snmpOIDHelptext": "センサーや監視したいステータス用のOIDを入力してください。OIDが不明な場合はMIBブラウザやSNMPソフトウェアなどのネットワーク管理ツールを使用してください。",
+ "threemaRecipientTypePhoneFormat": "E.164形式、先頭の+無し",
+ "threemaBasicModeInfo": "注記: このインテグレーションは、ベーシックモード(サーバーベースの暗号化)のThreema Gatewayを使用します。詳細は{0}",
+ "privateOnesenderDesc": "電話番号が有効であることを確認してください。プライベート電話番号にメッセージを送信するには次のように入力してください。例:628123456789",
+ "groupOnesenderDesc": "グループIDが有効であることを確認してください。グループIDにメッセージを送信するには次のように入力してください。例:628123456789-342345",
+ "Lost connection to the socket server.": "ソケットサーバーへのコネクションが切れました。",
+ "signl4Docs": "SIGNL4の設定方法やSIGNL4のWebhook URLを取得する方法の詳細は{0}で確認できます。",
+ "equals": "一致",
+ "contains": "含む",
+ "less than or equal to": "以下",
+ "Doorbell": "Doorbell",
+ "Custom sound to override default notification sound": "デフォルトの通知音を上書きするカスタムサウンド",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "即時通知はデバイスが「おやすみモード」の場合でも通知されます。",
+ "RabbitMQ Nodes": "RabbitMQ管理ノード",
+ "rabbitmqNodesDescription": "RabbitMQ管理ノードのURLを、プロトコルとポートを含めて入力してください。例: {0}",
+ "rabbitmqHelpText": "モニターを使用するには、RabbitMQの設定で管理プラグインを有効にする必要があります。詳細はこちら: {rabitmq_documentation}",
+ "pushoversounds bike": "Bike",
+ "pushoversounds bugle": "Bugle",
+ "pushoversounds cashregister": "Cash Register",
+ "pushoversounds classical": "Classical",
+ "pushoversounds cosmic": "Cosmic",
+ "pushoversounds falling": "Falling",
+ "pushoversounds incoming": "Incoming",
+ "pushoversounds magic": "Magic",
+ "pushoversounds mechanical": "Mechanical",
+ "pushoversounds pianobar": "Piano Bar",
+ "pushoversounds siren": "Siren",
+ "pushoversounds spacealarm": "Space Alarm",
+ "pushoversounds tugboat": "Tug Boat",
+ "pushoversounds alien": "Alien Alarm (long)",
+ "pushoversounds climb": "Climb (long)",
+ "pushoversounds echo": "Pushover Echo (long)",
+ "pushoversounds updown": "Up Down (long)",
+ "pushoversounds vibrate": "Vibrate Only",
+ "pushoversounds none": "None (silent)",
+ "wayToGetKookGuildID": "Kookの設定で「開発者モード」を有効にし、ギルドを右クリックしてIDを取得してください。",
+ "Guild ID": "ギルドID",
+ "pushoverDesc2": "別デバイスに通知を送信したい場合、「デバイス」フィールドに入力してください。",
+ "octopushTypePremium": "Premium (高速 - アラート用に推奨)",
+ "checkPrice": "{0}の料金:",
+ "Check octopush prices": "octopushの料金を確認してください: {0}",
+ "LunaSea Device ID": "LunaSeaデバイスID",
+ "Strategy": "戦略",
+ "Free Mobile User Identifier": "Free MobileユーザID",
+ "Free Mobile API Key": "Free Mobile APIキー",
+ "Proto Service Name": "Protoサービス名",
+ "Proto Method": "Protoメソッド",
+ "Proto Content": "Protoコンテンツ",
+ "high": "高",
+ "SendKey": "SendKey",
+ "SMSManager API Docs": "SMSManager APIドキュメント ",
+ "Base URL": "ベースURL",
+ "goAlertIntegrationKeyInfo": "サービスの汎用APIインテグレーションキーを「aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee」の形式で取得してください。通常、URLのトークンパラメータの値です。",
+ "TemplateCode": "テンプレートコード",
+ "SignName": "署名",
+ "Sms template must contain parameters: ": "SMSテンプレートは次のパラメータを含む必要があります: ",
+ "Bark API Version": "Bark APIバージョン",
+ "Bark Endpoint": "Barkエンドポイント",
+ "Bark Group": "Barkグループ",
+ "For safety, must use secret key": "安全のためにシークレットキーを使用する必要があります。",
+ "Mentioning": "メンション",
+ "Don't mention people": "メンションしない",
+ "Platform": "プラットフォーム",
+ "High": "高",
+ "promosmsTypeEco": "SMS ECO - 安価ですが低速で混雑 する場合があります。使用はポーランド在住の受信者に限られます。",
+ "promosmsTypeFlash": "SMS FLASH - メッセージは受信者のデバイスに自動的に表示されます。使用はポーランド在住の受信者に限られます。",
+ "promosmsTypeFull": "SMS FULL - SMSのプレミアム版です。送信者名を使用できます(名前を先に登録する必要があります)。アラート用途として信頼性があります。",
+ "promosmsTypeSpeed": "SMS SPEED - システム内の最も高い優先度を持ちます。非常に迅速で信頼性がありますが、コストは高くなります(SMS FULLの約2倍の料金)。",
+ "promosmsPhoneNumber": "電話番号 (Polishの受信者であればエリアコードを省略できます)",
+ "promosmsSMSSender": "SMS送信者名: 事前登録済みの名前、または次の既定値のいずれか(InfoSMS, SMS Info, MaxSMS, INFO, SMS)",
+ "Feishu WebHookUrl": "Feishu Webhook URL",
+ "matrixHomeserverURL": "ホームサーバーURL (http(s)://で始まり、オプションでポート番号を含む)",
+ "Internal Room Id": "内部ルームID",
+ "matrixDesc1": "内部ルームIDはルーム設定の詳細セクションでを確認でき、「!QMdRCpUIfLwsfjxye6:home.server」のような形式になっています。",
+ "aboutNotifyChannel": "チャンネル通知はメンバーの状態に関わらず、チャンネルの全てのメンバーに通知を送信します。",
+ "setup a new monitor group": "新しいモニターグループをセットアップ",
+ "openModalTo": "{0}へのモーダルを開く",
+ "Add a domain": "ドメインを追加",
+ "Remove domain": "ドメインの削除 '{0}'",
+ "signalImportant": "重要: 受信者にグループと番号を混在させることはできません!",
+ "aboutWebhooks": "Webhookに関する追加の情報はこちら: {0}",
+ "WeCom Bot Key": "WeCom Botキー",
+ "promosmsAllowLongSMS": "長いSMSメッセージを許可",
+ "alertaApiKey": "APIキー",
+ "Group": "グループ",
+ "smtpDkimDesc": "使用方法はNodemailer DKIMの{0}を参照してください。",
+ "documentation": "ドキュメント",
+ "smtpDkimKeySelector": "キーセレクター",
+ "smtpDkimPrivateKey": "プライベートキー",
+ "smtpDkimheaderFieldNames": "署名するヘッダーキー(オプション)",
+ "Integration Key": "Integrationキー",
+ "Integration URL": "Integration URL",
+ "Auto resolve or acknowledged": "Auto resolve または acknowledged",
+ "do nothing": "何もしない",
+ "auto acknowledged": "自動確認済み",
+ "auto resolve": "自動解決済み",
+ "alertaApiEndpoint": "APIエンドポイント",
+ "alertaEnvironment": "環境",
+ "alertaAlertState": "アラート状態",
+ "alertaRecoverState": "リカバリー状態",
+ "serwersmsAPIUser": "APIユーザ名 (webapi_ プレフィックスを含む)",
+ "serwersmsAPIPassword": "APIパスワード",
+ "serwersmsPhoneNumber": "電話番号",
+ "serwersmsSenderName": "SMS送信者名(カスタマーポータル経由で登録された)",
+ "smseagleTo": "電話番号",
+ "smseagleGroup": "電話帳グループ名",
+ "smseagleContact": "電話帳連絡先名",
+ "smseagleRecipientType": "受信者タイプ",
+ "smseagleToken": "APIアクセストークン",
+ "smseagleUrl": "SMSEagleデバイスURL",
+ "smseagleEncoding": "Unicodeで送信",
+ "smseaglePriority": "メッセージ優先度 (0-9, default = 0)",
+ "smspartnerApiurl": "APIキーはダッシュボードから確認できます: {0}",
+ "smspartnerPhoneNumber": "電話番号",
+ "smspartnerSenderName": "SMS送信者名",
+ "smspartnerSenderNameInfo": "3文字以上11文字以下の通常文字",
+ "Recipient Number": "受信者番号",
+ "From Name/Number": "送信者名/送信元番号",
+ "Leave blank to use a shared sender number.": "共有送信番号を使用する場合は空白のままにしてください。",
+ "Octopush API Version": "Octopush APIバージョン",
+ "Legacy Octopush-DM": "旧Octopush-DM",
+ "ntfy Topic": "ntfyトピック",
+ "onebotHttpAddress": "OneBot HTTPアドレス",
+ "onebotMessageType": "OneBotメッセージタイプ",
+ "onebotGroupMessage": "グループ",
+ "onebotPrivateMessage": "プライベート",
+ "onebotUserOrGroupId": "グループ/ユーザーID",
+ "PushDeer Key": "PushDeerキー",
+ "wayToGetClickSendSMSToken": "APIユーザー名とAPIキーは{0}から取得できます。",
+ "Custom Monitor Type": "カスタムモニタータイプ",
+ "Don't expire": "期限をつけない",
+ "Continue": "続ける",
+ "Add Another": "追加",
+ "apiKey-active": "アクティブ",
+ "apiKey-expired": "期限切れ",
+ "apiKey-inactive": "インアクティブ",
+ "pagertreeIntegrationUrl": "インテグレーションURL",
+ "pagertreeUrgency": "緊急度",
+ "pagertreeSilent": "サイレント",
+ "pagertreeLow": "低",
+ "pagertreeMedium": "中",
+ "pagertreeHigh": "高",
+ "pagertreeCritical": "クリティカル",
+ "pagertreeResolve": "自動解決",
+ "pagertreeDoNothing": "何もしない",
+ "lunaseaTarget": "ターゲット",
+ "lunaseaDeviceID": "デバイスID",
+ "lunaseaUserID": "ユーザーID",
+ "ntfyAuthenticationMethod": "認証方法",
+ "ntfyPriorityHelptextAllEvents": "全てのイベントは最大の優先度で送信されます。",
+ "ntfyPriorityHelptextAllExceptDown": "優先度が{1}に設定された{0}イベントを除く、全てのイベントは設定された優先度で送信されます。",
+ "ntfyUsernameAndPassword": "ユーザー名とパスワード",
+ "twilioAccountSID": "アカウントSID",
+ "twilioApiKey": "APIキー(オプション)",
+ "twilioFromNumber": "送信元番号",
+ "twilioToNumber": "送信先番号",
+ "Monitor Setting": "{0}のモニター設定",
+ "Show Clickable Link": "クリックできるリンクを表示",
+ "Badge Type": "バッジタイプ",
+ "Badge Duration (in hours)": "バッジ間隔(時間単位)",
+ "Badge Label": "バッジラベル",
+ "Badge Prefix": "バッジのプレフィックス",
+ "Badge Suffix": "バッジのサフィックス",
+ "Badge Color": "バッジの色",
+ "Badge Label Prefix": "バッジラベルのプリフィックス",
+ "Badge Preview": "バッジのプレビュー",
+ "Badge Label Suffix": "バッジラベルのサフィックス",
+ "Badge Pending Color": "Pendingを示すバッジの色",
+ "Badge Down Color": "Downを示すバッジの色",
+ "Badge Warn Color": "Warnを示すバッジの色",
+ "Badge Warn Days": "バッジをWarn表示にするまでの日数",
+ "Badge Down Days": "バッジをDown表示にするまでの日数",
+ "Badge Style": "バッジスタイル",
+ "Badge value (For Testing only.)": "バッジの値(テスト用)",
+ "Monitor Group": "モニターグループ",
+ "toastErrorTimeout": "エラー通知のタイムアウト",
+ "toastSuccessTimeout": "成功通知のタイムアウト",
+ "Kafka Brokers": "Kafkaブローカー",
+ "Enter the list of brokers": "ブローカーのリストを入力してください",
+ "Press Enter to add broker": "エンターを押してブローカーを追加してください",
+ "Kafka Topic Name": "Kafkaトピック名",
+ "Kafka Producer Message": "Kafka Producerのメッセージ",
+ "Enable Kafka SSL": "Kafka SSLを有効にする",
+ "Enable Kafka Producer Auto Topic Creation": "Kafka Producerのトピック自動生成を有効にする",
+ "Kafka SASL Options": "Kafka SASLオプション",
+ "Mechanism": "メカニズム",
+ "Authorization Identity": "認証ID",
+ "AccessKey Id": "アクセスキーID",
+ "Secret AccessKey": "シークレットアクセスキー",
+ "Session Token": "セッショントークン",
+ "Close": "閉じる",
+ "Request Body": "リクエストボディ",
+ "FlashDuty Severity": "重要度",
+ "nostrRelays": "Nostrリレー",
+ "nostrRelaysHelp": "1行につき1つのリレーURL",
+ "nostrSender": "送信者プライベートキー(nsec)",
+ "nostrRecipients": "受信者パブリックキー(npub)",
+ "nostrRecipientsHelp": "npubフォーマット、1行ごと",
+ "showCertificateExpiry": "証明書の有効期限を表示",
+ "noOrBadCertificate": "無効/不正証明書",
+ "cacheBusterParam": "{0}パラメータを追加する",
+ "gamedigGuessPort": "Gamedig: ポートを推測",
+ "Message format": "メッセージフォーマット",
+ "Send rich messages": "リッチメッセージを送信",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
+ "wayToGetBitrix24Webhook": "Webhookは次の手順で作成できます {0}",
+ "bitrix24SupportUserID": "Bitrix24のユーザIDを入力してください。ユーザIDはユーザプロファイルのリンクから取得できます。",
+ "authUserInactiveOrDeleted": "そのユーザーは非アクティブまたは削除されています。",
+ "apiKeySevenIO": "SevenIO APIキー",
+ "wayToGetWhapiUrlAndToken": "{0}から目的のチャンネルに入ることでAPI URLとトークンを取得できます。",
+ "whapiRecipient": "電話番号/連絡先ID/グループID",
+ "API URL": "API URL",
+ "wayToGetHeiiOnCallDetails": "Trigger IDとAPIキーの取得方法はこちら: {documentation}",
+ "documentationOf": "{0}のドキュメント",
+ "gtxMessagingApiKeyHint": "APIキーは次のページで確認できます: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "送信元番号/Transmission Path Originating Address (TPOA)",
+ "To Phone Number": "送信先電話番号",
+ "gtxMessagingToHint": "先頭に「+」を付けた国際フォーマット({e164}、{e212}、または{e214})",
+ "Originator type": "発信者タイプ",
+ "cellsyntOriginatortypeAlphanumeric": "英数字の文字列(最大11文字の英数字)。受信者はメッセージに返信できません。",
+ "Originator": "発信者",
+ "cellsyntOriginator": "受信者の携帯電話にメッセージの発信者として表示されます。許可される値と機能はoriginatortypeパラメータに依存します。",
+ "Destination": "送信先",
+ "Community String": "コミュニティー文字列",
+ "OID (Object Identifier)": "OID (Object ID)",
+ "max 11 alphanumeric characters": "最大11文字の英数字",
+ "SNMP Version": "SNMPバージョン",
+ "Please enter a valid OID.": "有効なOIDを入力してください。",
+ "wayToGetThreemaGateway": "Threema Gateway用に登録可能です: {0}",
+ "threemaRecipient": "受信者",
+ "threemaRecipientType": "受信タイプ",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8文字",
+ "threemaRecipientTypePhone": "電話番号",
+ "threemaRecipientTypeEmail": "メールアドレス",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaSenderIdentityFormat": "8文字、通常 * で始まります",
+ "threemaApiAuthenticationSecret": "Gateway-IDシークレット",
+ "apiKeysDisabledMsg": "認証が無効になっているため、APIキーは無効です。",
+ "Host Onesender": "Onesenderホスト",
+ "Token Onesender": "Onesenderトークン",
+ "Recipient Type": "受信タイプ",
+ "Private Number": "プライベート電話番号",
+ "Group ID": "グループID",
+ "wayToGetOnesenderUrlandToken": "OnesenderのWebサイトからURLとトークンを取得できます。詳細は{0}",
+ "Add Remote Browser": "リモートブラウザを追加",
+ "New Group": "新規グループ",
+ "Group Name": "グループ名",
+ "OAuth2: Client Credentials": "OAuth2: クライアントクレデンシャル",
+ "Authentication Method": "認証方法",
+ "Authorization Header": "認証ヘッダー",
+ "Form Data Body": "フォームデータボディ",
+ "OAuth Token URL": "OAuthトークンURL",
+ "Client ID": "クライントID",
+ "Client Secret": "クライアントシークレット",
+ "OAuth Scope": "OAuthスコープ",
+ "Optional: Space separated list of scopes": "オプション:スペースで区切られたスコープのリスト",
+ "Go back to home page.": "ホームページに戻る",
+ "No tags found.": "タグが見つかりません。",
+ "Cannot connect to the socket server.": "ソケットサーバに接続できません。",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "conditionAddGroup": "グループを追加",
+ "conditionDeleteGroup": "グループを削除",
+ "conditionValuePlaceholder": "値",
+ "Condition": "条件",
+ "Conditions": "条件",
+ "conditionAdd": "条件を追加",
+ "conditionDelete": "条件を削除",
+ "not equals": "不一致",
+ "not contains": "含まない",
+ "starts with": "から始まる",
+ "not starts with": "から始まらない",
+ "ends with": "で終わる",
+ "not ends with": "で終わらない",
+ "less than": "未満",
+ "greater than": "より大きい",
+ "greater than or equal to": "以上",
+ "record": "レコード",
+ "Notification Channel": "通知チャンネル",
+ "Sound": "サウンド",
+ "Alphanumerical string and hyphens only": "英数字とハイフンのみ",
+ "Arcade": "Arcade",
+ "Correct": "Correct",
+ "Fail": "Fail",
+ "Harp": "Harp",
+ "Reveal": "Reveal",
+ "Bubble": "Bubble",
+ "Flute": "Flute",
+ "Money": "Money",
+ "Scifi": "Scifi",
+ "Clear": "Clear",
+ "Elevator": "Elevator",
+ "Guitar": "Guitar",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "即時通知(iOSのみ)",
+ "From": "送信元",
+ "Can be found on:": "次の場所にあります: {0}",
+ "The phone number of the recipient in E.164 format.": "受信者の電話番号はE.164形式で入力してください。",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "返信を受け取るためには、テキスト送信者IDまたはE.164形式の電話番号のいずれかが必要です。",
+ "Separate multiple email addresses with commas": "メールアドレスが複数の場合はカンマで区切ってください。",
+ "aboutKumaURL": "Uptime KumaのURLフィールドを空白のままにすると、URLフィールドにはデフォルトでプロジェクトのGitHubページが設定されます。",
+ "smtpDkimHashAlgo": "ハッシュアルゴリズム(オプション )",
+ "smtpDkimskipFields": "署名しないヘッダーキー(オプション)",
+ "Key Added": "追加キー",
+ "Bark Sound": "Bark通知音",
+ "Badge URL": "バッジURL",
+ "pushoversounds intermission": "Intermission",
+ "telegramServerUrl": "(任意)サーバーUrl",
+ "telegramServerUrlDescription": "Telegramのボットapiの制限を解除したり、ブロックされた地域(中国、イランなど)でアクセスする。詳しくは {0} をクリックしてください。デフォルト: {1}",
+ "wayToWriteWahaChatId": "電話番号の先頭にプラス記号を付けない国際電話番号({0})、コンタクトID ({1})、またはグループID ({2}) 。WAHAセッションからこのチャットIDに通知が送信されます。",
+ "wahaSession": "セッション",
+ "wahaChatId": "チャットID(電話番号/連絡先ID/グループID)",
+ "wayToGetWahaApiUrl": "WAHAインスタンスのURL。",
+ "wayToGetWahaApiKey": "APIキーはWAHAを実行するために使用したWHATSAPP_API_KEY環境変数の値です。",
+ "wayToGetWahaSession": "このセッションから WAHA はチャット ID に通知を送信します。WAHAダッシュボードで確認できます。",
+ "YZJ Webhook URL": "YZJ ウェブフック URL",
+ "YZJ Robot Token": "YZJ ロボットトークン",
+ "Plain Text": "平文",
+ "Message Template": "メッセージテンプレート",
+ "Template Format": "テンプレート形式",
+ "templateServiceName": "サービス名",
+ "templateHostnameOrURL": "ホスト名またはURL",
+ "templateStatus": "ステータス",
+ "telegramUseTemplate": "カスタムメッセージテンプレートを使用",
+ "telegramUseTemplateDescription": "有効にすると、メッセージはカスタムテンプレートを使って送信されます。",
+ "telegramTemplateFormatDescription": "Telegramではメッセージに異なるマークアップ言語を使用することができます。詳細はTelegram {0} を参照してください。",
+ "Font Twemoji by Twitter licensed under": "TwemojiフォントはTwitterライセンス下でライセンスされています"
}
diff --git a/src/lang/ka.json b/src/lang/ka.json
index 2617e17c7..db4d89cf0 100644
--- a/src/lang/ka.json
+++ b/src/lang/ka.json
@@ -17,5 +17,6 @@
"List": "სია",
"Add": "დამატება",
"Add New Monitor": "ახალი მონიტორის დამატება",
- "Down": "დაბლა"
+ "Down": "დაბლა",
+ "setupDatabaseChooseDatabase": "რომელი მონაცემთა ბაზის გამოყენება გსურთ?"
}
diff --git a/src/lang/ko-KR.json b/src/lang/ko-KR.json
index b3671c80f..be43aad89 100644
--- a/src/lang/ko-KR.json
+++ b/src/lang/ko-KR.json
@@ -76,7 +76,7 @@
"Accepted Status Codes": "응답 성공 상태 코드",
"Save": "저장",
"Notifications": "알림",
- "Not available, please setup.": "존재하지 않아요, 새로운 거 하나 만드는 건 어때요?",
+ "Not available, please setup.": "존재하지 않아요. 새로운 거 하나 만드는 건 어때요?",
"Setup Notification": "알림 설정",
"Light": "화이트",
"Dark": "다크",
@@ -349,7 +349,6 @@
"Discard": "취소",
"Cancel": "취소",
"Powered by": "Powered by",
- "shrinkDatabaseDescription": "SQLite 데이터베이스 VACUUM을 트리거해요. 만약 데이터베이스가 1.10.0 버전 이후에 생성되었다면 AUTO_VACUUM이 설정되어 있어 이 작업은 필요 없을 거에요.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Usename (webapi_ 접두사 포함)",
"serwersmsAPIPassword": "API 비밀번호",
@@ -779,5 +778,61 @@
"Add a domain": "도메인 추가",
"Remove domain": "도메인 '{0}' 제거",
"Monitor Group": "모니터링 그룹",
- "Monitor Setting": "{0}의 모니터 설정"
+ "Monitor Setting": "{0}의 모니터 설정",
+ "now": "지금",
+ "time ago": "{0} 전",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "연결하려는 서버의 호스트 이름을 입력하거나 {local_mta}를 사용하려는 경우 {localhost}를 입력합니다",
+ "-year": "-연도",
+ "Json Query Expression": "Json 쿼리 표현식",
+ "Host URL": "호스트 URL",
+ "locally configured mail transfer agent": "로컬로 구성된 메일 전송 에이전트",
+ "ignoreTLSErrorGeneral": "연결에 TLS/SSL 오류 무시하기",
+ "ignoredTLSError": "TLS/SSL 오류가 무시되었습니다",
+ "liquidIntroduction": "템플릿 생성은 Liquid 템플릿 언어를 통해 이루어집니다. 사용 지침은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:",
+ "templateMsg": "알림 메시지",
+ "templateLimitedToUpDownCertNotifications": "업/다운/인증서 만료 알림에만 사용 가능",
+ "templateLimitedToUpDownNotifications": "UP/DOWN 알림에만 사용 가능",
+ "webhookBodyPresetOption": "프리셋 - {0}",
+ "successKeyword": "성공 키워드",
+ "successKeywordExplanation": "성공으로 간주되는 MQTT 키워드",
+ "Reset Token": "토큰 초기화",
+ "Check/Uncheck": "체크/체크 해제",
+ "pushViewCode": "푸시 모니터링는 어떻게 사용하나요? (코드 보기)",
+ "Search monitored sites": "모니터링중인 사이트 검색",
+ "templateHeartbeatJSON": "heartbeat를 설명하는 오브젝트",
+ "shrinkDatabaseDescriptionSqlite": "SQLite 데이터베이스에서 {vacuum} 명령을 실행해요. {auto_vacuum}이 이미 활성화되어 있지만, {auto_vacuum}은 {vacuum}이 하는 것처럼 데이터베이스를 조각 모음 하거나 페이지를 다시 압축하지는 않아요.",
+ "statusPageSpecialSlugDesc": "특별한 주소 {0}: 아무런 주소도 입력되지 않으면 이 페이지가 보여요",
+ "Add a new expiry notification day": "새 만료 알림 날짜 추가",
+ "Refresh Interval Description": "이 상태 페이지는 {0}초마다 완전 새로고침(F5) 돼요",
+ "telegramServerUrlDescription": "텔레그램 봇 API의 제한을 해제하거나, 차단된 지역(중국, 이란 등)에서 액세스하려면 {0}을 클릭하세요. 기본값: {1}",
+ "chromeExecutableDescription": "Docker 사용자의 경우, Chromium이 아직 설치되지 않았다면 이를 설치하고 테스트 결과를 표시하는 데 몇 분이 걸릴 수 있어요. 1GB의 디스크 공간을 사용해요.",
+ "templateMonitorJSON": "monitor를 설명하는 오브젝트",
+ "webhookBodyCustomOption": "커스텀 Body",
+ "telegramServerUrl": "(선택) 서버 URL",
+ "and": "그리고",
+ "emailCustomisableContent": "사용자 지정 가능한 콘텐츠",
+ "smtpLiquidIntroduction": "다음 두 개 필드는 Liquid 템플릿 언어를 통해 템플릿화할 수 있습니다. 사용 지침은 {0}을 참조하세요. 사용 가능한 변수는 다음과 같습니다:",
+ "leave blank for default subject": "기본값을 사용하려면 비워두세요",
+ "emailCustomBody": "커스텀 Body",
+ "leave blank for default body": "기본값을 사용하려면 비워두세요",
+ "templateServiceName": "서비스 이름",
+ "templateHostnameOrURL": "호스트명 또는 URL",
+ "templateStatus": "상태",
+ "selectedMonitorCount": "선택됨: {0}",
+ "Remove the expiry notification": "만료 알림 날짜 제거",
+ "Refresh Interval": "새로고침 주기",
+ "noDockerHostMsg": "사용할 수 없습니다. 먼저 도커 호스트를 설정하세요.",
+ "DockerHostRequired": "이 모니터링을 위한 도커 호스트를 설정해 주세요.",
+ "tailscalePingWarning": "Tailscale Ping 모니터링을 사용하려면 Docker 없이 Uptime Kuma를 설치하고 서버에 Tailscale 클라이언트도 설치해야 합니다.",
+ "telegramUseTemplate": "커스텀 메시지 템플릿 사용",
+ "telegramUseTemplateDescription": "활성화하면 메시지를 보낼 때 커스텀 템플릿을 사용해요.",
+ "telegramTemplateFormatDescription": "텔레그램은 메시지에 다양한 마크업 언어를 사용할 수 있어요. 자세한 내용은 텔레그램 {0}을 참조하세요.",
+ "RabbitMQ Username": "RabbitMQ 사용자명",
+ "RabbitMQ Password": "RabbitMQ 비밀번호",
+ "wahaSession": "세션",
+ "emailTemplateMsg": "알림 메시지",
+ "Select message type": "메시지 유형 선택",
+ "Send to channel": "채널로 전송",
+ "Create new forum post": "새 포럼 게시물 만들기",
+ "Your User ID": "사용자 ID"
}
diff --git a/src/lang/lt.json b/src/lang/lt.json
new file mode 100644
index 000000000..874927911
--- /dev/null
+++ b/src/lang/lt.json
@@ -0,0 +1,1072 @@
+{
+ "languageName": "Lietuvių",
+ "settingUpDatabaseMSG": "Vyksta duomenų bazės sąranka. Tai gali užtrukti, būkite kantrūs.",
+ "Settings": "Parametrai",
+ "Dashboard": "Skydelis",
+ "Help": "Pagalba",
+ "New Update": "Naujas atnaujinimas",
+ "Language": "Kalba",
+ "Appearance": "Išvaizda",
+ "General": "Bendra",
+ "Version": "Versija",
+ "List": "Sąrašas",
+ "Home": "Pradžia",
+ "Add": "Pridėti",
+ "Add New Monitor": "Pridėti naują stebėjimą",
+ "Quick Stats": "Greita statistika",
+ "Up": "Veikia",
+ "statusMaintenance": "Profilaktikos darbai",
+ "Unknown": "Nežinomas",
+ "Cannot connect to the socket server": "Nepavyksta prisijungti prie lizdo serverio",
+ "Reconnecting...": "Atkuriamas ryšys...",
+ "General Monitor Type": "Bendras stebėjimo tipas",
+ "Passive Monitor Type": "Pasyvus stebėjimo tipas",
+ "markdownSupported": "Palaikoma Markdown sintaksė",
+ "Pause": "Pristabdyti",
+ "Name": "Pavadinimas",
+ "Status": "Būsena",
+ "DateTime": "Data ir laikas",
+ "Message": "Žinutė",
+ "Resume": "Tęsti",
+ "Edit": "Redaguoti",
+ "Delete": "Ištrinti",
+ "Current": "Dabartinis",
+ "Uptime": "Veikimo trukmė",
+ "Cert Exp.": "Sertifikato baig.",
+ "day": "diena | dienos(-ų)",
+ "-day": "-dienų",
+ "hour": "valanda",
+ "-hour": "-valandos",
+ "Ping": "Ping",
+ "Monitor Type": "Stebėjimo tipas",
+ "Keyword": "Raktažodis",
+ "Invert Keyword": "Invertuoti raktažodį",
+ "Json Query": "Json užklausa",
+ "Friendly Name": "Draugiškas pavadinimas",
+ "URL": "URL adresas",
+ "locally configured mail transfer agent": "lokaliai sukonfigūruotas pašto perdavimo agentas",
+ "Request Timeout": "Užklausos trukmės limitas",
+ "timeoutAfter": "Trukmės limitas po {0} sekundžių",
+ "Retries": "Pakartotiniai bandymai",
+ "Heartbeat Retry Interval": "Patikros signalo kartojimo intervalas",
+ "Advanced": "Išplėstinis",
+ "checkEverySecond": "Tikrinti kas {0} sekundžių",
+ "retryCheckEverySecond": "Pakartotinai bandyti kas {0} sekundžių",
+ "resendEveryXTimes": "Pakartotinai siųsti kas {0} kartų",
+ "resendDisabled": "Pakartotinis siuntimas išjungtas",
+ "ignoreTLSError": "TLS/SSL klaidų ignoravimas HTTPS svetainėse",
+ "ignoreTLSErrorGeneral": "Ignoruoti TLS/SSL ryšio klaidą",
+ "upsideDownModeDescription": "Apversti būseną aukštyn kojomis. Jei paslauga yra pasiekiama, ji NEVEIKIA.",
+ "Upside Down Mode": "Apverstas režimas",
+ "Max. Redirects": "Maksimalūs peradresavimai",
+ "pushOptionalParams": "Neprivalomi parametrai: {0}",
+ "pushViewCode": "Kaip naudoti Push stebėjimą? (Žiūrėti kodą)",
+ "pushOthers": "Kiti",
+ "programmingLanguages": "Programavimo kalbos",
+ "Save": "Išsaugoti",
+ "Notifications": "Pranešimai",
+ "Not available, please setup.": "Nepasiekiama, prašome nustatyti.",
+ "Setup Notification": "Nustatyti pranešimą",
+ "Light": "Šviesus",
+ "Theme - Heartbeat Bar": "Tema - Heartbeat Bar",
+ "styleElapsedTime": "Praėjęs laikas po patikros signalo juosta",
+ "styleElapsedTimeShowNoLine": "Rodyti (be linijos)",
+ "styleElapsedTimeShowWithLine": "Rodyti (su linija)",
+ "Normal": "Normalus",
+ "Bottom": "Apačia",
+ "None": "Nėra",
+ "Search Engine Visibility": "Matomumas paieškos sistemose",
+ "Allow indexing": "Leisti indeksuoti",
+ "Change Password": "Keisti slaptažodį",
+ "Current Password": "Dabartinis slaptažodis",
+ "New Password": "Naujas slaptažodis",
+ "Repeat New Password": "Naujas slaptažodis",
+ "Disable Auth": "Išjungti autentifikavimą",
+ "Enable Auth": "Įjungti autentifikavimą",
+ "disableauth.message1": "Ar tikrai norite {disableAuth}?",
+ "setupDatabaseChooseDatabase": "Kurią duomenų bazę norėtumėte naudoti?",
+ "setupDatabaseMariaDB": "Prisijunkite prie išorinės MariaDB duomenų bazės. Reikia nustatyti duomenų bazės prisijungimo informaciją.",
+ "setupDatabaseSQLite": "Paprastas duomenų bazės failas, rekomenduojamas nedidelės apimties diegimui. Iki versijos 2.0.0, Uptime Kuma, kaip numatytąją duomenų bazę, naudojo SQLite.",
+ "setupDatabaseEmbeddedMariaDB": "Nereikia nieko nustatyti. Šiame Docker atvaizde MariaDB įdiegta ir sukonfigūruota automatiškai. Uptime Kuma prie šios duomenų bazės prisijungs per Unix lizdą.",
+ "dbName": "Duomenų bazės pavadinimas",
+ "Theme": "Tema",
+ "Game": "Žaidimas",
+ "Primary Base URL": "Pradinis bazės URL adresas",
+ "Check Update On GitHub": "Patikrinkite atnaujinimą GitHub",
+ "Down": "Neveikia",
+ "Pending": "Laukiama",
+ "Maintenance": "Profilaktikos darbai",
+ "Specific Monitor Type": "Konkretus stebėjimo tipas",
+ "pauseDashboardHome": "Pristabdyta",
+ "No important events": "Jokių svarbių įvykių",
+ "Monitor": "Stebėjimas | Stebėjimai",
+ "Response": "Atsakymas",
+ "Expected Value": "Tikėtina vertė",
+ "Hostname": "Pagrindinio kompiuterio vardas",
+ "Host URL": "Priimančiojo URL adresas",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Įveskite serverio, prie kurio norite prisijungti, pagrindinį kompiuterio vardą arba {localhost}, jei ketinate naudoti {local_mta}",
+ "Port": "Prievadas",
+ "Heartbeat Interval": "Patikros signalo intervalas",
+ "Resend Notification if Down X times consecutively": "Pakartotinis pranešimo siuntimas, jei neveikia X kartų iš eilės",
+ "retriesDescription": "Didžiausias pakartotinių bandymų skaičius, kol paslauga pažymėta, kaip neveikianti, ir išsiųstas pranešimas",
+ "maxRedirectDescription": "Didžiausias galimų nukreipimų skaičius. Nustatykite 0, jei norite išjungti nukreipimus.",
+ "Accepted Status Codes": "Priimtini būsenos kodai",
+ "Push URL": "Push URL adresas",
+ "needPushEvery": "Šį URL adresą turėtumėte iškviesti kas {0} sekundžių.",
+ "Dark": "Tamsus",
+ "Auto": "Automatinis",
+ "Timezone": "Laiko juosta",
+ "Discourage search engines from indexing site": "Neskatinti paieškos sistemų indeksuoti svetainę",
+ "Update Password": "Atnaujinti slaptažodį",
+ "disable authentication": "išjungti autentifikavimą",
+ "where you intend to implement third-party authentication": "kur ketinate įdiegti trečiosios šalies autentifikavimą",
+ "Please use this option carefully!": "Atsargiai naudokite šią parinktį!",
+ "Logout": "Atsijungti",
+ "Leave": "Palikti",
+ "Confirm": "Patvirtinti",
+ "Yes": "Taip",
+ "No": "Ne",
+ "Password": "Slaptažodis",
+ "Remember me": "Prisiminti mane",
+ "Login": "Prisijungti",
+ "add one": "pridėti vieną",
+ "Notification Type": "Pranešimo tipas",
+ "Email": "El. paštas",
+ "Test": "Testas",
+ "Resolver Server": "Resolverio serveris",
+ "Last Result": "Paskutinis rezultatas",
+ "Create your admin account": "Susikurkite administratoriaus paskyrą",
+ "Repeat Password": "Pakartoti slaptažodį",
+ "Export Backup": "Eksportuoti atsarginę kopiją",
+ "Export": "Eksportuoti",
+ "Import": "Importuoti",
+ "respTime": "Reakcijos laikas (ms)",
+ "notAvailableShort": "N/A",
+ "Create": "Sukurti",
+ "Clear Data": "Išvalyti duomenis",
+ "Events": "Įvykiai",
+ "Heartbeats": "Patikros signalai",
+ "Affected Monitors": "Paveikti stebėjimai",
+ "Pick Affected Monitors...": "Pasirinkite paveiktus stebėjimus…",
+ "All Status Pages": "Visi būsenų puslapiai",
+ "alertWrongFileType": "Pasirinkite JSON failą.",
+ "Clear all statistics": "Pravalyti visą statistiką",
+ "Overwrite": "Perrašyti",
+ "Options": "Parinktys",
+ "Keep both": "Palikti abu",
+ "Verify Token": "Paikrinti žetoną",
+ "Enable 2FA": "Įjungti 2FA",
+ "Disable 2FA": "Išjungti 2FA",
+ "2FA Settings": "2FA nustatymai",
+ "filterActive": "Aktyvus",
+ "filterActivePaused": "Sustabdytas",
+ "Active": "Aktyvus",
+ "Inactive": "Neaktyvus",
+ "Token": "Prieigos raktas",
+ "Show URI": "Rodyti URL",
+ "Tags": "Žymės",
+ "Add New Tag": "Pridėti naują žymą",
+ "Add New below or Select...": "Pridėti naują žemiau arba pasirinkti…",
+ "color": "Spalva",
+ "value (optional)": "reikšmė (pasirinktinai)",
+ "Gray": "Pilka",
+ "Red": "Raudona",
+ "Green": "Žalia",
+ "Blue": "Mėlyna",
+ "Indigo": "Indigo",
+ "Purple": "Violetinė",
+ "Custom": "Pasirinktina",
+ "Search monitored sites": "Stebimų svetainių paieška",
+ "Avg. Ping": "Vidutinis Ping",
+ "Entry Page": "Puslapis įėjus",
+ "statusPageRefreshIn": "Perkrauti per: {0}",
+ "No Services": "Paslaugų nėra",
+ "All Systems Operational": "Visos sistemos veikia",
+ "Partially Degraded Service": "Dalinai pablogėjusi paslauga",
+ "Degraded Service": "Pablogėjusi paslauga",
+ "Add Group": "Pridėti grupę",
+ "Add a monitor": "Pridėti monitorių",
+ "Edit Status Page": "Redaguoti būsenos puslapį",
+ "Status Page": "Būsenos puslapis",
+ "here": "čia",
+ "Required": "Privaloma",
+ "Post URL": "Įrašo URL",
+ "Content Type": "Turinio tipas",
+ "disableauth.message2": "Jis skirtas scenarijams {intendThirdPartyAuth} priešais Uptime Kuma, pavyzdžiui, Cloudflare Access, Authelia ar kitus autentifikavimo mechanizmus.",
+ "I understand, please disable": "Aš suprantu, prašau išjungti",
+ "Username": "Vartotojo vardas",
+ "No Monitors, please": "Prašome jokių stebėjimų",
+ "Certificate Info": "Sertifikato informacija",
+ "Resource Record Type": "Išteklių įrašo tipas",
+ "Import Backup": "Importuoti atsarginę kopiją",
+ "Default enabled": "Pagal nutylėjimą įjungta",
+ "Apply on all existing monitors": "Taikyti visiems esamiems stebėjimams",
+ "Auto Get": "Automatinis gavimas",
+ "Schedule maintenance": "Planuoti profilaktikos priežiūrą",
+ "Start of maintenance": "Profilaktikos pradžia",
+ "Select status pages...": "Pasirinkite būsenos puslapius…",
+ "alertNoFile": "Pasirinkite importuojamą failą.",
+ "Skip existing": "Praleisti esamus",
+ "Setup 2FA": "Nustatyti 2FA",
+ "Two Factor Authentication": "Dviejų veiksnių autentifikavimas",
+ "Tag with this name already exist.": "Žyma tokiu pavadinimu jau egzistuoja.",
+ "Tag with this value already exist.": "Žyma tokia reikšme jau egzistuoja.",
+ "Orange": "Oranžinė",
+ "Pink": "Rožinė",
+ "Search...": "Ieškoti…",
+ "Avg. Response": "Vidutinė reakcija",
+ "statusPageNothing": "Čia nieko nėra, pridėkite grupę arba stebėjimą.",
+ "Go to Dashboard": "Eiti į skydelį",
+ "Status Pages": "Būsenos puslapiai",
+ "defaultNotificationName": "Mano {notification} pranešimas ({number})",
+ "Server URL": "Serverio URL",
+ "Method": "Metodas",
+ "appriseInstalled": "Apprise yra įdiegtas.",
+ "Current User": "Dabartinis vartotojas",
+ "Style": "Stilius",
+ "Switch to Light Theme": "Pereiti į šviesią temą",
+ "Cancel": "Atšaukti",
+ "Learn More": "Sužinoti Daugiau",
+ "Expiry": "Galiojimas",
+ "apiKeyAddedMsg": "Jūsų API raktas buvo pridėtas. Įsidėmėkite jį, nes jis daugiau nebus rodomas.",
+ "or": "arba",
+ "No Maintenance": "Nėra planuojamų darbų",
+ "Priority": "Prioritetas",
+ "appriseNotInstalled": "Apprise yra neįdiegtas. {0}",
+ "Body": "Turinys",
+ "PasswordsDoNotMatch": "Slaptažodžiai nesutampa.",
+ "records": "įrašai",
+ "One record": "Vienas įrašas",
+ "topic": "Tema",
+ "Info": "Info",
+ "Security": "Sauga",
+ "Steam API Key": "Steam API raktas",
+ "Shrink Database": "Sumažinti duomenų bazę",
+ "Default": "Numatytas",
+ "HTTP Options": "HTTP Nustatymai",
+ "Create Incident": "Sukurti Incidentą",
+ "Title": "Pavadinimas",
+ "Content": "Turinys",
+ "warning": "įspėjimas",
+ "info": "info",
+ "error": "klaida",
+ "primary": "pagrindinė",
+ "light": "šviesi",
+ "dark": "tamsi",
+ "Created": "Sukurta",
+ "Last Updated": "Atnaujinta",
+ "Switch to Dark Theme": "Pereiti į tamsią temą",
+ "Discard": "Atmesti",
+ "Select": "Pasirinkti",
+ "selectedMonitorCount": "Pasirinkta: {0}",
+ "recurringInterval": "Intervalas",
+ "Recurring": "Pasikartojantis",
+ "statusPageMaintenanceEndDate": "Pabaiga",
+ "pauseMaintenanceMsg": "Ar tikrai norite sustabdyti?",
+ "maintenanceStatus-under-maintenance": "Vykdomi profilaktikos darbai",
+ "maintenanceStatus-inactive": "Neaktyvus",
+ "maintenanceStatus-scheduled": "Suplanuotas",
+ "maintenanceStatus-ended": "Pabaigtas",
+ "maintenanceStatus-unknown": "Nežinoma",
+ "Body Encoding": "Turinio kodavimas",
+ "API Keys": "API Raktai",
+ "Expiry date": "Galiojimo data",
+ "Don't expire": "Nesibaigia galiojimo laikas",
+ "Continue": "Tęsti",
+ "Add Another": "Pridėti Kitą",
+ "Key Added": "Raktas Pridėtas",
+ "Add API Key": "Pridėti API Raktą",
+ "No API Keys": "Nėra API Raktų",
+ "apiKey-active": "Aktyvus",
+ "apiKey-expired": "Pasibaigęs",
+ "apiKey-inactive": "Neaktyvus",
+ "Expires": "Galioja",
+ "disableAPIKeyMsg": "Ar tikrai norite išjungti šį API raktą?",
+ "deleteAPIKeyMsg": "Ar tikrai norite ištrinti šį API raktą?",
+ "Generate": "Generuoti",
+ "now": "dabar",
+ "time ago": "prieš {0}",
+ "-year": "-metai",
+ "ignoredTLSError": "TLS/SSL klaidos buvo ignoruotos",
+ "Headers": "Antraštės",
+ "HeadersInvalidFormat": "Užklausos antraštės neteisingai pateiktos JSON formatu: ",
+ "shrinkDatabaseDescriptionSqlite": "Įvykdykite SQLite duomenų bazės {vacuum} komandą. {auto_vacuum} jau įjungtas, tačiau jis neperorganizuoja duomenų bazės ir nesupakuoja atskirų puslapių taip, kaip tai daro {vacuum} komanda.",
+ "Please read": "Prašome perskaityti",
+ "RabbitMQ Username": "RabbitMQ vartotojo vardas",
+ "RabbitMQ Password": "RabbitMQ slaptažodis",
+ "Telephone number": "Telefono numeris",
+ "chromeExecutableAutoDetect": "Aptikti automatiškai",
+ "Proxy Server": "Tarpinis serveris",
+ "Check/Uncheck": "Žymėti/atžymėti",
+ "PushDeer Server": "PushDeer serveris",
+ "Money": "Pinigai",
+ "confirmUninstallPlugin": "Ar tikrai norite pašalinti šį įskiepį?",
+ "Enable DNS Cache": "(Nebenaudojama) Įjungti DNS talpyklavimą HTTP(s) stebėjimams",
+ "Not running": "Nepaleistas",
+ "Reverse Proxy": "Atvirkštinis tarpinis serveris",
+ "Date Created": "Sukūrimo data",
+ "Refresh Interval Description": "Būsenos puslapis padarys pilną puslapio perkrovimą kas {0} sekundes(-ių)",
+ "API Key": "API raktas",
+ "emailTemplateMsg": "pranešimo žinutė",
+ "wayToGetDiscordURL": "Tai galite rasti nuėję į „Server Settings -> Integrations -> View Webhooks -> New Webhook“",
+ "dnsPortDescription": "DNS serverio prievadas. Numatytoji reikšmė – 53. Prievadą galite bet kada pakeisti.",
+ "pushoversounds cashregister": "Kasos aparatas",
+ "pushoversounds gamelan": "Gamelanas",
+ "apiCredentials": "API kredencialai",
+ "promosmsAllowLongSMS": "Leisti ilgas SMS žinutes",
+ "Uptime Kuma URL": "Uptime Kuma URL",
+ "Add a domain": "Pridėti naują domeną",
+ "serwersmsAPIPassword": "API slaptažodis",
+ "Browser Screenshot": "Naršyklės ekrano nuotrauka",
+ "gtxMessagingToHint": "Nacionalinis formatas, prasideda su „+“ ({e164}, {e212} arba {e214})",
+ "Private Number": "Privatus numeris",
+ "signedInDisp": "Prisijungta kaip {0}",
+ "wayToGetTelegramToken": "Jūs galite gauti prieigos raktą iš {0}.",
+ "Send to channel": "Siųsti į kanalą",
+ "e.g. {discordThreadID}": "pvz. {discordThreadID}",
+ "Notification Sound": "Pranešimo garsas",
+ "For safety, must use secret key": "Saugumo sumetimais būtina naudoti slaptąjį raktą",
+ "Group": "Grupė",
+ "Mechanism": "Mechanizmas",
+ "Group Name": "Grupės pavadinimas",
+ "clearDataOlderThan": "Saugote stebėjimo istorijos duomenis {0} dienų.",
+ "infiniteRetention": "Nustatykite 0, kad būtų begalinis saugojimas.",
+ "backupDescription3": "Jautrūs duomenys kaip pranešimams naudojami prieigos raktai yra įtraukti eksporto faile; prašome saugiai talpinti eksportą.",
+ "chromeExecutable": "Chrome/Chromium vykdomoji programa",
+ "certificationExpiryDescription": "HTTPS stebėjimai sukelia pranešimą, kai baigiasi TLS sertifikato galiojimo laikas:",
+ "trustProxyDescription": "Pasitikėkite „X-Forwarded-*“ antraštėmis. Jei norite gauti teisingą kliento IP adresą, o jūsų Uptime Kuma yra už tarpinio serverio, pavyzdžiui, Nginx arba Apache, turėtumėte įjungti šią funkciją.",
+ "Valid": "Galiojantis",
+ "No consecutive dashes": "Be iš eilės einančių brūkšnelių",
+ "statusPageSpecialSlugDesc": "Speciali nuorodos dalis {0}: šis puslapis bus rodomas, jei nuorodos dalis nenurodyta",
+ "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Esamas ryšys gali būti prarastas, jei šiuo metu jungiatės per Cloudflare tunelį. Ar tikrai norite jį sustabdyti? Įveskite savo dabartinį slaptažodį, kad patvirtintumėte.",
+ "RadiusCallingStationIdDescription": "Skambinančio įrenginio identifikatorius",
+ "There might be a typing error in the address.": "Adrese gali būti įvedimo klaida.",
+ "DockerHostRequired": "Prašome nustatyti Docker serverį šiam stebėjimui.",
+ "tailscalePingWarning": "Norėdami naudoti Tailscale Ping stebėjimą, turite įdiegti Uptime Kuma be Docker, taip pat įdiegti Tailscale klientą savo serveryje.",
+ "telegramServerUrlDescription": "Norėdami pašalinti Telegram bot API apribojimus arba gauti prieigą į blokuotas sritis (Kinija, Iranas ir kt.), spustelėkite {0} dėl daugiau informacijos. Pagal nutylėjimą: {1}",
+ "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Ilgalaikį prieigos raktą galite sukurti paspaudę savo profilio pavadinimą (apačioje kairėje), slinkę į apačią ir paspaudę „Sukurti raktą“. ",
+ "backupOutdatedWarning": "Pasenęs: Kadangi buvo pridėta daug naujų funkcijų ir šis atsarginių kopijų funkcionalumas nėra pilnai palaikomas, jis negali sukurti ar atkurti pilnos atsarginės kopijos.",
+ "chromeExecutableDescription": "Docker naudotojams, jei Chromium dar nėra įdiegtas, įdiegimas ir testo rezultatų rodymas gali užtrukti kelias minutes. Tai užima 1GB disko vietos.",
+ "smtpLiquidIntroduction": "Žemiau pateikti du laukai gali būti šablonizuojami naudojant Liquid šablonų kalbą. Prašome peržiūrėti {0} naudojimo instrukcijas. Štai prieinami kintamieji:",
+ "whatHappensAtForumPost": "Sukurti naują forumo įrašą. Tai NE skelbia žinučių esamame įraše. Norėdami skelbti esamame įraše, naudokite „{option}“",
+ "wayToCheckSignalURL": "Galite patikrinti šią nuorodą, kad pamatytumėte, kaip ją nustatyti:",
+ "wayToGetLineChannelToken": "Pirmiausia pasiekite {0}, sukurkite tiekėją ir kanalą (Žinučių API), tada iš aukščiau nurodytų meniu punktų galite gauti kanalo prieigos raktą ir vartotojo ID.",
+ "aboutMattermostChannelName": "Galite pakeisti numatytąjį kanalą, į kurį siunčiami pranešimai per Webhook, įvesdami kanalo pavadinimą lauke „Kanalo pavadinimas“. Tai turi būti įjungta Mattermost Webhook nustatymuose. Pvz.: #kitas-kanalas",
+ "resolverserverDescription": "Cloudflare yra numatytasis rezoliucijos serveris. Galite bet kada jį pakeisti.",
+ "enableDefaultNotificationDescription": "Šis pranešimas bus įjungtas numatytai naujiems stebėjimams. Vis dėlto galite jį atjungti kiekvienam stebėjimui atskirai.",
+ "confirmImportMsg": "Ar tikrai norite importuoti atsarginę kopiją? Prašome patvirtinti, kad pasirinkote teisingą importo parinktį.",
+ "keywordDescription": "Ieškoti raktažodžio paprastame HTML arba JSON atsakyme. Paieška yra jautri didžiosioms ir mažosioms raidėms.",
+ "jsonQueryDescription": "Išanalizuokite ir ištraukite konkrečius duomenis iš serverio JSON atsakymo, naudodami JSON užklausą arba naudokite \"$\" neapdorotam atsakymui, jei nesitikite JSON formato. Rezultatas vėliau lyginamas su tikėtina verte, kaip eilutėmis. Žr. {0} dokumentacijai ir naudokite {1} eksperimentavimui su užklausomis.",
+ "pushoversounds alien": "Svetimo signalo (ilgas)",
+ "apprise": "Apprise (palaiko daugiau nei 50 pranešimų paslaugų)",
+ "wayToGetKookGuildID": "Įjunkite „Kūrėjo režimą“ Kook nustatymuose ir dešiniuoju pelės mygtuku spustelėkite gildiją, kad gautumėte jos ID",
+ "octopushTypePremium": "Premium (greitas – rekomenduojamas įspėjimams)",
+ "octopushPhoneNumber": "Telefono numeris (tarptautiniu formatu, pvz.: +33612345678) ",
+ "SendGrid API Key": "SendGrid API raktas",
+ "conditionValuePlaceholder": "Reikšmė",
+ "Proto Service Name": "Proto paslaugos pavadinimas",
+ "goAlertInfo": "GoAlert yra atviro kodo programa, skirta nuolatinio budėjimo tvarkaraščio sudarymui, automatizuotam eskalavimui ir pranešimams (pvz., SMS arba balso skambučiams). Automatiškai susiekite tinkamą asmenį, tinkamu būdu ir tinkamu laiku! {0}",
+ "SecretKey": "SlaptasRaktas",
+ "promosmsTypeEco": "SMS ECO - pigus, bet lėtas ir dažnai perkrautas. Ribota tik Lenkijos gavėjams.",
+ "promosmsTypeFull": "SMS FULL - Aukštesnės klasės SMS paslauga. Galite naudoti savo siuntėjo vardą (pirmiausia reikia registruoti vardą). Patikima pranešimams.",
+ "promosmsSMSSender": "SMS siuntėjo vardas: iš anksto užregistruotas vardas arba vienas iš numatytųjų: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
+ "matrixDesc2": "Labai rekomenduojama sukurti naują vartotoją ir nenaudoti savo esamo Matrix vartotojo prieigos rakto, nes jis suteiks pilną prieigą prie jūsų paskyros ir visų kambarių, į kuriuos esate įstoję. Vietoj to, sukurkite naują vartotoją ir pakvieskite jį tik į tą kambarį, kuriame norite gauti pranešimus. Prieigos raktą galite gauti vykdydami {0}",
+ "Notify Channel": "Pranešimų kanalas",
+ "aboutNotifyChannel": "Pranešimų kanalas iššauks stacionaraus kompiuterio ir mobiliojo pranešimus visiems kanalo nariams, nepriklausomai nuo to, ar jie pažymėti kaip aktyvūs, ar ne.",
+ "wayToGetPagerDutyKey": "Gali gauti eidamas į Paslaugos → Paslaugų katalogas → (Pasirink paslaugą) → Integracijos → Pridėti integraciją. Čia gali ieškoti „Events API V2“. Daugiau informacijos {0}",
+ "smseagleContact": "Telefonų knygos kontakto vardas (-ai)",
+ "smseaglePriority": "Žinutės prioritetas (0-9, numatytasis = 0)",
+ "smspartnerPhoneNumberHelptext": "Numeris turi būti tarptautiniu formatu {0}, {1}. Daugelius numerius atskirk {2}",
+ "Server URL should not contain the nfty topic": "Serverio URL neturėtų turėti ntfy temos",
+ "wayToGetPagerTreeIntegrationURL": "Sukūrus Uptime Kuma integraciją PagerTree, nukopijuok Endpoint adresą. Išsamiau {0}",
+ "ntfyPriorityHelptextAllExceptDown": "Visi įvykiai siunčiami su šiuo prioritetu, išskyrus {0} įvykius, kurių prioritetas yra {1}",
+ "Badge Prefix": "Ženklo reikšmės prefiksas",
+ "Badge Label Suffix": "Ženklo etiketės sufiksas",
+ "Badge Maintenance Color": "Profilaktikos būsenos ženklo spalva",
+ "monitorToastMessagesDescription": "Iššokančios žinutės stebėjimams išnyksta po nurodyto laiko sekundėmis. Nustatykite -1, kad išjungtumėte laiko limitą, arba 0, kad išjungtumėte iššokančias žinutes.",
+ "Enable Kafka Producer Auto Topic Creation": "Įjungti automatinį Kafka gamintojo temų kūrimą",
+ "noGroupMonitorMsg": "Neprieinama. Pirmiausia sukurkite grupės stebėjimą.",
+ "wayToGetFlashDutyKey": "Galite eiti į „Kanalas -> (Pasirinkite kanalą) -> Integracijos -> Pridėti naują integraciją“ puslapį, pridėti „Uptime Kuma“, kad gautumėte push adresą, ir nukopijuoti integracijos raktą iš adreso. Daugiau informacijos rasite apsilankę",
+ "Plain Text": "Paprastas tekstas",
+ "Message Template": "Žinutės šablonas",
+ "Template Format": "Šablono formatas",
+ "webhookJsonDesc": "{0} tinka visiems šiuolaikiniams HTTP serveriams, tokiems kaip Express.js",
+ "webhookFormDataDesc": "{multipart} tinka PHP. JSON reikės analizuoti naudojant {decodeFunction}",
+ "webhookBodyPresetOption": "Išankstinis nustatymas - {0}",
+ "Application Token": "Programos prieigos raktas",
+ "templateMsg": "pranešimo žinutė",
+ "PushUrl": "Siuntimo URL",
+ "BodyInvalidFormat": "Užklausos turinys neteisingai pateiktas JSON formatu: ",
+ "Reset Token": "Atstatyti prieigos raktą",
+ "Done": "Baigta",
+ "recent": "Naujausi",
+ "critical": "kritinė",
+ "Pick Accepted Status Codes...": "Pasirinkite priimtinus būsenos kodus…",
+ "Pick a RR-Type...": "Pasirinkite RR tipą…",
+ "successKeywordExplanation": "MQTT raktažodis, kuris bus laikomas sėkmingu",
+ "successKeyword": "Sėkmės raktažodis",
+ "topicExplanation": "Stebimas MQTT kanalas",
+ "steamApiKeyDescription": "Steam žaidimų serverio stebėjimui reikalingas Steam Web-API raktas. Užregistruoti savo API raktą galite čia: ",
+ "Monitor History": "Stebėjimo istorija",
+ "Post": "Paskelbti",
+ "danger": "pavojus",
+ "and": "ir",
+ "Proxy Protocol": "Tarpinio serverio protokolas",
+ "YZJ Webhook URL": "YZJ Webhook URL adresas",
+ "YZJ Robot Token": "YZJ Robot prieigos raktas",
+ "telegramServerUrl": "(Pasirinktinai) Serverio URL",
+ "dayOfWeek": "Savaitės diena",
+ "dayOfMonth": "Mėnesio diena",
+ "cronSchedule": "Tvarkaraštis: ",
+ "cronExpression": "Cron išraiška",
+ "weekdayShortMon": "Pir",
+ "weekdayShortTue": "Ant",
+ "weekdayShortWed": "Tre",
+ "weekdayShortThu": "Ket",
+ "weekdayShortFri": "Pen",
+ "weekdayShortSat": "Šeš",
+ "weekdayShortSun": "Sek",
+ "invalidCronExpression": "Neteisinga Cron išraiška: {0}",
+ "lastDay": "Paskutinė diena",
+ "lastDay1": "Paskutinė mėnesio diena",
+ "YOUR BOT TOKEN HERE": "JŪSŲ BOTO PRIEIGOS RAKTAS ČIA",
+ "default: notify all devices": "numatyta: pranešti visiems įrenginiams",
+ "wayToGetLineNotifyToken": "Jūs galite gauti prieigos raktą iš {0}",
+ "startDateTime": "Pradžios data/laikas",
+ "endDateTime": "Pabaigos data/laikas",
+ "chatIDNotFound": "Nepavyko rasti pokalbio ID; pirmiausia išsiųskite žinutę šiam bot'ui",
+ "disableCloudflaredNoAuthMsg": "Jūs esate režime be autentifikacijos, slaptažodis nereikalingas.",
+ "Long-Lived Access Token": "Ilgalaikis prieigos raktas",
+ "Notification Service": "Pranešimų paslauga",
+ "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Pranešimų paslaugų sąrašą rasite Home Assistant skiltyje „Kūrėjo įrankiai > Paslaugos“, ieškodami žodžio „notification“, kad rastumėte savo įrenginio/telefono pavadinimą.",
+ "Home Assistant URL": "Home Assistant URL",
+ "Automations can optionally be triggered in Home Assistant:": "Automatizacijas galima pasirinktinai paleisti Home Assistant sistemoje:",
+ "Trigger type:": "Paleidimo tipas:",
+ "Event type:": "Įvykio tipas:",
+ "Event data:": "Įvykio duomenys:",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "Tada pasirinkite veiksmą, pavyzdžiui, pakeiskite sceną į tą, kur RGB šviesa yra raudona.",
+ "Frontend Version": "Priekinės dalies versija",
+ "Frontend Version do not match backend version!": "Priekinės dalies versija nesutampa su galinės dalies versija!",
+ "backupRecommend": "Prašome atsarginę kopiją daryti tiesiogiai iš skaidinio arba duomenų aplanko (./data/).",
+ "Optional": "Pasirinktinai",
+ "sameAsServerTimezone": "Tokia pati kaip serverio laiko juosta",
+ "strategyManual": "Rankiniu būdu aktyvuojamas/neaktyvuojamas",
+ "warningTimezone": "Naudojama serverio laiko juosta",
+ "install": "Įdiegti",
+ "installing": "diegiama",
+ "uninstall": "Pašalinti",
+ "uninstalling": "Šalinama",
+ "lastDay2": "Antra paskutinė mėnesio diena",
+ "lastDay3": "Trečia paskutinė mėnesio diena",
+ "lastDay4": "Ketvirta paskutinė mėnesio diena",
+ "Display Timezone": "Rodoma laiko zona",
+ "Server Timezone": "Serverio laiko zona",
+ "IconUrl": "Piktogramos URL",
+ "Enable": "Įjungti",
+ "Disable": "Išjungti",
+ "plugin": "Įskiepis | Įskiepiai",
+ "Clone": "Klonuoti",
+ "cloneOf": "{0} klonas",
+ "smtp": "El. paštas (SMTP)",
+ "Schedule Maintenance": "Suplanuoti profilaktikos darbus",
+ "Edit Maintenance": "Redaguoti profilaktiką",
+ "Date and Time": "Data ir laikas",
+ "Clone Monitor": "Klonuoti stebėjimą",
+ "notificationRegional": "Regioninis",
+ "enableNSCD": "Įjungti NSCD (Name Service Cache Daemon) visų DNS užklausų talpyklavimui",
+ "dnsCacheDescription": "Gali neveikti kai kuriose IPv6 aplinkose, išjunkite, jei susiduriate su problemomis.",
+ "Single Maintenance Window": "Vienas profilaktikos langas",
+ "Maintenance Time Window of a Day": "Profilaktikos laiko langas per dieną",
+ "Effective Date Range": "Galiojimo datos intervalas (pasirinktinai)",
+ "DateTime Range": "Datos ir laiko intervalas",
+ "loadingError": "Nepavyko gauti duomenų, prašome bandyti vėliau.",
+ "secureOptionNone": "Nėra / STARTTLS (25, 587)",
+ "secureOptionTLS": "TLS (465)",
+ "From Email": "Siuntėjo el. paštas",
+ "Ignore TLS Error": "Ignoruoti TLS klaidą",
+ "leave blank for default subject": "palikite tuščią numatytai temai",
+ "emailCustomisableContent": "Pritaikomas turinys",
+ "emailCustomSubject": "Pasirinktina tema",
+ "emailCustomBody": "Pasirinktinas turinys",
+ "leave blank for default body": "Palikite tuščią, jei norite naudoti numatytąjį turinį",
+ "emailTemplateMonitorJSON": "objektas, apibūdinantis stebėjimą",
+ "To Email": "Gavėjo el. paštas",
+ "Bot Display Name": "Bot'o rodomas vardas",
+ "emailTemplateHeartbeatJSON": "objektas, apibūdinantis patikros signalą",
+ "emailTemplateLimitedToUpDownNotification": "Prieinamas tik VEIKIA/NEVEIKIA patikros signalams, kitu atveju – null",
+ "smtpCC": "CC",
+ "Discord Webhook URL": "Discord Webhook URL adresas",
+ "Prefix Custom Message": "Priešdėlis pasirinktinam pranešimui",
+ "Hello @everyone is...": "Sveiki, {'@'}everyone yra…",
+ "Select message type": "Pasirinkite pranešimo tipą",
+ "postToExistingThread": "Skelbti esamoje temoje / forumo įraše",
+ "Create new forum post": "Sukurti naują forumo įrašą",
+ "forumPostName": "Forumo įrašo pavadinimas",
+ "threadForumPostID": "Temos / forumo įrašo ID",
+ "wayToGetDiscordThreadId": "Gauti temos / forumo įrašo ID yra panašu į kanalo ID gavimą. Plačiau apie ID gavimą rasite {0}",
+ "wayToGetTeamsURL": "Galite sužinoti, kaip sukurti webhook URL {0}.",
+ "Access Token": "Prieigos raktas",
+ "Channel access token": "Kanalo prieigos raktas",
+ "Icon URL": "Piktogramos URL",
+ "Basic Settings": "Baziniai nustatymai",
+ "User ID": "Vartotojo ID",
+ "Your User ID": "Jūsų vartotojo ID",
+ "deleteMonitorMsg": "Ar tikrai norite ištrinti šį stebėjimą?",
+ "wayToGetZohoCliqURL": "Galite sužinoti, kaip sukurti webhook URL {0}.",
+ "needSignalAPI": "Turite turėti Signal klientą su REST API.",
+ "Number": "Numeris",
+ "Recipients": "Gavėjai",
+ "Channel access token (Long-lived)": "Kanalo prieigos raktas (ilgalaikis)",
+ "Line Developers Console": "Line kūrėjų konsolė",
+ "lineDevConsoleTo": "Line kūrėjų konsolė - {0}",
+ "Messaging API": "Žinučių API",
+ "aboutIconURL": "Galite nurodyti nuorodą į paveikslėlį lauke „Piktogramos URL“, kad pakeistumėte numatytąjį profilio paveikslėlį. Jei nustatytas piktogramos jaustukas, jis nebus naudojamas.",
+ "dataRetentionTimeError": "Laikymo periodas turi būti 0 arba didesnis",
+ "confirmDeleteTagMsg": "Ar tikrai norite ištrinti šią žymą? Stebėjimai, susieti su šia žyma, nebus ištrinti.",
+ "enableGRPCTls": "Leisti siųsti gRPC užklausas per TLS ryšį",
+ "grpcMethodDescription": "Metodo pavadinimas konvertuojamas į camelCase formatą, pvz., sakytiLabas, tikrinti ir pan.",
+ "acceptedStatusCodesDescription": "Pasirinkite būsenos kodus, kurie laikomi sėkmingu atsaku.",
+ "twoFAVerifyLabel": "Įveskite savo prieigos kodą 2FA patvirtinti:",
+ "confirmEnableTwoFAMsg": "Ar Jūs norite įjungti 2FA?",
+ "confirmDisableTwoFAMsg": "Ar Jūs norite išjungti 2FA?",
+ "promosmsPassword": "API slaptažodis",
+ "promosmsLogin": "API prisijungimo vardas",
+ "pushoversounds bike": "Dviratis",
+ "pushoversounds classical": "Klasika",
+ "backupDescription": "Jūs galite pasidaryti visų stebėjimų ir pranešimų kopijas JSON formatu.",
+ "notificationDescription": "Kad pranešimai veiktų, jie turi būti priskirti stebėjimui.",
+ "deleteMaintenanceMsg": "Ar tikrai norite ištrinti šią profilaktiką?",
+ "deleteNotificationMsg": "Ar tikrai norite ištrinti šį pranešimą visiems stebėjimams?",
+ "rrtypeDescription": "Pasirinkite RR tipą, kurį norite stebėti",
+ "pauseMonitorMsg": "Ar tikrai norite pristabdyti?",
+ "clearEventsMsg": "Ar tikrai norite ištrinti visus įvykius šiam stebėjimui?",
+ "clearHeartbeatsMsg": "Ar tikrai norite ištrinti visus patikros signalus šiam stebėjimui?",
+ "confirmClearStatisticsMsg": "Ar tikrai norite ištrinti VISAS statistikas?",
+ "importHandleDescription": "Pasirinkite „Praleisti esamus“, jei norite praleisti kiekvieną stebėjimą ar pranešimą su tuo pačiu pavadinimu. „Perrašyti“ ištrins visus esamus stebėjimus ir pranešimus.",
+ "tokenValidSettingsMsg": "Prieigos kodas yra galiojantis! Dabar galite išsaugoti 2FA nustatymus.",
+ "recurringIntervalMessage": "Vykdyti kartą per dieną | Vykdyti kartą kas {0} dienas",
+ "affectedMonitorsDescription": "Pasirinkite stebėjimus, kuriuos paveikė dabartinė profilaktika",
+ "affectedStatusPages": "Rodyti šį profilaktikos pranešimą pasirinktuose būsenos puslapiuose",
+ "atLeastOneMonitor": "Pasirinkite bent vieną paveiktą stebėjimą",
+ "passwordNotMatchMsg": "Pakartotas slaptažodis nesutampa.",
+ "backupDescription2": "Pastaba: istorija ir įvykių duomenys neįtraukti.",
+ "endpoint": "galinis taškas",
+ "octopushAPIKey": "„API key“ iš HTTP API prisijungimo duomenų valdymo skydelyje",
+ "octopushLogin": "„Login“ iš HTTP API prisijungimo duomenų valdymo skydelyje",
+ "pushoversounds pushover": "Pushover (numatyta)",
+ "pushoversounds bugle": "Bugle",
+ "pushoversounds cosmic": "Kosminis",
+ "pushoversounds falling": "Kritantis",
+ "pushoversounds siren": "Sirena",
+ "Device": "Įrenginys",
+ "SMS Type": "SMS tipas",
+ "Strategy": "Strategija",
+ "Status:": "Būsena: {0}",
+ "Enable TLS": "Įjungti TLS",
+ "pushyToken": "Įrenginio prieigos raktas",
+ "User Key": "Vartotojo raktas",
+ "Message Title": "Žinutės tema",
+ "Apprise URL": "Apprise URL adresas",
+ "pushoversounds incoming": "Gaunamas",
+ "pushoversounds intermission": "Pertrauka",
+ "pushoversounds magic": "Magija",
+ "pushoversounds mechanical": "Mechaninis",
+ "pushoversounds pianobar": "Pianino klavišas",
+ "pushoversounds spacealarm": "Erdvinis signalas",
+ "pushoversounds tugboat": "Traukimo laivas",
+ "pushoversounds persistent": "Pastovus (ilgas)",
+ "pushoversounds echo": "Pushover Echo (ilgas)",
+ "pushoversounds updown": "Up Down (ilgas)",
+ "pushoversounds vibrate": "Tik vibracija",
+ "pushoversounds none": "Nėra (tylus)",
+ "pushyAPIKey": "Slaptas API raktas",
+ "GoogleChat": "Google Chat (tik Google Workspace)",
+ "wayToGetKookBotToken": "Sukurkite programą ir gaukite savo bot'o raktą adresu {0}",
+ "Guild ID": "Gildijos ID",
+ "More info on:": "Daugiau informacijos: {0}",
+ "pushoverDesc1": "Avarinis prioritetas (2) turi numatytą 30 sekundžių tarp bandymų laiko limitą ir pasibaigs po 1 valandos.",
+ "pushoverDesc2": "Jei norite siųsti pranešimus skirtingiems įrenginiams, užpildykite lauką „Įrenginys“.",
+ "pushoverMessageTtl": "Žinutės TTL (sekundės)",
+ "octopushTypeLowCost": "Low Cost (lėtas – kartais blokuoja operatorius)",
+ "checkPrice": "Patikrinkite {0} kainas:",
+ "octopushLegacyHint": "Ar naudojate senąją Octopush versiją (2011-2020) ar naująją?",
+ "Check octopush prices": "Patikrinkite Octopush kainas {0}.",
+ "octopushSMSSender": "SMS siuntėjo vardas: 3-11 simbolių (raidės, skaičiai ir tarpas) (a-zA-Z0-9)",
+ "LunaSea Device ID": "LunaSea įrenginio ID",
+ "Example:": "Pavyzdys: {0}",
+ "Read more:": "Plačiau: {0}",
+ "Free Mobile User Identifier": "Free Mobile vartotojo identifikatorius",
+ "Free Mobile API Key": "Free Mobile API raktas",
+ "Proto Method": "Proto metodas",
+ "Proto Content": "Proto turinys",
+ "Lowcost": "Mažai kainuojantis",
+ "Economy": "Ekonomiškas",
+ "Retry": "Pakartojimų skaičius",
+ "Topic": "Tema",
+ "Platform": "Platforma",
+ "Channel Name": "Kanalo pavadinimas",
+ "WebHookUrl": "WebHookUrl",
+ "Don't mention people": "Neminėti žmonių",
+ "Mention group": "Paminėti {group}",
+ "Device Token": "Įrenginio prieigos raktas",
+ "Huawei": "Huawei",
+ "Proxy server has authentication": "Tarpinis serveris reikalauja autentifikacijos",
+ "Setup Proxy": "Nustatyti tarpinį serverį",
+ "Base URL": "Bazinis URL",
+ "high": "aukštas",
+ "SMSManager API Docs": "SMSManager API dokumentacija ",
+ "SendKey": "SendKey",
+ "Gateway Type": "Šliuzo tipas",
+ "You can divide numbers with": "Galite atskirti skaičius su",
+ "goAlertIntegrationKeyInfo": "Gaukite bendrą API integravimo raktą paslaugai šiuo formatu „aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee”, dažniausiai tai bus prieigos rakto parametro reikšmė nukopijuotame URL.",
+ "AccessKeyId": "Prieigos rakto ID",
+ "PhoneNumbers": "PhoneNumbers",
+ "TemplateCode": "TemplateCode",
+ "SecretAccessKey": "Prieigos rakto slaptasis raktas",
+ "SignName": "SignName",
+ "Sms template must contain parameters: ": "SMS šablone turi būti nurodyti parametrai: ",
+ "Bark API Version": "Bark API versija",
+ "Bark Endpoint": "Bark endpointas",
+ "Bark Group": "Bark grupė",
+ "Bark Sound": "Bark garsas",
+ "Mentioning": "Paminėjimas",
+ "High": "Aukštas",
+ "WeCom Bot Key": "WeCom bot'o raktas",
+ "promosmsTypeFlash": "SMS FLASH - Žinutė automatiškai bus rodoma gavėjo įrenginyje. Ribota tik Lenkijos gavėjams.",
+ "promosmsTypeSpeed": "SMS SPEED - Aukščiausias sistemos prioritetas. Labai greitas ir patikimas, tačiau brangesnis (apie du kartus kainuoja nei SMS FULL).",
+ "promosmsPhoneNumber": "Telefono numeris (Lenkijos gavėjui galite praleisti vietinį kodą)",
+ "Feishu WebHookUrl": "Feishu WebHook URL",
+ "matrixHomeserverURL": "Namų serverio URL (su http(s):// ir, jei reikia, prievadu)",
+ "Internal Room Id": "Vidinio kambario ID",
+ "matrixDesc1": "Vidinį kambario ID rasite pažangiojoje kambario nustatymų skiltyje savo Matrix kliente. Jis turėtų atrodyti panašiai: !QMdRCpUIfLwsfjxye6:home.server.",
+ "Remove domain": "Ištrinti domeną '{0}'",
+ "Icon Emoji": "Piktogramos jaustukas",
+ "smtpDkimDomain": "Domeno vardas",
+ "smtpDkimPrivateKey": "Privatus raktas",
+ "do nothing": "nieko nedaryti",
+ "alertaApiKey": "API raktas",
+ "serwersmsPhoneNumber": "Telefono numeris",
+ "smseagleTo": "Telefono numeris(-iai)",
+ "smspartnerSenderName": "SMS siuntėjo vardas",
+ "Recipient Number": "Gavėjo numeris",
+ "From Name/Number": "Siuntėjo vardas/numeris",
+ "smseagleRecipientType": "Gavėjo tipas",
+ "setup a new monitor group": "sukurti naują stebėjimo grupę",
+ "openModalTo": "Atidaryti modalą {0}",
+ "signalImportant": "SVARBU: Negalite maišyti grupių ir numerių gavėjų!",
+ "aboutWebhooks": "Išsamiau apie Webhooks: {0}",
+ "smtpDkimKeySelector": "Raktų parinkiklis",
+ "smtpDkimHashAlgo": "Maišos algoritmas (pasirinktinai)",
+ "smtpDkimskipFields": "Nepasirašyti antraščių raktai (pasirinktinai)",
+ "smtpDkimheaderFieldNames": "Pasirašyti antraščių raktai (pasirinktinai)",
+ "Integration Key": "Integracijos raktas",
+ "Integration URL": "Integracijos URL",
+ "Auto resolve or acknowledged": "Automatiškai išspręsta arba patvirtinta",
+ "auto acknowledged": "automatiškai patvirtinta",
+ "auto resolve": "automatiškai išspręsta",
+ "alertaApiEndpoint": "API galinis taškas",
+ "alertaEnvironment": "Aplinka",
+ "alertaAlertState": "Pranešimo būsena",
+ "alertaRecoverState": "Atkūrimo būsena",
+ "serwersmsAPIUser": "API vartotojo vardas (įskaitant webapi_ prefiksą)",
+ "serwersmsSenderName": "SMS siuntėjo vardas (užregistruotas per klientų portalą)",
+ "smseagleGroup": "Telefonų knygos grupės pavadinimas (-ai)",
+ "smseagleRecipient": "Gavėjas (-ai) (daugelius atskirk kableliais)",
+ "smseagleToken": "API prieigos raktas",
+ "smseagleUrl": "Jūsų SMSEagle įrenginio URL",
+ "smseagleEncoding": "Siųsti kaip Unicode",
+ "smspartnerApiurl": "Savo API raktą rasite savo skydelyje adresu {0}",
+ "smspartnerPhoneNumber": "Telefono numeris (-ai)",
+ "smspartnerSenderNameInfo": "Turi būti tarp 3..=11 įprastų simbolių",
+ "Leave blank to use a shared sender number.": "Palikite tuščią, kad naudotumėte bendrinamą siuntėjo numerį.",
+ "Octopush API Version": "Octopush API versija",
+ "Legacy Octopush-DM": "Senasis Octopush-DM",
+ "ntfyUsernameAndPassword": "Vartotojo vardas ir slaptažodis",
+ "twilioFromNumber": "Siuntėjo numeris",
+ "twilioToNumber": "Gavėjo numeris",
+ "ntfy Topic": "ntfy Tema",
+ "onebotHttpAddress": "OneBot HTTP adresas",
+ "onebotMessageType": "OneBot žinutės tipas",
+ "onebotGroupMessage": "Grupė",
+ "onebotPrivateMessage": "Privati",
+ "onebotUserOrGroupId": "Grupės/Vartotojo ID",
+ "onebotSafetyTips": "Saugumo tikslais būtina nustatyti prieigos raktą",
+ "pushDeerServerDescription": "Palikite tuščią, kad naudotumėte oficialų serverį",
+ "lunaseaDeviceID": "Įrenginio ID",
+ "lunaseaUserID": "Vartotojo ID",
+ "ntfyAuthenticationMethod": "Autentifikacijos metodas",
+ "ntfyPriorityHelptextAllEvents": "Visi įvykiai siunčiami su aukščiausiu prioritetu",
+ "twilioAccountSID": "Paskyros SID",
+ "twilioApiKey": "API raktas (nebūtina)",
+ "twilioAuthToken": "Autorizacijos raktas / API slaptas raktas",
+ "Monitor Setting": "{0} stebėjimo nustatymai",
+ "Show Clickable Link": "Rodyti paspaudžiamą nuorodą",
+ "Show Clickable Link Description": "Jei pažymėta, visi, turintys prieigą prie šio būsenos puslapio, gali pasiekti stebėjimo URL.",
+ "Open Badge Generator": "Atidaryti ženklo generatorių",
+ "Badge Generator": "{0} ženklo generatorius",
+ "Badge Type": "Ženklo tipas",
+ "Badge Duration (in hours)": "Ženklo trukmė (valandomis)",
+ "Badge Label": "Ženklo etiketė",
+ "Badge Suffix": "Ženklo sufiksas",
+ "Badge Label Color": "Ženklo etiketės spalva",
+ "Badge Color": "Ženklo spalva",
+ "Close": "Uždaryti",
+ "Message format": "Žinutės formatas",
+ "Monitor Group": "Stebėjimo grupė",
+ "Badge Label Prefix": "Ženklo etiketės prefiksas",
+ "Badge Preview": "Ženklo peržiūra",
+ "Badge Up Color": "Veikiančio ženklo spalva",
+ "Badge Down Color": "Neveikiančio ženklo spalva",
+ "Badge Pending Color": "Laukiamos būsenos ženklo spalva",
+ "Badge Warn Color": "Įspėjimo ženklo spalva",
+ "Badge Warn Days": "Įspėjimo dienų skaičius",
+ "Badge Down Days": "Neveikiančių dienų skaičius",
+ "Badge Style": "Ženklo stilius",
+ "Badge value (For Testing only.)": "Ženklo reikšmė (tik testavimui)",
+ "Badge URL": "Ženklo URL",
+ "monitorToastMessagesLabel": "Stebėjimo iššokančios žinutės",
+ "toastErrorTimeout": "Klaidų pranešimų laiko limitas",
+ "toastSuccessTimeout": "Sėkmingų pranešimų laiko limitas",
+ "Kafka Brokers": "Kafka brokeriai",
+ "Enter the list of brokers": "Įveskite brokerių sąrašą",
+ "Press Enter to add broker": "Paspauskite Enter, kad pridėtumėte brokerį",
+ "Kafka Topic Name": "Kafka temos pavadinimas",
+ "Kafka Producer Message": "Kafka gamintojo žinutė",
+ "Enable Kafka SSL": "Įjungti Kafka SSL",
+ "Kafka SASL Options": "Kafka SASL parinktys",
+ "Pick a SASL Mechanism...": "Pasirinkite SASL mechanizmą…",
+ "AccessKey Id": "Prieigos rakto ID",
+ "Secret AccessKey": "Prieigos rakto slaptasis raktas",
+ "Session Token": "Sesijos prieigos raktas",
+ "Request Body": "Užklausos turinys",
+ "FlashDuty Severity": "Svarba",
+ "nostrRelays": "Nostr tarpininkai",
+ "Saved.": "Išsaugota.",
+ "authInvalidToken": "Neteisingas prieigos raktas.",
+ "2faAlreadyEnabled": "2FA jau yra įjungtas.",
+ "2faEnabled": "2FA įjungtas.",
+ "2faDisabled": "2FA išjungtas.",
+ "successEdited": "Sėkmingai redaguota.",
+ "successDeleted": "Sėkmingai ištrinta.",
+ "successResumed": "Sėkmingai pratęsta.",
+ "successAdded": "Sėkmingai pridėta.",
+ "successAuthChangePassword": "Slaptažodis sėkmingai atnaujintas.",
+ "successBackupRestored": "Sėkmingai atstatytos atsarginės kopijos.",
+ "successDisabled": "Sėkmingai įšjungta.",
+ "successEnabled": "Sėkmingai įjungta.",
+ "tagNotFound": "Žymė nerasta.",
+ "Remote Browsers": "Nuotolinės naršyklės",
+ "Remote Browser": "Nuotolinė naršyklė",
+ "Add a Remote Browser": "Pridėti nuotolinę naršyklę",
+ "Remote Browser not found!": "Nuotolinė naršyklė nerasta!",
+ "useRemoteBrowser": "Naudoti nuotolinę naršyklę",
+ "Command": "Komanda",
+ "API URL": "API URL",
+ "What is a Remote Browser?": "Kas yra nuotolinė naršyklė?",
+ "successPaused": "Sėkmingai pristabdyta.",
+ "foundChromiumVersion": "Rasta Chromium/Chrome. Versija: {0}",
+ "documentationOf": "{0} dokumentacija",
+ "threemaRecipientTypeIdentityFormat": "8 simboliai",
+ "threemaRecipientTypePhone": "Telefono numeris",
+ "To Phone Number": "Gavėjo telefono numeris",
+ "threemaRecipientTypeEmail": "El. pašto adresas",
+ "threemaRecipient": "Gavėjas",
+ "threemaRecipientType": "Gavėjo tipas",
+ "Allow Long SMS": "Leisti ilgas SMS žinutes",
+ "max 15 digits": "maks. 15 skaitmenų",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "No tags found.": "Žymių nerasta.",
+ "Go back to home page.": "Grįžkite į pagrindinį puslapį.",
+ "Recipient Type": "Gavėjo tipas",
+ "New Group": "Nauja grupė",
+ "Add Remote Browser": "Pridėti nuotolinę naršyklę",
+ "Group ID": "Grupės ID",
+ "OAuth2: Client Credentials": "OAuth2: kliento kredencialai",
+ "Authentication Method": "Autentifikavimo metodas",
+ "Authorization Header": "Autorizacijos antraštė",
+ "Sound": "Garsas",
+ "Client ID": "Kliento ID",
+ "Guitar": "Gitara",
+ "From": "Nuo",
+ "smtpDkimDesc": "Prašome kreiptis į Nodemailer DKIM {0} naudojimo instrukcijoms.",
+ "smtpDkimSettings": "DKIM nustatymai",
+ "documentation": "dokumentacija",
+ "aboutSlackUsername": "Keičia pranešimo siuntėjo rodomą vardą. Jei norite paminėti kažką, įtraukite tai į draugišką vardą.",
+ "aboutChannelName": "Įveskite kanalo pavadinimą {0} lauke „Kanalo pavadinimas“, jei norite apeiti Webhook kanalą. Pvz.: #kitas-kanalas",
+ "aboutKumaURL": "Jei paliksite Uptime Kuma URL lauką tuščią, jis bus automatiškai nustatytas kaip Projekto GitHub puslapis.",
+ "PushDeer Key": "PushDeer raktas",
+ "wayToGetClickSendSMSToken": "API vartotojo vardą ir API raktą galite gauti adresu {0}.",
+ "Custom Monitor Type": "Pasirinktinis stebėjimo tipas",
+ "lunaseaTarget": "Tikslas",
+ "Edit Tag": "Redaguoti žymę",
+ "Server Address": "Serverio adresas",
+ "Google Analytics ID": "Google Analytics ID",
+ "pagertreeUrgency": "Svarba",
+ "pagertreeCritical": "Kritinė",
+ "pagertreeHigh": "Aukšta",
+ "pagertreeMedium": "Vidutinė",
+ "pagertreeLow": "Maža",
+ "pagertreeIntegrationUrl": "Integracijos URL",
+ "pagertreeSilent": "Tyli",
+ "pagertreeDoNothing": "Nieko nedaryti",
+ "pagertreeResolve": "Automatiškai išspręsti",
+ "templateHostnameOrURL": "pagrindinio kompiuterio vardas arba nuoroda",
+ "templateStatus": "būsena",
+ "emojiCheatSheet": "Jaustukų kodų lentelė: {0}",
+ "Read more": "Skaityti daugiau",
+ "default": "Numatytas",
+ "No Monitors": "Nėra stebėjimų",
+ "Please input title and content": "Prašome įvesti pavadinimą ir turinį",
+ "Show Tags": "Rodyti žymes",
+ "Hide Tags": "Paslėpti žymes",
+ "No monitors available.": "Nėra galimų stebėjimų.",
+ "setAsDefault": "Nustatyti kaip numatytą",
+ "Customize": "Tinkinti",
+ "proxyDescription": "Kad tarpiniai serveriai veiktų, jie turi būti priskirti stebėjimui.",
+ "enableProxyDescription": "Šis tarpinis serveris neturės poveikio stebėjimo užklausoms, kol nebus aktyvuotas. Galite laikinai išjungti tarpinį serverį nuo visų stebėjimų pagal aktyvavimo būseną.",
+ "setAsDefaultProxyDescription": "Šis tarpinis serveris bus įjungtas pagal numatytuosius nustatymus naujiems stebėjimams. Vis dar galite išjungti tarpinį serverį kiekvienam stebėjimui atskirai.",
+ "templateServiceName": "paslaugos pavadinimas",
+ "Description": "Aprašymas",
+ "Add one": "Pridėti vieną",
+ "Untitled Group": "Grupė be pavadinimo",
+ "Services": "Paslaugos",
+ "Powered by": "Sukūrė",
+ "Custom Footer": "Pasirinktinė apačia",
+ "Custom CSS": "Pasirinktinis CSS",
+ "deleteStatusPageMsg": "Ar tikrai norite ištrinti šį būsenos puslapį?",
+ "Proxies": "Tarpiniai serveriai",
+ "enabled": "Įjungta",
+ "deleteProxyMsg": "Ar tikrai norite ištrinti šį tarpinį serverį visiems stebėjimams?",
+ "Installed": "Įdiegta",
+ "Not installed": "Neįdiegta",
+ "Running": "Paleistas",
+ "Remove Token": "Pašalinti prieigos raktą",
+ "Start": "Paleisti",
+ "Stop": "Sustabdyti",
+ "Next": "Toliau",
+ "Authentication": "Autentifikacija",
+ "Page Not Found": "Puslapis nerastas",
+ "About": "Apie",
+ "Message:": "Žinutė:",
+ "HTTP Headers": "HTTP antraštės",
+ "For example: nginx, Apache and Traefik.": "Pavyzdžiui: ngix, Apache ir Traefik.",
+ "Subject:": "Tema:",
+ "Refresh Interval": "Atnaujinimo intervalas",
+ "Add New Status Page": "Pridėti naują būsenos puslapį",
+ "Backup": "Padaryti atsargines kopijas",
+ "Domain Names": "Domenų vardai",
+ "Footer Text": "Apačios tekstas",
+ "wayToGetCloudflaredURL": "(Atsisiųskite cloudflared iš {0})",
+ "cloudflareWebsite": "Cloudflare svetainės",
+ "User": "Vartotojas",
+ "No Proxy": "Nėra tarpinio serverio",
+ "Trust Proxy": "Pasitikėti šiuo tarpiniu serveriu",
+ "Proxy": "Tarpinis serveris",
+ "Certificate Chain": "Sertifikato grandinė",
+ "Invalid": "Negaliojantis",
+ "Slug": "Nuorodos dalis",
+ "Accept characters:": "Priimami simboliai:",
+ "startOrEndWithOnly": "Pradėti arba baigti tik su {0}",
+ "The slug is already taken. Please choose another slug.": "Ši nuorodos dalis jau užimta. Prašome pasirinkti kitą.",
+ "HTTP Basic Auth": "HTTP bazinis autentifikavimas",
+ "New Status Page": "Naujas būsenos puslapis",
+ "Don't know how to get the token? Please read the guide:": "Nežinote, kaip gauti prieigos raktą? Perskaitykite vadovą:",
+ "Other Software": "Kitos programinės įrangos",
+ "Show Powered By": "Rodyti kas sukūrė",
+ "Valid To:": "Galioja iki:",
+ "Days Remaining:": "Liko dienų:",
+ "Issuer:": "Išdavėjas:",
+ "Fingerprint:": "Pirštų antspaudas:",
+ "No status pages": "Nėra būsenos puslapių",
+ "Domain Name Expiry Notification": "Domeno vardo galiojimo pabaigos pranešimas",
+ "Add a new expiry notification day": "Pridėti naują galiojimo pabaigos pranešimo dieną",
+ "Remove the expiry notification": "Pašalinti galiojimo pabaigos pranešimą",
+ "Steam Game Server": "Steam žaidimų serveris",
+ "Coming Soon": "Jau greitai",
+ "Query": "Užklausa",
+ "tcp": "TCP / HTTP",
+ "Packet Size": "Paketo dydis",
+ "Chat ID": "Pokalbio ID",
+ "API Username": "API vartotojo vardas",
+ "socket": "Lizdas",
+ "Go back to the previous page.": "Grįžkite į ankstesnį puslapį.",
+ "Domain": "Domenas",
+ "Bot Token": "Bot'o prieigos raktas",
+ "Show update if available": "Rodyti galimus atnaujinimus",
+ "Also check beta release": "Taip pat patikrinti beta išleidimus",
+ "settingsCertificateExpiry": "TLS sertifikato galiojimas",
+ "Using a Reverse Proxy?": "Naudojate atvirkštinį tarpinį serverį?",
+ "signedInDispDisabled": "Autentifikavimas išjungtas.",
+ "RadiusSecret": "RADIUS slaptažodis",
+ "RadiusSecretDescription": "Bendras slaptažodis tarp kliento ir serverio",
+ "RadiusCalledStationId": "RADIUS iškviesto stoties ID",
+ "RadiusCalledStationIdDescription": "Iškviesto įrenginio identifikatorius",
+ "RadiusCallingStationId": "RADIUS skambinančios stoties ID",
+ "Certificate Expiry Notification": "Sertifikato galiojimo pabaigos pranešimas",
+ "Check how to config it for WebSocket": "Patikrinkite, kaip sukonfigūruoti per WebSocket",
+ "Most likely causes:": "Greičiausios priežastys:",
+ "The resource is no longer available.": "Resursas nebeprieinamas.",
+ "What you can try:": "Ką galite pabandyti:",
+ "Retype the address.": "Įveskite adresą iš naujo.",
+ "Connection String": "Ryšio eilutė",
+ "Setup Docker Host": "Nustatyti Docker serverį",
+ "Connection Type": "Ryšio tipas",
+ "Docker Daemon": "Docker tarnyba",
+ "noDockerHostMsg": "Nepasiekiama. Pirmiausia nustatykite Docker serverį.",
+ "deleteDockerHostMsg": "Ar tikrai norite ištrinti šį Docker serverį iš visų stebėjimų?",
+ "Docker Container": "Docker konterineris",
+ "Container Name / ID": "Konteinerio vardas / ID",
+ "Docker Host": "Docker serveris",
+ "Docker Hosts": "Docker serveriai",
+ "Workstation": "Darbinė stotis",
+ "telegramMessageThreadID": "(Pasirinktinai) Žinučių temos ID",
+ "telegramMessageThreadIDDescription": "Pasirinktinai unikalus identifikatorius tikslinei žinučių temai (forumo temai), skirtas tik forumo supergrupėms",
+ "telegramSendSilently": "Siųsti tyliai",
+ "telegramSendSilentlyDescription": "Siunčia žinutę tyliai. Vartotojai gaus pranešimą be garso.",
+ "Examples": "Pavyzdžiai",
+ "telegramProtectContent": "Apsaugoti nuo persiuntimo/išsaugojimo",
+ "telegramProtectContentDescription": "Jei įjungta, Telegram bot'o žinutės bus apsaugotos nuo persiuntimo ir išsaugojimo.",
+ "telegramUseTemplate": "Naudoti pasirinktą žinutės šabloną",
+ "telegramUseTemplateDescription": "Jei įjungta, žinutė bus išsiųsta naudojant pasirinktą šabloną.",
+ "telegramTemplateFormatDescription": "Telegram leidžia naudoti skirtingas žymėjimo kalbas žinutėms, žr. Telegram {0} dėl išsamesnės informacijos.",
+ "supportTelegramChatID": "Palaikymas tiesioginiam pokalbiui / grupei / kanalui pokalbio ID",
+ "wayToGetTelegramChatID": "Galite gauti savo pokalbio ID, išsiųsdami žinutę bot'ui ir apsilankę šioje nuorodoje, kur pamatysite chat_id:",
+ "smtpBCC": "BCC",
+ "pushoversounds climb": "Klimbas (ilgas)",
+ "Authorization Identity": "Autorizacijos identifikatorius",
+ "liquidIntroduction": "Šablonavimo galimybės pasiekiamos naudojant Liquid šablonavimo kalbą. Naudojimo instrukcijas rasite {0}. Galimi šie kintamieji:",
+ "webhookAdditionalHeadersDesc": "Nustato papildomas antraštes, siunčiamas su webhook. Kiekviena antraštė turi būti apibrėžta kaip JSON raktas/reikšmė.",
+ "templateMonitorJSON": "objektas, apibūdinantis stebėjimą",
+ "templateLimitedToUpDownNotifications": "prieinama tik VEIKIA/NEVEIKIA pranešimams",
+ "Json Query Expression": "Json užklausos išraiška",
+ "webhookAdditionalHeadersTitle": "Papildomos antraštės",
+ "webhookBodyCustomOption": "Tinkintas turinys",
+ "Webhook URL": "Webhook URL adresas",
+ "templateHeartbeatJSON": "objektas, apibūdinantis patikros signalą",
+ "templateLimitedToUpDownCertNotifications": "prieinama tik VEIKIA/NEVEIKIA/Sertifikato galiojimo pranešimams",
+ "authIncorrectCreds": "Neteisingas vartotojo vardas arba slaptažodis.",
+ "nostrRelaysHelp": "Vienas tarpininko URL po vieną eilutėje",
+ "nostrSender": "Siuntėjo privatus raktas (nsec)",
+ "nostrRecipients": "Gavėjų viešieji raktai (npub)",
+ "nostrRecipientsHelp": "npub formatu, po vieną eilutėje",
+ "showCertificateExpiry": "Rodyti sertifikato galiojimo pabaigą",
+ "noOrBadCertificate": "Nėra / netinkamas sertifikatas",
+ "cacheBusterParam": "Pridėti {0} parametrą",
+ "cacheBusterParamDescription": "Atsitiktinai sugeneruotas parametras, skirtas apeiti talpyklas.",
+ "gamedigGuessPortDescription": "Valve Server Query Protocol naudojamas prievadas gali skirtis nuo kliento prievado. Pabandykite šį variantą, jei monitorius negali prisijungti prie jūsų serverio.",
+ "Send rich messages": "Siųsti išsamius pranešimus",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL adresas",
+ "authUserInactiveOrDeleted": "Vartotojas neaktyvus arba ištrintas.",
+ "rabbitmqNodesRequired": "Prašome nustatyti mazgus šiam stebėjimui.",
+ "RabbitMQ Nodes": "RabbitMQ valdymo mazgai",
+ "rabbitmqNodesDescription": "Įveskite URL adresą RabbitMQ valdymo mazgams, įskaitant protokolą ir prievadą. Pavyzdys: {0}",
+ "rabbitmqNodesInvalid": "Prašome naudoti pilnai kvalifikuotą (prasidedantį „http“) URL adresą RabbitMQ mazgams.",
+ "cellsyntDestination": "Gavėjo telefono numeris, naudojant tarptautinį formatą su pradine 00 ir šalies kodu, pvz., 00447920110000 JK numeriui 07920 110 000 (iš viso iki 17 skaitmenų). Viena HTTP užklausa gali turėti iki 25000 gavėjų, atskirtų kableliais.",
+ "threemaBasicModeInfo": "Pastaba: Ši integracija naudoja Threema Gateway baziniame režime (serverio pagrindu šifravimas). Išsamesnę informaciją rasite {0}.",
+ "Custom sound to override default notification sound": "Individualus garsas, pakeičiantis numatytąjį pranešimų garsą",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Naudokite teksto siuntėjo ID arba telefono numerį E.164 formatu, jei norite gauti atsakymus.",
+ "wahaSession": "Sesija",
+ "wahaChatId": "Pokalbio ID (telefono numeris / adresato ID / grupės ID)",
+ "wayToGetWahaApiUrl": "Jūsų WAHA instancijos URL.",
+ "wayToGetWahaApiKey": "API raktas yra WHATSAPP_API_KEY aplinkos kintamojo reikšmė, kurią naudojote paleidžiant WAHA.",
+ "wayToGetWahaSession": "Iš šios sesijos WAHA siunčia pranešimus į pokalbio ID. Jį rasite WAHA skydelyje.",
+ "wayToWriteWahaChatId": "Telefono numeris su tarptautiniu prefiksu, bet be pliuso ženklo pradžioje ({0}), adresato ID ({1}) arba grupės ID ({2}). Pranešimai siunčiami į šį pokalbio ID iš WAHA sesijos.",
+ "OAuth Token URL": "OAuth prieigos rakto URL",
+ "invertKeywordDescription": "Ieškokite raktažodžio, kuris yra ankščiau panaudotas, o ne esantis.",
+ "gamedigGuessPort": "Gamedig: atspėk prievadą",
+ "wayToGetBitrix24Webhook": "Sukurkite webhook, sekdami nurodymus adresu {0}",
+ "bitrix24SupportUserID": "Įveskite savo vartotojo ID Bitrix24. ID galite rasti nuorodoje, eidami į vartotojo profilį.",
+ "remoteBrowsersDescription": "Nuotolinės naršyklės yra alternatyva Chromium paleidimui vietoje. Nustatykite su tokia paslauga kaip browserless.io arba prisijunkite prie savo",
+ "self-hosted container": "savarankiškai talpinamas konteineris",
+ "remoteBrowserToggle": "Numatytuoju atveju Chromium veikia Uptime Kuma konteineryje. Galite naudoti nuotolinę naršyklę, persijungę šį jungiklį.",
+ "deleteRemoteBrowserMessage": "Ar tikrai norite ištrinti šią nuotolinę naršyklę visiems stebėjimams?",
+ "GrafanaOncallUrl": "Grafana Oncall URL",
+ "mongodbCommandDescription": "Paleiskite MongoDB komandą prieš duomenų bazę. Daugiau informacijos apie galimas komandas rasite {documentation}",
+ "wayToGetSevenIOApiKey": "Aplankykite valdymo skydelį adresu app.seven.io > developer > api key > žalias pridėjimo mygtukas",
+ "senderSevenIO": "Siuntimo numeris arba pavadinimas",
+ "receiverSevenIO": "Priėmimo numeris",
+ "receiverInfoSevenIO": "Jei priėmimo numeris nėra Vokietijoje, turite pridėti šalies kodą numerio pradžioje (pvz., JAV šalies kodui 1 naudokite 117612121212 vietoje 017612121212)",
+ "apiKeySevenIO": "SevenIO API raktas",
+ "wayToWriteWhapiRecipient": "Telefono numeris su tarptautiniu prefiksu, bet be pliuso ženklas pradžioje ({0}), adresato ID ({1}) arba grupės ID ({2}).",
+ "wayToGetWhapiUrlAndToken": "API URL ir prieigos raktą galite gauti eidami į norimą kanalą iš {0}",
+ "whapiRecipient": "Telefono numeris / Adresato ID / Grupės ID",
+ "wayToGetHeiiOnCallDetails": "Kaip gauti Trigger ID ir API raktus, paaiškinta {documentation}",
+ "callMeBotGet": "Čia galite sugeneruoti pabaigos tašką {0}, {1} ir {2}. Atkreipkite dėmesį, kad galite susidurti su apribojimais. Apribojimai atrodo tokie: {3}",
+ "gtxMessagingApiKeyHint": "Savo API raktą rasite: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "Iš telefono numerio / Perdavimo kelio kilmės adresas (TPOA)",
+ "gtxMessagingFromHint": "Mobiliaisiais telefonais jūsų gavėjai mato TPOA kaip pranešimo siuntėją. Leidžiama iki 11 simbolių su raidėmis/skaičiais, trumpasis kodas, vietinis ilgas numeris arba tarptautiniai numeriai ({e164}, {e212} arba {e214})",
+ "Originator type": "Siuntėjo tipas",
+ "cellsyntOriginatortypeAlphanumeric": "Raidinė skaitmeninė eilutė (maks. 11 simbolių). Gavėjai negali atsakyti į pranešimą.",
+ "Alphanumeric (recommended)": "Raidinis skaitmeninis (rekomenduojama)",
+ "cellsyntOriginatortypeNumeric": "Skaitinė reikšmė (maks. 15 skaitmenų) su tarptautiniu telefono numerio formatu be pradinio 00 (pvz., JK numeris 07920 110 000 turi būti įrašytas kaip 447920110000). Gavėjai gali atsakyti į pranešimą.",
+ "Originator": "Siuntėjas",
+ "cellsyntOriginator": "Rodoma gavėjo mobiliajame telefone kaip pranešimo siuntėjas. Leidžiamos reikšmės ir funkcija priklauso nuo parametro originatortype.",
+ "Destination": "Gavėjas",
+ "cellsyntSplitLongMessages": "Ilgi pranešimai suskaidomi į iki 6 dalių. 153 x 6 = 918 simbolių.",
+ "max 11 alphanumeric characters": "maks. 11 simbolių (raidės, skaičiai)",
+ "Community String": "Bendruomenės eilutė",
+ "snmpCommunityStringHelptext": "Ši eilutė veikia kaip slaptažodis, skirtas autentifikuoti ir valdyti prieigą prie SNMP palaikomų įrenginių. Suderinkite ją su savo SNMP įrenginio konfigūracija.",
+ "OID (Object Identifier)": "OID (objekto identifikatorius)",
+ "snmpOIDHelptext": "Įveskite OID sensoriui ar būsenai, kuriuos norite stebėti. Jei nesate tikri dėl OID, naudokite tinklo valdymo įrankius, tokius kaip MIB naršyklės ar SNMP programinė įranga.",
+ "Condition": "Sąlyga",
+ "SNMP Version": "SNMP versija",
+ "Please enter a valid OID.": "Prašome įvesti galiojantį OID.",
+ "wayToGetThreemaGateway": "Galite užsiregistruoti Threema Gateway {0}.",
+ "threemaRecipientTypePhoneFormat": "E.164, be pradinio +",
+ "threemaSenderIdentity": "Gateway-ID",
+ "threemaSenderIdentityFormat": "8 simboliai, paprastai prasideda ženklu *",
+ "threemaApiAuthenticationSecret": "Gateway-ID slaptažodis",
+ "apiKeysDisabledMsg": "API raktai išjungti, nes autentifikacija išjungta.",
+ "Host Onesender": "Onesender serveris",
+ "Token Onesender": "Onesender prieigos raktas",
+ "privateOnesenderDesc": "Įsitikinkite, kad telefono numeris yra tinkamas. Norėdami išsiųsti žinutę į privatų telefono numerį, pvz.: 628123456789",
+ "groupOnesenderDesc": "Įsitikinkite, kad GroupID yra tinkamas. Norėdami išsiųsti žinutę į grupę, pvz.: 628123456789-342345",
+ "wayToGetOnesenderUrlandToken": "URL ir prieigos raktą galite gauti apsilankę Onesender svetainėje. Daugiau informacijos {0}",
+ "Flute": "Fleita",
+ "Harp": "Arfa",
+ "Doorbell": "Durų skambutis",
+ "Elevator": "Liftas",
+ "Form Data Body": "Formos duomenų turinys",
+ "Client Secret": "Kliento slaptažodis",
+ "OAuth Scope": "OAuth apimtis",
+ "Optional: Space separated list of scopes": "Pasirenkama: tarpu atskirtų apimčių sąrašas",
+ "Lost connection to the socket server.": "Prarastas ryšys su lizdo serveriu.",
+ "Cannot connect to the socket server.": "Nepavyksta prisijungti prie lizdo serverio.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL adresas",
+ "signl4Docs": "Daugiau informacijos apie SIGNL4 konfigūravimą ir kaip gauti SIGNL4 webhook URL rasite {0}.",
+ "Conditions": "Sąlygos",
+ "conditionAdd": "Pridėti sąlygą",
+ "conditionDelete": "Ištrinti sąlygą",
+ "conditionAddGroup": "Pridėti grupę",
+ "conditionDeleteGroup": "Ištrinti grupę",
+ "not contains": "neturi",
+ "starts with": "prasideda su",
+ "not starts with": "neprasideda su",
+ "ends with": "baigiasi su",
+ "not ends with": "nebaigiasi su",
+ "less than": "mažiau nei",
+ "greater than": "daugiau nei",
+ "less than or equal to": "mažiau arba lygu",
+ "greater than or equal to": "daugiau arba lygu",
+ "record": "įrašas",
+ "Notification Channel": "Pranešimų kanalas",
+ "Alphanumerical string and hyphens only": "Tik raidinė skaitinė eilutė ir brūkšneliai",
+ "Arcade": "Arkada",
+ "Fail": "Nepavyko",
+ "Correct": "Teisingai",
+ "Reveal": "Atskleisti",
+ "Bubble": "Burbulas",
+ "Scifi": "Mokslinis fantastinis",
+ "Clear": "Išvalyti",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "Laiko jautrūs (tik iOS)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Laiko jautrūs pranešimai bus pristatyti iš karto, net jei įrenginys yra „Netrukdyti“ režime.",
+ "Can be found on:": "Galima rasti: {0}",
+ "The phone number of the recipient in E.164 format.": "Gavėjo telefono numeris E.164 formatu.",
+ "rabbitmqHelpText": "Norėdami naudoti stebėjimą, turėsite įjungti valdymo įskiepį savo RabbitMQ sąrankoje. Išsamesnės informacijos rasite {rabitmq_documentation}.",
+ "Separate multiple email addresses with commas": "Atskirkite kelis el. pašto adresus kableliais",
+ "equals": "lygu",
+ "not equals": "nelygu",
+ "contains": "turi"
+}
diff --git a/src/lang/lv.json b/src/lang/lv.json
new file mode 100644
index 000000000..c069c7303
--- /dev/null
+++ b/src/lang/lv.json
@@ -0,0 +1,7 @@
+{
+ "languageName": "Latviešu",
+ "setupDatabaseChooseDatabase": "Kuru datubāzi izmantosiet?",
+ "setupDatabaseEmbeddedMariaDB": "Jums nav nekas jādara. Docker imidžā ir iebūvēta un automātiski konfigurēta MariaDB datubāze. Uptime Kuma pieslēgsies šai datubāzei izmantojot unix soketu.",
+ "setupDatabaseSQLite": "Vienkāršs datu bāzes fails, iesakāms maza izmēra risinājumiem. Pirms versijas v2.0.0 SQLite bija noklusējuma datubāze.",
+ "setupDatabaseMariaDB": "Pieslēgties ārējai MariaDB datubāzei. Jums būs jākonfigurē datubāzes pieslēgšanās informācija."
+}
diff --git a/src/lang/lzh.json b/src/lang/lzh.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/src/lang/lzh.json
@@ -0,0 +1 @@
+{}
diff --git a/src/lang/mk.json b/src/lang/mk.json
new file mode 100644
index 000000000..251463f5c
--- /dev/null
+++ b/src/lang/mk.json
@@ -0,0 +1,92 @@
+{
+ "setupDatabaseMariaDB": "Поврзи надворешна MariaDB датабаза. Мораш да ги внесеш податоците за најава од датабазата.",
+ "dbName": "Име од Датабаза",
+ "Settings": "Поставки",
+ "Dashboard": "Контролна табла",
+ "Help": "Помош",
+ "Language": "Јазик",
+ "Theme": "Тема",
+ "General": "Генерално",
+ "Game": "Игра",
+ "Version": "Верзија",
+ "Check Update On GitHub": "Проверете го ажурирањето на GitHub",
+ "List": "Листа",
+ "Home": "Дома",
+ "Add": "Додај",
+ "Add New Monitor": "Додај нов монитор",
+ "Quick Stats": "Брзи статистика",
+ "Up": "Горе",
+ "Down": "Доле",
+ "Pending": "Во очекување",
+ "Maintenance": "Одржување",
+ "Unknown": "Непознато",
+ "Reconnecting...": "Повторно поврзување...",
+ "Specific Monitor Type": "Специфичен тип на монитор",
+ "pauseDashboardHome": "Пауза",
+ "Name": "Име",
+ "Status": "Статус",
+ "Message": "Порака",
+ "No important events": "Нема важни настани",
+ "Resume": "Продолжи",
+ "Edit": "Измени",
+ "Current": "Сегашен",
+ "Cert Exp.": "Истек Серт.",
+ "Monitor": "Монитор | Монитори",
+ "day": "ден | денови",
+ "-day": "-ден",
+ "hour": "час",
+ "-hour": "-час",
+ "Ping": "Пинг",
+ "Monitor Type": "Мониторски тип",
+ "Invert Keyword": "Инвертирајте клучни зборови",
+ "Expected Value": "Очекувана Вредност",
+ "Json Query": "Json Query",
+ "URL": "УРЛ",
+ "Hostname": "Hostname",
+ "Port": "Порт",
+ "Heartbeat Interval": "Интервал на отчукување на срцето",
+ "Request Timeout": "Истекување на барањето",
+ "Retries": "Обиди",
+ "Advanced": "Напредно",
+ "checkEverySecond": "Провери секоја {0} секунда",
+ "retryCheckEverySecond": "Повтори секои {0} секунди",
+ "resendEveryXTimes": "Препрати на секои {0} пати",
+ "resendDisabled": "Повторно испраќање е оневозможено",
+ "ignoreTLSError": "Игнорирај TLS/SSL errors за HTTPS websites",
+ "ignoreTLSErrorGeneral": "Игнорирај TLS/SSL грешки при конекција",
+ "upsideDownModeDescription": "Превртете го статусот наопаку. Ако услугата е достапна, таа е ДОЛУ.",
+ "Upside Down Mode": "Режим наопаку",
+ "Max. Redirects": "Макс. Пренасочувања",
+ "Accepted Status Codes": "Прифатливи Статус Кодови",
+ "Push URL": "Push URL",
+ "pushOptionalParams": "Опционални параметри: {0}",
+ "languageName": "Македонски",
+ "setupDatabaseChooseDatabase": "Која датабаза би сакал да ја користиш?",
+ "setupDatabaseEmbeddedMariaDB": "Не треба ништо да поставувате. Оваа докер-слика автоматски ја вгради и конфигурираше MariaDB за вас. Uptime Kuma ќе се поврзе со оваа база на податоци преку уникс приклучок.",
+ "setupDatabaseSQLite": "Едноставна датотека со база на податоци, препорачана за распоредувања во мали размери. Пред верзијата 2.0.0, Uptime Kuma користеше SQLite како стандардна база на податоци.",
+ "settingUpDatabaseMSG": "Ја сетираме Датабазата за вас, ве молам почекајте.",
+ "New Update": "Ново ажурирање",
+ "Appearance": "Изглед",
+ "Primary Base URL": "Примарна основна URL",
+ "statusMaintenance": "Одржување",
+ "Cannot connect to the socket server": "Не може да се поврзе со сокет-серверот",
+ "General Monitor Type": "Општ тип на монитор",
+ "Passive Monitor Type": "Пасивен тип на монитор",
+ "markdownSupported": "Поддржана е синтакса Markdown",
+ "Pause": "Пауза",
+ "DateTime": "ДатаВреме",
+ "Delete": "Избриши",
+ "Uptime": "Време на работа",
+ "Response": "Одговор",
+ "Keyword": "Клучен збор",
+ "Friendly Name": "Пријателско Име",
+ "Host URL": "УРЛ адреса од сервер",
+ "locally configured mail transfer agent": "локално конфигуриран агент за пренос на пошта",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Или внесете го името на домаќинот на серверот на кој сакате да се поврзете или {localhost} ако имате намера да користите {local_mta}",
+ "timeoutAfter": "Истекување на времето по {0} секунди",
+ "Heartbeat Retry Interval": "Интервал на повторно обиди за отчукување на срцето",
+ "Resend Notification if Down X times consecutively": "Повторно испратете известување ако е долу X пати последователно",
+ "retriesDescription": "Максимално повторување пред услугата да биде означена како неискористена и да се испрати известување",
+ "maxRedirectDescription": "Максимален број пренасочувања што треба да се следат. Поставете на 0 за да ги оневозможите пренасочувањата.",
+ "needPushEvery": "Треба да ја повикувате оваа URL на секои {0} секунди."
+}
diff --git a/src/lang/ms.json b/src/lang/ms.json
index 14ddd7d3a..ec7520832 100644
--- a/src/lang/ms.json
+++ b/src/lang/ms.json
@@ -7,24 +7,24 @@
"Game": "Permainan",
"Primary Base URL": "URL Pangkalan Utama",
"Version": "Versi",
- "Add": "Menambah",
- "Quick Stats": "Statistik ringkas",
- "Up": "Dalam talian",
- "Down": "Luar talian",
- "Pending": "Belum selesai",
- "statusMaintenance": "Membaiki",
- "Maintenance": "Membaiki",
- "Unknown": "Tidak ketahui",
- "General Monitor Type": "Jenis monitor umum",
- "Check Update On GitHub": "Semak kemas kini dalam GitHub",
+ "Add": "Tambah",
+ "Quick Stats": "Statistik Pantas",
+ "Up": "Atas",
+ "Down": "Bawah",
+ "Pending": "Dalam Proses",
+ "statusMaintenance": "Penyelenggaraan",
+ "Maintenance": "Penyelenggaraan",
+ "Unknown": "Tidak Diketahui",
+ "General Monitor Type": "Jenis Monitor Umum",
+ "Check Update On GitHub": "Semak kemas kini di GitHub",
"List": "Senarai",
- "Specific Monitor Type": "Jenis monitor spesifik",
+ "Specific Monitor Type": "Jenis Monitor Spesifik",
"markdownSupported": "Sintaks markdown disokong",
"languageName": "Bahasa inggeris",
"Dashboard": "Papan pemuka",
"Language": "Bahasa",
- "Add New Monitor": "Tambah monitor baharu",
- "Passive Monitor Type": "Jenis monitor pasif",
+ "Add New Monitor": "Tambah Monitor Baharu",
+ "Passive Monitor Type": "Jenis Monitor Pasif",
"No Services": "Tiada Servis",
"Add a monitor": "Tambah Monitor",
"High": "Tinggi",
@@ -49,5 +49,41 @@
"Content Type": "Jenis Content",
"Home": "Laman Utama",
"Settings": "Tetapan",
- "Save": "Simpan"
+ "Save": "Simpan",
+ "Cannot connect to the socket server": "Tidak dapat disambungkan kepada pelayan soket",
+ "Resume": "Sambung",
+ "Current": "Terkini",
+ "Uptime": "Uptime",
+ "Cert Exp.": "Tamat Sijil",
+ "now": "sekarang",
+ "setupDatabaseMariaDB": "Sambungan kepada pangkalan data MariaDB secara luaran. Anda perlu tetapkan maklumat sambungan pangkalan data.",
+ "hour": "jam",
+ "Ping": "Ping",
+ "settingUpDatabaseMSG": "Pangkalan data sedang ditetapkan. Sila tunggu sebentar.",
+ "Reconnecting...": "Penyambungan...",
+ "Message": "Mesej",
+ "No important events": "Tiada info penting",
+ "Edit": "Sunting",
+ "Delete": "Padam",
+ "Monitor": "Monitor | Monitors",
+ "time ago": "{0} yang lepas",
+ "day": "hari | hari",
+ "-day": "-hari",
+ "-year": "-tahun",
+ "Pause": "Rehat",
+ "Status": "Status",
+ "DateTime": "TarikhMasa",
+ "dbName": "Nama Pangkalan Data",
+ "-hour": "-jam",
+ "Response": "Tindakbalas",
+ "Monitor Type": "Jenis Monitor",
+ "Keyword": "Katakunci",
+ "pauseDashboardHome": "Rehat",
+ "Name": "Nama",
+ "setupDatabaseChooseDatabase": "Pangkalan Data yang mana hendak digunakan ?",
+ "Host URL": "URL Host",
+ "URL": "URL",
+ "Expected Value": "Nilai Sepatutnya",
+ "Friendly Name": "Nama Mudah",
+ "Hostname": "Nama Host"
}
diff --git a/src/lang/my.json b/src/lang/my.json
index d7b80be92..d893a0492 100644
--- a/src/lang/my.json
+++ b/src/lang/my.json
@@ -33,7 +33,7 @@
"Down": "ကွန်ရက်ပြတ်တောက်နေသည်",
"Pending": "ဆိုင်းငံ့ဆဲ",
"statusMaintenance": "ပြုပြင်ထိန်းသိမ်းခြင်း",
- "Cannot connect to the socket server": "Socket Server အားချိတ်ဆက်မှုမအောင်မြင်ပါ",
+ "Cannot connect to the socket server": "Why Socket Server အားချိတ်ဆက်မှုမအောင်မြင်ပါ",
"Passive Monitor Type": "Passive စောင့်ကြည့်မှုပုံစံ",
"Specific Monitor Type": "သီးခြားစောင့်ကြည့်မှုပုံစံ",
"Resume": "ဆက်သွားမည်",
@@ -89,5 +89,7 @@
"Heartbeat Retry Interval": "ကွန်ယက်ချိတ်ဆက်နိုင်မှုတိုင်းတာခြင်း ထပ်မံကြိုးစားခြင်း အချိန်ကွာဟချက်",
"Resend Notification if Down X times consecutively": "ကွန်ယက်ချိတ်ဆက်မှု X အကြိမ်ထိ ဆက်တိုက်ကျနေပါက သတိပေးချက်ထပ်မံပေးပို့ရန်",
"retriesDescription": "ဝန်ဆောင်မှုကွန်ယက်ပြတ်တောက်နေ၍ သတိပေးချက်ပေးပို့ပြီး အများဆုံးထပ်မံကြိုးစားနိုင်မှု",
- "Search Engine Visibility": "ရှာဖွေမှုအင်ဂျင်များ၏မြင်နိုင်စွမ်း"
+ "Search Engine Visibility": "ရှာဖွေမှုအင်ဂျင်များ၏မြင်နိုင်စွမ်း",
+ "setupDatabaseEmbeddedMariaDB": "You don't need to set anything. This docker image has embedded and configured MariaDB for you automatically. Uptime Kuma will connect to this database via unix socket.",
+ "setupDatabaseChooseDatabase": "English"
}
diff --git a/src/lang/nb-NO.json b/src/lang/nb-NO.json
index b26d3a005..19cc29508 100644
--- a/src/lang/nb-NO.json
+++ b/src/lang/nb-NO.json
@@ -28,7 +28,7 @@
"confirmDisableTwoFAMsg": "Er du sikker på at du vil deaktivere 2FA?",
"Settings": "Innstillinger",
"Dashboard": "Dashbord",
- "New Update": "Ny Oppdatering",
+ "New Update": "Ny oppdatering",
"Language": "Språk",
"Appearance": "Utseende",
"Theme": "Tema",
@@ -46,10 +46,10 @@
"Pause": "Pause",
"Name": "Navn",
"Status": "Status",
- "DateTime": "Dato tid",
+ "DateTime": "Dato/tid",
"Message": "Melding",
"No important events": "Ingen viktige hendelser",
- "Resume": "Fortsett",
+ "Resume": "Gjenoppta",
"Edit": "Rediger",
"Delete": "Slett",
"Current": "Nåværende",
@@ -63,7 +63,7 @@
"Ping": "Ping",
"Monitor Type": "Overvåkningstype",
"Keyword": "Stikkord",
- "Friendly Name": "Vennlig navn",
+ "Friendly Name": "Lett gjenkjennelig navn",
"URL": "URL",
"Hostname": "Vertsnavn",
"Port": "Port",
@@ -81,7 +81,7 @@
"Light": "Lys",
"Dark": "Mørk",
"Auto": "Auto",
- "Theme - Heartbeat Bar": "Theme - Heartbeat Bar",
+ "Theme - Heartbeat Bar": "Tema - Hjerteslagslinje",
"Normal": "Normal",
"Bottom": "Bunn",
"None": "Ingen",
@@ -98,9 +98,9 @@
"Enable Auth": "Aktiver autentisering",
"disableauth.message1": "Er du sikker på at du vil {disableAuth}?",
"disable authentication": "deaktiver autentisering",
- "disableauth.message2": "Dette er for {intendThirdPartyAuth} foran Uptime Kuma, for eksempel Cloudflare Access.",
- "where you intend to implement third-party authentication": "hvor du planlegger å implementere tredjeparts autentifikasjon",
- "Please use this option carefully!": "Vennligst vær forsiktig når du bruker denne!",
+ "disableauth.message2": "Dette er tiltenkt scenarier {intendThirdPartyAuth} foran Uptime Kuma, for eksempel Cloudflare Access, Authelia eller andre autentiseringsmekanismer.",
+ "where you intend to implement third-party authentication": "hvor du planlegger å implementere tredjeparts-autentifikasjon",
+ "Please use this option carefully!": "Bruk dette valget med forsiktighet!",
"Logout": "Logg ut",
"Leave": "Forlat",
"I understand, please disable": "Jeg forstår, vennligst deaktiver",
@@ -111,7 +111,7 @@
"Password": "Passord",
"Remember me": "Husk meg",
"Login": "Logg inn",
- "No Monitors, please": "Ingen overvåkning, vær så snill",
+ "No Monitors, please": "Ingen overvåkning, takk",
"add one": "legg til en",
"Notification Type": "Meldingstype",
"Email": "E-post",
@@ -129,12 +129,12 @@
"respTime": "Svartid (ms)",
"notAvailableShort": "N/A",
"Default enabled": "Standard aktivert",
- "Apply on all existing monitors": "Anvend for alle eksisterende overvåkninger",
+ "Apply on all existing monitors": "Bruk for alle eksisterende overvåkninger",
"Create": "Opprett",
"Clear Data": "Slett data",
"Events": "Hendelser",
"Heartbeats": "Hjerteslag",
- "Auto Get": "Auto Hent",
+ "Auto Get": "Auto-hent",
"backupDescription": "Du kan sikkerhetskopiere alle overvåkninger og alle varsler til en JSON-fil.",
"backupDescription2": "PS: Historikk og hendelsesdata er ikke inkludert.",
"backupDescription3": "Følsomme data som varslingstokener er inkludert i eksportfilen. Vennligst oppbevar dem sikkert.",
@@ -146,17 +146,17 @@
"Options": "Alternativer",
"Keep both": "Behold begge",
"Verify Token": "Bekreft token",
- "Setup 2FA": "Konfigurer 2FA",
+ "Setup 2FA": "Sett opp 2FA",
"Enable 2FA": "Aktiver 2FA",
"Disable 2FA": "Deaktiver 2FA",
- "2FA Settings": "2FA Innstillinger",
- "Two Factor Authentication": "To-faktor autentisering",
+ "2FA Settings": "2FA-innstillinger",
+ "Two Factor Authentication": "To-faktor-autentisering",
"Active": "Aktiv",
"Inactive": "Inaktiv",
"Token": "Token",
"Show URI": "Vis URI",
"Tags": "Etiketter",
- "Add New below or Select...": "Legg til nytt nedenfor eller Velg…",
+ "Add New below or Select...": "Legg til nytt nedenfor, eller Velg…",
"Tag with this name already exist.": "Etikett med dette navnet eksisterer allerede.",
"Tag with this value already exist.": "Etikett med denne verdien eksisterer allerede.",
"color": "farge",
@@ -170,8 +170,8 @@
"Purple": "Lilla",
"Pink": "Rosa",
"Search...": "Søk…",
- "Avg. Ping": "Gj.sn. Ping",
- "Avg. Response": "Gj.sn. Respons",
+ "Avg. Ping": "Gj.sn. ping",
+ "Avg. Response": "Gj.sn. respons",
"Entry Page": "Oppføringsside",
"statusPageNothing": "Ingenting her, vennligst legg til en gruppe eller en overvåkning.",
"No Services": "Ingen tjenester",
@@ -196,7 +196,7 @@
"YOUR BOT TOKEN HERE": "DITT BOT TOKEN HER",
"chatIDNotFound": "Chat-ID ble ikke funnet. Send en melding til denne boten først",
"webhook": "Webhook",
- "Post URL": "Post URL",
+ "Post URL": "Post-URL",
"Content Type": "Innholdstype",
"webhookJsonDesc": "{0} er bra for alle moderne HTTP-servere som express.js",
"webhookFormDataDesc": "{multipart} er bra for PHP. JSON trenger å bli analysert med {decodeFunction}",
@@ -215,7 +215,7 @@
"Prefix Custom Message": "Prefiks tilpasset melding",
"Hello @everyone is...": "Hei {'@'}everyone det er…",
"teams": "Microsoft Teams",
- "Webhook URL": "Webhook URL",
+ "Webhook URL": "Webhook-URL",
"wayToGetTeamsURL": "Du kan lære hvordan du oppretter en webhook-URL {0}.",
"signal": "Signal",
"Number": "Nummer",
@@ -224,8 +224,8 @@
"wayToCheckSignalURL": "Du kan sjekke denne nettadressen for å se hvordan du konfigurerer en:",
"signalImportant": "VIKTIG: Du kan ikke blande grupper og nummere i mottakere!",
"gotify": "Gotify",
- "Application Token": "Application Token",
- "Server URL": "Server URL",
+ "Application Token": "Applikasjonstoken",
+ "Server URL": "Server-URL",
"Priority": "Prioritet",
"slack": "Slack",
"Icon Emoji": "Icon Emoji",
@@ -234,7 +234,7 @@
"aboutWebhooks": "Mer informasjon om webhooks på: {0}",
"aboutChannelName": "Skriv inn kanalnavnet på {0} Kanalnavn-feltet hvis du vil omgå webhook-kanalen. Eks: #other-channel",
"aboutKumaURL": "Hvis du lar Uptime Kuma URL feltet være blank, den blir som standard til Github-siden for dette prosjektet.",
- "emojiCheatSheet": "Emoji cheat sheet: {0}",
+ "emojiCheatSheet": "Emoji-jukselapp: {0}",
"rocket.chat": "Rocket.chat",
"pushover": "Pushover",
"pushy": "Pushy",
@@ -265,7 +265,7 @@
"Status:": "Status: {0}",
"Read more": "Les mer",
"appriseInstalled": "Apprise er installert.",
- "appriseNotInstalled": "Apprise ikke installert. {0}",
+ "appriseNotInstalled": "Apprise er ikke installert. {0}",
"Access Token": "Tilgangs-Token",
"Channel access token": "Kanal tilgangs-token",
"Line Developers Console": "Line Utviklserskonsoll",
@@ -288,11 +288,11 @@
"Game": "Spill",
"statusMaintenance": "Vedlikehold",
"Maintenance": "Vedlikehold",
- "Passive Monitor Type": "Passiv Monitor Type",
- "Specific Monitor Type": "Spesifikk Monitor Type",
- "General Monitor Type": "Generell Monitor Type",
- "markdownSupported": "Markdown syntax støttet",
- "Resend Notification if Down X times consecutively": "Send notifikasjon på nytt dersom nede X antall ganger på rad",
+ "Passive Monitor Type": "Passiv monitortype",
+ "Specific Monitor Type": "Spesifikk monitortype",
+ "General Monitor Type": "Generell monitortype",
+ "markdownSupported": "Markdown-formattering støttet",
+ "Resend Notification if Down X times consecutively": "Send varsel på nytt dersom nede X antall ganger på rad",
"Saved.": "Lagret.",
"programmingLanguages": "Programmeringsspråk",
"steamApiKeyDescription": "For å overvåke en Steam-spillserver trenger du en Steam Web-API-nøkkel. Du kan registrere API-nøkkelen din her: ",
@@ -304,20 +304,20 @@
"authUserInactiveOrDeleted": "Denne brukeren er inaktiv eller slettet.",
"High": "Høy",
"smtpDkimSettings": "DKIM Innstillinger",
- "settingUpDatabaseMSG": "Setter opp databasen. Dette kan ta en stund, vennligst vent.",
+ "settingUpDatabaseMSG": "Setter opp databasen. Dette kan ta sin tid, vær tålmodig.",
"Schedule maintenance": "Planlegg vedlikehold",
- "Affected Monitors": "Affekterte monitorer",
- "Start of maintenance": "Vedlikeholds start",
- "All Status Pages": "Alle status sider",
- "Select status pages...": "Velg status sider…",
+ "Affected Monitors": "Berørte monitorer",
+ "Start of maintenance": "Vedlikeholdsstart",
+ "All Status Pages": "Alle statussider",
+ "Select status pages...": "Velg statussider…",
"filterActive": "Aktiv",
"Custom": "Egendefinert",
- "statusPageRefreshIn": "Last inn på nytt : {0}",
- "templateMsg": "notifikasjons melding",
- "templateLimitedToUpDownCertNotifications": "kun tilgjengelig for OPP/NED/Sertifikatutløpsvarsler",
+ "statusPageRefreshIn": "Oppfrisk om: {0}",
+ "templateMsg": "meldingen i varselet",
+ "templateLimitedToUpDownCertNotifications": "kun tilgjengelig for OPP/NED/sertifikatutløpsvarsler",
"templateLimitedToUpDownNotifications": "kun tilgjengelig for OPP/NED varsler",
"Method": "Metode",
- "PasswordsDoNotMatch": "Passordene matcher ikke hverandre.",
+ "PasswordsDoNotMatch": "Passordene stemmer ikke overens.",
"Default": "Standard",
"HTTP Options": "HTTP valg",
"primary": "primær",
@@ -367,20 +367,20 @@
"recurringIntervalMessage": "Kjør en gang daglig | Kjør en gang hver {0} dag",
"tcp": "TCP / HTTP",
"setupDatabaseChooseDatabase": "Hvilken database vil du bruke?",
- "resendDisabled": "Resending deaktivert",
- "setupDatabaseMariaDB": "Koble til en ekstern MariaDB database. Du må angi database tilkoblings informasjon.",
- "setupDatabaseSQLite": "En simpel database fil, anbefalt for små skala installasjoner. I versjoner tidligere enn v2.0.0 brukte Uptime Kuma SQLite som standard.",
+ "resendDisabled": "Sende på nytt deaktivert",
+ "setupDatabaseMariaDB": "Koble til en ekstern MariaDB-database. Du må angi tilkoblingsinformasjon for databasen.",
+ "setupDatabaseSQLite": "En enkel databasefil, anbefalt for småskala-installasjoner. I versjoner tidligere enn v2.0.0 brukte Uptime Kuma SQLite som standarddatabase.",
"needPushEvery": "Du skal forsøke å nå denne URLen hvert {0] sekund(er).",
- "dbName": "Database Navn",
- "resendEveryXTimes": "Resend hver {0} gang(er)",
- "Push URL": "Push URL",
+ "dbName": "Databasenavn",
+ "resendEveryXTimes": "Send på nytt hver {0} gang(er)",
+ "Push URL": "Push-URL",
"pushOptionalParams": "Valgfrie parametere: {0}",
"pushOthers": "Andre",
"styleElapsedTimeShowNoLine": "Vis (Ingen linje)",
"styleElapsedTimeShowWithLine": "Vis (Med linje)",
"endDateTime": "Slutt dag/tid",
"Current User": "Nåværende bruker",
- "Reset Token": "Resett nøkkel",
+ "Reset Token": "Nullstill token",
"Done": "Ferdig",
"Info": "Info",
"Security": "Sikkerhet",
@@ -441,7 +441,7 @@
"timeoutAfter": "Timeout etter {0} sekunder",
"or": "eller",
"filterActivePaused": "Pauset",
- "Add New Tag": "Legg til ny tagg",
+ "Add New Tag": "Legg til ny etikett",
"Certificate Chain": "Sertifikatkjede",
"Valid": "Gyldig",
"Invalid": "Ugyldig",
@@ -502,8 +502,8 @@
"Subject:": "Emne:",
"Home": "Hjem",
"Invert Keyword": "Inverter nøkkelord",
- "Cannot connect to the socket server": "Koble til socket server",
- "Reconnecting...": "kobler til på nytt...",
+ "Cannot connect to the socket server": "Kan ikke koble til socket-server",
+ "Reconnecting...": "Kobler til på nytt...",
"ntfyAuthenticationMethod": "Autentiserings metode",
"No API Keys": "Ingen API nøkler",
"apiKey-active": "Aktiv",
@@ -559,5 +559,39 @@
"emailTemplateStatus": "Status",
"uninstall": "Avinstaller",
"uninstalling": "Avinstallerer",
- "There might be a typing error in the address.": "Det kan være en skrivefeil i adressen."
+ "There might be a typing error in the address.": "Det kan være en skrivefeil i adressen.",
+ "setupDatabaseEmbeddedMariaDB": "Du trenger ikke angi noe. Dette Docker-imaget har integrert og pre-konfigurert MariaDB for deg. Uptime Kuma vil koble seg til denne databasen via en Unix-socket.",
+ "liquidIntroduction": "Maler kan opprettes via Liquid sitt malspråk. Vennligst referer til {0} for informasjon om hvordan dette brukes. Følgende variabler er tilgjengelig:",
+ "webhookAdditionalHeadersDesc": "Angir ekstra headere sendt sammen med webhooken. Hver header bør defineres som et JSON nøkkel/verdi-par.",
+ "HeadersInvalidFormat": "Forespørselsheaderne er ikke gyldig JSON: ",
+ "successKeywordExplanation": "MQTT-nøkkelord som vil anses som gyldig",
+ "Pick Affected Monitors...": "Velg berørte monitorer…",
+ "Search monitored sites": "Søk gjennom overvåkede sider",
+ "templateHeartbeatJSON": "objekt som beskriver hjerteslaget",
+ "templateMonitorJSON": "objekt som beskriver monitoren",
+ "webhookAdditionalHeadersTitle": "Ekstra headere",
+ "webhookBodyPresetOption": "Forhåndsvalg - {0}",
+ "webhookBodyCustomOption": "Egendefinert brødtekst",
+ "Body": "Brødtekst",
+ "Headers": "Headere",
+ "PushUrl": "Push-URL",
+ "BodyInvalidFormat": "Teksten i forespørselen er ikke gyldig JSON: ",
+ "Monitor History": "Overvåkningshistorikk",
+ "clearDataOlderThan": "Behold overvåkningsdata i {0} dager.",
+ "records": "oppføringer",
+ "One record": "En oppføring",
+ "topicExplanation": "MQTT-emne å overvåke",
+ "successKeyword": "Nøkkelord for gyldig respons",
+ "now": "nå",
+ "time ago": "{0} siden",
+ "Json Query Expression": "Json-spørring",
+ "locally configured mail transfer agent": "lokalt konfigurert mailoverføringsagent",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Enten skriv inn vertsnavnet på serveren du ønsker å koble til, eller {localhost} hvis du skal bruke en {local_mta}",
+ "ignoreTLSErrorGeneral": "Ignorer TLS/SSL-feil for tilkobling",
+ "ignoredTLSError": "TLS/SSL-feil har blitt ignorert",
+ "styleElapsedTime": "Medgått tid udner hjerteslagslinjen",
+ "Host URL": "VertsURL",
+ "Monitor": "Monitor | Monitorer",
+ "-year": "-år",
+ "pushViewCode": "Hvordan bruke Push-overvåkning? (Se kode)"
}
diff --git a/src/lang/ne.json b/src/lang/ne.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/src/lang/ne.json
@@ -0,0 +1 @@
+{}
diff --git a/src/lang/nl-NL.json b/src/lang/nl-NL.json
index 65cfa0791..806c921ad 100644
--- a/src/lang/nl-NL.json
+++ b/src/lang/nl-NL.json
@@ -127,7 +127,7 @@
"Create": "Aanmaken",
"Clear Data": "Data wissen",
"Events": "Gebeurtenissen",
- "Heartbeats": "Heartbeats",
+ "Heartbeats": "Hartslagen",
"Auto Get": "Auto Get",
"backupDescription": "U kunt een back-up maken van alle monitoren en alle meldingen in een JSON-bestand.",
"backupDescription2": "PS: Geschiedenis- en gebeurtenisgegevens zijn niet inbegrepen.",
@@ -135,7 +135,7 @@
"alertNoFile": "Selecteer een bestand om te importeren.",
"alertWrongFileType": "Selecteer een JSON-bestand.",
"Verify Token": "Controleer token",
- "Setup 2FA": "2FA instellingen",
+ "Setup 2FA": "Stel 2FA in",
"Enable 2FA": "Schakel 2FA in",
"Disable 2FA": "Schakel 2FA uit",
"2FA Settings": "2FA-instellingen",
@@ -254,7 +254,7 @@
"Channel Name": "Kanaal Naam",
"Uptime Kuma URL": "Uptime Kuma URL",
"aboutWebhooks": "Meer info over Webhooks op: {0}",
- "aboutChannelName": "Voer de kanaal naam in op {0} Kannaal Naam veld als je het Webhook kanaal wilt omzeilen. Bv: #other-channel",
+ "aboutChannelName": "Voer de kanaal naam in op {0} Kanaal naam veld als je het Webhook kanaal wilt omzeilen. Bijv: #other-channel",
"aboutKumaURL": "Als je de Uptime Kuma URL veld leeg laat, wordt standaard het GitHub project pagina weergegeven.",
"emojiCheatSheet": "Emoji cheat sheet: {0}",
"PushByTechulus": "Push door Techulus",
@@ -356,7 +356,6 @@
"Discard": "Weggooien",
"Cancel": "Annuleren",
"Powered by": "Mogelijk gemaakt door",
- "shrinkDatabaseDescription": "Activeer database VACUUM voor SQLite. Als de database na 1.10.0 aangemaakt is, dan staat AUTO_VACUUM al aan en is deze actie niet nodig.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Gebruikersnaam (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API Wachtwoord",
@@ -411,7 +410,7 @@
"Retry": "Opnieuw",
"Topic": "Onderwerp",
"WeCom Bot Key": "WeCom Bot Key",
- "Setup Proxy": "Proxy instellen",
+ "Setup Proxy": "Stel Proxy in",
"Proxy Protocol": "Proxy Protocol",
"Proxy Server": "Proxy Server",
"Proxy server has authentication": "Proxy server heeft authenticatie",
@@ -432,7 +431,7 @@
"Next": "Volgende",
"The slug is already taken. Please choose another slug.": "De slug is al in gebruik. Kies een andere slug.",
"No Proxy": "Geen Proxy",
- "HTTP Basic Auth": "HTTP Basic Auth",
+ "HTTP Basic Auth": "HTTP Basis Authenticatie",
"New Status Page": "Nieuwe Status Pagina",
"Page Not Found": "Pagina Niet gevonden",
"Reverse Proxy": "Reverse Proxy",
@@ -465,24 +464,24 @@
"Show Powered By": "Laat \"Mogeljik gemaakt door\" zien",
"Domain Names": "Domein Namen",
"pushoversounds pushover": "Pushover (standaard)",
- "pushoversounds bike": "Bike",
- "pushoversounds bugle": "Bugle",
- "pushoversounds cashregister": "Cash Register",
+ "pushoversounds bike": "Fiets",
+ "pushoversounds bugle": "Trompet",
+ "pushoversounds cashregister": "Kassa",
"pushoversounds classical": "Classical",
- "pushoversounds cosmic": "Cosmic",
- "pushoversounds falling": "Falling",
+ "pushoversounds cosmic": "Buitenaards",
+ "pushoversounds falling": "Vallend",
"pushoversounds gamelan": "Gamelan",
- "pushoversounds incoming": "Incoming",
- "pushoversounds intermission": "Intermission",
- "pushoversounds magic": "Magic",
- "pushoversounds mechanical": "Mechanical",
+ "pushoversounds incoming": "Inkomend",
+ "pushoversounds intermission": "Pauze",
+ "pushoversounds magic": "Magie",
+ "pushoversounds mechanical": "Mechanisch",
"pushoversounds pianobar": "Piano Bar",
- "pushoversounds siren": "Siren",
- "pushoversounds spacealarm": "Space Alarm",
+ "pushoversounds siren": "Sirene",
+ "pushoversounds spacealarm": "Ruimte Alarm",
"pushoversounds tugboat": "Tug Boat",
"pushoversounds alien": "Alien Alarm (long)",
"pushoversounds climb": "Climb (long)",
- "pushoversounds persistent": "Persistent (long)",
+ "pushoversounds persistent": "Aanhoudend (lang)",
"pushoversounds echo": "Pushover Echo (long)",
"pushoversounds updown": "Up Down (long)",
"pushoversounds vibrate": "Alleen trillen",
@@ -529,13 +528,13 @@
"Workstation": "Werkstation",
"disableCloudflaredNoAuthMsg": "De \"Geen authenticatie\" modus staat aan, wachtwoord is niet vereist.",
"backupOutdatedWarning": "Deprecated: Er zijn een hoop nieuwe functies toegevoegd en daarom is de backup functie niet onderhouden, het is op dit moment niet mogelijk om een volledige backup te maken en te herstellen.",
- "RadiusSecret": "Radius Secret",
+ "RadiusSecret": "Radius Geheim",
"RadiusSecretDescription": "Shared Secret tussen client en server",
- "API Key": "API Key",
+ "API Key": "API Sleutel",
"Connection Type": "Verbindingstype",
"Docker Daemon": "Docker Daemon",
"Trust Proxy": "Trust Proxy",
- "Setup Docker Host": "Docker Host instellen",
+ "Setup Docker Host": "Stel Docker Host in",
"tcp": "TCP / HTTP",
"Optional": "Optioneel",
"socket": "Socket",
@@ -650,8 +649,8 @@
"smseagleTo": "Telefoonnummer(s)",
"Custom Monitor Type": "Custom Monitor Type",
"trustProxyDescription": "'X-Forwarded-*' headers vertrouwen. Als je de correcte client IP wilt krijgen en de Uptime Kuma installatie is achter een proxy zoals Nginx of Apache, schakel dan dit in.",
- "RadiusCalledStationId": "Called Station Id",
- "RadiusCalledStationIdDescription": "Identifier of the called device",
+ "RadiusCalledStationId": "Genoemde stations ID",
+ "RadiusCalledStationIdDescription": "Identificatie van het genoemde apparaat",
"RadiusCallingStationId": "Calling Station Id",
"ZohoCliq": "ZohoCliq",
"Long-Lived Access Token": "Long-Lived Access Token",
@@ -790,7 +789,7 @@
"Badge Warn Days": "Badge Waarschuwing dagen",
"Badge Down Days": "Badge Offline dagen",
"Badge Style": "Badge stijl",
- "chromeExecutable": "Chrome/Chromium Executable",
+ "chromeExecutable": "Chrome/Chromium Uitvoerbaar bestand",
"chromeExecutableAutoDetect": "Automatisch detecteren",
"Edit Maintenance": "Onderhoud bewerken",
"Badge Label": "Badge Label",
@@ -854,7 +853,7 @@
"Check/Uncheck": "Vink/Ontvink",
"tailscalePingWarning": "Om de Tailscale Ping-monitor te kunnen gebruiken, moet u Uptime Kuma zonder Docker installeren en ook de Tailscale-client op uw server installeren.",
"selectedMonitorCount": "Geselecteerd: {0}",
- "wayToGetFlashDutyKey": "Ga naar Kanaal -> (Kies een kanaal) -> Integraties -> Voeg een nieuwe integratie toe, voeg een 'Custom Event' toe om een push-adres te verkrijgen, kopieer de integratiesleutel in het adres-veld. Voor meer informatie, zie",
+ "wayToGetFlashDutyKey": "Ga naar Kanaal -> (Kies een kanaal) -> Integraties -> Voeg een nieuwe integratie toe, voeg een nieuwe 'Uptime Kuma' toe om een push-adres te verkrijgen, kopieer de integratiesleutel in het adres-veld. Voor meer informatie, zie",
"gamedigGuessPortDescription": "De poort die wordt gebruikt door het Valve Server Query Protocol kan verschillen van de clientpoort. Probeer dit als de monitor geen verbinding kan maken met je server.",
"authUserInactiveOrDeleted": "De gebruiker is inactief of verwijderd.",
"authInvalidToken": "Ongeldig token.",
@@ -956,5 +955,158 @@
"Mentioning": "Vermelden",
"receiverSevenIO": "Nummer ontvangen",
"receiverInfoSevenIO": "Als het ontvangende nummer zich niet in Duitsland bevindt, moet u de landcode vóór het nummer zetten (bijvoorbeeld voor de landcode 1 uit de VS gebruikt u 117612121212 in plaats van 017612121212)",
- "apiKeySevenIO": "SevenIO API Sleutel"
+ "apiKeySevenIO": "SevenIO API Sleutel",
+ "wayToGetThreemaGateway": "Je kunt je registreren voor Threema Gateway {0}.",
+ "threemaRecipient": "Ontvanger",
+ "threemaRecipientType": "Type ontvanger",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8 Karakters",
+ "threemaRecipientTypePhone": "Telefoonnummer",
+ "threemaRecipientTypePhoneFormat": "E.164, zonder voorgaande +",
+ "threemaSenderIdentityFormat": "8 karakters, begint normaal met een *",
+ "smspartnerPhoneNumber": "Telefoonnummer(s)",
+ "smspartnerSenderNameInfo": "Moet tussen 3..=11 reguliere karakters zijn",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
+ "wayToGetBitrix24Webhook": "Je kunt een webhook maken door de stappen bij {0} te volgen",
+ "bitrix24SupportUserID": "Voer je gebruikers ID van Bitrix25 in. Je kunt dit achterhalen uit de link naar je gebruikersprofiel.",
+ "apiKeysDisabledMsg": "API-Sleutels zijn uitgeschakeld omdat authenticatie niet is ingeschakeld.",
+ "smspartnerApiurl": "Je kunt je API-sleutel vinden in je dashboard bij {0}",
+ "smspartnerPhoneNumberHelptext": "Het nummer moet in het internationale format {0}, {1} zijn. Meerdere nummers moeten gescheiden zijn door {2}",
+ "Command": "Commando",
+ "mongodbCommandDescription": "Draai een MongoDB commando tegen de database. Voor meer informatie over beschikbare commando's, raadpleeg de {documentation}",
+ "threemaBasicModeInfo": "Notitie: Deze integratie gebruikt Threema Gateway in de basis modus (server gebaseerde versleuteling). Meer details vind je hier {0}.",
+ "Select message type": "Selecteer bericht type",
+ "Send to channel": "Stuur naar kanaal",
+ "Create new forum post": "Maak nieuw forum bericht",
+ "Refresh Interval": "Ververs interval",
+ "Refresh Interval Description": "De status pagina zal elke {0} seconden een volledige website verversing doen",
+ "ignoreTLSErrorGeneral": "Negeer TLS/SSL-fout voor verbinding",
+ "forumPostName": "Forum bericht naam",
+ "threadForumPostID": "Thread / Forum bericht ID",
+ "e.g. {discordThreadID}": "bijv. {discordThreadID}",
+ "whatHappensAtForumPost": "Maak een nieuw forum bericht. Dit stuurt GEEN berichten in bestaande forum berichten. Om naar een bestaand forum een nieuw bericht te sturen, gebruik \"{option}\"",
+ "postToExistingThread": "Plaats op bestaande thread / forum bericht",
+ "wayToGetDiscordThreadId": "Verkrijgen van een thread / forum bericht id is vergelijkbaar met het verkrijgen van een kanaal id. Lees meer over het verkrijgen van ids {0}",
+ "threemaRecipientTypeEmail": "E-mailadres",
+ "threemaSenderIdentity": "Gateway ID",
+ "threemaApiAuthenticationSecret": "Gateway ID Geheim",
+ "smspartnerSenderName": "SMS afzender naam",
+ "and": "en",
+ "snmpCommunityStringHelptext": "Deze string fungeert als een wachtwoord om toegang tot SNMP-apparaten te verifiëren en te beheren. Match het met de configuratie van uw SNMP-apparaat.",
+ "groupOnesenderDesc": "Zorg ervoor dat de GroupID juist is. Om een bericht naar een groep te sturen, bijvoorbeeld: 628123456789-342345",
+ "privateOnesenderDesc": "Zorg ervoor dat het telefoonnummer juist is. Om een bericht te sturen naar een privé telefoonnummer, bijvoorbeeld: 628123456789",
+ "now": "nu",
+ "time ago": "{0} geleden",
+ "-year": "-jaar",
+ "cacheBusterParamDescription": "Willekeurig gegenereerde parameter om caches over te slaan.",
+ "OID (Object Identifier)": "OID (Object indentificatie)",
+ "snmpOIDHelptext": "Voer de OID in voor de sensor of status die u wilt monitoren. Gebruik netwerkbeheertools zoals MIB-browsers of SNMP-software als u niet zeker bent over de OID.",
+ "Condition": "Conditie",
+ "SNMP Version": "SNMP Versie",
+ "Please enter a valid OID.": "Voer a.u.b. een geldige OID in.",
+ "Host Onesender": "Host Onesender",
+ "Token Onesender": "Token Onesender",
+ "Recipient Type": "Ontvanger Type",
+ "Private Number": "Privé Nummer",
+ "Group ID": "Groep ID",
+ "wayToGetOnesenderUrlandToken": "U kunt de URL en Token krijgen door naar de Onesender website te gaan. Meer informatie {0}",
+ "Add Remote Browser": "Externe browser toevoegen",
+ "New Group": "Nieuwe Groep",
+ "Group Name": "Groeps naam",
+ "OAuth2: Client Credentials": "OAuth2: Client referenties",
+ "Authentication Method": "Authenticatie methode",
+ "Authorization Header": "Autorisatie Header",
+ "OAuth Token URL": "OAuth Token URL",
+ "Client ID": "Client ID",
+ "Client Secret": "Client geheim",
+ "Go back to home page.": "Ga terug naar de home pagina.",
+ "No tags found.": "Geen tags gevonden.",
+ "Lost connection to the socket server.": "Verbinding met de socketserver verloren.",
+ "Cannot connect to the socket server.": "Kan geen verbinding maken met de socketserver.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook URL",
+ "signl4Docs": "Meer informatie over het configureren van SIGNL4 en het verkrijgen van de SIGNL4-webhook-URL kunt u hier vinden {0}.",
+ "Conditions": "Voorwaarden",
+ "conditionAdd": "Voorwaarde toevoegen",
+ "conditionDelete": "Voorwaarde verweideren",
+ "conditionAddGroup": "Groep toevoegen",
+ "conditionDeleteGroup": "Groep verweideren",
+ "conditionValuePlaceholder": "Waarde",
+ "contains": "bevat",
+ "not contains": "bevat niet",
+ "starts with": "start met",
+ "not starts with": "start niet met",
+ "ends with": "eindigt met",
+ "not ends with": "eindigt niet met",
+ "less than": "minder dan",
+ "greater than": "groter dan",
+ "record": "dossier",
+ "jsonQueryDescription": "Parseer en haal specifieke gegevens uit de JSON-respons van de server met behulp van JSON-query of gebruik \"$\" voor de onbewerkte respons, als u geen JSON verwacht. Het resultaat wordt vervolgens vergeleken met de verwachte waarde, als strings. Zie {0} voor documentatie en gebruik {1} om te experimenteren met query's.",
+ "rabbitmqNodesDescription": "Voer het URL voor de RabbitMQ beheer nodes inclusief protocol en poort in. Bijvoorbeeld: {0}",
+ "rabbitmqNodesRequired": "Aub stel de knooppunten voor deze monitor in.",
+ "rabbitmqNodesInvalid": "Gebruik een volledig gekwalificeerde (beginnend met 'http') URL voor de RabbitMQ nodes.",
+ "RabbitMQ Username": "RabbitMQ gebruikersnaam",
+ "RabbitMQ Password": "RabbitMQ wachtwoord",
+ "rabbitmqHelpText": "Om gebruik te maken van de monitor moet je de Management Plugin in de RabbitMQ setup aanzetten. Voor meer informatie zie de {rabitmq_documentatie}.",
+ "SendGrid API Key": "SendGrid API sleutel",
+ "Separate multiple email addresses with commas": "Splits meerdere emailadressen met kommas",
+ "RabbitMQ Nodes": "RabbitMQ beheer Nodes",
+ "shrinkDatabaseDescriptionSqlite": "Trigger database {vacuum} voor SQLite. {auto_vacuum} is al ingeschakeld, maar hiermee wordt de database niet gedefragmenteerd en worden ook databasepagina's niet afzonderlijke opnieuw ingepakt zoals de opdracht {vacuum} dat doet.",
+ "aboutSlackUsername": "Verandert de weergavenaam van de afzender. Als je iemand wil vermelden, voeg dit dan aan de vriendelijke naam toe.",
+ "cacheBusterParam": "Voeg de {0} parameter",
+ "Form Data Body": "Formulier Gegevens Body",
+ "Optional: Space separated list of scopes": "Optioneel: door spaties gescheiden lijst met scopes",
+ "Alphanumerical string and hyphens only": "Alleen alfanumerieke tekens en streepjes",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Tijdsgevoelige meldingen worden meteen afgeleverd, zelfs als het apparaat in niet storen modus staat.",
+ "Message format": "Bericht opmaak",
+ "Send rich messages": "Verstuur berichten met opmaak",
+ "OAuth Scope": "OAuth bereik",
+ "equals": "hetzelfde als",
+ "not equals": "niet gelijk aan",
+ "less than or equal to": "minder dan of gelijk aan",
+ "greater than or equal to": "meer dan of gelijk aan",
+ "Notification Channel": "Notificatie kanaal",
+ "Sound": "Geluid",
+ "Arcade": "Speelhal",
+ "Correct": "Goed",
+ "Fail": "Mislukt",
+ "Harp": "Harp",
+ "Reveal": "Laat zien",
+ "Bubble": "Bubbel",
+ "Doorbell": "Deurbel",
+ "Flute": "Fluit",
+ "Money": "Geld",
+ "Scifi": "Science fiction",
+ "Guitar": "Gitaar",
+ "Custom sound to override default notification sound": "Aangepast geluid om het standaard geluid te vervangen",
+ "Time Sensitive (iOS Only)": "Tijdsgevoelig (alleen voor iOs)",
+ "From": "Van",
+ "Can be found on:": "Kan gevonden worden op: {0}",
+ "The phone number of the recipient in E.164 format.": "Het telefoonnummer van de ontvanger in E.164 formaat.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Ofwel een sms zender ID of een telefoonnummer in E.164 formaat als je reacties wil ontvangen.",
+ "Clear": "Helder",
+ "Elevator": "Lift",
+ "Pop": "Pop",
+ "Community String": "Gemeenschapsreeks",
+ "Json Query Expression": "JSON Query Expressie",
+ "ignoredTLSError": "TLS/SSL-fouten zijn genegeerd",
+ "telegramServerUrl": "(Optioneel) Server Url",
+ "telegramServerUrlDescription": "Om de beperkingen van Telegram's bot api op te heffen of toegang te krijgen in geblokkeerde gebieden (China, Iran, enz.). Klik voor meer informatie op {0}. Standaard: {1}",
+ "wahaSession": "Sessie",
+ "wahaChatId": "Chat-ID (telefoonnummer / contact-ID / groeps-ID)",
+ "wayToGetWahaApiUrl": "Je WAHA Instance URL.",
+ "wayToGetWahaApiKey": "API Key is de WHATSAPP_API_KEY omgevingsvariabele die je hebt gebruikt om WAHA uit te voeren.",
+ "wayToGetWahaSession": "Vanaf deze sessie stuurt WAHA meldingen naar Chat ID. Je kunt deze vinden in WAHA Dashboard.",
+ "wayToWriteWahaChatId": "Het telefoonnummer met het internationale voorvoegsel, maar zonder het plusteken aan het begin ({0}), de contact-ID ({1}) of de groeps-ID ({2}). Vanuit WAHA Sessie worden meldingen naar deze Chat-ID verzonden.",
+ "YZJ Robot Token": "YZJ Robot token",
+ "Plain Text": "Platte tekst",
+ "Message Template": "Bericht Sjabloon",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "Template Format": "Sjabloonformaat",
+ "templateServiceName": "service naam",
+ "templateHostnameOrURL": "hostnaam of url",
+ "templateStatus": "status",
+ "telegramUseTemplate": "Gebruik aangepaste bericht sjabloon",
+ "telegramTemplateFormatDescription": "Telegram staat het gebruik van verschillende opmaaktalen voor berichten toe, zie Telegram {0} voor specifieke details.",
+ "telegramUseTemplateDescription": "Indien ingeschakeld, wordt het bericht verzonden met een aangepaste sjabloon."
}
diff --git a/src/lang/pl.json b/src/lang/pl.json
index fd9c6e821..fd96faef6 100644
--- a/src/lang/pl.json
+++ b/src/lang/pl.json
@@ -54,7 +54,7 @@
"Delete": "Usuń",
"Current": "Aktualny",
"Uptime": "Czas pracy",
- "Cert Exp.": "Certyfikat wygasa",
+ "Cert Exp.": "Data ważności certyfikatu.",
"day": "dzień | dni",
"-day": "dni",
"hour": "godzina",
@@ -294,7 +294,7 @@
"emailCustomSubject": "Niestandardowy temat",
"checkPrice": "Sprawdź ceny {0}:",
"octopushLegacyHint": "Czy używasz starszej wersji Octopush (2011-2020) czy nowej wersji?",
- "Feishu WebHookUrl": "Feishu WebHookURL",
+ "Feishu WebHookUrl": "Adres webhooka Feishu",
"matrixHomeserverURL": "Adres URL serwera domowego (z http(s):// i opcjonalnie port)",
"Internal Room Id": "Wewnętrzne ID pokoju",
"matrixDesc1": "Możesz znaleźć wewnętrzne ID pokoju, patrząc w zaawansowanej sekcji ustawień pokoju w twoim kliencie Matrix. Powinien on wyglądać jak !QMdRCpUIfLwsfjxye6:home.server.",
@@ -354,7 +354,6 @@
"Discard": "Odrzuć",
"Cancel": "Anuluj",
"Powered by": "Napędzane przez",
- "shrinkDatabaseDescription": "Uruchom VACUUM na bazie SQLite. Jeżeli twoja baza została stworzona po wersji 1.10.0, to ma już włączoną opcję AUTO_VACUUM i stosowanie ręcznego oczyszczania nie jest potrzebne.",
"clicksendsms": "ClickSend SMS",
"apiCredentials": "Poświadczenia API",
"serwersms": "SerwerSMS.pl",
@@ -411,7 +410,7 @@
"SignName": "Podpis",
"Sms template must contain parameters: ": "Szablon sms musi posiadać parametry: ",
"Bark Endpoint": "Punkt końcowy Bark",
- "WebHookUrl": "WebHookUrl",
+ "WebHookUrl": "Adres webhooka",
"SecretKey": "Tajny klucz",
"For safety, must use secret key": "Ze względów bezpieczeństwa musisz użyć tajnego klucza",
"Device Token": "Token urządzenia",
@@ -800,7 +799,7 @@
"showCertificateExpiry": "Pokaż wygaśnięcie certyfikatu",
"gamedigGuessPortDescription": "Port używany przez Valve Server Query Protocol może różnić się od portu klienta. Spróbuj tego, jeśli monitor nie może połączyć się z serwerem.",
"Secret AccessKey": "Tajny klucz AccessKey",
- "wayToGetFlashDutyKey": "Możesz przejść do Channel -> (Select a Channel) -> Integrations -> Add a new integration' page, dodać \"Custom Event\", aby uzyskać adres push, skopiować klucz integracji w adresie. Więcej informacji można znaleźć na stronie",
+ "wayToGetFlashDutyKey": "Możesz przejść do Channel -> (Select a Channel) -> Integrations -> Add a new integration' page, dodać \"Uptime Kuma\", aby uzyskać adres push, skopiować klucz integracji w adresie. Więcej informacji można znaleźć na stronie",
"Badge Down Color": "Kolor odznaki Offline",
"Notify Channel": "Powiadom kanał",
"Request Timeout": "Limit czasu żądania",
@@ -842,7 +841,7 @@
"Json Query": "Zapytanie Json",
"enableNSCD": "Włącz NSCD (Name Service Cache Daemon) do buforowania wszystkich żądań DNS",
"Saved.": "Zapisano.",
- "setupDatabaseChooseDatabase": "Której bazy danych chcesz użyć?",
+ "setupDatabaseChooseDatabase": "Której bazy danych chcesz używać?",
"setupDatabaseEmbeddedMariaDB": "Nie musisz niczego ustawiać. Ten obraz docker automatycznie osadził i skonfigurował MariaDB. Uptime Kuma połączy się z tą bazą danych za pośrednictwem gniazda Unix.",
"setupDatabaseMariaDB": "Połącz z zewnętrzną bazą danych MariaDB. Należy ustawić informacje o połączeniu z bazą danych.",
"setupDatabaseSQLite": "Prosty plik bazy danych, zalecany do wdrożeń na małą skalę. Przed wersją 2.0.0 Uptime Kuma używała SQLite jako domyślnej bazy danych.",
@@ -921,7 +920,202 @@
"Mentioning": "Oznaczenia",
"Don't mention people": "Nie oznaczaj nikogo",
"Mention group": "Oznacz {group}",
- "Channel access token (Long-lived)": "Token dostępu kanału (długotrwały)",
+ "Channel access token (Long-lived)": "Token dostępu do kanału (długotrwały)",
"Your User ID": "Twój identyfikator użytkownika",
- "locally configured mail transfer agent": "lokalnie skonfigurowany serwer poczty"
+ "locally configured mail transfer agent": "lokalnie skonfigurowany serwer poczty",
+ "documentationOf": "{0} Dokumentacja",
+ "wayToGetHeiiOnCallDetails": "Jak uzyskać identyfikator wyzwalacza i klucze API wyjaśniono w {dokumentacji}",
+ "Select message type": "Wybierz typ wiadomości",
+ "Create new forum post": "Utwórz nowy post na forum",
+ "whatHappensAtForumPost": "Utwórz nowy post na forum. NIE powoduje to opublikowania wiadomości w istniejącym poście. Aby opublikować wiadomość w istniejącym poście, użyj \"{option}\"",
+ "callMeBotGet": "Tutaj możesz wygenerować punkt końcowy dla {0}, {1} i {2}. Należy pamiętać, że mogą wystąpić ograniczenia szybkości. Limity szybkości wydają się być następujące: {3}",
+ "Command": "Polecenie",
+ "mongodbCommandDescription": "Uruchom polecenie MongoDB względem bazy danych. Aby uzyskać informacje na temat dostępnych poleceń, sprawdź {documentation}",
+ "max 11 alphanumeric characters": "maksymalnie 11 znaków alfanumerycznych",
+ "Originator type": "Typ nadawcy",
+ "Alphanumeric (recommended)": "Alfanumeryczne (zalecane)",
+ "smspartnerApiurl": "Klucz API można znaleźć na pulpicie nawigacyjnym pod adresem {0}",
+ "smspartnerPhoneNumber": "Numer(y) telefonu(ów)",
+ "smspartnerPhoneNumberHelptext": "Numer musi być w międzynarodowym formacie {0}, {1}. Kilka numerów musi być oddzielonych znakiem {2}",
+ "smspartnerSenderName": "Nazwa nadawcy wiadomości SMS",
+ "smspartnerSenderNameInfo": "Musi zawierać między 3..=11 zwykłych znaków",
+ "Telephone number": "Nr telefonu",
+ "To Phone Number": "Na numer telefonu",
+ "Destination": "Miejsce docelowe",
+ "Bitrix24 Webhook URL": "Adres URL usługi Bitrix24 Webhook",
+ "wayToGetBitrix24Webhook": "Webhook można utworzyć, wykonując czynności opisane na stronie {0}",
+ "gtxMessagingToHint": "Format międzynarodowy, z początkowym \"+\" ({e164}, {e212} lub {e214})",
+ "wayToGetSevenIOApiKey": "Odwiedź pulpit nawigacyjny pod adresem app.seven.io > deweloper > klucz api > zielony przycisk dodawania",
+ "cellsyntOriginator": "Widoczny na telefonie komórkowym odbiorcy jako inicjator wiadomości. Dozwolone wartości i funkcja zależą od parametru originatortype.",
+ "cellsyntSplitLongMessages": "Dzielenie długich wiadomości na maksymalnie 6 części. 153 x 6 = 918 znaków.",
+ "max 15 digits": "maksymalnie 15 cyfr",
+ "bitrix24SupportUserID": "Wprowadź swój identyfikator użytkownika w Bitrix24. Identyfikator można znaleźć w linku, przechodząc do profilu użytkownika.",
+ "gtxMessagingApiKeyHint": "Klucz API można znaleźć na stronie: My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "cellsyntOriginatortypeAlphanumeric": "Ciąg alfanumeryczny (maksymalnie 11 znaków alfanumerycznych). Odbiorcy nie mogą odpowiedzieć na wiadomość.",
+ "Send to channel": "Wyślij do kanału",
+ "postToExistingThread": "Opublikuj w istniejącym wątku / poście na forum",
+ "forumPostName": "Nazwa posta na forum",
+ "threadForumPostID": "Identyfikator wątku/postu na forum",
+ "e.g. {discordThreadID}": "np. {discordThreadID}",
+ "wayToGetDiscordThreadId": "Uzyskiwanie identyfikatora wątku / postu na forum jest podobne do uzyskiwania identyfikatora kanału. Przeczytaj więcej o tym, jak uzyskać identyfikatory {0}",
+ "cellsyntDestination": "Numer telefonu odbiorcy w formacie międzynarodowym z początkowym 00, po którym następuje numer kierunkowy kraju, np. 00447920110000 dla numeru w Wielkiej Brytanii 07920 110 000 (łącznie maksymalnie 17 cyfr). Maksymalnie 25000 odbiorców oddzielonych przecinkami na żądanie HTTP.",
+ "Allow Long SMS": "Zezwalaj na długie wiadomości SMS",
+ "Host URL": "Adres URL hosta",
+ "Refresh Interval": "Częstotliwość odświeżania",
+ "Refresh Interval Description": "Strona stanu będzie odświeżać całą witrynę co {0} sekund",
+ "ignoreTLSErrorGeneral": "Ignorowanie błędu TLS/SSL dla połączenia",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Wprowadź nazwę hosta serwera, z którym chcesz się połączyć lub {localhost}, jeśli zamierzasz użyć {local_mta}",
+ "senderSevenIO": "Wysyłany numer lub nazwa",
+ "receiverSevenIO": "Numer odbiorcy",
+ "receiverInfoSevenIO": "Jeśli numer odbiorczy nie znajduje się w Niemczech, należy dodać kod kraju przed numerem (np. dla kodu kraju 1 z USA należy użyć 117612121212 zamiast 017612121212)",
+ "apiKeySevenIO": "Klucz API SevenIO",
+ "wayToWriteWhapiRecipient": "Numer telefonu z prefiksem międzynarodowym, ale bez znaku plus na początku ({0}), identyfikator kontaktu ({1}) lub identyfikator grupy ({2}).",
+ "wayToGetWhapiUrlAndToken": "Adres URL API i token można uzyskać, przechodząc do żądanego kanału z {0}",
+ "Originator": "Nadawca",
+ "whapiRecipient": "Nr telefonu / ID kontaktu / ID grupy",
+ "API URL": "URL dla API",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "Od numeru telefonu / adresu początkowego ścieżki transmisji (TPOA)",
+ "gtxMessagingFromHint": "W telefonach komórkowych odbiorcy widzą TPOA jako nadawcę wiadomości. Dozwolone jest do 11 znaków alfanumerycznych, krótki kod, lokalny długi kod lub numery międzynarodowe ({e164}, {e212} lub {e214})",
+ "cellsyntOriginatortypeNumeric": "Wartość numeryczna (maks. 15 cyfr) z numerem telefonu w formacie międzynarodowym bez początkowego 00 (np. brytyjski numer 07920 110 000 powinien być ustawiony jako 447920110000). Odbiorcy mogą odpowiedzieć na wiadomość.",
+ "threemaRecipient": "Odbiorca",
+ "threemaRecipientType": "Typ odbiorcy",
+ "threemaRecipientTypeIdentity": "Threema ID",
+ "threemaRecipientTypeIdentityFormat": "8 znaków",
+ "threemaRecipientTypePhone": "Numer telefonu",
+ "threemaRecipientTypePhoneFormat": "E.164, bez znaku + na początku",
+ "threemaRecipientTypeEmail": "Adres e-mail",
+ "threemaSenderIdentity": "Gateway ID",
+ "threemaApiAuthenticationSecret": "Hasło Gateway ID",
+ "wayToGetThreemaGateway": "Możesz zarejestrować się w Threema Gateway {0}.",
+ "threemaSenderIdentityFormat": "8 znaków, zwykle zaczyna się od *",
+ "threemaBasicModeInfo": "Uwaga: Ta integracja korzysta z Threema Gateway w trybie podstawowym (szyfrowanie po stronie serwera). Więcej szczegółów można znaleźć {0}.",
+ "apiKeysDisabledMsg": "Klucze API są wyłączone, ponieważ wyłączone jest uwierzytelnianie.",
+ "-year": "-rok",
+ "and": "i",
+ "now": "teraz",
+ "cacheBusterParam": "Dodaj parametr {0}",
+ "CopyToClipboardError": "Błąd podczas kopiowania do schowka: {error}",
+ "CurlDebugInfo": "Aby zdebugować monitor, możesz wkleić ten ciąg do terminala na swojej maszynie lub na maszynie gdzie uptime kuma jest uruchomina aby zobaczyć co żądasz.{newiline} Miej na uwadzę różnice sieciowe takich jak {firewalls}, {dns_resolvers} lub {docker_networks}.",
+ "shrinkDatabaseDescriptionSqlite": "Zażądaj {vacuum} bazy dla SQLite. {auto_vacuum} jest już włączone jednak nie defragmentuje to bazy ani nie przepakowuje indywidualnych stron bazy w taki sam sposób jak robi to polecenie {vacuum}.",
+ "cacheBusterParamDescription": "Losowo wygenerowany parametr w celu pominięcia pamięci podręcznej.",
+ "Group Name": "Nazwa grupy",
+ "OAuth2: Client Credentials": "OAuth2: Poświadczenia klienta",
+ "signl4Docs": "Aby zdobyć więcej informacji jak skonfigurować SIGNL4 i jak zdobyć odnośnik webhooka SIGNL4 udaj się do {0}.",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Czasowo wrażliwe powiadomienia zostaną dostarczone natychmiastowo, nawet jeśli urzadzenie jest w trybie nie przeszkadzać.",
+ "time ago": "{0} temu",
+ "Json Query Expression": "Wyrażenie zapytania JSON",
+ "Condition": "Warunek",
+ "snmpCommunityStringHelptext": "Ten ciąg funkcjonuje jako hasło do uwierzytelnienia i kontroli dostęp do urządzeń SNMP. Dopasuj go do konfiguracji urządzenia SNMP.",
+ "SNMP Version": "Wersja SNMP",
+ "OID (Object Identifier)": "OID (Identyfikator obiektu)",
+ "snmpOIDHelptext": "Wprowadź OID sensora lub statusu który chcesz monitorować. Użyj narzędzia do zarządzania siecią jak przeglądarki MIB lub oprogramowanie SNMP jeśli nie masz pewności co do OID.",
+ "Please enter a valid OID.": "Wprowadź poprawny OID.",
+ "Host Onesender": "Serwer Onesender",
+ "Token Onesender": "Token Onesender",
+ "Recipient Type": "Typ odbiorcy",
+ "Go back to home page.": "Powróć do strony domowej.",
+ "No tags found.": "Nie znaleziono etykiet.",
+ "Authorization Header": "Nagłówek autoryzacji",
+ "Form Data Body": "Treść danych formularza",
+ "OAuth Token URL": "Odnośnik tokena OAuth",
+ "Client ID": "Identyfikator klienta",
+ "Client Secret": "Sekret klienta",
+ "OAuth Scope": "Zakres OAuth",
+ "Optional: Space separated list of scopes": "Opcjonalne: Oddzielona spacją lista zakresów",
+ "SIGNL4 Webhook URL": "Odnośnik webhooka SIGNL4",
+ "Lost connection to the socket server.": "Utracono połączenie z serwerem gniazd.",
+ "Cannot connect to the socket server.": "Nie można połączyć się z serwerem gniazd.",
+ "SIGNL4": "SIGNL4",
+ "less than": "mniej niż",
+ "Conditions": "Warunek",
+ "conditionAdd": "Dodaj warunek",
+ "conditionDelete": "Usuń warunek",
+ "conditionAddGroup": "Dodaj grupę",
+ "conditionDeleteGroup": "Usuń grupę",
+ "conditionValuePlaceholder": "Wartość",
+ "equals": "równa się",
+ "not equals": "nie jest równe",
+ "contains": "zawiera",
+ "not contains": "nie zawiera",
+ "starts with": "zaczyna się od",
+ "not starts with": "nie zaczyna się od",
+ "ends with": "kończy się",
+ "ignoredTLSError": "Błędy TLS/SSL zostały zignorowane",
+ "Debug": "Debuguj",
+ "Copy": "Kopiuj",
+ "CopyToClipboardSuccess": "Skopiowano!",
+ "firewalls": "zapory sieciowe",
+ "dns resolvers": "serwery rozwiązywania nazw domenowych",
+ "docker networks": "sieci docker",
+ "CurlDebugInfoOAuth2CCUnsupported": "Pełen ciąg poświadczeń klienta oauth nie jest obsługiwany w {curl}.{newline}Zdobądź bearer token i przekaż go przez opcję {oauth2_bearer}.",
+ "CurlDebugInfoProxiesUnsupported": "Obsługa proxy w powyższym poleceniu {curl} nie jest aktualnie zaimplementowana.",
+ "Message format": "Format wiadomości",
+ "Send rich messages": "Wysyłaj rozbudowane wiadomości",
+ "Community String": "Ciąg community",
+ "Private Number": "Numer prywatny",
+ "groupOnesenderDesc": "Upewnij się, że GroupID jest poprawne. Aby wysłać wiadomość do grupy, np.: 628123456789-342345",
+ "privateOnesenderDesc": "Upewnij się, że numer telefonu jest poprawny. Aby wysłać wiadomość do prywatnego numeru, np.: 628123456789",
+ "Group ID": "ID grupy",
+ "wayToGetOnesenderUrlandToken": "Aby zdobyć odnośnik i token udaj się na stronę Onesender. Więcej informacji {0}",
+ "Add Remote Browser": "Dodaj zdalną przeglądarkę",
+ "New Group": "Nowa grupa",
+ "Authentication Method": "Metoda uwierzytelnienia",
+ "not ends with": "nie kończy się",
+ "greater than": "więcej niż",
+ "less than or equal to": "mniej lub równe",
+ "greater than or equal to": "więcej lub równe",
+ "record": "rekord",
+ "Notification Channel": "Kanał powiadomień",
+ "Sound": "Dźwięk",
+ "Alphanumerical string and hyphens only": "Tylko ciąg alfanumeryczny i dywiz (kreska)",
+ "Time Sensitive (iOS Only)": "Czasowo wrażliwe (tylko iOS)",
+ "From": "Od",
+ "Can be found on:": "Może być znalezione w: {0}",
+ "The phone number of the recipient in E.164 format.": "Numer telefonu odbiorcy w formacie E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Identyfikator wysyłającego wiadomość lub numer telefonu w formacie E.164 jeśli chcesz otrzymywać odpowiedzi.",
+ "jsonQueryDescription": "Przetwórz i wyciągnij specyficzne dane z odpowiedzi JSON serwera używając zapytania JSON lub użyj \"$\" dla nieprzetworzonej odpowiedzi, jeśli nie spodziewasz się formatu JSON. Wynik jest następnie porównywany, jako ciągi, do spodziewanej wartości. Po dokumetnację zobacz {0} lub użyj {1} aby poeksperymentować z zapytaniami.",
+ "Custom sound to override default notification sound": "Własny dzwięk nadpisujący domyślny dzwięk powiadomień",
+ "Arcade": "Arcade",
+ "Correct": "Correct",
+ "Fail": "Fail",
+ "Harp": "Harp",
+ "Reveal": "Reveal",
+ "Bubble": "Bubble",
+ "Doorbell": "Doorbell",
+ "Flute": "Flute",
+ "Money": "Money",
+ "Scifi": "Scifi",
+ "Clear": "Clear",
+ "Elevator": "Elevator",
+ "Guitar": "Guitar",
+ "Pop": "Pop",
+ "RabbitMQ Nodes": "Węzły zarządzania RabbitMQ",
+ "rabbitmqNodesDescription": "Wprowadź adres URL węzłów zarządzania RabbitMQ, w tym protokół i port. Przykład: {0}",
+ "aboutSlackUsername": "Zmienia wyświetlaną nazwę nadawcy wiadomości. Jeśli chcesz o kimś wspomnieć, umieść go w przyjaznej nazwie.",
+ "rabbitmqNodesRequired": "Proszę ustawić węzły dla tego monitora.",
+ "rabbitmqNodesInvalid": "W przypadku węzłów RabbitMQ należy używać w pełni kwalifikowanych (zaczynających się od „http”) adresów URL.",
+ "rabbitmqHelpText": "Aby korzystać z monitora, należy włączyć wtyczkę Management Plugin w konfiguracji RabbitMQ. Więcej informacji można znaleźć w {rabitmq_documentation}.",
+ "RabbitMQ Username": "Nazwa użytkownika RabbitMQ",
+ "RabbitMQ Password": "Hasło RabbitMQ",
+ "SendGrid API Key": "Klucz API SendGrid",
+ "Separate multiple email addresses with commas": "Oddziel wiele adresów e-mail przecinkami",
+ "templateServiceName": "service name",
+ "telegramServerUrlDescription": "Aby znieść ograniczenia api bota Telegrama lub uzyskać dostęp w zablokowanych obszarach (Chiny, Iran itp.). Aby uzyskać więcej informacji, kliknij {0}. Domyślnie: {1}",
+ "wayToGetWahaSession": "Z tej sesji WAHA wysyła powiadomienia do Chat ID. Można go znaleźć w WAHA Dashboard.",
+ "wayToWriteWahaChatId": "Numer telefonu z prefiksem międzynarodowym, ale bez znaku plus na początku ({0}), identyfikator kontaktu ({1}) lub identyfikator grupy ({2}). Powiadomienia są wysyłane do tego identyfikatora czatu z sesji WAHA.",
+ "wahaSession": "Sesja",
+ "wahaChatId": "Identyfikator czatu (numer telefonu / identyfikator kontaktu / identyfikator grupy)",
+ "wayToGetWahaApiUrl": "Adres URL instancji WAHA.",
+ "wayToGetWahaApiKey": "Klucz API to wartość zmiennej środowiskowej WHATSAPP_API_KEY użytej do uruchomienia WAHA.",
+ "YZJ Robot Token": "Token robota YZJ",
+ "YZJ Webhook URL": "Adres URL usługi YZJ Webhook",
+ "telegramServerUrl": "(Opcjonalnie) Adres URL serwera",
+ "Plain Text": "Zwykły tekst",
+ "Message Template": "Szablon wiadomości",
+ "Template Format": "Format szablonu",
+ "templateHostnameOrURL": "nazwa hosta lub adres URL",
+ "templateStatus": "status",
+ "telegramUseTemplate": "Użyj niestandardowego szablonu wiadomości",
+ "telegramUseTemplateDescription": "Jeśli opcja ta jest włączona, wiadomość zostanie wysłana przy użyciu niestandardowego szablonu.",
+ "telegramTemplateFormatDescription": "Telegram pozwala na używanie różnych języków znaczników dla wiadomości, zobacz Telegram {0}, aby uzyskać szczegółowe informacje."
}
diff --git a/src/lang/pt-BR.json b/src/lang/pt-BR.json
index c105d3740..0764d1173 100644
--- a/src/lang/pt-BR.json
+++ b/src/lang/pt-BR.json
@@ -287,7 +287,6 @@
"Don't know how to get the token? Please read the guide:": "Não sabe com pegar o token? Por favor, leia o guia:",
"smtpDkimheaderFieldNames": "Chaves Do Cabeçalho para assinar (Opcional)",
"The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "A conexão atual pode ser perdida se você estiver se conectando pelo túnel da Cloudflare. Você tem certeza que deseja pará-lo? Digite a sua senha para confirmar.",
- "shrinkDatabaseDescription": "Acionar a limpeza do banco de dados para o SQLite. Se o seu banco de dados foi criado depois de 1.10.0, a limpeza automática(AUTO_VACUUM) já é habilitada por padrão e essa ação não é necessária.",
"Powered by": "Fornecido por",
"deleteProxyMsg": "Você tem certeza que deseja deletar este proxy para todos os monitores?",
"proxyDescription": "Os proxies devem ser atribuídos a um monitor para funcionar.",
@@ -308,7 +307,7 @@
"Notification Service": "Serviço De Notificação",
"default: notify all devices": "padrão: notificar todos os dispositivos",
"Trigger type:": "Tipo Do Acionamento:",
- "Then choose an action, for example switch the scene to where an RGB light is red.": "Escolha uma ação, por exemplo, mudar o cenário onde uma luz RGB está vermelha.",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "Em seguida, escolha uma ação, por exemplo, mudar a cena para onde uma luz RGB fica vermelha.",
"Enable": "Habilitado",
"Disable": "Desabilitado",
"IconUrl": "URL Do Ícone",
@@ -405,7 +404,7 @@
"Device Token": "Token Do Dispositivo",
"Retry": "Tentar Novamente",
"Topic": "Tópico",
- "Setup Proxy": "Configuração Do Proxy",
+ "Setup Proxy": "Configuração do Proxy",
"Proxy Protocol": "Protocolo Do Proxy",
"Proxy Server": "Servidor Proxy",
"Proxy server has authentication": "O servidor proxy tem autenticação",
@@ -580,7 +579,7 @@
"Post": "Post",
"Slug": "Apelido",
"The slug is already taken. Please choose another slug.": "Este apelido já está em uso. Por favor escolha outro apelido.",
- "Setup Docker Host": "Configurar um Host Docker",
+ "Setup Docker Host": "Configurar um host Docker",
"trustProxyDescription": "Confiar nos cabeçalhos 'X-Forwarded-*'. Se você quer obter o endereço IP correto do cliente mas seu Uptime Kuma está atrás de um proxy como Nginx ou Apache, você deve habilitar isso.",
"Automations can optionally be triggered in Home Assistant:": "Automações podem ser acionadas opcionalmente no Home Assistant:",
"secureOptionNone": "Nenhum / STARTTLS (25, 587)",
@@ -821,7 +820,7 @@
"emailTemplateHeartbeatJSON": "objeto que descreve o batimento cardíaco",
"emailTemplateMsg": "mensagem da notificação",
"emailTemplateLimitedToUpDownNotification": "disponível apenas para pulsações UP/DOWN, caso contrário, nulo",
- "wayToGetFlashDutyKey": "Você pode ir para Canal -> (Selecionar um Canal) -> Integrações -> Adicionar uma nova integração', adicionar um 'Evento Personalizado' para obter um endereço de push, copiar a Chave de Integração no endereço. Para mais informações por favor visite",
+ "wayToGetFlashDutyKey": "Você pode ir em Canal -> (Selecionar um Canal) -> Integrações -> Adicionar uma nova integração, adicione um 'Uptime Kuma' para obter um endereço de push, copie a Chave de Integração no endereço. Para mais informações, visite",
"FlashDuty Severity": "Gravidade",
"templateMsg": "mensagem da notificação",
"templateHeartbeatJSON": "objeto que descreve o batimento cardíaco",
@@ -845,7 +844,7 @@
"nostrSender": "Chave privada do remetente (nsec)",
"nostrRecipients": "Chaves Públicas dos Destinatários (npub)",
"GrafanaOncallUrl": "URL do Grafana Oncall",
- "noDockerHostMsg": "Não disponível. Configure primeiro um Docker Host.",
+ "noDockerHostMsg": "Não disponível. Configure primeiro um Host Docker.",
"DockerHostRequired": "Defina o Docker Host para este monitor.",
"nostrRelaysHelp": "Um URL de retransmissão por linha",
"showCertificateExpiry": "Mostrar expiração do certificado",
@@ -865,7 +864,7 @@
"successKeywordExplanation": "Palavra-chave MQTT que será considerada bem-sucedida",
"Add a new expiry notification day": "Adicione um novo dia de notificação de expiração",
"Remove the expiry notification": "Remova o dia de notificação de expiração",
- "setup a new monitor group": "Configure um novo grupo de monitores",
+ "setup a new monitor group": "Configure um novo grupo de monitoramento",
"successKeyword": "Palavra-chave de Sucesso",
"Browser Screenshot": "Captura de tela do navegador",
"Remote Browsers": "Navegadores Remotos",
@@ -912,5 +911,176 @@
"cellsyntDestination": "Número de telefone do destinatário em formato internacional com 00 inicial seguido do código do país, por ex. 00447920110000 para o número do Reino Unido 07920 110 000 (máximo de 17 dígitos no total). Máximo de 25.000 destinatários separados por vírgula por solicitação HTTP.",
"Your User ID": "Sua ID de usuário",
"gtxMessagingFromHint": "Em telefones celulares, seus destinatários veem o TPOA exibido como remetente da mensagem. São permitidos até 11 caracteres alfanuméricos, um DDD, o DDI local ou números internacionais ({e164}, {e212} ou {e214})",
- "Channel access token (Long-lived)": "Token de acesso ao canal (de longa duração)"
+ "Channel access token (Long-lived)": "Token de acesso ao canal (de longa duração)",
+ "apiKeySevenIO": "SevenIO chave de API",
+ "wayToGetThreemaGateway": "Você pode se registrar no Threema Gateway {0}.",
+ "threemaRecipient": "Destinatário",
+ "threemaRecipientType": "Tipo de destinatário",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8 caracteres",
+ "threemaRecipientTypePhone": "Número de telefone",
+ "threemaRecipientTypeEmail": "Endereço de email",
+ "threemaSenderIdentity": "ID do Gateway",
+ "threemaSenderIdentityFormat": "8 caracteres, geralmente começa com *",
+ "Command": "Comando",
+ "mongodbCommandDescription": "Execute um comando MongoDB no banco de dados. Para informações sobre os comandos disponíveis confira a {documentação}",
+ "smspartnerApiurl": "Você pode encontrar sua chave de API em seu painel em {0}",
+ "smspartnerPhoneNumber": "Números de telefone)",
+ "smspartnerPhoneNumberHelptext": "O número deve estar no formato internacional {0}, {1}. Vários números devem ser separados por {2}",
+ "smspartnerSenderName": "Nome do remetente de SMS",
+ "smspartnerSenderNameInfo": "Deve ter entre 3..=11 caracteres regulares",
+ "wayToGetBitrix24Webhook": "Você pode criar um webhook seguindo as etapas em {0}",
+ "Mentioning": "Mencionando",
+ "Don't mention people": "Não mencione pessoas",
+ "Mention group": "Mencionar {grupo}",
+ "senderSevenIO": "Enviando número ou nome",
+ "receiverSevenIO": "Número de recebimento",
+ "wayToGetSevenIOApiKey": "Visite o painel em app.seven.io > desenvolvedor > chave de API > botão verde adicionar",
+ "Select message type": "Selecione o tipo de mensagem",
+ "Send to channel": "Enviar para o canal",
+ "Create new forum post": "Criar nova postagem no fórum",
+ "threadForumPostID": "ID da postagem do tópico/fórum",
+ "postToExistingThread": "Postar em tópico/postagem existente",
+ "forumPostName": "Nome da postagem no fórum",
+ "Host URL": "Host URL",
+ "Refresh Interval": "Intervalo de atualização",
+ "Refresh Interval Description": "A página de status fará uma atualização completa do site a cada {0} segundos",
+ "locally configured mail transfer agent": "configurado de agente de transferência de e-mail localmente",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Insira o nome do host do servidor ao qual deseja se conectar ou {localhost} se pretende usar um {local_mta}",
+ "ignoreTLSErrorGeneral": "Ignorar erro TLS/SSL para conexão",
+ "threemaRecipientTypePhoneFormat": "E.164, sem o sinal de \"+\" no início",
+ "threemaApiAuthenticationSecret": "ID secreto do Gateway",
+ "threemaBasicModeInfo": "Observação: Esta integração usa o Threema Gateway no modo básico (criptografia baseada em servidor). Mais detalhes podem ser encontrados em {0}.",
+ "bitrix24SupportUserID": "Insira seu ID de usuário no Bitrix24. Você pode encontrar o ID no link ao acessar o perfil do usuário.",
+ "Bitrix24 Webhook URL": "URL do Webhook do Bitrix24",
+ "wayToGetDiscordThreadId": "Obter o ID de uma thread/postagem em um fórum é similar a obter o ID de um canal. Saiba mais sobre como obter IDs {0}",
+ "whatHappensAtForumPost": "Criar um novo tópico no fórum. Isto NÃO publica mensagens em tópicos existentes. Para publicar em um tópico existente, use \"{option}\"",
+ "e.g. {discordThreadID}": "Por exemplo {discordThreadID}",
+ "receiverInfoSevenIO": "Se o número de destino não estiver localizado na Alemanha, você deve adicionar o código do país antes do número (por exemplo, para o código de país 1 dos EUA, use 117612121212 em vez de 017612121212)",
+ "apiKeysDisabledMsg": "As chaves de API estão desativadas porque a autenticação está desativada.",
+ "now": "agora",
+ "and": "e",
+ "jsonQueryDescription": "Analise e extraia dados específicos da resposta JSON do servidor usando uma query JSON ou use \"$\" para a resposta em raw, se não estiver esperando JSON. O resultado é então comparado ao valor esperado, como strings. Veja {0} para documentação e use {1} para experimentar com queries.",
+ "time ago": "atrás",
+ "-year": "-ano",
+ "Json Query Expression": "Expressão Json Query",
+ "cacheBusterParam": "Adicionar o parâmetro {0}",
+ "snmpCommunityStringHelptext": "Esta string funciona como uma senha para autenticar e controlar o acesso a dispositivos habilitados para SNMP. Combine-a com a configuração do seu dispositivo SNMP.",
+ "OID (Object Identifier)": "OID (Identificador do Objeto)",
+ "Condition": "Condição",
+ "Recipient Type": "Tipo de destinatário",
+ "wayToGetOnesenderUrlandToken": "Você pode obter a URL e o Token acessando o site da Onesender. Mais informações {0}",
+ "cacheBusterParamDescription": "Parâmetro gerado randomicamente para ignorar cache.",
+ "SNMP Version": "Versão SNMP",
+ "Please enter a valid OID.": "Por favor, insira um OID válido.",
+ "Private Number": "Número Privado",
+ "Group ID": "ID do Grupo",
+ "Add Remote Browser": "Adicionar Navegador Remoto",
+ "New Group": "Novo Grupo",
+ "Group Name": "Nome do Grupo",
+ "OAuth2: Client Credentials": "OAuth2: Client Credentials",
+ "Authentication Method": "Método de Autenticação",
+ "Authorization Header": "Header de Autorização",
+ "ignoredTLSError": "Erros TLS/SSL foram ignorados",
+ "Debug": "Depurar",
+ "Copy": "Copiar",
+ "CopyToClipboardError": "Não foi possível copiar para a área de transferência: {error}",
+ "CopyToClipboardSuccess": "Copiado!",
+ "firewalls": "firewalls",
+ "docker networks": "redes docker",
+ "Message format": "Formato da mensagem",
+ "snmpOIDHelptext": "Insira o OID do sensor ou do status que você deseja monitorar. Utilize ferramentas de gerenciamento de rede, como navegadores MIB ou softwares SNMP, se não tiver certeza sobre o OID.",
+ "privateOnesenderDesc": "Certifique-se de que o número de telefone é válido. Para enviar mensagem para o número de telefone privado, ex: 628123456789",
+ "aboutSlackUsername": "Altera o nome de exibição do remetente da mensagem. Se quiser mencionar alguém, inclua a menção no nome amigável.",
+ "Send rich messages": "Enviar mensagens ricas",
+ "Host Onesender": "Servidor Onesender",
+ "Token Onesender": "Token Onesender",
+ "shrinkDatabaseDescriptionSqlite": "Acionar banco de dados {vacuum} para SQLite. {auto_vacuum} já está habilitado, mas isso não desfragmenta o banco de dados nem reempacota páginas individuais do banco de dados da maneira que o comando {vacuum} faz.",
+ "groupOnesenderDesc": "Certifique-se de que o GroupID é válido. Para enviar mensagem para o Grupo, ex: 628123456789-342345",
+ "Community String": "Cadeia de caracteres da comunidade",
+ "Form Data Body": "Dados do formulário",
+ "OAuth Token URL": "URL do token OAuth",
+ "Client ID": "ID do cliente",
+ "Client Secret": "Segredo do cliente",
+ "OAuth Scope": "Escopo OAuth",
+ "Optional: Space separated list of scopes": "Opcional: Lista de escopos separados por espaços",
+ "Go back to home page.": "Voltar para a página inicial.",
+ "No tags found.": "Nenhuma tag encontrada.",
+ "Lost connection to the socket server.": "Conexão perdida com o servidor de socket.",
+ "Cannot connect to the socket server.": "Não é possível conectar ao servidor de socket.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL do Webhook SIGNL4",
+ "rabbitmqNodesRequired": "Por favor, defina os nós para este monitor.",
+ "RabbitMQ Nodes": "Nós de gerenciamento do RabbitMQ",
+ "rabbitmqNodesDescription": "Insira a URL para os nós de gerenciamento do RabbitMQ, incluindo protocolo e porta. Exemplo: {0}",
+ "Bubble": "Bolha",
+ "Clear": "Limpar",
+ "Custom sound to override default notification sound": "Som personalizado para substituir o som de notificação padrão",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Notificações urgentes serão entregues imediatamente, mesmo se o dispositivo estiver no modo Não perturbe.",
+ "rabbitmqHelpText": "Para usar o monitor, você precisará habilitar o Management Plugin na sua configuração RabbitMQ. Para mais informações, consulte a {rabitmq_documentation}.",
+ "Money": "Dinheiro",
+ "signl4Docs": "Você pode encontrar mais informações sobre como configurar o SIGNL4 e como obter o URL do webhook do SIGNL4 em {0}.",
+ "Conditions": "Condições",
+ "conditionAdd": "Adicionar Condição",
+ "conditionDelete": "Excluir condição",
+ "conditionAddGroup": "Adicionar grupo",
+ "conditionDeleteGroup": "Excluir grupo",
+ "conditionValuePlaceholder": "Valor",
+ "equals": "igual",
+ "not equals": "diferente",
+ "contains": "contém",
+ "not contains": "não contém",
+ "starts with": "começa com",
+ "not starts with": "não começa com",
+ "ends with": "termina com",
+ "not ends with": "não termina com",
+ "less than": "menor que",
+ "greater than": "maior que",
+ "less than or equal to": "menor ou igual a",
+ "greater than or equal to": "maior ou igual a",
+ "record": "registro",
+ "Notification Channel": "Canal de Notificação",
+ "Sound": "Som",
+ "Alphanumerical string and hyphens only": "Somente sequência alfanumérica e hifens",
+ "Arcade": "Arcada",
+ "Correct": "Correto",
+ "Fail": "Falhou",
+ "Harp": "Harpa",
+ "Reveal": "Revelar",
+ "Doorbell": "Campainha",
+ "Flute": "Flauta",
+ "Scifi": "Ficção científica",
+ "Elevator": "Elevador",
+ "Guitar": "Guitarra",
+ "Pop": "Pop",
+ "Time Sensitive (iOS Only)": "Sensível ao tempo (somente iOS)",
+ "From": "De",
+ "Can be found on:": "Pode ser encontrado em: {0}",
+ "The phone number of the recipient in E.164 format.": "O número de telefone do destinatário no formato E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Um ID de remetente de texto ou um número de telefone no formato E.164, caso você queira receber respostas.",
+ "rabbitmqNodesInvalid": "Use uma URL totalmente qualificada (começando com 'http') para nós do RabbitMQ.",
+ "RabbitMQ Username": "Nome de usuário do RabbitMQ",
+ "RabbitMQ Password": "Senha do RabbitMQ",
+ "SendGrid API Key": "Chave API do SendGrid",
+ "Separate multiple email addresses with commas": "Separe vários endereços de e-mail com vírgulas",
+ "templateServiceName": "nome do serviço",
+ "telegramUseTemplate": "Use um template personalizado de mensagem",
+ "telegramTemplateFormatDescription": "O Telegram permite o uso de diferentes linguagens de marcação para mensagens. Veja o Telegram {0} para detalhes específicos.",
+ "templateHostnameOrURL": "hostname ou URL",
+ "templateStatus": "status",
+ "telegramUseTemplateDescription": "Se habilitado, a mensagem será enviada usando um template personalizado.",
+ "telegramServerUrlDescription": "Para suspender as limitações da API de bots do Telegram ou obter acesso em áreas bloqueadas (China, Irã, etc). Para mais informações, clique em {0}. Padrão: {1}",
+ "wahaSession": "Sessão",
+ "wayToGetWahaApiUrl": "URL da sua instância WAHA.",
+ "wayToGetWahaApiKey": "API Key é o valor da variável de ambiente WHATSAPP_API_KEY que você usou para executar o WAHA.",
+ "wayToGetWahaSession": "A partir desta sessão, o WAHA envia notificações para o Chat ID. Você pode encontrá-lo no WAHA Dashboard.",
+ "wayToWriteWahaChatId": "O número de telefone com o prefixo internacional, mas sem o sinal de mais no início ({0}), o Contact ID ({1}) ou o Group ID ({2}). As notificações são enviadas para este Chat ID da sessão WAHA.",
+ "Plain Text": "Texto Simples",
+ "wahaChatId": "Chat ID (Número de Telefone / Contact ID / Group ID)",
+ "YZJ Webhook URL": "YZJ Webhook URL",
+ "YZJ Robot Token": "YZJ Robot token",
+ "telegramServerUrl": "(Opcional) URL do Servidor",
+ "Message Template": "Modelo de Mensagem",
+ "Template Format": "Formato do Modelo",
+ "Font Twemoji by Twitter licensed under": "Fonte Twemoji do Twitter licenciada sob"
}
diff --git a/src/lang/pt-PT.json b/src/lang/pt-PT.json
index 8899eba2f..8bd9913ca 100644
--- a/src/lang/pt-PT.json
+++ b/src/lang/pt-PT.json
@@ -29,7 +29,7 @@
"Settings": "Configurações",
"Dashboard": "Dashboard",
"New Update": "Nova Atualização",
- "Language": "Linguagem",
+ "Language": "Idioma",
"Appearance": "Aparência",
"Theme": "Tema",
"General": "Geral",
@@ -76,7 +76,7 @@
"Accepted Status Codes": "Status Code Aceitáveis",
"Save": "Guardar",
"Notifications": "Notificações",
- "Not available, please setup.": "Não disponível, por favor configura.",
+ "Not available, please setup.": "Não disponível, por favor configure.",
"Setup Notification": "Configurar Notificação",
"Light": "Claro",
"Dark": "Escuro",
@@ -101,7 +101,7 @@
"disableauth.message2": "Isso é para {intendThirdPartyAuth} em frente ao 'UpTime Kuma' como o Cloudflare Access.",
"where you intend to implement third-party authentication": "alguém que tem autenticação de terceiros",
"Please use this option carefully!": "Por favor, utiliza esta opção com cuidado.",
- "Logout": "Logout",
+ "Logout": "Terminar sessão",
"Leave": "Sair",
"I understand, please disable": "Eu entendo, por favor desativa.",
"Confirm": "Confirmar",
@@ -110,7 +110,7 @@
"Username": "Utilizador",
"Password": "Senha",
"Remember me": "Lembra-me",
- "Login": "Autenticar",
+ "Login": "Iniciar Sessão",
"No Monitors, please": "Nenhum monitor, por favor",
"add one": "adicionar um",
"Notification Type": "Tipo de Notificação",
@@ -128,7 +128,7 @@
"Import": "Importar",
"respTime": "Tempo de Resp. (ms)",
"notAvailableShort": "N/A",
- "Default enabled": "Padrão habilitado",
+ "Default enabled": "Padrão ativado",
"Apply on all existing monitors": "Aplicar em todos os monitores existentes",
"Create": "Criar",
"Clear Data": "Limpar Dados",
@@ -405,7 +405,6 @@
"Please input title and content": "Por favor insira o título e o conteúdo",
"Hide Tags": "Ocultar Tags",
"Description": "Descrição",
- "shrinkDatabaseDescription": "Acionar banco de dados VACUUM para SQLite. Se seu banco de dados for criado após 1.10.0, AUTO_VACUUM já está ativado e esta ação não é necessária.",
"proxyDescription": "Os proxies devem ser atribuídos a um monitor para funcionar.",
"enableProxyDescription": "Este proxy não afetará as solicitações do monitor até que seja ativado. Você pode controlar temporariamente a desativação do proxy de todos os monitores pelo status de ativação.",
"Don't know how to get the token? Please read the guide:": "Não sabe como obter o token? Por favor, leia o guia:",
@@ -443,7 +442,7 @@
"Custom": "Personalizar",
"General Monitor Type": "Tipo de Monitor Geral",
"Invert Keyword": "Palavra-chave invertida",
- "setupDatabaseChooseDatabase": "Qual base de dados você deseja usar?",
+ "setupDatabaseChooseDatabase": "Qual é a base de dados que deseja usar?",
"setupDatabaseEmbeddedMariaDB": "Não é necessário configurar nada. Esta imagem Docker possui o MariaDB incorporado e configurado automaticamente para você. O Uptime Kuma se conectará a esta base de dados através de um socket Unix.",
"setupDatabaseMariaDB": "Conecte-se a uma base de dados MariaDB externa. Você precisa configurar as informações de conexão com a base de dados.",
"setupDatabaseSQLite": "Um arquivo de base de dados simples, recomendado para implementações em pequena escala. Antes da versão 2.0.0, o Uptime Kuma utilizava o SQLite como base de dados padrão.",
@@ -458,5 +457,27 @@
"Expected Value": "Valor Esperado",
"Json Query": "Consulta JSON",
"Cannot connect to the socket server": "Não é possível conectar ao servidor de sockets",
- "Reconnecting...": "Reconectando..."
+ "Reconnecting...": "Reconectando...",
+ "liquidIntroduction": "A personalização das templates é conseguida através da linguagem de templates Liquid. Por favor consulte [0] para instruções de utilização. As variáveis disponíveis são :",
+ "pushViewCode": "Como usar o monitor Push? (Ver Código)",
+ "Host URL": "URL do Host",
+ "programmingLanguages": "Linguagens de Programação",
+ "locally configured mail transfer agent": "Agente de entrega de email local",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Entre o hostname do servidor ao qual se quer ligar ou a {localhost} se pretende usar {local_mta}",
+ "ignoreTLSErrorGeneral": "Ignorar erros TLS/SSL ao ligar",
+ "filterActive": "Ativo",
+ "filterActivePaused": "Em Pausa",
+ "Add New Tag": "Adicionar Nova Etiqueta",
+ "Search monitored sites": "Pesquisar sites monitorizados",
+ "templateMsg": "Mensagem da notificação",
+ "styleElapsedTimeShowNoLine": "Mostrar (Sem Linha)",
+ "styleElapsedTimeShowWithLine": "Mostrar (Com Linha)",
+ "statusPageRefreshIn": "Atualizar em: [0]",
+ "templateHeartbeatJSON": "objeto que descreve o batimento cardíaco",
+ "templateMonitorJSON": "objeto que descreve o monitor",
+ "templateLimitedToUpDownCertNotifications": "apenas disponível para notificações UP/DOWN/certificado expirado",
+ "templateLimitedToUpDownNotifications": "apenas disponível para notificações UP/DOWN",
+ "-year": "-ano",
+ "Json Query Expression": "Expressão Json Query",
+ "ignoredTLSError": "Erros TLS/SSL foram ignorados"
}
diff --git a/src/lang/pt.json b/src/lang/pt.json
index 4fb1ee2f0..6a842d276 100644
--- a/src/lang/pt.json
+++ b/src/lang/pt.json
@@ -36,17 +36,171 @@
"Add New Monitor": "Adicionar Novo Monitor",
"Home": "Home",
"Check Update On GitHub": "Verificar por Atualizações no GitHub",
- "setupDatabaseChooseDatabase": "Qual banco de dados você deseja usar?",
+ "setupDatabaseChooseDatabase": "Qual banco de dados você gostaria de usar?",
"setupDatabaseEmbeddedMariaDB": "Não é necessario definir. Esta imagem do docker incorporou e configurou automaticamente o MariaDB para você. O Uptime Kuma se conectará a este banco de dados via soquete unix.",
"setupDatabaseMariaDB": "Conecte-se a um banco de dados MariaDB externo. Você precisa definir as informações de conexão do banco de dados.",
"setupDatabaseSQLite": "Um arquivo de banco de dados simples, recomendado para implantações em pequena escala. Antes da v2.0.0, o Uptime Kuma usava SQLite como banco de dados padrão.",
"dbName": "Nome do banco de dados",
- "Monitor": "Monitorar",
+ "Monitor": "Monitoramento | Monitoramentos",
"hour": "hora",
"-hour": "-hora",
"Response": "Resposta",
"Ping": "Ping",
"-day": "-dia",
"Port": "Porta",
- "Cannot connect to the socket server": "Não é possível conectar-se ao socket server"
+ "Cannot connect to the socket server": "Não é possível conectar-se ao socket server",
+ "URL": "URL",
+ "upsideDownModeDescription": "Inverter o status. Se o serviço estiver acessível, ele será considerado INATIVO.",
+ "settingUpDatabaseMSG": "Configurando o banco de dados. Isso pode levar algum tempo, por favor, seja paciente.",
+ "Passive Monitor Type": "Tipo de Monitoramento Passivo",
+ "Specific Monitor Type": "Tipo Específico de Monitoramento",
+ "markdownSupported": "Sintaxe Markdown suportada",
+ "DateTime": "Data e Hora",
+ "Cert Exp.": "Expiração do Certificado",
+ "Monitor Type": "Tipo de Monitoramento",
+ "Keyword": "Palavra-chave",
+ "Invert Keyword": "Inverter Palavra-chave",
+ "Expected Value": "Valor Esperado",
+ "Json Query": "Json Query",
+ "Friendly Name": "Nome Amigável",
+ "Hostname": "Hostname",
+ "Heartbeat Interval": "Intervalo de verificação",
+ "checkEverySecond": "Verificar a cada {0} segundos",
+ "Host URL": "URL do Host",
+ "retryCheckEverySecond": "Tentar novamente a cada {0} segundos",
+ "Accepted Status Codes": "Códigos de Status Aceitos",
+ "retriesDescription": "Número máximo de tentativas antes de o serviço ser marcado como inativo e uma notificação ser enviada",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Insira o nome do host do servidor ao qual você deseja se conectar ou {localhost} se você pretende usar um {local_mta}",
+ "Request Timeout": "Tempo limite de requisição",
+ "timeoutAfter": "Tempo limite após {0} segundos",
+ "Retries": "Tentativas",
+ "Heartbeat Retry Interval": "Intervalo entre novas verificações",
+ "Resend Notification if Down X times consecutively": "Reenviar notificação se houver X falhas consecutivas",
+ "Advanced": "Avançado",
+ "resendEveryXTimes": "Reenviar a cada {0} vezes",
+ "resendDisabled": "Reenvio desativado",
+ "ignoreTLSError": "Ignorar erros de TLS/SSL para sites HTTPS",
+ "maxRedirectDescription": "Número máximo de redirecionamentos a seguir. Defina como 0 para desabilitar redirecionamentos.",
+ "Upside Down Mode": "Modo Invertido",
+ "locally configured mail transfer agent": "agente de transferência de correio configurado localmente",
+ "ignoreTLSErrorGeneral": "Ignorar erro de TLS/SSL para conexão",
+ "Max. Redirects": "Máx. Redirecionamentos",
+ "General Monitor Type": "Tipo Geral de Monitoramento",
+ "needPushEvery": "Você deve chamar essa URL a cada {0} segundos.",
+ "pushOptionalParams": "Parâmetros opcionais: {0}",
+ "Notifications": "Notificações",
+ "Setup Notification": "Configurar notificação",
+ "Light": "Luz",
+ "Theme - Heartbeat Bar": "Tema - Heartbeat Bar",
+ "now": "agora",
+ "-year": "-ano",
+ "Push URL": "Enviar URL",
+ "ignoredTLSError": "Erros TLS/SSL foram ignorados",
+ "Json Query Expression": "Expressão de consulta Json",
+ "programmingLanguages": "Linguagens de programação",
+ "Save": "Salvar",
+ "Not available, please setup.": "Não disponível, por favor configure.",
+ "pushViewCode": "Como usar o Push monitor? (Ver código)",
+ "Create your admin account": "Criar conta de administrador",
+ "Apply on all existing monitors": "Aplicar em todos os monitores existentes",
+ "Pick Affected Monitors...": "Escolha os monitores afetados…",
+ "alertWrongFileType": "Por favor, escolha um arquivo JSON.",
+ "Two Factor Authentication": "Autenticador de dois fatores",
+ "Tag with this name already exist.": "Já existe uma tag com esse nome.",
+ "Entry Page": "Página de entrada",
+ "All Systems Operational": "Todos os sistemas operacionais",
+ "Add Group": "Adicionar um grupo",
+ "Add a monitor": "Adicionar um monitoramento",
+ "None": "Nenhum",
+ "Change Password": "Mudar Senha",
+ "Current Password": "Senha Atual",
+ "New Password": "Nova Senha",
+ "Repeat New Password": "Repita a nova senha",
+ "Update Password": "Atualizar senha",
+ "Enable Auth": "Ativar Auth",
+ "Disable Auth": "Desativar Auth",
+ "disableauth.message1": "Você tem certeza que deseja {disableAuth}?",
+ "disable authentication": "Desativar Autenticação",
+ "where you intend to implement third-party authentication": "Onde você pretende implementar autenticador de terceiros",
+ "Please use this option carefully!": "Use essa opção com cuidado!",
+ "Leave": "Sair",
+ "Logout": "Deslogar",
+ "I understand, please disable": "Eu compreendo, por favor desative",
+ "Yes": "Sim",
+ "No": "Não",
+ "Username": "Nome de usuário",
+ "Password": "Senha",
+ "Remember me": "Lembrar-me",
+ "Login": "Entrar",
+ "add one": "Adicionar um",
+ "Notification Type": "Tipo de notificação",
+ "Email": "Email",
+ "Test": "Testar",
+ "Certificate Info": "Informação de certificado",
+ "Resolver Server": "Servidor de resolução",
+ "Resource Record Type": "Tipo de registro",
+ "Last Result": "Último resultado",
+ "Repeat Password": "Repita a senha",
+ "Import Backup": "Importar backup",
+ "Export Backup": "Exportar backup",
+ "Export": "Exportar",
+ "Import": "Importar",
+ "respTime": "Tempo de resposta (ms)",
+ "notAvailableShort": "Não aplicável",
+ "Create": "Criar",
+ "Clear Data": "Limpar dados",
+ "Schedule maintenance": "Agendar manutenção",
+ "Affected Monitors": "Monitores afetados",
+ "Start of maintenance": "Início da manutenção",
+ "All Status Pages": "Todas as páginas de status",
+ "Select status pages...": "Selecionar páginas de status…",
+ "alertNoFile": "Escolha um arquivo para importar.",
+ "Clear all statistics": "Limpar todas as estatísticas",
+ "Skip existing": "Pular existentes",
+ "Overwrite": "Sobrescrever",
+ "Options": "Opções",
+ "Keep both": "Manter ambas",
+ "Verify Token": "Verificar token",
+ "Setup 2FA": "Configurar 2FA",
+ "Enable 2FA": "Ativar 2FA",
+ "Disable 2FA": "Desativar 2FA",
+ "2FA Settings": "Configurações do autenticador",
+ "filterActive": "Ativo",
+ "filterActivePaused": "Pausado",
+ "Active": "Ativo",
+ "Inactive": "Desativado",
+ "Token": "Token",
+ "Show URI": "Mostrar URI",
+ "Tags": "Tags",
+ "Add New Tag": "Adicionar nova tag",
+ "Tag with this value already exist.": "Já existe uma tag com esse valor.",
+ "color": "Cor",
+ "value (optional)": "Valor (opcional)",
+ "Gray": "Cinza",
+ "Red": "Vermelho",
+ "Orange": "Laranja",
+ "Green": "Verde",
+ "Blue": "Azul",
+ "Indigo": "Índigo",
+ "Purple": "Roxo",
+ "Pink": "Rosa",
+ "Custom": "Customizado",
+ "Search...": "Procurar…",
+ "Search monitored sites": "Procurar sites monitorados",
+ "Avg. Ping": "Média de ping",
+ "Avg. Response": "Média do tempo de resposta",
+ "statusPageNothing": "Não tem nada aqui, adicione um grupo os monitor.",
+ "statusPageRefreshIn": "Atualize em: {0}",
+ "No Services": "Sem serviços",
+ "Partially Degraded Service": "Serviço parcialmente degradado",
+ "Degraded Service": "Serviços degradados",
+ "Edit Status Page": "Editar página de status",
+ "Go to Dashboard": "Ir para o painel de controle",
+ "Status Page": "Status Page",
+ "Status Pages": "Páginas de status",
+ "Events": "Eventos",
+ "Confirm": "Confirmar",
+ "pushOthers": "Outros",
+ "time ago": "{0} atrás",
+ "Dark": "Escuro"
}
diff --git a/src/lang/ro.json b/src/lang/ro.json
index 8a826cfa1..5f2e14344 100644
--- a/src/lang/ro.json
+++ b/src/lang/ro.json
@@ -55,7 +55,7 @@
"Save": "Salvează",
"Notifications": "Notificări",
"Not available, please setup.": "Indisponibil, trebuie configurat.",
- "Setup Notification": "Configurare Notificări",
+ "Setup Notification": "Configurați notificarea",
"Light": "Luminos",
"Dark": "Întunecat",
"Auto": "Automat",
@@ -265,7 +265,7 @@
"Connection String": "Șirul de conexiune",
"Query": "Interogare",
"settingsCertificateExpiry": "Expirarea certificatului TLS",
- "Setup Docker Host": "Configurează Docker Host",
+ "Setup Docker Host": "Configurați Docker Host",
"Connection Type": "Tipul Conexiunii",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Sigur doriți să ștergeți acest docker host pentru toate monitoarele?",
@@ -481,7 +481,7 @@
"alertNoFile": "Vă rugăm să selectați un fișier de importat.",
"alertWrongFileType": "Vă rugăm să selectați un fișier JSON.",
"Clear all statistics": "Șterge toate Statisticile",
- "Setup 2FA": "Configurează Autentificarea în Doi Pași",
+ "Setup 2FA": "Configurați Autentificarea în Doi Pași",
"Two Factor Authentication": "Autentificare în Doi Pași",
"Inactive": "Inactiv",
"Add New below or Select...": "Adăugați Nou mai jos sau selectați…",
@@ -511,7 +511,6 @@
"No Monitors": "Niciun monitor",
"Untitled Group": "Grup fără nume",
"Services": "Servicii",
- "shrinkDatabaseDescription": "Declanșează database VACUUM pentru SQLite. Dacă baza ta de date a fost creată după 1.10.0, AUTO_VACUUM este deja activat și această acțiune nu este necesară.",
"proxyDescription": "Proxy-urile trebuie să fie atribuite unui monitor pentru a funcționa.",
"enableProxyDescription": "Acest proxy nu va avea efect asupra solicitărilor monitoarelor până când nu este activat. Puteți controla dezactivarea temporară a proxy-ului de pe toate monitoarele prin starea de activare.",
"setAsDefaultProxyDescription": "Acest proxy va fi activat în mod implicit pentru monitoare noi. Puteți dezactiva în continuare proxy-ul separat pentru fiecare monitor.",
@@ -562,7 +561,7 @@
"wayToGetKookBotToken": "Creați o aplicație și obțineți tokenul dvs. robot la {0}",
"wayToGetKookGuildID": "Activați „Modul dezvoltator” în setarea Kook și faceți clic dreapta pe breaslă pentru a obține ID-ul acesteia",
"pushoverDesc1": "Prioritate de urgență (2) are o pauză implicită de 30 de secunde între reîncercări și expiră după o oră.",
- "Setup Proxy": "Configurare Proxy",
+ "Setup Proxy": "Configurați proxy",
"Proxy Protocol": "Protocol Proxy",
"For safety, must use secret key": "Pentru siguranță, trebuie să utilizați cheia secretă",
"promosmsTypeFlash": "SMS FLASH - Mesajul va fi afișat automat pe dispozitivul destinatarului. Valabil doar către destinatarii din Polonia.",
@@ -621,7 +620,7 @@
"successKeywordExplanation": "Cuvântul cheie MQTT care va fi considerat succes",
"successKeyword": "Cuvânt Cheie Succes",
"pushViewCode": "Cum se utilizează monitorul Push? (Vizualizare cod)",
- "setupDatabaseChooseDatabase": "Ce bază de date doriți să utilizați?",
+ "setupDatabaseChooseDatabase": "Ce bază de date ați dori să utilizați?",
"setupDatabaseMariaDB": "Conectați-vă la o bază de date externă MariaDB. Trebuie să setați informațiile de conectare la baza de date.",
"setupDatabaseSQLite": "Un fișier de bază de date simplu, recomandat pentru implementări la scară mică. Înainte de v2.0.0, Uptime Kuma folosea SQLite ca bază de date implicită.",
"dbName": "Numele bazei de date",
@@ -806,7 +805,7 @@
"Badge Warn Days": "Badge zile de avertizare",
"monitorToastMessagesDescription": "Notificările toast pentru monitoare dispar după un anumit timp în secunde. Setat la -1, dezactivează timpul de expirare. Setat la 0, dezactivează notificările toast.",
"noGroupMonitorMsg": "Nu este disponibil. Creați mai întâi un grup de monitoare.",
- "wayToGetFlashDutyKey": "Puteți merge la Canal -> (Selectați un canal) -> Integrari -> Adăugați o nouă pagină de integrare, adăugați un \"Eveniment personalizat\" pentru a obține o adresă push, copiați cheia de integrare în adresă. Pentru mai multe informatii va rugam vizitati",
+ "wayToGetFlashDutyKey": "Puteți merge la Canal -> (Selectați un canal) -> Integrari -> Adăugați o nouă pagină de integrare, adăugați \"Uptime Kuma\" pentru a obține o adresă push, copiați cheia de integrare în adresă. Pentru mai multe informatii va rugam vizitati",
"remoteBrowsersDescription": "Browserele Remote sunt o alternativă la rularea locală a Chromium. Configurați cu un serviciu precum browserless.io sau conectați-vă la cel personal",
"Remote Browsers": "Browsere Remote",
"Remote Browser": "Browser Remote",
@@ -944,5 +943,139 @@
"senderSevenIO": "Numărul sau numele expeditorului",
"receiverSevenIO": "Număr de primire",
"receiverInfoSevenIO": "Dacă numărul de destinație nu se află în Germania, trebuie să adăugați codul de țară în fața numărului (de exemplu, pentru codul de țară 1 din SUA utilizați 117612121212 în loc de 017612121212)",
- "apiKeySevenIO": "Cheia API SevenIO"
+ "apiKeySevenIO": "Cheia API SevenIO",
+ "Command": "Comanda",
+ "smspartnerSenderName": "Numele expeditorului SMS",
+ "smspartnerSenderNameInfo": "Trebuie să aibă între 3..=11 caractere obișnuite",
+ "mongodbCommandDescription": "Rulați o comandă MongoDB în baza de date. Pentru informații despre comenzile disponibile, consultați {documentația}",
+ "Bitrix24 Webhook URL": "URL Bitrix24 Webhook",
+ "bitrix24SupportUserID": "Introduceți ID-ul dvs. de utilizator în Bitrix24. Puteți afla ID-ul din link accesând profilul utilizatorului.",
+ "smspartnerApiurl": "Puteți găsi cheia dvs. API în tabloul de bord la {0}",
+ "smspartnerPhoneNumber": "Număr(numere) de telefon",
+ "smspartnerPhoneNumberHelptext": "Numărul trebuie să fie în format internațional {0}, {1}. Numerele multiple trebuie separate prin {2}",
+ "wayToGetBitrix24Webhook": "Puteți crea un webhook urmând pașii de la {0}",
+ "Select message type": "Selectați tipul mesajului",
+ "Send to channel": "Trimite pe canal",
+ "Create new forum post": "Creați o nouă postare pe forum",
+ "postToExistingThread": "Postați în firul de discuție/postul de forum existent",
+ "forumPostName": "Numele postării pe forum",
+ "wayToGetDiscordThreadId": "Obținerea unui subiect / ID postare forum este similară cu obținerea unui ID de canal. Citiți mai multe despre cum să obțineți ID-uri {0}",
+ "threadForumPostID": "Subiect / ID postare forum",
+ "e.g. {discordThreadID}": "ex. {discordThreadID}",
+ "whatHappensAtForumPost": "Creați o nouă postare pe forum. Acest lucru NU postează mesaje în postarea existentă. Pentru a posta în postarea existentă, utilizați „{option}”",
+ "Refresh Interval": "Interval de reîmprospătare",
+ "Refresh Interval Description": "Pagina de status va efectua o reîmprospătare completă a site-ului la fiecare {0} secunde",
+ "ignoreTLSErrorGeneral": "Ignorați eroarea TLS/SSL pentru conexiune",
+ "threemaRecipient": "Destinatar",
+ "threemaRecipientType": "Tip de destinatar",
+ "threemaRecipientTypeIdentity": "ID Threema",
+ "threemaRecipientTypeIdentityFormat": "8 caractere",
+ "threemaRecipientTypePhone": "Număr de telefon",
+ "threemaRecipientTypePhoneFormat": "E.164, fără prefixul +",
+ "threemaRecipientTypeEmail": "Adresa de e-mail",
+ "threemaSenderIdentity": "ID Gateway",
+ "threemaApiAuthenticationSecret": "Secret ID Gateway",
+ "wayToGetThreemaGateway": "Vă puteți înregistra pentru Threema Gateway {0}.",
+ "threemaSenderIdentityFormat": "8 caractere, de obicei începe cu *",
+ "threemaBasicModeInfo": "Notă: Această integrare utilizează Threema Gateway în modul de bază (criptare bazată pe server). Mai multe detalii pot fi găsite {0}.",
+ "apiKeysDisabledMsg": "Cheile API sunt dezactivate deoarece autentificarea este dezactivată.",
+ "and": "și",
+ "jsonQueryDescription": "Analizați și extrageți date specifice din răspunsul JSON al serverului folosind interogarea JSON sau folosiți „$” pentru răspunsul brut, dacă nu vă așteptați JSON. Rezultatul este apoi comparat cu valoarea așteptată, sub formă de șiruri. Consultați {0} pentru documentație și utilizați {1} pentru a experimenta interogări.",
+ "snmpCommunityStringHelptext": "Acest șir funcționează ca o parolă pentru autentificarea și controlul accesului la dispozitivele SNMP activate. Potriviți-l cu configurația dispozitivului dvs. SNMP.",
+ "Please enter a valid OID.": "Vă rugăm să introduceți un OID valid.",
+ "now": "acum",
+ "time ago": "acum {0}",
+ "-year": "-an",
+ "Json Query Expression": "Expresie de interogare Json",
+ "cacheBusterParam": "Adăugați parametrul {0}",
+ "cacheBusterParamDescription": "Parametru generat aleatoriu pentru a ignora memoria cache.",
+ "Community String": "Șir de comunitate",
+ "OID (Object Identifier)": "OID (identificator de obiect)",
+ "snmpOIDHelptext": "Introduceți OID-ul pentru senzorul sau starea pe care doriți să-l monitorizați. Utilizați instrumente de gestionare a rețelei, cum ar fi browserele MIB sau software-ul SNMP, dacă nu sunteți sigur de OID.",
+ "Condition": "Stare",
+ "SNMP Version": "Versiunea SNMP",
+ "Host Onesender": "Gazdă Onesender",
+ "privateOnesenderDesc": "Asigurați-vă că numărul de telefon este valid. Pentru a trimite mesaj la numărul de telefon privat, ex: 628123456789",
+ "wayToGetOnesenderUrlandToken": "Puteți obține adresa URL și Token accesând site-ul web Onesender. Mai multe informații {0}",
+ "OAuth Token URL": "Adresa URL a tokenului OAuth",
+ "No tags found.": "Nu au fost găsite etichete.",
+ "signl4Docs": "Puteți găsi mai multe informații despre cum să configurați SIGNL4 și despre cum să obțineți adresa URL a webhook-ului SIGNL4 în {0}.",
+ "greater than": "mai mare decât",
+ "Token Onesender": "Onesender Token",
+ "Recipient Type": "Tip Destinatar",
+ "Private Number": "Număr privat",
+ "groupOnesenderDesc": "Asigurați-vă că GroupID este valid. Pentru a trimite un mesaj în grup, de exemplu: 628123456789-342345",
+ "Group ID": "ID grup",
+ "Add Remote Browser": "Adăugați browser la distanță",
+ "New Group": "Grup nou",
+ "Group Name": "Numele grupului",
+ "OAuth2: Client Credentials": "OAuth2: credențialele clientului",
+ "Authentication Method": "Metoda de autentificare",
+ "Authorization Header": "Antet de autorizare",
+ "Form Data Body": "Corpul datelor formularului",
+ "Client ID": "ID client",
+ "Client Secret": "Secret client",
+ "OAuth Scope": "Domeniul OAuth",
+ "Optional: Space separated list of scopes": "Opțional: listă de domenii separate prin spații",
+ "Go back to home page.": "Reveniți la pagina de start.",
+ "Lost connection to the socket server.": "S-a pierdut conexiunea la serverul socket.",
+ "Cannot connect to the socket server.": "Nu se poate conecta la serverul socket.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL SIGNL4 Webhook",
+ "Conditions": "Condiții",
+ "conditionAdd": "Adăugați o condiție",
+ "conditionDelete": "Ștergeți condiția",
+ "conditionAddGroup": "Adăugați grup",
+ "conditionDeleteGroup": "Ștergeți grupul",
+ "conditionValuePlaceholder": "Valoare",
+ "equals": "egală",
+ "not equals": "nu este egală",
+ "contains": "conţine",
+ "not contains": "nu conține",
+ "starts with": "începe cu",
+ "not starts with": "nu începe cu",
+ "ends with": "se termină cu",
+ "not ends with": "nu se termină cu",
+ "less than": "mai puțin decât",
+ "less than or equal to": "mai mic sau egal cu",
+ "greater than or equal to": "mai mare sau egal cu",
+ "record": "înregistrare",
+ "aboutSlackUsername": "Modifică numele afișat al expeditorului mesajului. Dacă doriți să menționați pe cineva, includeți-l în numele prietenos.",
+ "Custom sound to override default notification sound": "Sunet personalizat pentru a înlocui sunetul de notificare implicit",
+ "ignoredTLSError": "Erorile TLS/SSL au fost ignorate",
+ "Message format": "Formatul mesajului",
+ "Send rich messages": "Trimiteți mesaje complexe",
+ "Notification Channel": "Canal de notificare",
+ "Sound": "Sunet",
+ "Alphanumerical string and hyphens only": "Doar șir de caractere alfanumerice și liniuțe",
+ "Arcade": "Galerie",
+ "RabbitMQ Username": "Utilizator RabbitMQ",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Notificările \"time sensitive\" vor fi livrate imediat, chiar dacă dispozitivul este în modul „nu deranjați”.",
+ "rabbitmqNodesDescription": "Introduceți adresa URL pentru nodurile de gestionare RabbitMQ, inclusiv protocolul și portul. Exemplu: {0}",
+ "rabbitmqHelpText": "Pentru a utiliza monitorul, va trebui să activați plugin-ul de gestionare în configurația RabbitMQ. Pentru mai multe informații, vă rugăm să consultați {rabitmq_documentation}.",
+ "Time Sensitive (iOS Only)": "Time Sensitive (numai iOS)",
+ "From": "De la",
+ "Can be found on:": "Poate fi găsit la: {0}",
+ "The phone number of the recipient in E.164 format.": "Numărul de telefon al destinatarului în format E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Fie un ID expeditor text, fie un număr de telefon în format E.164, dacă doriți să puteți primi răspunsuri.",
+ "RabbitMQ Nodes": "Noduri de gestionare RabbitMQ",
+ "Money": "Bani",
+ "Scifi": "SF",
+ "Elevator": "Lift",
+ "Guitar": "Chitară",
+ "Pop": "Pop",
+ "Harp": "Harpă",
+ "Reveal": "Dezvăluire",
+ "Bubble": "Bule",
+ "Doorbell": "Sonerie",
+ "Flute": "Flaut",
+ "Clear": "Clar",
+ "rabbitmqNodesRequired": "Vă rugăm să setați nodurile pentru acest monitor.",
+ "rabbitmqNodesInvalid": "Vă rugăm să utilizați o adresă URL complet calificată (începând cu „http”) pentru nodurile RabbitMQ.",
+ "RabbitMQ Password": "Parolă RabbitMQ",
+ "SendGrid API Key": "Cheia API SendGrid",
+ "Separate multiple email addresses with commas": "Separați adresele de e-mail multiple cu virgule",
+ "Correct": "Corect",
+ "Fail": "Eșec",
+ "shrinkDatabaseDescriptionSqlite": "Declanșează comanda {vacuum} pentru baza de date SQLite. {auto_vacuum} este deja activat, dar acest lucru nu defragmentează baza de date și nici nu reîmpachetează paginile individuale ale bazei de date așa cum o face comanda {vacuum}."
}
diff --git a/src/lang/ru-RU.json b/src/lang/ru-RU.json
index 735920b3f..e055af110 100644
--- a/src/lang/ru-RU.json
+++ b/src/lang/ru-RU.json
@@ -3,11 +3,11 @@
"checkEverySecond": "Проверка каждые {0} секунд",
"retriesDescription": "Максимальное количество попыток перед пометкой сервиса, как недоступного, и отправкой уведомления",
"ignoreTLSError": "Игнорировать ошибки TLS/SSL для HTTPS сайтов",
- "upsideDownModeDescription": "Изменить статус сервиса на РАБОТАЕТ если он доступен, а помечается как НЕ РАБОТАЕТ.",
+ "upsideDownModeDescription": "Инверсия статуса. Если сервис доступен, он будет отмечен как недоступный.",
"maxRedirectDescription": "Максимальное количество перенаправлений. Поставьте 0, чтобы отключить перенаправления.",
"acceptedStatusCodesDescription": "Выберите коды статусов для определения доступности сервиса.",
"passwordNotMatchMsg": "Введённые пароли не совпадают.",
- "notificationDescription": "Привяжите уведомления к мониторам.",
+ "notificationDescription": "Необходимо привязать уведомления к монитору чтобы они функционировали.",
"keywordDescription": "Поиск слова в чистом HTML или в JSON-ответе (чувствительно к регистру).",
"pauseDashboardHome": "Пауза",
"deleteMonitorMsg": "Вы действительно хотите удалить данный монитор?",
@@ -17,19 +17,19 @@
"pauseMonitorMsg": "Вы действительно хотите приостановить?",
"Settings": "Настройки",
"Dashboard": "Панель управления",
- "New Update": "Есть обновление",
+ "New Update": "Новое обновление",
"Language": "Язык",
"Appearance": "Внешний вид",
"Theme": "Тема",
"General": "Общее",
"Version": "Версия",
- "Check Update On GitHub": "Проверить обновления в GitHub",
+ "Check Update On GitHub": "Проверить наличие обновления в GitHub",
"List": "Список",
"Add": "Добавить",
- "Add New Monitor": "Добавить Новый Монитор",
+ "Add New Monitor": "Добавить Новый Сенсор",
"Quick Stats": "Статистика",
- "Up": "Работает",
- "Down": "Не работает",
+ "Up": "Доступен",
+ "Down": "Не доступен",
"Pending": "В ожидании",
"Unknown": "Неизвестно",
"Pause": "Пауза",
@@ -42,7 +42,7 @@
"Edit": "Изменить",
"Delete": "Удалить",
"Current": "Текущий",
- "Uptime": "Uptime",
+ "Uptime": "Время безотказной работы",
"Cert Exp.": "Сертификат ист.",
"day": "день | дней",
"-day": "-дней",
@@ -59,22 +59,22 @@
"Heartbeat Interval": "Частота опроса",
"Retries": "Попыток",
"Advanced": "Дополнительно",
- "Upside Down Mode": "Режим смены статуса",
+ "Upside Down Mode": "Режим инверсии статуса",
"Max. Redirects": "Макс. количество перенаправлений",
"Accepted Status Codes": "Допустимые коды статуса",
"Save": "Сохранить",
"Notifications": "Уведомления",
"Not available, please setup.": "Уведомления не доступны, требуется настройка.",
- "Setup Notification": "Настроить уведомление",
+ "Setup Notification": "Настройка уведомления",
"Light": "Светлая",
"Dark": "Тёмная",
"Auto": "Как в системе",
- "Theme - Heartbeat Bar": "Тема - Полосы частоты опроса",
+ "Theme - Heartbeat Bar": "Полоса частоты опроса",
"Normal": "Обычный",
"Bottom": "Внизу",
"None": "Отсутствует",
"Timezone": "Часовой пояс TZ",
- "Search Engine Visibility": "Видимость в поисковых системах",
+ "Search Engine Visibility": "Индексация поисковыми системами",
"Allow indexing": "Разрешить индексирование",
"Discourage search engines from indexing site": "Запретить индексирование",
"Change Password": "Изменить пароль",
@@ -86,9 +86,9 @@
"Enable Auth": "Включить авторизацию",
"disableauth.message1": "Вы уверены, что хотите {disableAuth}?",
"disable authentication": "отключить авторизацию",
- "disableauth.message2": "Это подходит для {intendThirdPartyAuth} перед открытием Uptime Kuma, такие как Cloudflare Access, Authelia или другие.",
- "where you intend to implement third-party authentication": "тех, у кого настроена сторонняя система авторизации",
- "Please use this option carefully!": "Пожалуйста, используйте эту настройку с осторожностью!",
+ "disableauth.message2": "Это подходит для сценариев {intendThirdPartyAuth} с аутентифицирующими механизмами перед Uptime Kuma (например Cloudflare Access, Authelia и др.).",
+ "where you intend to implement third-party authentication": "где вы собираетесь реализовать стороннюю аутентификацию",
+ "Please use this option carefully!": "Пожалуйста, используйте с осторожностью!",
"Logout": "Выйти",
"Leave": "Оставить",
"I understand, please disable": "Я понимаю, всё равно отключить",
@@ -99,7 +99,7 @@
"Password": "Пароль",
"Remember me": "Запомнить меня",
"Login": "Вход в систему",
- "No Monitors, please": "Нет Мониторов, пожалуйста",
+ "No Monitors, please": "Без Мониторов, пожалуйста",
"No Monitors": "Мониторы отсутствуют",
"add one": "добавить",
"Notification Type": "Тип уведомления",
@@ -121,7 +121,7 @@
"Events": "События",
"Heartbeats": "Опросы",
"Auto Get": "Авто-получение",
- "enableDefaultNotificationDescription": "Для каждого нового монитора это уведомление будет включено по умолчанию. Вы всё ещё можете отключить уведомления в каждом мониторе отдельно.",
+ "enableDefaultNotificationDescription": "Это уведомление будет включено по умолчанию для каждого нового монитора. Вы можете отключить уведомления в каждом мониторе отдельно.",
"Default enabled": "По умолчанию включён",
"Also apply to existing monitors": "Применить к существующим мониторам",
"Export": "Экспорт",
@@ -150,9 +150,9 @@
"retryCheckEverySecond": "Повторять каждые {0} секунд",
"importHandleDescription": "Выберите \"Пропустить существующие\", если вы хотите пропустить каждый монитор или уведомление с таким же именем. \"Перезаписать\" удалит каждый существующий монитор или уведомление и добавит заново. Вариант \"Не проверять\" принудительно восстанавливает все мониторы и уведомления, даже если они уже существуют.",
"confirmImportMsg": "Вы действительно хотите восстановить резервную копию? Убедитесь, что вы выбрали подходящий вариант импорта.",
- "Heartbeat Retry Interval": "Интервал повтора опроса",
- "Import Backup": "Загрузить Backup",
- "Export Backup": "Скачать Backup",
+ "Heartbeat Retry Interval": "Интервал повтора запроса",
+ "Import Backup": "Импорт резервной копии",
+ "Export Backup": "Скачать резервную копию",
"Skip existing": "Пропустить существующие",
"Overwrite": "Перезаписать",
"Options": "Опции",
@@ -172,8 +172,8 @@
"Purple": "Пурпурный",
"Pink": "Розовый",
"Search...": "Поиск…",
- "Avg. Ping": "Средний пинг",
- "Avg. Response": "Средний отклик",
+ "Avg. Ping": "Сред. Пинг",
+ "Avg. Response": "Сред. Отклик",
"Entry Page": "Главная",
"statusPageNothing": "Ничего нет, добавьте группу или монитор.",
"No Services": "Нет Сервисов",
@@ -182,7 +182,7 @@
"Degraded Service": "Отказ всех сервисов",
"Add Group": "Добавить Группу",
"Add a monitor": "Добавить монитор",
- "Edit Status Page": "Редактировать страницу статусов",
+ "Edit Status Page": "Редактировать Страницу Статусов",
"Go to Dashboard": "В Панель Управления",
"Status Page": "Страница статуса",
"Status Pages": "Страницы статуса",
@@ -209,9 +209,9 @@
"line": "Line Messenger",
"mattermost": "Mattermost",
"Primary Base URL": "Основной URL",
- "Push URL": "URL-ссылка пуш уведомлений",
+ "Push URL": "URL-ссылка push уведомлений",
"needPushEvery": "К этому URL необходимо обращаться каждые {0} секунд.",
- "pushOptionalParams": "Необязательные параметры: {0}",
+ "pushOptionalParams": "Опциональные параметры: {0}",
"defaultNotificationName": "Уведомления {notification} ({number})",
"here": "здесь",
"Required": "Обязательно",
@@ -297,7 +297,7 @@
"promosmsTypeSpeed": "SMS SPEED - наивысший приоритет в системе. Очень быстро и надёжно, но очень дорого (в два раза дороже, чем SMS FULL).",
"promosmsPhoneNumber": "Номер телефона (для получателей из Польши можно пропустить код региона)",
"promosmsSMSSender": "Имя отправителя SMS: Зарегистрированное или одно из имён по умолчанию: InfoSMS, SMS Info, MaxSMS, INFO, SMS",
- "Feishu WebHookUrl": "Feishu WebHookURL",
+ "Feishu WebHookUrl": "URL-адрес Feishu WebHook",
"matrixHomeserverURL": "URL сервера (вместе с http(s):// и по желанию порт)",
"Internal Room Id": "Внутренний ID комнаты",
"matrixDesc1": "Внутренний ID комнаты можно найти в Подробностях в параметрах канала вашего Matrix клиента. Он должен выглядеть примерно как !QMdRCpUIfLwsfjxye6:home.server.",
@@ -338,7 +338,6 @@
"About": "О программе",
"Description": "Описание",
"Powered by": "Работает на",
- "shrinkDatabaseDescription": "Включает VACUUM для базы данных SQLite. Если ваша база данных была создана на версии 1.10.0 и более, AUTO_VACUUM уже включен и это действие не требуется.",
"deleteStatusPageMsg": "Вы действительно хотите удалить эту страницу статуса?",
"Style": "Стиль",
"info": "ИНФО",
@@ -413,21 +412,21 @@
"SecretAccessKey": "Секретный ключ доступа",
"PhoneNumbers": "Номера телефонов",
"TemplateCode": "ШаблонКод",
- "SignName": "SignName",
+ "SignName": "Подпись",
"Sms template must contain parameters: ": "Шаблон СМС должен содержать параметры: ",
"Bark Endpoint": "Конечная точка Bark",
- "Bark Group": "Bark Group",
- "Bark Sound": "Bark Sound",
- "WebHookUrl": "WebHookUrl",
+ "Bark Group": "Группа Bark",
+ "Bark Sound": "Звук уведомления Bark",
+ "WebHookUrl": "Url- адрес WebHook",
"SecretKey": "Секретный Ключ",
"For safety, must use secret key": "В целях безопасности необходимо использовать секретный ключ",
"Device Token": "Токен устройства",
"Platform": "Платформа",
- "Huawei": "Huawei",
+ "Huawei": "Huawei(Хуавей)",
"High": "High",
"Retry": "Повторить",
"Topic": "Тема",
- "WeCom Bot Key": "WeCom Bot Key",
+ "WeCom Bot Key": "Ключ бота WeCom",
"User": "Пользователь",
"Installed": "Установлено",
"Not installed": "Не установлено",
@@ -490,7 +489,7 @@
"Octopush API Version": "Версия API Octopush",
"Legacy Octopush-DM": "устаревший Octopush-DM",
"endpoint": "конечная точка",
- "octopushAPIKey": "\"{API key}\" из учетных данных HTTP API в панели управления",
+ "octopushAPIKey": "\"API key\" из учетных данных HTTP API в панели управления",
"octopushLogin": "\"Login\" из учетных данных HTTP API в панели управления",
"promosmsLogin": "Логин API",
"promosmsPassword": "Пароль API",
@@ -532,9 +531,9 @@
"wayToGetClickSendSMSToken": "Вы можете получить имя пользователя API и ключ API из {0} .",
"Connection String": "Строка подключения",
"Query": "Запрос",
- "settingsCertificateExpiry": "Истекание TLS сертификата",
+ "settingsCertificateExpiry": "Окончание TLS сертификата",
"certificationExpiryDescription": "HTTPS Мониторы инициируют уведомление, когда срок действия сертификата TLS истечет:",
- "Setup Docker Host": "Настроить Docker Host",
+ "Setup Docker Host": "Настройка хоста Docker",
"Connection Type": "Тип соединения",
"Docker Daemon": "Демон Docker",
"deleteDockerHostMsg": "Вы уверены, что хотите удалить этот узел docker для всех мониторов?",
@@ -572,7 +571,7 @@
"backupRecommend": "Сделайте резервную копию тома или папки с данными (./data/) напрямую.",
"Optional": "Необязательно",
"squadcast": "Squadcast",
- "SendKey": "SendKey",
+ "SendKey": "Ключ отправки",
"SMSManager API Docs": "Документация к API SMSManager ",
"Gateway Type": "Тип шлюза",
"SMSManager": "SMSManager",
@@ -582,25 +581,25 @@
"Schedule maintenance": "Запланировать техобслуживание",
"affectedMonitorsDescription": "Выберите мониторы, которые будут затронуты во время техобслуживания",
"affectedStatusPages": "Показывать уведомление о техобслуживании на выбранных страницах статуса",
- "atLeastOneMonitor": "Выберите больше одного затрагиваемого монитора",
- "dnsPortDescription": "По умолчанию порт DNS сервера - 53. Мы можете изменить его в любое время.",
+ "atLeastOneMonitor": "Выберите хотя бы один затрагиваемый монитор",
+ "dnsPortDescription": "По умолчанию порт DNS сервера - 53. Вы можете изменить его в любое время.",
"Monitor": "Монитор | Мониторы",
"webhookAdditionalHeadersTitle": "Дополнительные Заголовки",
"recurringIntervalMessage": "Запускать 1 раз каждый день | Запускать 1 раз каждые {0} дней",
"error": "ошибка",
"statusMaintenance": "Техобслуживание",
- "Affected Monitors": "Задействованные Мониторы",
+ "Affected Monitors": "Затронутые мониторы",
"Start of maintenance": "Начало техобслуживания",
"All Status Pages": "Все страницы статусов",
"Select status pages...": "Выберите страницу статуса…",
- "resendEveryXTimes": "Переотправлять каждые {0} раз",
- "resendDisabled": "Переотправка отключена",
+ "resendEveryXTimes": "Повтор каждые {0} раз",
+ "resendDisabled": "Повторная отправка отключена",
"deleteMaintenanceMsg": "Вы действительно хотите удалить это техобслуживание?",
"critical": "критично",
"Custom Monitor Type": "Собственный тип монитора",
"markdownSupported": "Поддерживает синтаксис Markdown",
"Passive Monitor Type": "Пассивный Тип Монитора",
- "Specific Monitor Type": "Специфичный Тип Монитора",
+ "Specific Monitor Type": "Специфический Тип Монитора",
"Help": "Помощь",
"Game": "Игра",
"Resend Notification if Down X times consequently": "Повторно отправить уведомление, если не работает X раз подряд",
@@ -611,7 +610,7 @@
"weekdayShortSat": "Сб",
"weekdayShortSun": "Вс",
"dayOfMonth": "День месяца",
- "Pick Affected Monitors...": "Выберите Задействованные Мониторы…",
+ "Pick Affected Monitors...": "Выберите затронутые мониторы…",
"Custom": "Свой цвет",
"successMessage": "Сообщение об успехе",
"successMessageExplanation": "Сообщение MQTT, которое может рассматриваться как успешное",
@@ -664,7 +663,7 @@
"install": "Установить",
"installing": "Устанавливается",
"uninstall": "Удалить",
- "Recurring": "Текущий",
+ "Recurring": "Повторяющийся",
"recurringInterval": "Интервал",
"smseagle": "SMSEagle",
"Google Analytics ID": "ID Google Аналитики",
@@ -690,7 +689,7 @@
"Guild ID": "Идентификатор гильдии",
"Kook": "Kook",
"wayToGetKookBotToken": "Создайте приложение и получите токен бота по адресу {0}",
- "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при отключении несколько раз",
+ "Resend Notification if Down X times consecutively": "Повторная отправка уведомления при неудачном запросе X раз",
"telegramProtectContent": "Запретить пересылку/сохранение",
"telegramProtectContentDescription": "Если включено, сообщения бота в Telegram будут запрещены для пересылки и сохранения.",
"telegramSendSilently": "Отправить без звука",
@@ -707,7 +706,7 @@
"Auto resolve or acknowledged": "Автоматическое разрешение или подтверждение",
"auto acknowledged": "автоматическое подтверждение",
"auto resolve": "автоматическое разрешение",
- "API Keys": "API Ключи",
+ "API Keys": "Ключи API",
"Expiry": "Срок действия",
"Expiry date": "Дата истечения срока действия",
"Don't expire": "Не истекает",
@@ -741,7 +740,7 @@
"wayToGetPagerDutyKey": "Вы можете это получить, перейдя в Сервис -> Каталог сервисов -> (Выберите сервис) -> Интеграции -> Добавить интеграцию. Здесь вы можете искать «Events API V2». Подробнее {0}",
"apiKeyAddedMsg": "Ваш ключ API добавлен. Пожалуйста, обратите внимание на это сообщение, так как оно отображается один раз.",
"deleteAPIKeyMsg": "Вы уверены, что хотите удалить этот ключ API?",
- "wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree скопируйте файл {Endpoint}. См. полную информацию {0}",
+ "wayToGetPagerTreeIntegrationURL": "После создания интеграции Uptime Kuma в PagerTree скопируйте файл Endpoint. См. полную информацию {0}",
"telegramMessageThreadIDDescription": "Необязательный уникальный идентификатор для цепочки сообщений (темы) форума; только для форумов-супергрупп",
"grpcMethodDescription": "Имя метода преобразуется в формат camelCase, например, sayHello, check и т. д.",
"Proto Service Name": "Название службы Proto",
@@ -802,14 +801,14 @@
"twilioApiKey": "API ключ (необязательно)",
"Expected Value": "Ожидаемое значение",
"Json Query": "JSON Запрос",
- "Kafka Brokers": "Kafka Brokers",
+ "Kafka Brokers": "Брокеры Kafka",
"Press Enter to add broker": "Нажмите Enter чтобы добавить брокера",
"Kafka Topic Name": "Название темы Kafka",
"Kafka Producer Message": "Сообщение продюсера Kafka",
"Kafka SASL Options": "Параметры SASL в Kafka",
"Mechanism": "Механизм",
"Pick a SASL Mechanism...": "Выберите механизм SASL…",
- "AccessKey Id": "AccessKey Id",
+ "AccessKey Id": "Id-значение AccessKey",
"Secret AccessKey": "Секретный ключ доступа",
"Session Token": "Токен сессии",
"Notify Channel": "Канал оповещений",
@@ -840,7 +839,7 @@
"noOrBadCertificate": "Отсутствие сертификата",
"gamedigGuessPortDescription": "Порт, используемый протоколом Valve Server Query Protocol, может отличаться от порта клиента. Попробуйте это сделать, если монитор не может подключиться к серверу.",
"nostrSender": "Закрытый ключ отправителя (nsec)",
- "wayToGetFlashDutyKey": "Вы можете перейти на страницу \"Канал\" -> (Выберите канал) -> \"Интеграции\" -> \"Добавить новую страницу интеграции\", добавить \"Пользовательское событие\", чтобы получить push-адрес, скопировать ключ интеграции в адрес. Для получения дополнительной информации, пожалуйста, посетите",
+ "wayToGetFlashDutyKey": "Вы можете перейти на страницу \"Канал\" -> (Выберите канал) -> \"Интеграции\" -> \"Добавить новую страницу интеграции\", добавить \"Uptime Kuma\", чтобы получить push-адрес, скопировать ключ интеграции в адрес. Для получения дополнительной информации, пожалуйста, посетите",
"styleElapsedTimeShowNoLine": "Показать (Без линии)",
"styleElapsedTimeShowWithLine": "Показать (С линией)",
"Server URL should not contain the nfty topic": "URL сервера не должен содержать тему nfty",
@@ -850,11 +849,11 @@
"nostrRelays": "Реле Nostr",
"nostrRelaysHelp": "Один URL-адрес ретрансляции в каждой строке",
"enableNSCD": "Включить NSCD (Name Service Cache Daemon) для кэширования всех DNS-запросов",
- "Saved.": "Сохранено",
- "setupDatabaseChooseDatabase": "Какую базу данных Вы хотели бы использовать?",
- "setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот Docker образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-socket.",
+ "Saved.": "Сохранено.",
+ "setupDatabaseChooseDatabase": "Какую базу данных Вы бы хотели использовать?",
+ "setupDatabaseEmbeddedMariaDB": "Вам не нужно ничего настраивать. В этот докер-образ автоматически встроена и настроена MariaDB. Uptime Kuma будет подключаться к этой базе данных через unix-сокет.",
"setupDatabaseSQLite": "Простой файл базы данных, рекомендуемый для небольших развертываний. До версии 2.0.0 Uptime Kuma использовал SQLite в качестве базы данных по умолчанию.",
- "setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Вам необходимо задать информацию о подключении к базе данных.",
+ "setupDatabaseMariaDB": "Подключитесь к внешней базе данных MariaDB. Необходимо задать информацию о подключении к базе данных.",
"dbName": "Имя базы данных",
"pushViewCode": "Как использовать монитор Push? (Посмотреть код)",
"programmingLanguages": "Языки программирования",
@@ -931,18 +930,18 @@
"Your User ID": "Ваш идентификатор пользователя",
"Host URL": "URL Хоста",
"locally configured mail transfer agent": "Настроенный локально агент передачи почты",
- "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Введите {Hostname} сервера, к которому вы хотите подключиться, либо {localhost}, если вы собираетесь использовать {local_mta}.",
- "wayToGetHeiiOnCallDetails": "Как получить ID триггера и {API Keys}, рассказывается в {documentation}",
- "gtxMessagingApiKeyHint": "Вы можете найти свой {API key} на странице: Мои учетные записи маршрутизации > Показать информацию об учетной записи > Учетные данные API > REST API (v2.x)",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Введите {Hostname} сервера, к которому вы хотите подключиться, либо {localhost}, если вы собираетесь использовать {local_mta}",
+ "wayToGetHeiiOnCallDetails": "Как получить ID триггера и ключи API , рассказывается в {documentation}",
+ "gtxMessagingApiKeyHint": "Вы можете найти свой ключ API на странице: Мои учетные записи маршрутизации > Показать информацию об учетной записи > Учетные данные API > REST API (v2.x)",
"From Phone Number / Transmission Path Originating Address (TPOA)": "Номер телефона / Адрес источника пути передачи (АИПП)",
"Alphanumeric (recommended)": "Буквенно-цифровой (рекомендуется)",
"Originator type": "Тип источника",
- "cellsyntOriginatortypeAlphanumeric": "Буквенно-цифровая строка (не более 11 буквенно-цифровых символов). Получатели не могут ответить на это сообщение.",
- "cellsyntOriginatortypeNumeric": "Числовое значение (не более 15 цифр) с номером телефона в международном формате без 00 в начале (например, номер Великобритании 07920 110 000 должен быть задан, как 447920110000). Получатели могут ответить на сообщение.",
- "cellsyntDestination": "Номер телефона получателя в международном формате с 00 в начале, за которым следует код страны, например, 00447920110000 для номера Великобритании 07920 110 000 (не более 17 цифр в сумме). Не более 25000 получателей, разделенных запятыми, на один HTTP-запрос.",
+ "cellsyntOriginatortypeAlphanumeric": "Буквенно-цифровая строка (не более 11 символов). Получатели не могут ответить на это сообщение.",
+ "cellsyntOriginatortypeNumeric": "Числовое значение (не более 15 цифр) с номером телефона в международном формате, без 00 в начале (например, номер Великобритании 07920 110 000 должен быть задан, как 447920110000). Получатели могут ответить на сообщение.",
+ "cellsyntDestination": "Номер телефона получателя в международном формате с 00 в начале, за которым следует код страны, например, 00447920110000 для номера Великобритании 07920 110 000 (не более 17 цифр). Не более 25000 получателей, разделенных запятыми, на один HTTP-запрос.",
"callMeBotGet": "Здесь вы можете сгенерировать {endpoint} для {0}, {1} и {2}. Имейте в виду, что вы можете получить ограничение по скорости. Ограничения по скорости выглядят следующим образом: {3}",
- "gtxMessagingFromHint": "На мобильных телефонах получатели видят АИПП как отправителя сообщения. Допускается использование до 11 буквенно-цифровых символов, шорткода, местного длинного кода или международных номеров ({e164}, {e212} или {e214}).",
- "wayToWriteWhapiRecipient": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатора контакта ({1}) или идентификатора группы ({2})",
+ "gtxMessagingFromHint": "На мобильных телефонах получатели видят АИПП как отправителя сообщения. Допускается использование до 11 буквенно-цифровых символов, шорткода, местного длинного кода или международных номеров ({e164}, {e212} или {e214})",
+ "wayToWriteWhapiRecipient": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатора контакта ({1}) или идентификатора группы ({2}).",
"cellsyntSplitLongMessages": "Разделять длинные сообщения на 6 частей. 153 x 6 = 918 символов.",
"Mentioning": "Упоминание",
"Don't mention people": "Не упоминайте людей",
@@ -952,17 +951,179 @@
"documentationOf": "{0} Документация",
"senderSevenIO": "Отправляет номер или имя",
"receiverSevenIO": "Номер получения",
- "wayToGetSevenIOApiKey": "Зайдите на панель управления по адресу app.seven.io > разработчик > {api key} > зеленая кнопка добавить",
+ "wayToGetSevenIOApiKey": "Зайдите на панель управления по адресу app.seven.io > разработчик > api key > зеленая кнопка добавить",
"receiverInfoSevenIO": "Если номер получателя не находится в Германии, то перед номером необходимо добавить код страны (например, для США код страны 1, тогда используйте 117612121212, вместо 017612121212)",
- "apiKeySevenIO": "SevenIO {API Key}",
+ "apiKeySevenIO": "SevenIO API-ключ",
"Telephone number": "Номер телефона",
"Channel access token (Long-lived)": "Токен доступа к каналу (долговечный)",
- "wayToGetWhapiUrlAndToken": "Вы можете получить {API URL} и токен, зайдя в нужный вам канал с {0}",
+ "wayToGetWhapiUrlAndToken": "Вы можете получить API URL и токен, зайдя в нужный вам канал с {0}",
"To Phone Number": "На номер телефона",
"Originator": "Источник",
"cellsyntOriginator": "Виден на мобильном телефоне получателя как отправитель сообщения. Допустимые значения и функция зависят от параметра {originatortype}.",
- "Destination": "Назначение",
+ "Destination": "Пункт назначения",
"Allow Long SMS": "Разрешить длинные SMS",
- "max 15 digits": "макс. 15 цифр",
- "max 11 alphanumeric characters": "максимум 11 буквенно-цифровых символов"
+ "max 15 digits": "максимум 15 цифр",
+ "max 11 alphanumeric characters": "максимум 11 буквенно-цифровых символов",
+ "Command": "Команда",
+ "Create new forum post": "Создать новый пост",
+ "forumPostName": "Название поста",
+ "postToExistingThread": "Создать пост в этой ветке",
+ "Select message type": "Выберите тип сообщения",
+ "Send to channel": "Отправить в канал",
+ "Refresh Interval": "Интервал обновления",
+ "ignoreTLSErrorGeneral": "Игнорировать ошибки TLS/SSL для подключения",
+ "CurlDebugInfoOAuth2CCUnsupported": "Полная поддержка потока клиентских учетных данных OAuth отсутствует в {curl}.{newline}Пожалуйста, получите токен доступа и передайте его через параметр {oauth2_bearer}.",
+ "now": "сейчас",
+ "time ago": "{0} назад",
+ "Refresh Interval Description": "Страница статуса будет полностью обновлена каждые {0} секунд",
+ "and": "и",
+ "e.g. {discordThreadID}": "например {discordThreadID}",
+ "ignoredTLSError": "Ошибки TLS/SSL проигнорированы",
+ "Debug": "Отладка",
+ "Copy": "Скопировать",
+ "CopyToClipboardError": "Не удалось скопировать: {error}",
+ "CopyToClipboardSuccess": "Скопировано!",
+ "firewalls": "файрволы",
+ "dns resolvers": "dns резолверы",
+ "docker networks": "докер-сети",
+ "CurlDebugInfoProxiesUnsupported": "Поддержка прокси в верхней {curl} команде в настоящее время не реализована.",
+ "RabbitMQ Nodes": "Узлы управления RabbitMQ",
+ "RabbitMQ Username": "Имя пользователя RabbitMQ",
+ "shrinkDatabaseDescriptionSqlite": "Триггерная база данных {vacuum} для SQLite. {auto_vacuum} уже включен, но он не дефрагментирует базу данных и не переупаковывает отдельные страницы базы данных, как это делает команда {vacuum}.",
+ "threadForumPostID": "ID поста Форума / Ветки",
+ "whatHappensAtForumPost": "Создать новый пост на форуме. Это НЕ отправит сообщение на текущий пост. Чтобы написать сообщение в текущем посте используйте \"{option}\"",
+ "wayToGetDiscordThreadId": "Получение идентификатора темы/сообщения на форуме аналогично получению идентификатора канала. Подробнее о том, как получить идентификаторы {0}",
+ "jsonQueryDescription": "Проанализируйте и извлеките определенные данные из ответа JSON сервера с помощью запроса JSON или используйте «$» для необработанного ответа, если не ожидается JSON. Затем результат сравнивается с ожидаемым значением в виде строк. См. документацию в {0} и используйте {1} для экспериментов с запросами.",
+ "aboutSlackUsername": "Изменяет отображаемое имя отправителя сообщения. Если вы хотите упомянуть кого-то, вместо этого включите его в понятное имя.",
+ "smspartnerApiurl": "Вы можете найти свой ключ API в панели управления по адресу {0}",
+ "smspartnerPhoneNumberHelptext": "Номер должен быть в международном формате {0}, {1}. Несколько чисел должны быть разделены {2}",
+ "cacheBusterParam": "Добавить параметр {0}",
+ "cacheBusterParamDescription": "Случайно генерируемый параметр для пропуска кэшей.",
+ "bitrix24SupportUserID": "Введите свой идентификатор пользователя в Bitrix24. Узнать ID можно по ссылке, зайдя в профиль пользователя.",
+ "mongodbCommandDescription": "Запустите команду MongoDB для базы данных. Информацию о доступных командах можно найти в {документации}",
+ "Community String": "Строка сообщества",
+ "snmpCommunityStringHelptext": "Эта строка действует как пароль для аутентификации и контроля доступа к устройствам с поддержкой SNMP. Сопоставьте его с конфигурацией вашего SNMP-устройства.",
+ "snmpOIDHelptext": "Введите OID для датчика или состояния, которое вы хотите отслеживать. Используйте инструменты управления сетью, такие как браузеры MIB или программное обеспечение SNMP, если вы не уверены в OID.",
+ "threemaSenderIdentity": "ID шлюза",
+ "threemaApiAuthenticationSecret": "Секрет ID-шлюза",
+ "threemaBasicModeInfo": "Примечание. Эта интеграция использует шлюз Threema в базовом режиме (шифрование на базе сервера). Более подробную информацию можно найти {0}.",
+ "privateOnesenderDesc": "Убедитесь, что номер телефона действителен. Чтобы отправить сообщение на личный номер телефона, например: 628123456789",
+ "Group Name": "Имя группы",
+ "Authorization Header": "Заголовок авторизации",
+ "Optional: Space separated list of scopes": "Необязательно: список областей действия, разделенный пробелам",
+ "Lost connection to the socket server.": "Потеряно соединение с сервером сокетов.",
+ "signl4Docs": "Дополнительную информацию о том, как настроить SIGNL4 и как получить URL-адрес вебхук SIGNL4, можно найти в {0}.",
+ "greater than": "больше чем",
+ "Alphanumerical string and hyphens only": "Только буквенно-цифровая строка и дефисы",
+ "Reveal": "Раскрытие",
+ "Elevator": "Лифт",
+ "Custom sound to override default notification sound": "Пользовательский звук для замены звука уведомления по умолчанию",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Уведомления, чувствительные ко времени, будут доставлены немедленно, даже если устройство находится в режиме «Не беспокоить».",
+ "rabbitmqNodesDescription": "Введите URL-адрес узлов управления RabbitMQ, включая протокол и порт. Пример: {0}",
+ "rabbitmqHelpText": "Чтобы использовать монитор, вам необходимо включить плагин управления в настройках RabbitMQ. Для получения дополнительной информации обратитесь к {rabitmq_documentation}.",
+ "Sound": "Звук",
+ "smspartnerPhoneNumber": "Номер(а) телефона",
+ "smspartnerSenderName": "Имя отправителя СМС",
+ "smspartnerSenderNameInfo": "Должно быть от 3 до 11 обычных символов",
+ "Message format": "Формат сообщения",
+ "Send rich messages": "Отправить сообщение в формате RCS",
+ "Bitrix24 Webhook URL": "URL-адрес вебхука Bitrix24",
+ "wayToGetBitrix24Webhook": "Вы можете создать вебхук, выполнив действия, описанные в {0}",
+ "OID (Object Identifier)": "OID (идентификатор объекта)",
+ "Condition": "Условие",
+ "SNMP Version": "Версия SNMP",
+ "Please enter a valid OID.": "Пожалуйста, введите действительный OID.",
+ "wayToGetThreemaGateway": "Вы можете зарегистрироваться на Threema Gateway {0}.",
+ "threemaRecipient": "Получатель",
+ "threemaRecipientType": "Тип получателя",
+ "threemaRecipientTypeIdentity": "Значение Threema-ID",
+ "threemaRecipientTypeIdentityFormat": "8 знаков",
+ "threemaRecipientTypePhone": "Номер телефона",
+ "threemaRecipientTypePhoneFormat": "Е.164, без ведущего +",
+ "threemaRecipientTypeEmail": "Адрес электронной почты",
+ "threemaSenderIdentityFormat": "8 символов, обычно начинается с *",
+ "apiKeysDisabledMsg": "Ключи API отключены, поскольку отключена аутентификация.",
+ "Host Onesender": "Хост Onesender",
+ "Token Onesender": "Токен Onesender",
+ "Recipient Type": "Тип получателя",
+ "Private Number": "Частный номер",
+ "groupOnesenderDesc": "Убедитесь, что GroupID действителен. Чтобы отправить сообщение в группу, например: 628123456789-342345",
+ "Group ID": "ID группы",
+ "wayToGetOnesenderUrlandToken": "Вы можете получить URL-адрес и токен, перейдя на веб-сайт Onesender. Дополнительная информация {0}",
+ "Add Remote Browser": "Добавить удаленный браузер",
+ "New Group": "Новая группа",
+ "OAuth2: Client Credentials": "OAuth2: учетные данные клиента",
+ "Authentication Method": "Метод аутентификации",
+ "Form Data Body": "Тело данных формы",
+ "OAuth Token URL": "URL-адрес токена OAuth",
+ "Client ID": "ID клиента",
+ "Client Secret": "Секрет клиента",
+ "OAuth Scope": "Область действия OAuth",
+ "Go back to home page.": "Вернутся на домашнюю страницу.",
+ "No tags found.": "Теги не найдены.",
+ "Cannot connect to the socket server.": "Невозможно подключиться к серверу сокетов.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL-адрес вебхук SIGNL4",
+ "Conditions": "Условия",
+ "conditionAdd": "Добавить условие",
+ "conditionDelete": "Удалить условие",
+ "conditionAddGroup": "Добавить группу",
+ "conditionDeleteGroup": "Удалить группу",
+ "conditionValuePlaceholder": "Значение",
+ "equals": "равно",
+ "not equals": "не равно",
+ "contains": "содержит",
+ "not contains": "не содержит",
+ "starts with": "начинается с",
+ "not starts with": "не начинается с",
+ "ends with": "заканчивается с",
+ "not ends with": "не заканчивается с",
+ "less than": "меньше чем",
+ "less than or equal to": "меньше или равно",
+ "greater than or equal to": "больше или равно",
+ "record": "запись",
+ "Notification Channel": "Канал уведомлений",
+ "Arcade": "Аркада",
+ "Correct": "Исправить",
+ "Fail": "Ошибка",
+ "Harp": "Арфа",
+ "Bubble": "Пузырь",
+ "Doorbell": "Дверной звонок",
+ "Flute": "Флейта",
+ "Money": "Деньги",
+ "Scifi": "Сай-фай",
+ "Clear": "Очистить",
+ "Guitar": "Гитара",
+ "Pop": "Поп",
+ "Time Sensitive (iOS Only)": "Чувствительность ко времени (только iOS)",
+ "From": "От",
+ "Can be found on:": "Можно найти: {0}",
+ "The phone number of the recipient in E.164 format.": "Номер телефона получателя в формате E.164.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Либо идентификатор отправителя текстового сообщения, либо номер телефона в формате E.164, если вы хотите иметь возможность получать ответы.",
+ "rabbitmqNodesRequired": "Пожалуйста, установите узлы для этого монитора.",
+ "rabbitmqNodesInvalid": "Пожалуйста, используйте полный URL-адрес (начинающийся с «http») для узлов RabbitMQ.",
+ "RabbitMQ Password": "Пароль RabbitMQ",
+ "SendGrid API Key": "API-ключ SendGrid",
+ "Separate multiple email addresses with commas": "Разделяйте несколько адресов электронной почты запятыми",
+ "-year": "-год",
+ "Json Query Expression": "Выражение запроса Json",
+ "templateServiceName": "имя сервиса",
+ "templateHostnameOrURL": "hostname или URL",
+ "templateStatus": "статус",
+ "telegramServerUrlDescription": "Чтобы поднять ограничения API API Telegram или получить доступ к заблокированным районам (Китай, Иран и т.д.). Для получения дополнительной информации нажмите {0}. По умолчанию: {1}",
+ "wayToGetWahaApiKey": "Ключ API - это значение переменной среды WHATSAPP_API_KEY, которое вы использовали для запуска WAHA.",
+ "wayToGetWahaSession": "Из этой сессии WAHA отправляет уведомления на удостоверение личности чата. Вы можете найти его на приборной панели Waha.",
+ "wayToWriteWahaChatId": "Номер телефона с международным префиксом, но без знака плюс в начале ({0}), идентификатор контакта ({1}) или идентификатора группы ({2}). Уведомления отправляются на этот идентификатор чата от сеанса Waha.",
+ "wahaSession": "Сессия",
+ "wahaChatId": "Идентификатор чата (номер телефона / идентификатор контакта / идентификатор группы)",
+ "wayToGetWahaApiUrl": "Ваш экземпляр WAHA URL.",
+ "YZJ Webhook URL": "YZJ Вебхук URL",
+ "YZJ Robot Token": "YZJ Токен Робота",
+ "telegramServerUrl": "(Необязательно) URL Сервера",
+ "telegramUseTemplate": "Используйте пользовательский шаблон сообщения",
+ "telegramUseTemplateDescription": "Если включено, сообщение будет отправлено с помощью пользовательского шаблона.",
+ "telegramTemplateFormatDescription": "Telegram позволяет использовать различные языки разметки для сообщений, см. Telegram {0} для конкретных деталей.",
+ "Plain Text": "Простой текст",
+ "Message Template": "Шаблон сообщения",
+ "Template Format": "Формат шаблона"
}
diff --git a/src/lang/sk.json b/src/lang/sk.json
index 584ab1680..55ab4a0a1 100644
--- a/src/lang/sk.json
+++ b/src/lang/sk.json
@@ -51,15 +51,15 @@
"Notifications": "Notifikácie",
"Not available, please setup.": "Nedostupné, prosím nastavte.",
"Setup Notification": "Nastavenie notifikácií",
- "Dark": "Tmavá",
- "Light": "Svetlá",
+ "Dark": "Tmavý",
+ "Light": "Svetlý",
"Auto": "Automaticky",
"Normal": "Normálna",
"Bottom": "Dole",
"None": "Žiadne",
"Timezone": "Časová zóna",
"languageName": "Slovenčina",
- "Dashboard": "Dashboard",
+ "Dashboard": "Panel",
"Check Update On GitHub": "Skontrolovať aktualizáciu na GitHub-e",
"Up": "Dostupné",
"Down": "Nedostupné",
@@ -74,14 +74,14 @@
"-hour": "-hodín",
"Monitor Type": "Typ Sledovania",
"URL": "URL",
- "Hostname": "Adresa",
+ "Hostname": "Adresa servera",
"Heartbeat Interval": "Heartbeat Interval",
"Heartbeat Retry Interval": "Interval opakovania pre Heartbeat",
"retriesDescription": "Maximálny počet opakovaní pred tým, ako je služba označená ako nedostupná a je zaslaná notifikácia",
"maxRedirectDescription": "Maximálny počet presmerovaní. Hodnota 0 vypne presmerovania.",
"needPushEvery": "Tuto adresu by ste mali volať každých {0} sekúnd.",
"pushOptionalParams": "Voliteľné parametre: {0}",
- "Theme - Heartbeat Bar": "Téma - Heartbeat riadok",
+ "Theme - Heartbeat Bar": "Téma - Heartbeat panel",
"Game": "Hra",
"Search Engine Visibility": "Viditeľnosť vyhľadávačmi",
"Allow indexing": "Povoliť indexovanie",
@@ -115,7 +115,7 @@
"Export": "Exportovať",
"Import": "Importovať",
"respTime": "Čas odozvy (ms)",
- "notAvailableShort": "Nie je číslo",
+ "notAvailableShort": "N/A",
"Default enabled": "Predvolene povolené",
"Create": "Vytvoriť",
"Clear Data": "Vyčistiť dáta",
@@ -195,13 +195,13 @@
"Search...": "Hľadať…",
"statusPageNothing": "Nič tu nie je, pridajte skupinu alebo sledovanie.",
"webhookAdditionalHeadersTitle": "Ďalšie položky",
- "webhookAdditionalHeadersDesc": "Nastaví ďalšie hlavičky odoslané s webovým hákom.",
- "Webhook URL": "Webhook URL",
+ "webhookAdditionalHeadersDesc": "Nastaví ďalšie hlavičky odoslané pomocou webhooku. Každá hlavička by mala byť definovaná ako JSON kľúč/hodnota.",
+ "Webhook URL": "URL adresa webhooku",
"Application Token": "Token aplikácie",
- "Server URL": "Server URL",
+ "Server URL": "URL adresa servera",
"Priority": "Priorita",
"statusPageRefreshIn": "Obnovenie za: {0}",
- "emojiCheatSheet": "Emotikony: {0}",
+ "emojiCheatSheet": "Ťahák emotikonov: {0}",
"Read more": "Prečítajte si viac",
"appriseInstalled": "Apprise je nainštalovaný.",
"Reconnecting...": "Prepájanie...",
@@ -217,6 +217,370 @@
"Cannot connect to the socket server": "Nemožno sa pripojiť k socket serveru",
"Invert Keyword": "Prevrátiť kľúčové slovo",
"Expected Value": "Očakávaná hodnota",
- "Json Query": "Json Query",
- "Method": "Metoda"
+ "Json Query": "Json dotaz",
+ "Method": "Metóda",
+ "successKeywordExplanation": "Kľúčové slovo MQTT, ktoré sa bude považovať za úspešné",
+ "setupDatabaseChooseDatabase": "Ktorú databázu chcete použiť?",
+ "pushViewCode": "Ako používať Push monitor? (Zobraziť kód)",
+ "setupDatabaseEmbeddedMariaDB": "Nemusíte nič nastavovať. Tento obraz dockera má automaticky vloženú a nakonfigurovanú databázu MariaDB. Uptime Kuma sa k tejto databáze pripojí prostredníctvom unixového socketu.",
+ "setupDatabaseMariaDB": "Pripojenie k externej databáze MariaDB. Musíte nastaviť informácie o pripojení k databáze.",
+ "setupDatabaseSQLite": "Jednoduchý databázový súbor, ktorý sa odporúča pre malé nasadenia. Pred verziou 2.0.0 používal Uptime Kuma ako predvolenú databázu SQLite.",
+ "Host URL": "URL adresa servera",
+ "Search monitored sites": "Vyhľadať sledované stránky",
+ "successKeyword": "Kľúčové slovo úspechu",
+ "startOrEndWithOnly": "Začínať alebo končiť iba s {0}",
+ "wayToGetCloudflaredURL": "(Stiahnite si cloudflared z {0})",
+ "Don't know how to get the token? Please read the guide:": "Neviete, ako získať token? Prečítajte si príručku:",
+ "The current connection may be lost if you are currently connecting via Cloudflare Tunnel. Are you sure want to stop it? Type your current password to confirm it.": "Ak sa práve pripájate cez tunel Cloudflare, aktuálne pripojenie sa môže stratiť. Ste si istí, že to chcete zastaviť? Zadajte svoje aktuálne heslo a potvrďte ho.",
+ "Certificate Chain": "Reťazec certifikátu",
+ "settingUpDatabaseMSG": "Prebieha nastavovanie databázy. Môže to chvíľu trvať, prosím buďte trpezliví.",
+ "dbName": "Názov databázy",
+ "Add one": "Pridať jeden",
+ "No Monitors": "Žiadne sledovania",
+ "Untitled Group": "Skupina bez názvu",
+ "Services": "Služby",
+ "Invalid": "Neplatné",
+ "The slug is already taken. Please choose another slug.": "Slug je už obsadený. Vyberte si prosím iný slug.",
+ "No Proxy": "Žiadny proxy",
+ "Authentication": "Overenie",
+ "HTTP Basic Auth": "Základné HTTP overenie",
+ "New Status Page": "Nová stavová stránka",
+ "Reverse Proxy": "Reverzný proxy server",
+ "Backup": "Záloha",
+ "About": "O programe",
+ "cloudflareWebsite": "Webová stránka Cloudflare",
+ "HTTP Headers": "HTTP hlavičky",
+ "Other Software": "Iný softvér",
+ "For example: nginx, Apache and Traefik.": "Napríklad: nginx, Apache a Traefik.",
+ "Please read": "Prečítajte si, prosím",
+ "pushOthers": "Ostatné",
+ "Created": "Vytvorené",
+ "ignoreTLSErrorGeneral": "Ignorovať chybu TLS/SSL pre pripojenie",
+ "programmingLanguages": "Programovacie jazyky",
+ "No monitors available.": "Žiadne sledovania nie sú k dispozícii.",
+ "templateLimitedToUpDownCertNotifications": "dostupné len pre upozornenia DOSTUPNÉ/NEDOSTUPNÉ/Platnosť certifikátu",
+ "templateLimitedToUpDownNotifications": "dostupné iba pre upozornenia DOSTUPNÉ/NEDOSTUPNÉ",
+ "BodyInvalidFormat": "Telo požiadavky nie je platný JSON: ",
+ "liquidIntroduction": "Šablóna sa dosahuje pomocou šablónovacieho jazyka Liquid. Pokyny na použitie nájdete v {0}. Toto sú dostupné premenné:",
+ "templateMsg": "správa oznámenia",
+ "templateHeartbeatJSON": "objekt popisujúci pulz",
+ "templateMonitorJSON": "objekt popisujúci sledovanie",
+ "Monitor History": "História sledovania",
+ "clearDataOlderThan": "Uchovať dáta histórie sledovania počas {0} dní.",
+ "PasswordsDoNotMatch": "Heslá sa nezhodujú.",
+ "records": "záznamy",
+ "One record": "Jeden záznam",
+ "steamApiKeyDescription": "Na monitorovanie herného servera služby Steam potrebujete kľúč Web-API služby Steam. Kľúč API si môžete zaregistrovať tu: ",
+ "Current User": "Aktuálny používateľ",
+ "topic": "Téma",
+ "topicExplanation": "Téma MQTT na sledovanie",
+ "recent": "Nedávne",
+ "Last Updated": "Naposledy aktualizované",
+ "Switch to Light Theme": "Prepnutie na svetelnú tému",
+ "Show Tags": "Zobraziť štítky",
+ "Hide Tags": "Skryť štítky",
+ "Description": "Popis",
+ "Page Not Found": "Stránka sa nenašla",
+ "locally configured mail transfer agent": "lokálne nakonfigurovaný agent na prenos pošty",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Zadajte adresu servera, ku ktorému chcete pripojiť, alebo {localhost} ak chcete používať {local_mta}",
+ "Reset Token": "Resetovať token",
+ "Done": "Hotovo",
+ "Info": "Informácie",
+ "Security": "Zabezpečenie",
+ "Steam API Key": "Kľúč API služby Steam",
+ "Pick a RR-Type...": "Vyberte typ RR…",
+ "Discard": "Vyhodiť",
+ "Select": "Vybrať",
+ "selectedMonitorCount": "Vybrané: {0}",
+ "Check/Uncheck": "Označiť/Odznačiť",
+ "Powered by": "Poháňané",
+ "proxyDescription": "Aby proxy servery fungovali, musia byť priradené k sledovaniu.",
+ "enableProxyDescription": "Tento proxy server nebude mať vplyv na požiadavky sledovania, kým nebude aktivovaný. Môžete ovládať dočasné vypnutie proxy servera zo všetkých sledovaní podľa stavu aktivácie.",
+ "Valid": "Platné",
+ "No consecutive dashes": "Žiadne po sebe idúce pomlčky",
+ "statusPageSpecialSlugDesc": "Špeciálny slug {0}: táto stránka sa zobrazí, ak nie je uvedený žiadny slug",
+ "Next": "Ďalej",
+ "shrinkDatabaseDescription": "Pomocou tejto možnosti vykonáte príkaz VACUUM nad databázou SQLite. Ak bola databáza vytvorená po vydaní verzie 1.10.0, funkcia AUTO_VACUUM je už zapnutá a táto akcia sa nevyžaduje.",
+ "Customize": "Prispôsobenie",
+ "Custom Footer": "Vlastná päta",
+ "Custom CSS": "Vlastné CSS",
+ "deleteStatusPageMsg": "Ste si istí, že chcete odstrániť túto stavovú stránku?",
+ "Proxies": "Proxy",
+ "default": "Predvolené",
+ "enabled": "Zapnuté",
+ "setAsDefault": "Nastaviť ako predvolené",
+ "deleteProxyMsg": "Ste si istí, že chcete odstrániť toto proxy pre všetky sledovania?",
+ "Body": "Telo",
+ "Message:": "Správa:",
+ "webhookBodyPresetOption": "Uložená hodnota - {0}",
+ "webhookBodyCustomOption": "Vlastné telo",
+ "Headers": "Hlavičky",
+ "PushUrl": "Push URL",
+ "HeadersInvalidFormat": "Hlavičky požiadavky nie sú platný JSON: ",
+ "Shrink Database": "Zmenšiť databázu",
+ "Pick Accepted Status Codes...": "Vybrať akceptovateľné stavové kódy…",
+ "Default": "Predvolené",
+ "HTTP Options": "Možnosti HTTP",
+ "Create Incident": "Vytvoriť incident",
+ "Title": "Názov",
+ "Content": "Obsah",
+ "Style": "Štýl",
+ "info": "info",
+ "warning": "varovanie",
+ "danger": "nebezpečenstvo",
+ "error": "chyba",
+ "User": "Používateľ",
+ "Slug": "Slug",
+ "Accept characters:": "Prijať znaky:",
+ "appriseNotInstalled": "Apprise nie je nainštalovaný. {0}",
+ "critical": "kritické",
+ "primary": "primárne",
+ "light": "svetlé",
+ "dark": "tmavé",
+ "Please input title and content": "Prosím, zadajte názov a obsah",
+ "Switch to Dark Theme": "Prepnutie na tmavú tému",
+ "Cancel": "Zrušiť",
+ "setAsDefaultProxyDescription": "Tento proxy server bude predvolene zapnutý pre nové sledovania. Proxy server môžete stále vypnúť pre každé sledovanie samostatne.",
+ "Installed": "Nainštalované",
+ "Not installed": "Nie je nainštalované",
+ "Running": "Beží",
+ "Remove Token": "Odstrániť token",
+ "Start": "Spustiť",
+ "Stop": "Zastaviť",
+ "Add New Status Page": "Pridať novú stavovú stránku",
+ "grpcMethodDescription": "Názov metódy sa prevedie do formátu camelCase, napríklad sayHello, kontrola atď.",
+ "deleteDockerHostMsg": "Ste si istí, že chcete odstrániť tohto docker hostiteľa pre všetky sledovania?",
+ "Container Name / ID": "Názov kontajnera / ID",
+ "telegramSendSilentlyDescription": "Odošle správu v tichosti. Používatelia dostanú oznámenie bez zvuku.",
+ "trustProxyDescription": "Dôverujte hlavičkám 'X-Forwarded-*'. Ak chcete získať správnu IP adresu klienta a vaša služba Uptime Kuma sa nachádza za proxy serverom, napríklad Nginx alebo Apache, mali by ste túto funkciu povoliť.",
+ "Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Dlhodobý prístupový token môžete vytvoriť kliknutím na názov svojho profilu (vľavo dole) a rolovaním na spodok, potom kliknite na Vytvoriť token. ",
+ "Event data:": "Dáta udalosti:",
+ "Then choose an action, for example switch the scene to where an RGB light is red.": "Potom vyberte akciu, napríklad prepnite scénu na miesto, kde je svetlo RGB červené.",
+ "warningTimezone": "Používa časové pásmo servera",
+ "lastDay1": "Posledný deň mesiaca",
+ "smtpLiquidIntroduction": "Nasledujúce dve polia je možné šablónovať pomocou šablónovacieho jazyka Liquid. Pokyny na použitie nájdete v časti {0}. Toto sú dostupné premenné:",
+ "wayToGetDiscordURL": "Získate to, ak prejdete do Nastavenia servera -> Integrácie -> Zobraziť webhooky -> Nový webhook",
+ "wayToGetLineChannelToken": "Najprv pristupte k {0}, vytvorte poskytovateľa a kanál ( Rozhranie API správ), potom môžete získať prístupový token kanála a ID používateľa z vyššie uvedených položiek ponuky.",
+ "enableDefaultNotificationDescription": "Toto upozornenie bude predvolene povolené pre nové sledovania. Toto oznámenie môžete stále vypnúť pre každé sledovanie samostatne.",
+ "or": "alebo",
+ "strategyManual": "Aktívne/neaktívne ručne",
+ "cloneOf": "Duplikát {0}",
+ "smtp": "E-mail (SMTP)",
+ "secureOptionNone": "Žiadne / STARTTLS (25, 587)",
+ "Trigger type:": "Typ spúšťača:",
+ "maintenanceStatus-inactive": "Neaktívne",
+ "confirmUninstallPlugin": "Určite chcete odinštalovať tento modul?",
+ "dnsPortDescription": "Port servera DNS. Predvolená hodnota je 53. Port môžete kedykoľvek zmeniť.",
+ "noDockerHostMsg": "Nie je k dispozícii. Najprv nastavte Docker hostiteľa.",
+ "Subject:": "Predmet:",
+ "Valid To:": "Platí do:",
+ "Days Remaining:": "Zostávajúce dni:",
+ "Issuer:": "Vydavateľ:",
+ "Fingerprint:": "Odtlačok:",
+ "No status pages": "Žiadne stavové stránky",
+ "Domain Name Expiry Notification": "Oznámenie o vypršaní platnosti domény",
+ "Remove the expiry notification": "Odstrániť deň oznámenia o vypršaní platnosti",
+ "Proxy": "Proxy",
+ "Date Created": "Dátum vytvorenia",
+ "Footer Text": "Text päty",
+ "RadiusCallingStationIdDescription": "Identifikátor volajúceho zariadenia",
+ "Certificate Expiry Notification": "Oznámenie o skončení platnosti certifikátu",
+ "API Username": "Používateľské meno API",
+ "API Key": "Kľúč API",
+ "Show update if available": "Zobraziť aktualizáciu, ak je k dispozícii",
+ "Also check beta release": "Skontrolovať aj beta verziu",
+ "Using a Reverse Proxy?": "Používanie reverzného proxy servera?",
+ "Steam Game Server": "Herný server služby Steam",
+ "Most likely causes:": "Najpravdepodobnejšie príčiny:",
+ "The resource is no longer available.": "Tento zdroj už nie je k dispozícii.",
+ "There might be a typing error in the address.": "V adrese môže byť preklep.",
+ "What you can try:": "Čo môžete vyskúšať:",
+ "Retype the address.": "Znovu zadajte adresu.",
+ "Go back to the previous page.": "Návrat na predchádzajúcu stránku.",
+ "settingsCertificateExpiry": "Vypršanie platnosti certifikátu TLS",
+ "certificationExpiryDescription": "HTTPS sledovania aktivujú upozornenie, keď vyprší platnosť certifikátu TLS v:",
+ "Setup Docker Host": "Nastavenie Docker hostiteľa",
+ "Connection Type": "Typ pripojenia",
+ "Docker Daemon": "Docker démon",
+ "DockerHostRequired": "Nastavte Docker hostiteľa pre toto sledovanie.",
+ "tcp": "TCP / HTTP",
+ "Docker Container": "Docker kontajner",
+ "telegramSendSilently": "Poslať potichu",
+ "telegramProtectContent": "Ochrana preposielania/ukladania",
+ "telegramProtectContentDescription": "Ak je zapnuté, správy bota v Telegrame budú chránené pred preposielaním a ukladaním.",
+ "supportTelegramChatID": "Podpora Priameho chatu / Skupiny / ID chatu kanála",
+ "wayToGetTelegramChatID": "ID chatu môžete získať tak, že botovi pošlete správu a prejdete na túto adresu URL a uvidíte chat_id:",
+ "YOUR BOT TOKEN HERE": "VÁŠ TOKEN BOTA TU",
+ "chatIDNotFound": "ID chatu nebolo nájdené; najprv pošlite správu tomuto botovi",
+ "disableCloudflaredNoAuthMsg": "Ste v režime bez autorizácie, heslo sa nevyžaduje.",
+ "wayToGetLineNotifyToken": "Prístupový token môžete získať z {0}",
+ "Examples": "Príklady",
+ "Home Assistant URL": "URL adresa Home Assistant",
+ "Long-Lived Access Token": "Dlhodobý prístupový token",
+ "Automations can optionally be triggered in Home Assistant:": "Automatizácie možno voliteľne spúšťať v aplikácii Home Assistant:",
+ "Frontend Version": "Verzia frontendu",
+ "Frontend Version do not match backend version!": "Verzia frontendu sa nezhoduje s verziou backendu!",
+ "backupRecommend": "Namiesto toho zálohujte zväzok alebo priečinok s údajmi (./data/) priamo.",
+ "Optional": "Voliteľné",
+ "sameAsServerTimezone": "Rovnaké ako časové pásmo servera",
+ "startDateTime": "Dátum/čas začatia",
+ "endDateTime": "Dátum/čas skončenia",
+ "cronSchedule": "Harmonogram: ",
+ "invalidCronExpression": "Neplatný výraz Cron: {0}",
+ "recurringInterval": "Interval",
+ "Recurring": "Opakujúce sa",
+ "weekdayShortTue": "Ut",
+ "weekdayShortWed": "St",
+ "weekdayShortThu": "Št",
+ "weekdayShortFri": "Pia",
+ "weekdayShortMon": "Pon",
+ "weekdayShortSat": "So",
+ "weekdayShortSun": "Ne",
+ "lastDay": "Posledný deň",
+ "lastDay2": "2. posledný deň mesiaca",
+ "lastDay3": "3. posledný deň mesiaca",
+ "lastDay4": "4. posledný deň mesiaca",
+ "No Maintenance": "Žiadna údržba",
+ "maintenanceStatus-unknown": "Neznáme",
+ "IconUrl": "URL adresa ikony",
+ "chromeExecutableAutoDetect": "Automatická detekcia",
+ "chromeExecutableDescription": "Ak používatelia nástroja Docker ešte nemajú nainštalovanú aplikáciu Chromium, inštalácia a zobrazenie výsledkov testu môže trvať niekoľko minút. Zaberie 1 GB miesta na disku.",
+ "dnsCacheDescription": "V niektorých prostrediach IPv6 nemusí fungovať, ak narazíte na problémy, vypnite to.",
+ "Single Maintenance Window": "Jediné okno údržby",
+ "install": "Nainštalovať",
+ "installing": "Inštaluje sa",
+ "uninstall": "Odinštalovať",
+ "uninstalling": "Odinštalováva sa",
+ "notificationRegional": "Regionálne",
+ "Clone Monitor": "Duplikovať Sledovanie",
+ "secureOptionTLS": "TLS (465)",
+ "Ignore TLS Error": "Ignorovať chybu TLS",
+ "From Email": "Od e-mailu",
+ "emailCustomisableContent": "Prispôsobiteľný obsah",
+ "emailCustomSubject": "Vlastný predmet",
+ "leave blank for default subject": "nechajte prázdne pre predvolený predmet",
+ "emailCustomBody": "Vlastné telo",
+ "leave blank for default body": "nechajte prázdne pre predvolené telo",
+ "emailTemplateServiceName": "Názov služby",
+ "emailTemplateHostnameOrURL": "Názov hostiteľa alebo adresa URL",
+ "emailTemplateStatus": "Stav",
+ "emailTemplateMonitorJSON": "objekt popisujúci sledovanie",
+ "emailTemplateHeartbeatJSON": "objekt popisujúci pulz",
+ "Discord Webhook URL": "URL adresa Discord webhooku",
+ "Bot Display Name": "Zobrazovacie meno bota",
+ "Prefix Custom Message": "Predpona vlastnej správy",
+ "forumPostName": "Názov príspevku vo fóre",
+ "threadForumPostID": "ID vlákna / príspevku na fóre",
+ "e.g. {discordThreadID}": "napr. {discordThreadID}",
+ "whatHappensAtForumPost": "Vytvorte nový príspevok vo fóre. Toto NEPOŠLE správy do existujúceho príspevku. Ak chcete odoslať príspevok v existujúcom príspevku, použite „{option}“",
+ "wayToGetDiscordThreadId": "Získanie id vlákna / príspevku na fóre je podobné získaniu id kanála. Prečítajte si viac o tom, ako získať id {0}",
+ "wayToGetTeamsURL": "Môžete sa naučiť, ako vytvoriť URL adresu webhooku {0}.",
+ "wayToGetZohoCliqURL": "Môžete sa naučiť, ako vytvoriť URL adresu webhooku {0}.",
+ "needSignalAPI": "Musíte mať klienta signálu s rozhraním REST API.",
+ "wayToCheckSignalURL": "Na tejto adrese URL si môžete pozrieť, ako ho nastaviť:",
+ "Recipients": "Príjemcovia",
+ "Access Token": "Prístupový token",
+ "Channel access token": "Prístupový token kanála",
+ "Channel access token (Long-lived)": "Prístupový token kanála (dlhodobý)",
+ "Basic Settings": "Základné nastavenia",
+ "User ID": "ID používateľa",
+ "Your User ID": "Vaše ID používateľa",
+ "Messaging API": "Rozhranie API pre zasielanie správ",
+ "aboutIconURL": "Do položky „ URL adresa ikony“ môžete zadať odkaz na obrázok, ktorý nahradí predvolený profilový obrázok. Nepoužije sa, ak je nastavená ikona Emoji.",
+ "Icon URL": "URL adresa ikony",
+ "aboutMattermostChannelName": "Predvolený kanál, do ktorého sa webhook odosiela, môžete prepísať zadaním názvu kanála do poľa „Názov kanála“. Toto je potrebné povoliť v nastaveniach aplikácie Mattermost Webhook. Napríklad: #iný-kanál",
+ "confirmDeleteTagMsg": "Ste si istí, že chcete túto značku odstrániť? Sledovania priradené k tejto značke nebudú odstránené.",
+ "enableGRPCTls": "Povolenie odosielania požiadaviek gRPC s pripojením TLS",
+ "acceptedStatusCodesDescription": "Vyberte stavové kódy, ktoré sa považujú za úspešnú odpoveď.",
+ "deleteMonitorMsg": "Určite chcete odstrániť toto sledovanie?",
+ "deleteMaintenanceMsg": "Určite chcete odstrániť túto údržbu?",
+ "deleteNotificationMsg": "Určite chcete odstrániť toto oznámenie pre všetky sledovania?",
+ "resolverserverDescription": "Cloudflare je predvolený server. Server resolvera môžete kedykoľvek zmeniť.",
+ "rrtypeDescription": "Vyberte typ RR, ktorý chcete sledovať",
+ "Select message type": "Vyberte typ správy",
+ "Send to channel": "Odoslať do kanála",
+ "Create new forum post": "Vytvorenie nového príspevku vo fóre",
+ "postToExistingThread": "Príspevok do existujúceho vlákna / príspevku na fóre",
+ "Number": "Číslo",
+ "pauseMonitorMsg": "Určite chcete pozastaviť sledovanie?",
+ "RadiusSecretDescription": "Zdieľaný tajný kľúč medzi klientom a serverom",
+ "Clone": "Duplikovať",
+ "Refresh Interval": "Interval obnovovania",
+ "Refresh Interval Description": "Stavová stránka vykoná úplnú obnovu stránky každých {0} sekúnd",
+ "Show Powered By": "Zobraziť Poháňané",
+ "signedInDisp": "Prihlásený ako {0}",
+ "Domain Names": "Domény",
+ "RadiusCallingStationId": "Id volajúcej stanice",
+ "signedInDispDisabled": "Autorizácia zakázaná.",
+ "RadiusCalledStationIdDescription": "Identifikátor volaného zariadenia",
+ "Check how to config it for WebSocket": "Pozrite si, ako nakonfigurovať pre WebSocket",
+ "Notification Service": "Služba oznamovania",
+ "Event type:": "Typ udalosti:",
+ "pauseMaintenanceMsg": "Určite chcete pozastaviť údržbu?",
+ "maintenanceStatus-under-maintenance": "V údržbe",
+ "maintenanceStatus-scheduled": "Plánované",
+ "Server Timezone": "Časové pásmo servera",
+ "statusPageMaintenanceEndDate": "Koniec",
+ "Disable": "Zakázať",
+ "Display Timezone": "Časové pásmo pre zobrazenie",
+ "enableNSCD": "Povoliť NSCD (Name Service Cache Daemon) na ukladanie všetkých požiadaviek DNS do vyrovnávacej pamäte",
+ "Edit Maintenance": "Upraviť údržbu",
+ "Date and Time": "Dátum a čas",
+ "dataRetentionTimeError": "Doba uchovávania musí byť 0 alebo viac",
+ "infiniteRetention": "Nastavte na 0 pre nekonečné uchovávanie.",
+ "Query": "Dotaz",
+ "backupOutdatedWarning": "Vyradené: Keďže bolo pridaných veľa funkcií a táto funkcia zálohovania je trochu neudržiavaná, nemôže generovať alebo obnoviť kompletnú zálohu.",
+ "maintenanceStatus-ended": "Ukončené",
+ "Chat ID": "ID chatu",
+ "telegramMessageThreadID": "(voliteľné) ID vlákna správy",
+ "telegramMessageThreadIDDescription": "Nepovinný jedinečný identifikátor cieľového vlákna správy (témy) fóra; len pre nadskupiny fóra",
+ "Docker Host": "Docker hostiteľ",
+ "Docker Hosts": "Docker hostitelia",
+ "Domain": "Doména",
+ "Workstation": "Pracovisko",
+ "Packet Size": "Veľkosť paketu",
+ "Bot Token": "Token bota",
+ "wayToGetTelegramToken": "Token môžete získať z {0}.",
+ "Effective Date Range": "Rozsah dátumu účinnosti (voliteľné)",
+ "Schedule Maintenance": "Naplánovať údržbu",
+ "DateTime Range": "Rozsah dátumu a času",
+ "loadingError": "Nie je možné načítať údaje, skúste to prosím neskôr.",
+ "plugin": "Modul | Moduly",
+ "Coming Soon": "Už čoskoro",
+ "dayOfWeek": "Deň v týždni",
+ "dayOfMonth": "Deň v mesiaci",
+ "emailTemplateMsg": "správa oznámenia",
+ "emailTemplateLimitedToUpDownNotification": "k dispozícii len pre stav DOSTUPNÉ/NEDOSTUPNÉ, inak je nulový",
+ "To Email": "Na e-mail",
+ "smtpCC": "CC",
+ "smtpBCC": "BCC",
+ "default: notify all devices": "predvolené: upozorniť všetky zariadenia",
+ "A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Zoznam notifikačných služieb nájdete v aplikácii Home Assistant v časti „Nástroje pre vývojárov > Služby“, kde vyhľadajte položku „ notifikácia“ a nájdite názov svojho zariadenia/telefónu.",
+ "tailscalePingWarning": "Ak chcete používať sledovanie Tailscale Ping, musíte nainštalovať aplikáciu Uptime Kuma bez nástroja Docker a tiež nainštalovať klienta Tailscale na server.",
+ "Enable": "Povoliť",
+ "Enable DNS Cache": "(Zastarané) Povoliť vyrovnávaciu pamäť DNS pre HTTP(s) sledovania",
+ "Post": "Publikovať",
+ "Not running": "Nebeží",
+ "RadiusSecret": "Radius Secret",
+ "cronExpression": "CRON výraz",
+ "Maintenance Time Window of a Day": "Časové okno pre údržbu v daný deň",
+ "Hello @everyone is...": "Dobrý deň, {'@'}všetci sú…",
+ "clearHeartbeatsMsg": "Naozaj chcete odstrániť všetky heartbeaty pre tento monitoring?",
+ "Trust Proxy": "Dôveryhodná proxy",
+ "RadiusCalledStationId": "ID volaného zariadenia",
+ "Connection String": "Connection String",
+ "socket": "Socket",
+ "Line Developers Console": "Konzola Line Developers",
+ "confirmClearStatisticsMsg": "Naozaj chcete odstrániť VŠETKY štatistiky?",
+ "-year": "-rok",
+ "and": "a",
+ "shrinkDatabaseDescriptionSqlite": "Podmienka spustenia príkazu pre SQLite databázu. Príkaz {auto_vacuum} je už zapnutý, ale nedochádza k defragmentácii databázy ani k prebaleniu jednotlivých stránok databázy ako to robí príkaz {vacuum}.",
+ "lineDevConsoleTo": "Konzola Line Developers - {0}",
+ "clearEventsMsg": "Naozaj chcete odstrániť všetky udalosti pre tento monitoring?",
+ "now": "teraz",
+ "time ago": "pred {0}",
+ "Json Query Expression": "Výraz dotazu JSON",
+ "ignoredTLSError": "Chyby TLS/SSL boli ignorované",
+ "Add a new expiry notification day": "Pridať nové oznámenie o vypršaní platnosti",
+ "chromeExecutable": "Spustitelný súbor Chrome/Chromium"
}
diff --git a/src/lang/sl-SI.json b/src/lang/sl-SI.json
index c5776343e..c3e3da944 100644
--- a/src/lang/sl-SI.json
+++ b/src/lang/sl-SI.json
@@ -349,7 +349,6 @@
"Discard": "zavrzi",
"Cancel": "Prekliči",
"Powered by": "Poganja ga",
- "shrinkDatabaseDescription": "Sprožitev podatkovne zbirke VACUUM za SQLite. Če je vaša zbirka podatkov ustvarjena po različici 1.10.0, je funkcija AUTO_VACUUM že omogočena in ta ukrep ni potreben.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API uporabniško ime (vključno z webapi_ prefix)",
"serwersmsAPIPassword": "API geslo",
diff --git a/src/lang/sv-SE.json b/src/lang/sv-SE.json
index e68d32656..607cf0d68 100644
--- a/src/lang/sv-SE.json
+++ b/src/lang/sv-SE.json
@@ -94,7 +94,7 @@
"Password": "Lösenord",
"Remember me": "Kom ihåg mig",
"Login": "Logga in",
- "No Monitors, please": "Inga övervakare, tack",
+ "No Monitors, please": "Inga övervakare",
"add one": "lägg till en",
"Notification Type": "Notifieringstyp",
"Email": "Epost",
@@ -145,7 +145,6 @@
"clearDataOlderThan": "Behåll övervakarhistoriksdata i {0} dagar.",
"steamApiKeyDescription": "För att övervaka en Steam Game Server behöver man en Steam Web-API nyckel. Du kan registrera din API nyckel här: ",
"No Monitors": "Inga övervakare",
- "shrinkDatabaseDescription": "Utlös databasdammsugning för SQLite. Om din databas skapades efter 1.10.0, AUTO_VACUUM är redan aktiverat och detta behövs inte.",
"proxyDescription": "Proxyservrar måste tilldelas en övervakare för att fungera.",
"setAsDefaultProxyDescription": "Denna proxyserver kommer att aktiveras som standard för nya övervakare. Du kan fortfarande inaktivera proxyserven var för sig övervakare.",
"Content Type": "Innehållstyp",
@@ -860,7 +859,7 @@
"Badge Suffix": "Brickvärdesuffix",
"Badge Color": "Brickfärg",
"monitorToastMessagesLabel": "Övervakar-toastnotifiering",
- "wayToGetFlashDutyKey": "Du kan gå till Kanal -> (Välj en kanal) -> Integrationer -> Lägg till ny integrationssidan, lägg till en 'Anpassad händelse' för att få en pushadress, kopiera integrationsnyckeln i adressen. För mer information, besök",
+ "wayToGetFlashDutyKey": "Du kan gå till Kanal -> (Välj en kanal) -> Integrationer -> Lägg till ny integrationssidan, lägg till en 'Uptime Kuma' för att få en pushadress, kopiera integrationsnyckeln i adressen. För mer information, besök",
"gamedigGuessPortDescription": "Porten som används av Valve-serverns förfrågningsprotokol kan vara annorlunda från klientporten. Prova detta om övervakaren inte kan kontakta din server.",
"monitorToastMessagesDescription": "Toastnotifieringar för övervakare försvinner efter angiven tid i sekunder. Ange -1 för att inaktivera timeout. Ange 0 för att inkaktivera toastnotifieringar.",
"Mechanism": "Mekanism",
@@ -923,5 +922,73 @@
"wayToGetSevenIOApiKey": "Besök instrumentpanelen under app.seven.io > utvecklare > api-nyckel > den gröna lägg till knappen",
"locally configured mail transfer agent": "lokalt konfigurerad mejlskickningsagent",
"Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Endera värdnamnet på servern du vill ansluta till eller {localhost} om du vill använda {local_mta}",
- "Host URL": "Värd-URL"
+ "Host URL": "Värd-URL",
+ "whatHappensAtForumPost": "Skapa ett nytt foruminlägg. Detta postar inte meddelande i befintliga inlägg. För att posta i befintligt inlägg, använd \"{option}\"",
+ "mongodbCommandDescription": "Kör ett MongoDB-kommando mot databasen. För information om tillgängliga kommandon, läs i {documentation}",
+ "Command": "Kommando",
+ "smspartnerApiurl": "Du kan hitta din API-nyckel på ditt skrivbord {0}",
+ "smspartnerPhoneNumber": "Telefonnummer",
+ "smspartnerSenderName": "SMS-avsändarnamn",
+ "smspartnerPhoneNumberHelptext": "Numret måste vara i internationellt format {0}, {1}. Flera nummer måste vara separerade med {2}",
+ "smspartnerSenderNameInfo": "Måste vara mellan 3..=11 vanliga tecken",
+ "Bitrix24 Webhook URL": "Bitrix24 Webbhook URL",
+ "wayToGetBitrix24Webhook": "Du kan skapa en webbhook genom att följa stegen på {0}",
+ "bitrix24SupportUserID": "Ange ditt användarID i Bitrix24. Du kan hitta ditt ID från länken genom att gå till användarprofilen.",
+ "Send to channel": "Skicka till kanal",
+ "Create new forum post": "Skapa nytt foruminlägg",
+ "postToExistingThread": "Posta till befintlig tråd / foruminlägg",
+ "Select message type": "Välj meddelandetyp",
+ "forumPostName": "Inläggsnamn i forum",
+ "threadForumPostID": "Tråd / inläggs-ID",
+ "e.g. {discordThreadID}": "ex. {discordThreadID}",
+ "Refresh Interval": "Uppdateringsintervall",
+ "Refresh Interval Description": "Statussidan uppdateras varje {0} sekunder",
+ "ignoreTLSErrorGeneral": "Ignorera TLS/SSL fel för anslutningen",
+ "wayToGetDiscordThreadId": "Hitta ett post- / forum-ID är liknande att hitta ett kanal-ID. Läs mer om hur du hittar IDn {0}",
+ "threemaRecipient": "Mottagare",
+ "threemaRecipientType": "Mottagartyp",
+ "threemaRecipientTypeIdentityFormat": "8 tecken",
+ "threemaRecipientTypePhone": "Telefonnummer",
+ "threemaRecipientTypePhoneFormat": "E.164, utan inledande +",
+ "threemaRecipientTypeEmail": "Epostadress",
+ "threemaSenderIdentity": "Gateway-ID",
+ "wayToGetThreemaGateway": "Du kan registrera dig för Threema Gateway {0}.",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaSenderIdentityFormat": "8 tecken, startar oftast med *",
+ "threemaApiAuthenticationSecret": "Gateway-ID hemlighet",
+ "threemaBasicModeInfo": "Notera: Denna integration använder Threema Gateway i standardläge (server-baserad kryptering). Mer detaljer kan hittas {0}.",
+ "apiKeysDisabledMsg": "API-nycklar är inaktiverade för att autentisering är inaktiverad.",
+ "CopyToClipboardError": "Kunde inte kopiera till urklipp: {fel}",
+ "Message format": "Meddelandeformat",
+ "Condition": "Villkor",
+ "SNMP Version": "SNMP-version",
+ "No tags found.": "Inga taggar hittades.",
+ "now": "nu",
+ "time ago": "{0} sedan",
+ "-year": "-år",
+ "Json Query Expression": "Json-frågeutryck",
+ "and": "och",
+ "Recipient Type": "Mottagartyp",
+ "Private Number": "Privat nummer",
+ "New Group": "Ny grupp",
+ "Group Name": "Gruppnamn",
+ "OAuth2: Client Credentials": "OAuth2: Klientuppgifter",
+ "Authentication Method": "Autentiseringsmetod",
+ "Authorization Header": "Autentiseringshuvud",
+ "Client ID": "Klient ID",
+ "Client Secret": "Klienthemlighet",
+ "Go back to home page.": "Gå tillbaka till hemsidan.",
+ "ignoredTLSError": "TLS/SSL-fel har ignorerats",
+ "Debug": "Felsöka",
+ "Copy": "Kopiera",
+ "CopyToClipboardSuccess": "Kopierat!",
+ "firewalls": "brandväggar",
+ "dns resolvers": "dns-upplösare",
+ "docker networks": "docker-nätverk",
+ "cacheBusterParam": "Lägg till {0} parameter",
+ "Community String": "Gruppsträng",
+ "OID (Object Identifier)": "OID (Objektsidentifierare)",
+ "Please enter a valid OID.": "Ange ett giltigt OID.",
+ "Group ID": "GruppID",
+ "Add Remote Browser": "Lägg till fjärrbläddrare"
}
diff --git a/src/lang/te.json b/src/lang/te.json
index 7833fd15e..af5a55115 100644
--- a/src/lang/te.json
+++ b/src/lang/te.json
@@ -303,7 +303,6 @@
"Discard": "విస్మరించండి",
"Cancel": "రద్దు చేయండి",
"Check/Uncheck": "చెక్/చెక్చేయవద్దు",
- "shrinkDatabaseDescription": "SQLite కోసం డేటాబేస్ VACUUMని ట్రిగ్గర్ చేయండి. మీ డేటాబేస్ 1.10.0 తర్వాత సృష్టించబడితే, AUTO_VACUUM ఇప్పటికే ప్రారంభించబడింది మరియు ఈ చర్య అవసరం లేదు.",
"setAsDefault": "డిఫాల్ట్ సెట్ చేయబడింది",
"deleteProxyMsg": "మీరు ఖచ్చితంగా అన్ని మానిటర్ల కోసం ఈ ప్రాక్సీని తొలగించాలనుకుంటున్నారా?",
"proxyDescription": "పనిచేయడానికి ప్రాక్సీలు తప్పనిసరిగా మానిటర్కు కేటాయించబడాలి.",
diff --git a/src/lang/th-TH.json b/src/lang/th-TH.json
index 36f9e1a80..b0a78cf92 100644
--- a/src/lang/th-TH.json
+++ b/src/lang/th-TH.json
@@ -31,7 +31,7 @@
"New Update": "อัพเดทใหม่",
"Language": "ภาษา",
"Appearance": "หน้าตา",
- "Theme": "หน้าตา",
+ "Theme": "ธีม",
"General": "ทั่วไป",
"Primary Base URL": "URL หลัก",
"Version": "เวอร์ชั่น",
@@ -39,7 +39,7 @@
"List": "รายการ",
"Add": "เพิ่ม",
"Add New Monitor": "เพิ่มมอนิเตอร์ใหม่",
- "Quick Stats": "สถิติด่วน",
+ "Quick Stats": "สถิติอย่างย่อ",
"Up": "ใช้งานได้",
"Down": "ไม่สามารถใช้งานได้",
"Pending": "รอดำเนินการ",
@@ -355,7 +355,6 @@
"Discard": "ทิ้ง",
"Cancel": "ยกเลิก",
"Powered by": "ขับเคลื่อนโดย",
- "shrinkDatabaseDescription": "ทริกเกอร์ฐานข้อมูล VACUUM สำหรับ SQLite หากฐานข้อมูลของคุณถูกสร้างขึ้นหลังจากเวอร์ชั่น 1.10.0 แสดงว่า AUTO_VACUUM เปิดใช้งานอยู่แล้วและไม่จำเป็นต้องดำเนินการนี้",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API Password",
@@ -600,7 +599,7 @@
"or": "หรือ",
"recurringInterval": "ช่วงเวลา",
"Recurring": "ทำซ้ำ",
- "General Monitor Type": "ชนิดมอนิเตอร์ทั่วไป",
+ "General Monitor Type": "มอนิเตอร์ชนิดทั่วไป",
"pagertreeCritical": "วิกฤต",
"pagertreeDoNothing": "ไม่ต้องทำอะไร",
"pagertreeResolve": "แก้ไขอัตโนมัติ",
@@ -682,5 +681,34 @@
"setupDatabaseMariaDB": "เชื่อมต่อไปยัง MariaDB ภายนอก คุณจำเป็นจะต้องตั่งค่าการเชื่อมต่อฐานข้อมูล",
"setupDatabaseSQLite": "ไฟล์ฐานข้อมูลอย่างง่าย แนะนำสำหรับการปรับใช้ขนาดเล็ก ก่อนเวอร์ชัน 2.0.0 Uptime Kuma ใช้ SQLite เป็นฐานข้อมูลเริ่มต้น",
"dbName": "ชื่อฐานข้อมูล",
- "Passive Monitor Type": "ชนิดมอนิเตอร์แบบพาสซีฟ"
+ "Passive Monitor Type": "ชนิดมอนิเตอร์แบบพาสซีฟ",
+ "documentationOf": "{0} คู่มือ",
+ "successDeleted": "ลบสำเร็จ.",
+ "Command": "คำสั่ง",
+ "authUserInactiveOrDeleted": "ผู้ใช้งานถูกปิดหรือถูกลบแล้ว",
+ "Saved.": "บันทึกแล้ว",
+ "authInvalidToken": "โทเค็นไม่ถูกต้อง.",
+ "successDisabled": "ปิดการใช้งาน สำเร็จ.",
+ "max 11 alphanumeric characters": "ตัวอักษรสูงสุดไม่เกิน 11 ตัว",
+ "showCertificateExpiry": "แสดง Certificate ที่หมดอายุ",
+ "Telephone number": "เบอร์โทรศัพท์",
+ "successAuthChangePassword": "รหัสผ่านถูกเปลื่ยนเรียบร้อยแล้ว.",
+ "successEdited": "แก้ไขสำเร็จ",
+ "styleElapsedTimeShowNoLine": "แสดง (ไม่มีบรรทัด)",
+ "styleElapsedTimeShowWithLine": "แสดง (พร้อมบรรทัด)",
+ "where you intend to implement third-party authentication": "ที่คุณตั้งใจจะนำการตรวจสอบสิทธิ์ของบุคคลที่สามไปใช้",
+ "styleElapsedTime": "เวลาที่ผ่านไปภายใต้แถบวัดอัตราการเต้นของหัวใจ",
+ "now": "ตอนนี้",
+ "Host URL": "URL ของโฮสต์",
+ "ignoreTLSErrorGeneral": "ละเว้นข้อผิดพลาด TLS/SSL สำหรับการเชื่อมต่อ",
+ "programmingLanguages": "ภาษาโปรแกรมมิ่ง",
+ "Invert Keyword": "คำสำคัญ",
+ "settingUpDatabaseMSG": "กำลังตั้งค่าฐานข้อมูลอาจใช้เวลาสักครู่ โปรดอดทนรอ",
+ "time ago": "{0} ที่ผ่านมา",
+ "-year": "-ปี",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "ป้อนชื่อโฮสต์ของเซิร์ฟเวอร์ที่คุณต้องการเชื่อมต่อหรือ {localhost} หากคุณต้องการใช้ {local_mta}",
+ "Request Timeout": "หมดเวลาการเชื่อมต่อ",
+ "ignoredTLSError": "ข้อผิดพลาด TLS/SSL ถูกละเว้น",
+ "pushOthers": "อื่น ๆ",
+ "pushViewCode": "วิธีใช้งาน Push monitor (ดูโค้ด)"
}
diff --git a/src/lang/tr-TR.json b/src/lang/tr-TR.json
index ed6e4eb87..3c932d636 100644
--- a/src/lang/tr-TR.json
+++ b/src/lang/tr-TR.json
@@ -1,5 +1,5 @@
{
- "languageName": "Türkçe",
+ "languageName": "İngilizce",
"checkEverySecond": "{0} saniyede bir kontrol et",
"retryCheckEverySecond": "{0} saniyede bir dene",
"resendEveryXTimes": "Her {0} bir yeniden gönder",
@@ -84,8 +84,8 @@
"pushOptionalParams": "İsteğe bağlı parametreler: {0}",
"Save": "Kaydet",
"Notifications": "Bildirimler",
- "Not available, please setup.": "Atanmış bildirim yöntemi yok. Ayarlardan belirleyebilirsiniz.",
- "Setup Notification": "Bildirim yöntemi kur",
+ "Not available, please setup.": "Mevcut değil, lütfen ayarlardan belirleyin.",
+ "Setup Notification": "Bildirim yöntemi ayarla",
"Light": "Açık",
"Dark": "Koyu",
"Auto": "Oto",
@@ -154,7 +154,7 @@
"Options": "Seçenekler",
"Keep both": "İkisini sakla",
"Verify Token": "Tokeni doğrula",
- "Setup 2FA": "2FA Kur",
+ "Setup 2FA": "2FA Ayarla",
"Enable 2FA": "2FA Etkinleştir",
"Disable 2FA": "2FA Devre dışı bırak",
"2FA Settings": "2FA Ayarları",
@@ -183,7 +183,7 @@
"Entry Page": "Giriş Sayfası",
"statusPageNothing": "Burada hiçbir şey yok, lütfen bir grup veya servis ekleyin.",
"No Services": "Hizmet Yok",
- "All Systems Operational": "Tüm Sistemler Operasyonel",
+ "All Systems Operational": "Tüm Sistemler Sorunsuz",
"Partially Degraded Service": "Kısmen Bozulmuş Hizmet",
"Degraded Service": "Bozulmuş Hizmet",
"Add Group": "Grup Ekle",
@@ -201,7 +201,7 @@
"Chat ID": "Chat ID",
"supportTelegramChatID": "Doğrudan Sohbet / Grup / Kanalın Sohbet Kimliğini Destekleyin",
"wayToGetTelegramChatID": "Bot'a bir mesaj göndererek ve chat_id'yi görüntülemek için bu URL'ye giderek sohbet kimliğinizi alabilirsiniz:",
- "YOUR BOT TOKEN HERE": "BOT TOKENİNİZ BURADA",
+ "YOUR BOT TOKEN HERE": "BOT TOKENİNİZ BURAYA",
"chatIDNotFound": "Chat ID bulunamadı; lütfen önce bu bota bir mesaj gönderin",
"webhook": "Webhook",
"Post URL": "Post URL",
@@ -221,10 +221,10 @@
"Discord Webhook URL": "Discord Webhook Bağlantısı",
"wayToGetDiscordURL": "Bunu Sunucu Ayarları -> Entegrasyonlar -> Webhookları Görüntüle -> Yeni Webhook Oluştur adımını izleyerek alabilirsiniz",
"Bot Display Name": "Botun Görünecek Adı",
- "Prefix Custom Message": "Önek Özel Mesaj",
+ "Prefix Custom Message": "Özel Önek Mesajı",
"Hello @everyone is...": "Merhaba {'@'}everyone…",
"teams": "Microsoft Teams",
- "Webhook URL": "Webhook URL",
+ "Webhook URL": "Webhook URL'si",
"wayToGetTeamsURL": "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.",
"signal": "Sinyal",
"Number": "Numara",
@@ -351,7 +351,6 @@
"Discard": "İptal Et",
"Cancel": "İptal Et",
"Powered by": "Tarafından desteklenmektedir",
- "shrinkDatabaseDescription": "SQLite için veritabanı VACUUM'unu tetikleyin. Veritabanınız 1.10.0'dan sonra oluşturulduysa, AUTO_VACUUM zaten etkinleştirilmiştir ve bu eyleme gerek yoktur.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Kullanıcı Adı (webapi_ öneki dahil)",
"serwersmsAPIPassword": "API Şifre",
@@ -379,8 +378,8 @@
"auto resolve": "otomatik çözümleme",
"gorush": "Gorush",
"alerta": "Alerta",
- "alertaApiEndpoint": "API Endpoint",
- "alertaEnvironment": "Environment",
+ "alertaApiEndpoint": "API Uç Noktası",
+ "alertaEnvironment": "Ortam",
"alertaApiKey": "API Anahtarı",
"alertaAlertState": "Uyarı Durumu",
"alertaRecoverState": "Kurtarma Durumu",
@@ -404,7 +403,7 @@
"Sms template must contain parameters: ": "Sms şablonu parametreleri içermelidir: ",
"Bark Endpoint": "Bark Endpoint",
"Bark Group": "Bark Group",
- "Bark Sound": "Bark Sound",
+ "Bark Sound": "Havlama Sesi",
"WebHookUrl": "WebHookUrl",
"SecretKey": "SecretKey",
"For safety, must use secret key": "Güvenlik için gizli anahtar kullanılmalıdır",
@@ -415,7 +414,7 @@
"Retry": "Tekrar",
"Topic": "Başlık",
"WeCom Bot Key": "WeCom Bot Anahtarı",
- "Setup Proxy": "Proxy kur",
+ "Setup Proxy": "Proxy Ayarla",
"Proxy Protocol": "Proxy Protokolü",
"Proxy Server": "Proxy Sunucusu",
"Proxy server has authentication": "Proxy sunucusunun kimlik doğrulaması var",
@@ -536,7 +535,7 @@
"Query": "Sorgu",
"settingsCertificateExpiry": "TLS Sertifikasının Geçerlilik Süresi",
"certificationExpiryDescription": "HTTPS Monitörleri, TLS sertifikasının süresi dolduğunda bildirimi tetikler:",
- "Setup Docker Host": "Docker Ana Bilgisayarını Kur",
+ "Setup Docker Host": "Docker Ana Bilgisayarını Ayarla",
"Connection Type": "Bağlantı türü",
"Docker Daemon": "Docker Daemon",
"deleteDockerHostMsg": "Bu docker ana bilgisayarını tüm monitörler için silmek istediğinizden emin misiniz?",
@@ -594,7 +593,7 @@
"Kook": "Kook",
"wayToGetKookBotToken": "Uygulama oluşturun ve {0} adresinde bot tokenı alın",
"wayToGetKookGuildID": "Kook ayarında \"Geliştirici Modu\"nu açın ve kimliğini almak için guild'e sağ tıklayın",
- "Guild ID": "Guild ID",
+ "Guild ID": "Sunucu ID'si",
"smseagle": "SMSEagle",
"smseagleTo": "Telefon numara(ları)",
"smseagleGroup": "Telefon defteri grubu ad(lar)ı",
@@ -841,11 +840,11 @@
"styleElapsedTime": "Kalp atışı çubuğunun altında geçen süre",
"styleElapsedTimeShowWithLine": "Göster (Satır ile birlikte)",
"enableNSCD": "Tüm DNS isteklerini önbelleğe almak için NSCD'yi (Ad Hizmeti Önbellek Programı) etkinleştirin",
- "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu docker imajı, MariaDB'yi sizin için otomatik olarak yerleştirdi ve yapılandırdı. Çalışma Süresi Kuma bu veritabanına unix soketi aracılığıyla bağlanacaktır.",
+ "setupDatabaseEmbeddedMariaDB": "Hiçbir şey ayarlamanıza gerek yok. Bu docker imajı, MariaDB'yi sizin için otomatik olarak yerleştirdi ve yapılandırdı. Çalışma Süresi Kuma bu veri tabanına unix soketi aracılığıyla bağlanacaktır.",
"setupDatabaseSQLite": "Küçük ölçekli dağıtımlar için önerilen basit bir veritabanı dosyası. v2.0.0'dan önce Uptime Kuma, varsayılan veritabanı olarak SQLite'ı kullanıyordu.",
- "setupDatabaseChooseDatabase": "Hangi veritabanını kullanmak istersiniz?",
- "setupDatabaseMariaDB": "Harici bir MariaDB veritabanına bağlanın. Veritabanı bağlantı bilgilerini ayarlamanız gerekir.",
- "dbName": "Veritabanı ismi",
+ "setupDatabaseChooseDatabase": "Hangi veri tabanını kullanmak istersiniz?",
+ "setupDatabaseMariaDB": "Harici bir MariaDB veri tabanına bağlanın. Veri tabanı bağlantı bilgilerini ayarlamanız gerekir.",
+ "dbName": "Veri tabanı ismi",
"Saved.": "Kaydedildi.",
"toastErrorTimeout": "Hata Bildirimleri için Zaman Aşımı",
"toastSuccessTimeout": "Başarı Bildirimleri için Zaman Aşımı",
@@ -892,20 +891,20 @@
"emailTemplateMsg": "bildirim mesajı",
"emailTemplateLimitedToUpDownNotification": "yalnızca Normal/Hatalı kalp atışları için kullanılabilir, aksi takdirde boş",
"GrafanaOncallUrl": "Grafana Oncall URL'i",
- "noDockerHostMsg": "Uygun değil. Önce Docker Ana Bilgisayarını Kurun.",
+ "noDockerHostMsg": "Uygun değil. Önce Docker Ana Bilgisayarını Ayarlayın.",
"DockerHostRequired": "Lütfen bu monitör için Docker Ana Bilgisayarını ayarlayın.",
"Browser Screenshot": "Tarayıcı Ekran Görüntüsü",
"successKeyword": "Başarı Anahtar Kelimesi",
"successKeywordExplanation": "Başarılı olarak kabul edilecek MQTT anahtar kelimesi",
"Add a new expiry notification day": "Yeni bir sona erme bildirim günü ekle",
"Remove the expiry notification": "Sona erme bildirim gününü kaldır",
- "setup a new monitor group": "yeni bir monitör grubu kur",
+ "setup a new monitor group": "yeni bir monitör grubu ayarla",
"Remove domain": "'{0}' alan adını kaldır",
"Remote Browsers": "Uzak Tarayıcılar",
"Remote Browser": "Uzak Tarayıcı",
"Add a Remote Browser": "Uzak Tarayıcı Ekle",
"Remote Browser not found!": "Uzak Tarayıcı bulunamadı!",
- "remoteBrowsersDescription": "Uzak Tarayıcılar, Chromium'u yerel olarak çalıştırmanın bir alternatifidir. browserless.io gibi bir hizmetle kurulum yapın veya kendi hizmetinize bağlanın",
+ "remoteBrowsersDescription": "Uzak Tarayıcılar, Chromium'u yerel olarak çalıştırmanın bir alternatifidir. browserless.io gibi bir hizmet ile kurulum yapın veya kendi hizmetinize bağlanın",
"self-hosted container": "kendi kendine barındırılan konteyner",
"remoteBrowserToggle": "Varsayılan olarak Chromium, Uptime Kuma kapsayıcısının içinde çalışır. Bu anahtarı değiştirerek uzak bir tarayıcıyı kullanabilirsiniz.",
"useRemoteBrowser": "Uzak Tarayıcı Kullanın",
@@ -959,7 +958,7 @@
"whatHappensAtForumPost": "Yeni bir forum gönderisi oluşturun. Bu, mevcut gönderiye mesaj YAYINLAMAZ. Mevcut gönderide yayınlamak için \"{option}\" seçeneğini kullanın",
"Command": "Komut",
"mongodbCommandDescription": "Veritabanına karşı bir MongoDB komutu çalıştırın. Mevcut komutlar hakkında bilgi için {dokümantasyona} bakın",
- "Bitrix24 Webhook URL": "Bitrix24 Webhook URL",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook URL'si",
"wayToGetBitrix24Webhook": "{0} adresindeki adımları izleyerek bir web kancası oluşturabilirsiniz",
"bitrix24SupportUserID": "Bitrix24'e kullanıcı kimliğinizi girin. Kullanıcının profiline giderek bağlantıdan kimliğini öğrenebilirsiniz.",
"Select message type": "Mesaj türünü seçin",
@@ -972,5 +971,151 @@
"ignoreTLSErrorGeneral": "Bağlantı için TLS/SSL hatasını yoksay",
"threadForumPostID": "Konu / Forum gönderi kimliği",
"e.g. {discordThreadID}": "Örneğin. {discordThreadID}",
- "wayToGetDiscordThreadId": "Konu başlığı/forum gönderisi kimliği almak, kanal kimliği almaya benzer. Kimliklerin nasıl alınacağı hakkında daha fazla bilgi edinin {0}"
+ "wayToGetDiscordThreadId": "Konu başlığı/forum gönderisi kimliği almak, kanal kimliği almaya benzer. Kimliklerin nasıl alınacağı hakkında daha fazla bilgi edinin {0}",
+ "smspartnerPhoneNumber": "Telefon numaraları",
+ "smspartnerSenderName": "SMS Gönderenin Adı",
+ "smspartnerApiurl": "API anahtarınızı {0} adresindeki kontrol panelinizde bulabilirsiniz",
+ "smspartnerPhoneNumberHelptext": "Numara uluslararası biçimde {0}, {1} olmalıdır. Birden çok sayı {2} ile ayrılmalıdır",
+ "smspartnerSenderNameInfo": "3..=11 normal karakter arasında olmalıdır",
+ "threemaRecipient": "Alıcı",
+ "threemaRecipientType": "Alıcı Tipi",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Telefon numarası",
+ "threemaRecipientTypeEmail": "E-posta Adresi",
+ "threemaSenderIdentity": "Ağ Geçidi Kimliği",
+ "threemaSenderIdentityFormat": "8 karakter, genellikle * ile başlar",
+ "threemaApiAuthenticationSecret": "Ağ Geçidi Kimliği Gizli Anahtarı",
+ "threemaBasicModeInfo": "Not: Bu entegrasyon, temel modda (sunucu tabanlı şifreleme) Threema Gateway'i kullanır. Daha fazla ayrıntıyı {0} adresinde bulabilirsiniz.",
+ "wayToGetThreemaGateway": "Threema Gateway {0}'e kaydolabilirsiniz.",
+ "threemaRecipientTypeIdentityFormat": "8 karakter",
+ "threemaRecipientTypePhoneFormat": "E.164, başında + olmadan",
+ "apiKeysDisabledMsg": "Kimlik doğrulama devre dışı olduğundan API anahtarları devre dışı bırakıldı.",
+ "now": "Şimdi",
+ "time ago": "{0} önce",
+ "-year": "-yıl",
+ "Json Query Expression": "JSON Sorgu İfadesi",
+ "and": "ve",
+ "cacheBusterParam": "{0} parametresini ekleyin",
+ "cacheBusterParamDescription": "Önbellekleri atlamak için rastgele oluşturulmuş parametre.",
+ "Community String": "Topluluk Metni",
+ "snmpCommunityStringHelptext": "Bu metin, SNMP özellikli cihazlara erişimi doğrulamak ve kontrol etmek için bir şifre işlevi görür. Bunu SNMP cihazınızın yapılandırmasıyla eşleştirin.",
+ "OID (Object Identifier)": "OID (Nesne Tanımlayıcı)",
+ "snmpOIDHelptext": "İzlemek istediğiniz sensörün veya durumun OID'sini girin. OID'den emin değilseniz MIB tarayıcıları veya SNMP yazılımı gibi ağ yönetimi araçlarını kullanın.",
+ "Condition": "Koşul",
+ "SNMP Version": "SNMP Sürümü",
+ "Please enter a valid OID.": "Lütfen geçerli bir OID girin.",
+ "groupOnesenderDesc": "Gruba mesaj göndermek için, GroupID değerinin geçerli olduğundan emin olun. Örneğin: 628123456789-342345",
+ "Group ID": "Grup Kimliği",
+ "wayToGetOnesenderUrlandToken": "Onesender web sitesine giderek URL'yi ve Jetonu alabilirsiniz. Daha fazla bilgi için {0}",
+ "Add Remote Browser": "Uzak Tarayıcı Ekle",
+ "New Group": "Yeni Grup",
+ "Host Onesender": "Onesender Host Adresi",
+ "Token Onesender": "Onesender Jetonu",
+ "Group Name": "Grup Adı",
+ "OAuth2: Client Credentials": "OAuth2: İstemci Kimlik Bilgileri",
+ "Recipient Type": "Alıcı Türü",
+ "Private Number": "Özel Numara",
+ "Authentication Method": "Kimlik Doğrulama Yöntemi",
+ "privateOnesenderDesc": "Özel numaralı telefona mesaj göndermek için, telefon numarasının geçerli olduğundan emin olun. Örneğin: 628123456789",
+ "Authorization Header": "Yetkilendirme Başlığı",
+ "Form Data Body": "Form Veri Gövdesi",
+ "Go back to home page.": "Ana sayfaya geri dönün.",
+ "No tags found.": "Etiket bulunamadı.",
+ "Lost connection to the socket server.": "Soket sunucusuyla bağlantı kesildi.",
+ "Cannot connect to the socket server.": "Soket sunucusuna bağlanılamıyor.",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Web Kancası URL'si",
+ "OAuth Token URL": "OAuth Jetonu URL'si",
+ "Client ID": "İstemci Kimliği",
+ "Client Secret": "İstemci Jetonu",
+ "OAuth Scope": "OAuth Kapsamı",
+ "Optional: Space separated list of scopes": "İsteğe bağlı: Kapsamların boşlukla ayrılmış listesi",
+ "signl4Docs": "SIGNL4'ün nasıl yapılandırılacağı ve SIGNL4 web kancası URL'sinin nasıl elde edileceği hakkında daha fazla bilgiyi {0} içinde bulabilirsiniz.",
+ "not contains": "içermez/içermiyor",
+ "starts with": "başlar/başlıyor",
+ "equals": "eşit",
+ "not starts with": "ile başlamaz",
+ "not equals": "eşit değil",
+ "contains": "içerir",
+ "conditionDeleteGroup": "Grubu Sil",
+ "conditionValuePlaceholder": "Değer",
+ "Conditions": "Koşullar",
+ "conditionAdd": "Koşul Ekle",
+ "conditionDelete": "Koşul Sil",
+ "conditionAddGroup": "Grup Ekle",
+ "ends with": "ile biter",
+ "not ends with": "ile bitmiyor",
+ "less than or equal to": "küçük veya eşit",
+ "greater than": "daha büyük",
+ "less than": "daha küçük",
+ "greater than or equal to": "büyük veya eşit",
+ "record": "kayıt",
+ "jsonQueryDescription": "JSON sorgusunu kullanarak sunucunun JSON yanıtından belirli verileri ayrıştırın ve çıkarın. JSON beklemiyorsanız ham yanıt için \"$\" sembolünü kullanın. Sonuç daha sonra metin olarak beklenen değerle karşılaştırılır. Belgeler için {0}'a bakın ve sorgularla denemeler yapmak için {1}'i kullanın.",
+ "shrinkDatabaseDescriptionSqlite": "SQLite için {vacuum} veritabanını tetikle. {auto_vacuum} zaten etkin ancak bu, {vacuum} komutunun yaptığı gibi veritabanını birleştirmez veya tek tek veritabanı sayfalarını yeniden paketlemez.",
+ "Debug": "Hata ayıklama",
+ "Copy": "Kopyala",
+ "CopyToClipboardError": "Panoya kopyalanamadı: {hata}",
+ "CopyToClipboardSuccess": "Kopyalandı!",
+ "firewalls": "güvenlik duvarları",
+ "dns resolvers": "dns çözücüler",
+ "docker networks": "Docker ağları",
+ "CurlDebugInfoOAuth2CCUnsupported": "Tam Oauth istemci kimlik bilgisi akışı {curl}'de desteklenmiyor.{newline}Lütfen bir taşıyıcı belirteci alın ve bunu {oauth2_bearer} seçeneği aracılığıyla iletin.",
+ "CurlDebugInfoProxiesUnsupported": "Yukarıdaki {curl} komutunda proxy desteği şu anda uygulanmamıştır.",
+ "Message format": "Mesaj biçimi",
+ "Send rich messages": "Zengin mesajlar gönder",
+ "Notification Channel": "Bildirim Kanalı",
+ "Sound": "Ses",
+ "Alphanumerical string and hyphens only": "Yalnızca alfanümerik dize ve tireler",
+ "Arcade": "Çarşı",
+ "Correct": "Doğru",
+ "Fail": "Hata",
+ "Harp": "Harp",
+ "Reveal": "Ortaya çıkarmak",
+ "Bubble": "Kabarcık",
+ "Doorbell": "Kapı zili",
+ "Flute": "Flüt",
+ "Money": "Para",
+ "Scifi": "Bilimkurgu",
+ "Clear": "Temizlemek",
+ "Elevator": "Asansör",
+ "Guitar": "Gitar",
+ "Pop": "Pop",
+ "Custom sound to override default notification sound": "Varsayılan bildirim sesini geçersiz kılmak için özel ses",
+ "Time Sensitive (iOS Only)": "Zaman Duyarlı (Yalnızca iOS)",
+ "From": "Kimden",
+ "Can be found on:": "Şurada bulunabilir: {0}",
+ "The phone number of the recipient in E.164 format.": "Alıcının E.164 formatındaki telefon numarası.",
+ "ignoredTLSError": "TLS/SSL hataları göz ardı edildi",
+ "CurlDebugInfo": "Monitörü hata ayıklamak için, bunu kendi makinenizin terminaline veya uptime kuma'nın çalıştığı makinenin terminaline yapıştırabilir ve ne istediğinizi görebilirsiniz.{newiline}Lütfen {firewalls}, {dns_resolvers} veya {docker_networks} gibi ağ farklılıklarına dikkat edin.",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Cihaz rahatsız etmeyin modunda olsa bile, zaman açısından hassas bildirimler anında iletilecek.",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Cevap alabilmek istiyorsanız E.164 formatında bir kısa mesaj gönderici kimliği veya bir telefon numarası.",
+ "rabbitmqNodesRequired": "Lütfen bu monitör için sunucuları ayarlayın.",
+ "rabbitmqNodesInvalid": "Lütfen RabbitMQ düğümleri için tam nitelikli ('http' ile başlayan) bir URL kullanın.",
+ "RabbitMQ Username": "RabbitMQ Kullanıcı Adı",
+ "RabbitMQ Password": "RabbitMQ Şifresi",
+ "SendGrid API Key": "SendGrid API Anahtarı",
+ "Separate multiple email addresses with commas": "Birden fazla e-posta adresini virgülle ayırın",
+ "RabbitMQ Nodes": "RabbitMQ Yönetim Sunucuları",
+ "rabbitmqNodesDescription": "Protokol ve port dahil olmak üzere RabbitMQ yönetim düğümleri için URL'yi girin. Örnek: {0}",
+ "rabbitmqHelpText": "Monitörü kullanmak için, RabbitMQ kurulumunuzda Yönetim Eklentisini etkinleştirmeniz gerekecektir. Daha fazla bilgi için lütfen {rabitmq_documentation}'a bakın.",
+ "aboutSlackUsername": "Mesaj göndericinin görünen adını değiştir. Eğer birilerini etiketlemek isterseniz, onu ismini dostça ekleyebilirsiniz.",
+ "templateHostnameOrURL": "ana bilgisayar adı veya URL",
+ "templateStatus": "durum",
+ "telegramUseTemplate": "Özel mesaj şablonu kullan",
+ "telegramUseTemplateDescription": "Etkinleştirilirse mesaj özel bir şablon kullanılarak gönderilecektir.",
+ "telegramTemplateFormatDescription": "Telegram, mesajlar için farklı işaretleme dillerinin kullanılmasına izin verir, ayrıntılar için Telegram {0} bölümüne bakın.",
+ "templateServiceName": "servis adı",
+ "telegramServerUrlDescription": "Telegram'ın bot API sınırlamalarını kaldırmak veya engellenen alanlarda (Çin, İran vb.) erişim sağlamak için. Daha fazla bilgi için tıklayın {0}. Varsayılan: {1}",
+ "wahaSession": "Oturum",
+ "wahaChatId": "Sohbet Kimliği (Telefon Numarası / Kişi Kimliği / Grup Kimliği)",
+ "wayToGetWahaApiUrl": "WAHA Örnek URL'niz.",
+ "wayToGetWahaApiKey": "API Anahtarı, WAHA'yı çalıştırmak için kullandığınız WHATSAPP_API_KEY ortam değişkeni değeridir.",
+ "wayToGetWahaSession": "Bu oturumdan itibaren WAHA, Chat ID'ye bildirimler gönderir. Bunu WAHA Dashboard'da bulabilirsiniz.",
+ "wayToWriteWahaChatId": "Uluslararası ön eke sahip, ancak başında artı işareti olmayan telefon numarası ({0}), Kişi Kimliği ({1}) veya Grup Kimliği ({2}). Bildirimler WAHA Session'dan bu Sohbet Kimliğine gönderilir.",
+ "Plain Text": "Düz Metin",
+ "Message Template": "Mesaj Şablonu",
+ "Template Format": "Şablon Biçimi",
+ "YZJ Webhook URL": "YZJ Webhook URL'si",
+ "YZJ Robot Token": "YZJ Robot tokeni",
+ "telegramServerUrl": "(İsteğe bağlı) Sunucu URL'si"
}
diff --git a/src/lang/ug.json b/src/lang/ug.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/src/lang/ug.json
@@ -0,0 +1 @@
+{}
diff --git a/src/lang/uk-UA.json b/src/lang/uk-UA.json
index 3aca5a90b..63070db9f 100644
--- a/src/lang/uk-UA.json
+++ b/src/lang/uk-UA.json
@@ -43,7 +43,7 @@
"Delete": "Видалити",
"Current": "Поточний",
"Uptime": "Аптайм",
- "Cert Exp.": "Сертифікат спливає",
+ "Cert Exp.": "Сертифікат сп.",
"day": "день | днів",
"-day": "днів",
"hour": "година",
@@ -54,7 +54,7 @@
"Keyword": "Ключове слово",
"Friendly Name": "Ім'я",
"URL": "URL",
- "Hostname": "Адреса хоста",
+ "Hostname": "Адреса хосту",
"Port": "Порт",
"Heartbeat Interval": "Частота опитування",
"Retries": "Спроб",
@@ -338,7 +338,6 @@
"About": "Про програму",
"Description": "Опис",
"Powered by": "Працює на основі скрипту від",
- "shrinkDatabaseDescription": "Включає VACUUM для бази даних SQLite. Якщо база даних була створена після версії 1.10.0, AUTO_VACUUM вже включений і ця дія не потрібна.",
"Style": "Стиль",
"info": "ІНФО",
"warning": "УВАГА",
@@ -847,8 +846,8 @@
"styleElapsedTimeShowWithLine": "Показати (з лінією)",
"styleElapsedTimeShowNoLine": "Показати (без лінії)",
"enableNSCD": "Увімкнути NSCD (Name Service Cache Daemon) для кешування всіх DNS-запитів",
- "setupDatabaseChooseDatabase": "Яку базу даних ви хотіли б використовувати?",
- "setupDatabaseEmbeddedMariaDB": "Вам не потрібно нічого налаштовувати. Цей докер-образ містить вбудовану та автоматично налаштовану базу даних MariaDB. Uptime Kuma підключиться до цієї бази даних через unix-сокет.",
+ "setupDatabaseChooseDatabase": "Яку базу даних ви бажаєте використовувати?",
+ "setupDatabaseEmbeddedMariaDB": "Вам не потрібно нічого налаштовувати. Цей докер-образ містить вбудовану та автоматично налаштовану базу даних MariaDB. Uptime Kuma під'єднатися до цієї бази даних через unix-сокет.",
"setupDatabaseSQLite": "Простий файл бази даних, рекомендований для невеликих проєктів. До версії 2.0.0 Uptime Kuma використовувала SQLite як базу даних за замовчуванням.",
"setupDatabaseMariaDB": "Підключитися до зовнішньої бази даних MariaDB. Вам потрібно задати інформацію для підключення до бази даних.",
"dbName": "Назва бази даних",
@@ -952,7 +951,7 @@
"cellsyntDestination": "Номер телефону одержувача в міжнародному форматі з 00 на початку, за яким слідує код країни, наприклад, 00447920110000 для британського номера 07920 110 000 (максимум 17 цифр). Максимум 25000 одержувачів, розділених комами, на один HTTP-запит.",
"max 11 alphanumeric characters": "максимум 11 буквено-цифрових символів",
"locally configured mail transfer agent": "локально налаштований агент пересилання пошти",
- "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Або введіть ім'я хоста сервера, до якого ви хочете підключитися, або {localhost}, якщо ви маєте намір використовувати {local_mta}",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "Або введіть ім'я хосту сервера, до якого ви хочете підключитися, або {localhost}, якщо ви маєте намір використовувати {local_mta}",
"Don't mention people": "Не згадувати людей",
"Mentioning": "Згадування",
"Mention group": "Згадати {group}",
@@ -978,5 +977,152 @@
"Refresh Interval Description": "Сторінка стану буде робити повне оновлення сайту кожні {0} секунд",
"ignoreTLSErrorGeneral": "Ігнорувати помилку TLS/SSL для з'єднання",
"forumPostName": "Назва повідомлення на форумі",
- "e.g. {discordThreadID}": "наприклад, {discordThreadID}"
+ "e.g. {discordThreadID}": "наприклад, {discordThreadID}",
+ "smspartnerPhoneNumber": "Телефонний номер(и)",
+ "smspartnerSenderNameInfo": "Має містити в межах 3..=11 звичайних символів",
+ "smspartnerSenderName": "Ім'я відправника SMS",
+ "smspartnerApiurl": "Ви можете знайти свій API-ключ у своїй інформаційній панелі за адресою {0}",
+ "smspartnerPhoneNumberHelptext": "Номер повинен бути в міжнародному форматі {0}, {1}. Кілька номерів повинні бути розділені символом {2}",
+ "threemaRecipient": "Одержувач",
+ "threemaRecipientType": "Тип одержувача",
+ "threemaRecipientTypeIdentity": "Threema-ID",
+ "threemaRecipientTypePhone": "Номер телефону",
+ "threemaRecipientTypePhoneFormat": "E.164, без + на початку",
+ "threemaRecipientTypeEmail": "Електронна адреса",
+ "threemaSenderIdentity": "ID шлюзу",
+ "threemaApiAuthenticationSecret": "Секрет ID шлюзу",
+ "wayToGetThreemaGateway": "Ви можете зареєструватися на Threema Gateway {0}.",
+ "threemaRecipientTypeIdentityFormat": "8 символів",
+ "threemaSenderIdentityFormat": "8 символів, зазвичай починається з *",
+ "threemaBasicModeInfo": "Примітка: Ця інтеграція використовує Threema Gateway у базовому режимі (шифрування на основі сервера). Більш детальну інформацію можна знайти {0}.",
+ "apiKeysDisabledMsg": "API-ключі вимкнено, оскільки автентифікація вимкнена.",
+ "jsonQueryDescription": "Розбір і вилучення конкретних даних з JSON-відповіді сервера за допомогою JSON-запиту або використання символу «$» для необробленої відповіді, якщо не очікується JSON. Результат порівнюється з очікуваним значенням у вигляді рядків. Дивіться {0} для отримання документації і використовуйте {1} для експериментів із запитами.",
+ "snmpCommunityStringHelptext": "Цей рядок слугує паролем для автентифікації та контролю доступу до пристроїв з підтримкою SNMP. Узгодьте його з конфігурацією вашого SNMP-пристрою.",
+ "snmpOIDHelptext": "Введіть OID для датчика або стану, який ви хочете моніторити. Якщо ви не впевнені щодо OID, скористайтеся інструментами керування мережею, як-от MIB-браузерами або програмним забезпеченням SNMP.",
+ "wayToGetOnesenderUrlandToken": "Ви можете отримати URL-адресу і токен, перейшовши на сайт Onesender. Більше інформації {0}",
+ "conditionValuePlaceholder": "Значення",
+ "not equals": "не дорівнює",
+ "not ends with": "не закінчується на",
+ "and": "і",
+ "Private Number": "Приватний номер",
+ "signl4Docs": "Ви можете знайти більше інформації про те, як налаштувати SIGNL4 і як отримати URL-адресу вебхука SIGNL4 в розділі {0}.",
+ "now": "зараз",
+ "time ago": "{0} тому",
+ "-year": "-рік",
+ "Json Query Expression": "Вираз запиту Json",
+ "cacheBusterParam": "Додати параметр {0}",
+ "cacheBusterParamDescription": "Випадково згенерований параметр для обходу кешування.",
+ "OID (Object Identifier)": "OID (ідентифікатор об'єкта)",
+ "Condition": "Умова",
+ "SNMP Version": "Версія SNMP",
+ "Please enter a valid OID.": "Будь ласка, введіть дійсний OID.",
+ "privateOnesenderDesc": "Переконайтеся, що номер телефону дійсний. Щоб надіслати повідомлення на приватний номер телефону, наприклад: 628123456789",
+ "groupOnesenderDesc": "Переконайтеся, що GroupID дійсний. Щоб надіслати повідомлення в Групу, наприклад: 628123456789-342345",
+ "Add Remote Browser": "Додати віддалений браузер",
+ "New Group": "Нова група",
+ "Group Name": "Назва групи",
+ "Group ID": "ID групи",
+ "OAuth2: Client Credentials": "OAuth2: Облікові дані клієнта",
+ "Authentication Method": "Метод автентифікації",
+ "Authorization Header": "Заголовок авторизації",
+ "OAuth Token URL": "URL-адреса токену OAuth",
+ "Community String": "Рядок спільноти",
+ "Host Onesender": "Хост Onesender",
+ "Token Onesender": "Токен Onesender",
+ "Recipient Type": "Тип отримувача",
+ "Form Data Body": "Тіло даних форми",
+ "Client ID": "ID клієнта",
+ "Client Secret": "Секрет клієнта",
+ "Go back to home page.": "Повернутися на головну сторінку.",
+ "No tags found.": "Тегів не знайдено.",
+ "Lost connection to the socket server.": "Втрачено з'єднання з сервером сокетів.",
+ "Cannot connect to the socket server.": "Не вдається з'єднатися з сервером сокетів.",
+ "Conditions": "Умови",
+ "conditionAdd": "Додати умову",
+ "conditionDelete": "Видалити умову",
+ "conditionAddGroup": "Додати групу",
+ "conditionDeleteGroup": "Видалити групу",
+ "OAuth Scope": "OAuth дозволи",
+ "Optional: Space separated list of scopes": "Необов'язково: Розділений пробілами список дозволів",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "URL-адреса вебхука SIGNL4",
+ "equals": "дорівнює",
+ "contains": "містить",
+ "not contains": "не містить",
+ "starts with": "починається з",
+ "not starts with": "не починається з",
+ "ends with": "закінчується на",
+ "less than": "менше, ніж",
+ "greater than": "більше, ніж",
+ "less than or equal to": "менше або дорівнює",
+ "greater than or equal to": "більше або дорівнює",
+ "record": "запис",
+ "shrinkDatabaseDescriptionSqlite": "Запускає команду {vacuum} для бази даних SQLite. Команда {auto_vacuum} вже увімкнена, але вона не дефрагментує базу даних і не перепаковує окремі сторінки бази даних так, як це робить команда {vacuum}.",
+ "ignoredTLSError": "Помилки TLS/SSL проігноровано",
+ "Debug": "Налагодження",
+ "Copy": "Копіювати",
+ "CopyToClipboardError": "Не вдалося скопіювати в буфер обміну: {error}",
+ "CopyToClipboardSuccess": "Скопійовано!",
+ "firewalls": "фаєрволи",
+ "dns resolvers": "dns сервери",
+ "docker networks": "docker-мережі",
+ "CurlDebugInfoProxiesUnsupported": "Підтримка проксі у наведеній вище команді {curl} наразі не реалізована.",
+ "Message format": "Формат повідомлення",
+ "Send rich messages": "Надіслати розгорнуті повідомлення",
+ "Notification Channel": "Канал сповіщення",
+ "Sound": "Звук",
+ "Alphanumerical string and hyphens only": "Тільки алфавітно-цифровий рядок і дефіси",
+ "Arcade": "Аркада",
+ "Correct": "Вірно",
+ "Fail": "Невдача",
+ "Harp": "Арфа",
+ "Reveal": "Розкриття",
+ "Bubble": "Бульбашка",
+ "Doorbell": "Дзвінок",
+ "Flute": "Флейта",
+ "Money": "Гроші",
+ "Scifi": "Наукова фантастика",
+ "Clear": "Чисто",
+ "Elevator": "Ліфт",
+ "Guitar": "Гітара",
+ "Pop": "Поп",
+ "Custom sound to override default notification sound": "Користувацький звук для заміни звуку сповіщень за замовчуванням",
+ "Time Sensitive (iOS Only)": "Чутливий до часу (лише для iOS)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "Сповіщення, що залежать від часу, будуть доставлені негайно, навіть якщо пристрій перебуває в режимі «Не турбувати».",
+ "From": "Від",
+ "The phone number of the recipient in E.164 format.": "Номер телефону одержувача у форматі E.164.",
+ "CurlDebugInfo": "Для налагодження монітора ви можете вставити цей файл у термінал вашої власної машини або у термінал машини, на якій запущено uptime kuma, і подивитися, що ви запитуєте.{newline}Зверніть увагу на мережеві відмінності, такі як {firewalls}, {dns_resolvers} або {docker_networks}.",
+ "CurlDebugInfoOAuth2CCUnsupported": "Повний потік облікових даних клієнта oauth не підтримується в {curl}.{newline}Потрібно отримати bearer-токен і передати його за допомогою опції {oauth2_bearer}.",
+ "Can be found on:": "Можна знайти на: {0}",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "Або ідентифікатор відправника тексту, або номер телефону у форматі E.164, якщо ви хочете отримувати відповіді.",
+ "rabbitmqNodesRequired": "Будь ласка, встановіть вузли для цього монітора.",
+ "RabbitMQ Username": "Ім'я користувача RabbitMQ",
+ "RabbitMQ Password": "Пароль RabbitMQ",
+ "SendGrid API Key": "API-ключ SendGrid",
+ "Separate multiple email addresses with commas": "Розділяйте кілька адрес комами",
+ "RabbitMQ Nodes": "Вузли керування RabbitMQ",
+ "rabbitmqNodesDescription": "Введіть URL-адресу для вузлів керування RabbitMQ, включаючи протокол і порт. Приклад: {0}",
+ "rabbitmqNodesInvalid": "Будь ласка, використовуйте повну URL-адресу (починаючи з 'http') для вузлів RabbitMQ.",
+ "rabbitmqHelpText": "Щоб використовувати монітор, вам потрібно увімкнути плагін керування у налаштуваннях RabbitMQ. Для отримання додаткової інформації, будь ласка, зверніться до {rabitmq_documentation}.",
+ "aboutSlackUsername": "Змінює відображуване ім'я відправника повідомлення. Якщо ви хочете згадати когось, додайте його до дружнього імені.",
+ "templateServiceName": "назва сервісу",
+ "templateHostnameOrURL": "ім'я хосту або URL",
+ "telegramUseTemplate": "Використовувати власний шаблон повідомлення",
+ "telegramUseTemplateDescription": "Якщо увімкнено, повідомлення буде надіслано з використанням спеціального шаблону.",
+ "telegramTemplateFormatDescription": "Telegram дозволяє використовувати різні мови розмітки для повідомлень, див. Telegram {0} для більш детальної інформації.",
+ "Plain Text": "Звичайний текст",
+ "templateStatus": "статус",
+ "Message Template": "Шаблон повідомлення",
+ "Template Format": "Формат шаблону",
+ "YZJ Webhook URL": "URL вебхука YZJ",
+ "YZJ Robot Token": "Токен YZJ Robot",
+ "wayToGetWahaApiUrl": "URL вашого екземпляра WAHA.",
+ "wayToGetWahaApiKey": "Ключ API - це значення змінної оточення WHATSAPP_API_KEY, яку ви використовували для запуску WAHA.",
+ "wahaSession": "Сесія",
+ "wahaChatId": "ID чату (номер телефону / ID контакту / ID групи)",
+ "wayToGetWahaSession": "З цієї сесії WAHA надсилає сповіщення на ID чату. Ви можете знайти його в інформаційній панелі WAHA.",
+ "wayToWriteWahaChatId": "Номер телефону з міжнародним префіксом, але без знака плюс на початку ({0}), ID контакту ({1}) або ID групи ({2}). На цей ID чату надсилаються сповіщення з сеансу WAHA.",
+ "telegramServerUrl": "(Необов'язково) URL сервера",
+ "telegramServerUrlDescription": "Щоб зняти обмеження з Telegram bot api або отримати доступ у заблокованих регіонах (Китай, Іран тощо). Для отримання додаткової інформації натисніть {0}. За замовчуванням: {1}",
+ "Font Twemoji by Twitter licensed under": "Шрифт Twemoji від Twitter ліцензований під"
}
diff --git a/src/lang/ur.json b/src/lang/ur.json
index 469022246..2ba588cb9 100644
--- a/src/lang/ur.json
+++ b/src/lang/ur.json
@@ -59,7 +59,7 @@
"pushOptionalParams": "اختیاری پیرامیٹرز: {0}",
"Save": "محفوظ کریں",
"Notifications": "اطلاعات",
- "Setup Notification": "سیٹ اپ نوٹیفکیشن",
+ "Setup Notification": "نوٹیفکیشن مرتب کریں",
"Light": "روشنی",
"Dark": "اندھیرا",
"Auto": "آٹو",
@@ -109,7 +109,6 @@
"Passive Monitor Type": "غیر فعال مانیٹر کی قسم",
"No important events": "کوئی اہم واقعات نہیں",
"-hour": "-گھنٹہ",
- "shrinkDatabaseDescription": "SQLite کے لیے ڈیٹا بیس ویکیوم کو متحرک کریں۔ اگر آپ کا ڈیٹا بیس 1.10.0 کے بعد بنتا ہے، تو AUTO_VACUUM پہلے ہی فعال ہے اور اس کارروائی کی ضرورت نہیں ہے۔",
"goAlertIntegrationKeyInfo": "اس فارمیٹ میں سروس کے لیے عام API انٹیگریشن کلید حاصل کریں \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeee\" عام طور پر کاپی شدہ URL کے ٹوکن پیرامیٹر کی قدر۔",
"Sms template must contain parameters: ": "ایس ایم ایس ٹیمپلیٹ میں پیرامیٹرز ہونا ضروری ہے: ",
"Keyword": "کلیدی لفظ",
@@ -119,7 +118,7 @@
"resendDisabled": "دوبارہ بھیجنا غیر فعال ہے",
"retriesDescription": "سروس کو ڈاؤن کے بطور نشان زد کرنے اور ایک اطلاع بھیجے جانے سے پہلے زیادہ سے زیادہ کوششیں کریں",
"maxRedirectDescription": "فالو کرنے کے لیے ری ڈائریکٹس کی زیادہ سے زیادہ تعداد۔ ری ڈائریکٹ کو غیر فعال کرنے کے لیے 0 پر سیٹ کریں۔",
- "Not available, please setup.": "دستیاب نہیں، براہ کرم سیٹ اپ کریں۔",
+ "Not available, please setup.": "دستیاب نہیں ہے، براہ کرم ترتیب دیں۔",
"Timezone": "ٹائم زون",
"Discourage search engines from indexing site": "انڈیکسنگ سائٹ سے سرچ انجنوں کی حوصلہ شکنی کریں",
"disableauth.message1": "کیا آپ واقعی {disableAuth} کرنا چاہتے ہیں؟",
@@ -152,7 +151,7 @@
"Overwrite": "اوور رائٹ کریں",
"Options": "اختیارات",
"Verify Token": "ٹوکن کی تصدیق کریں",
- "Setup 2FA": "2FA سیٹ اپ کریں",
+ "Setup 2FA": "2FA مرتب کریں",
"Enable 2FA": "2FA کو فعال کریں",
"2FA Settings": "2FA کی ترتیبات",
"Two Factor Authentication": "دو عنصر کی تصدیق",
@@ -369,7 +368,7 @@
"Connection String": "کنکشن سٹرنگ",
"Query": "استفسار",
"settingsCertificateExpiry": "TLS سرٹیفکیٹ کی میعاد ختم",
- "Setup Docker Host": "ڈوکر ہوسٹ سیٹ اپ کریں",
+ "Setup Docker Host": "ڈوکر ہوسٹ مرتب کریں",
"Connection Type": "کنکشن کی قسم",
"Docker Daemon": "ڈوکر ڈیمون",
"deleteDockerHostMsg": "کیا آپ واقعی تمام مانیٹر کے لیے اس ڈاکر ہوسٹ کو حذف کرنا چاہتے ہیں؟",
@@ -484,7 +483,7 @@
"Json Query": "Json استفسار",
"setupDatabaseMariaDB": "ایک بیرونی ماریا ڈی بی ڈیٹا بیس سے جڑیں۔ آپ کو ڈیٹا بیس کنکشن کی معلومات سیٹ کرنے کی ضرورت ہے۔",
"wayToGetDiscordURL": "آپ اسے سرور کی ترتیبات -> انٹیگریشنز -> ویب ہکس دیکھیں -> نیو ویب ہک پر جاکر حاصل کرسکتے ہیں",
- "setupDatabaseChooseDatabase": "آپ کون سا ڈیٹا بیس استعمال کرنا چاہتے ہیں؟",
+ "setupDatabaseChooseDatabase": "آپ کون سا ڈیٹا بیس استعمال کرنا چاہیں گے؟",
"setupDatabaseEmbeddedMariaDB": "آپ کو کچھ بھی سیٹ کرنے کی ضرورت نہیں ہے۔ اس ڈاکر امیج نے آپ کے لیے ماریا ڈی بی کو خود بخود ایمبیڈ اور کنفیگر کر دیا ہے۔ اپ ٹائم کوما یونکس ساکٹ کے ذریعے اس ڈیٹا بیس سے جڑے گا۔",
"setupDatabaseSQLite": "ایک سادہ ڈیٹا بیس فائل، چھوٹے پیمانے پر تعیناتیوں کے لیے تجویز کردہ۔ v2.0.0 سے پہلے، Uptime Kuma SQLite کو بطور ڈیفالٹ ڈیٹا بیس استعمال کرتا تھا۔",
"dbName": "ڈیٹا بیس کا نام",
@@ -521,7 +520,7 @@
"emailTemplateServiceName": "سروس کا نام",
"emailTemplateHostnameOrURL": "میزبان نام یا URL",
"emailTemplateStatus": "حالت",
- "noDockerHostMsg": "دستیاب نہیں ہے. پہلے ایک ڈاکر ہوسٹ سیٹ اپ کریں۔",
+ "noDockerHostMsg": "دستیاب نہیں ہے. پہلے ایک ڈاکر ہوسٹ مرتب کریں۔",
"emailTemplateLimitedToUpDownNotification": "صرف UP/DOWN دل کی دھڑکنوں کے لیے دستیاب ہے، ورنہ کالعدم",
"liquidIntroduction": "Templatability Liquid templating زبان کے ذریعے حاصل کی جاتی ہے۔ براہ کرم استعمال کی ہدایات کے لیے {0} سے رجوع کریں۔ یہ دستیاب متغیرات ہیں:",
"templateMsg": "اطلاع کا پیغام",
@@ -550,5 +549,21 @@
"statusPageSpecialSlugDesc": "خصوصی سلگ {0}: یہ صفحہ اس وقت دکھایا جائے گا جب کوئی سلگ فراہم نہ کیا جائے",
"settingUpDatabaseMSG": "ڈیٹا بیس کی ترتیب۔ اس میں کچھ وقت لگ سکتا ہے، براہ کرم صبر کریں۔",
"Add a new expiry notification day": "میعاد ختم ہونے کی اطلاع کا نیا دن شامل کریں",
- "Remove the expiry notification": "میعاد ختم ہونے کی اطلاع کے دن کو ہٹا دیں"
+ "Remove the expiry notification": "میعاد ختم ہونے کی اطلاع کے دن کو ہٹا دیں",
+ "postToExistingThread": "موجودہ تھریڈ/فورم پوسٹ پر پوسٹ کریں",
+ "forumPostName": "فورم پوسٹ کا نام",
+ "threadForumPostID": "تھریڈ / فورم پوسٹ آئی ڈی",
+ "e.g. {discordThreadID}": "جیسے {discordThreadID}",
+ "Select message type": "پیغام کی قسم منتخب کریں",
+ "Send to channel": "چینل پر بھیجیں",
+ "Create new forum post": "نئی فورم پوسٹ بنائیں",
+ "whatHappensAtForumPost": "ایک نئی فورم پوسٹ بنائیں۔ یہ موجودہ پوسٹ میں پیغامات پوسٹ نہیں کرتا ہے۔ موجودہ پوسٹ میں پوسٹ کرنے کے لیے \"{option}\" کا استعمال کریں",
+ "wayToGetDiscordThreadId": "تھریڈ/فورم پوسٹ آئی ڈی حاصل کرنا چینل آئی ڈی حاصل کرنے کے مترادف ہے۔ آئی ڈی حاصل کرنے کے طریقے کے بارے میں مزید پڑھیں {0}",
+ "Channel access token (Long-lived)": "چینل تک رسائی کا ٹوکن (طویل المدت)",
+ "Host URL": "میزبان یو آر ایل",
+ "Refresh Interval": "تروتازہ کیا وقفہ",
+ "Refresh Interval Description": "اسٹیٹس کا صفحہ ہر {0} سیکنڈ میں مکمل سائٹ ریفریش کرے گا",
+ "ignoreTLSErrorGeneral": "کنکشن کے لیے TLS/SSL کی خرابی کو نظر انداز کریں",
+ "locally configured mail transfer agent": "مقامی طور پر ترتیب شدہ میل ٹرانسفر ایجنٹ",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "یا تو اس سرور کا میزبان نام درج کریں جس سے آپ جڑنا چاہتے ہیں یا اگر آپ {local_mta} استعمال کرنا چاہتے ہیں تو {localhost}"
}
diff --git a/src/lang/vi-VN.json b/src/lang/vi-VN.json
index 3a7eb2636..3e196350c 100644
--- a/src/lang/vi-VN.json
+++ b/src/lang/vi-VN.json
@@ -80,8 +80,8 @@
"pushOptionalParams": "Tham số tuỳ chọn: {0}",
"Save": "Lưu",
"Notifications": "Thông báo",
- "Not available, please setup.": "Chưa sẵn sàng, hãy cài đặt.",
- "Setup Notification": "Cài đặt thông báo",
+ "Not available, please setup.": "Không tồn tại, hãy cài đặt.",
+ "Setup Notification": "Thiết lập thông báo",
"Light": "Sáng",
"Dark": "Tối",
"Auto": "Tự động",
@@ -150,7 +150,7 @@
"Options": "Tuỳ chọn",
"Keep both": "Giữ lại cả hai",
"Verify Token": "Xác minh Token",
- "Setup 2FA": "Cài đặt xác thực 2 lớp (2FA)",
+ "Setup 2FA": "Thiết lập xác thực 2 lớp (2FA)",
"Enable 2FA": "Bật xác thực 2 lớp (2FA)",
"Disable 2FA": "Tắt xác thực 2 lớp (2FA)",
"2FA Settings": "Cài đặt xác thực 2 lớp (2FA)",
@@ -355,7 +355,6 @@
"Discard": "Bỏ",
"Cancel": "Hủy",
"Powered by": "Được cung cấp bởi",
- "shrinkDatabaseDescription": "Khởi chạy database VACCUM cho SQLite. Nếu database được tạo sau version 1.10.0, AUTO_VACCUM đã được bật sẵn, hành động này không cần thiết.",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API Username (incl. webapi_ prefix)",
"serwersmsAPIPassword": "API Password",
@@ -451,7 +450,7 @@
"Issuer:": "Issuer:",
"Fingerprint:": "Fingerprint:",
"No status pages": "No status pages",
- "Domain Name Expiry Notification": "Cảnh báo hạn hạn Domain Name",
+ "Domain Name Expiry Notification": "Cảnh báo hết hạn tên miền",
"Proxy": "Proxy",
"Date Created": "Ngày khởi tạo",
"onebotHttpAddress": "OneBot HTTP Address",
@@ -504,7 +503,7 @@
"resendDisabled": "Vô hiệu hoá gửi phản hồi liên tục",
"resendEveryXTimes": "Gửi phản hồi mỗi {0} lần",
"setupDatabaseMariaDB": "Kết nối tới một cơ sở dữ liệu MariaDB bên ngoài. Bạn cần cấu hình thông tin kết nối cơ sở dữ liệu.",
- "setupDatabaseChooseDatabase": "Bạn muốn dùng cơ sở dữ liệu nào?",
+ "setupDatabaseChooseDatabase": "Bạn muốn dùng loại cơ sở dữ liệu nào?",
"setupDatabaseEmbeddedMariaDB": "Bạn không cần phải cài đặt bất cứ thứ gì. Docker image đã nhúng và cấu hình tự động cơ sở dữ liệu MariaDB cho bạn. Uptime Kuma sẽ kết nối tới cơ sở dữ liệu thông qua unix socket.",
"setupDatabaseSQLite": "Một tệp cơ sở dữ liệu đơn giản, được khuyên dùng cho quy mô triển khai nhỏ. Trước v2.0.0, Uptime Kuma sử dụng SQLite như là một cơ sở dữ liệu mặc định.",
"dbName": "Tên cơ sở dữ liệu",
@@ -522,5 +521,39 @@
"styleElapsedTime": "Thời gian đã qua dưới thanh trạng thái",
"styleElapsedTimeShowNoLine": "Hiển Thị (Không Dòng Kẻ)",
"styleElapsedTimeShowWithLine": "Hiển Thị (Có Dòng Kẻ)",
- "Request Timeout": "Yêu cầu hết hạn"
+ "Request Timeout": "Yêu cầu hết hạn",
+ "now": "hiện tại",
+ "Add a new expiry notification day": "Thêm ngày hết hạn",
+ "time ago": "đã qua {0} giây",
+ "There might be a typing error in the address.": "Có lỗi trong quá trình nhập địa chỉ",
+ "DockerHostRequired": "Vui lòng đặt Docker Host cho trang giám sát này",
+ "templateMsg": "Tin nhắn",
+ "-year": "-năm",
+ "filterActive": "Hoạt động",
+ "filterActivePaused": "Tạm dừng",
+ "Search monitored sites": "Tìm kiếm trang",
+ "Reset Token": "Thiết lập lại Token",
+ "Remove the expiry notification": "Xóa ngày hết hạn",
+ "API Username": "Tên người dùng API",
+ "Also check beta release": "Hãy kiểm tra bản beta",
+ "Check/Uncheck": "Chọn/Bỏ chọn",
+ "API Key": "mã API",
+ "Coming Soon": "Sắp tới",
+ "Query": "Tìm kiếm",
+ "Setup Docker Host": "Thiết lập máy chủ Docker",
+ "Connection Type": "Loại kết nối",
+ "Docker Daemon": "Trình nền docker",
+ "noDockerHostMsg": "Không tồn tại. Vui lòng thiết lập máy chủ Docker trước",
+ "Host URL": "URL Máy chủ",
+ "Footer Text": "Chân trang",
+ "Refresh Interval": "Tốc độ làm mới",
+ "Refresh Interval Description": "Trang status sẽ tự làm mới mỗi {0} giây",
+ "Connection String": "Chuỗi kết nối",
+ "settingsCertificateExpiry": "Ngày hết hạn chứng chỉ TLS",
+ "ignoreTLSErrorGeneral": "Bỏ qua lỗi TLS/SSL cho kết nối",
+ "Select": "Chọn",
+ "selectedMonitorCount": "Đã chọn: {0}",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "nhập hostname của server bạn muốn kết nối hoặc {localhost} nếu bạn muốn dùng {local_mta}",
+ "webhookBodyPresetOption": "Cài đặt sẵn",
+ "critical": "nguy kịch"
}
diff --git a/src/lang/xh.json b/src/lang/xh.json
index 0967ef424..29d4c0e1d 100644
--- a/src/lang/xh.json
+++ b/src/lang/xh.json
@@ -1 +1,7 @@
-{}
+{
+ "setupDatabaseEmbeddedMariaDB": "Akukho mfuneko yokuba usethe nantoni na. Lo mfanekiso weDocker sele uqulathe kwaye ulungiselele iMariaDB ngokuzenzekelayo. I-Uptime Kuma iya kuqhagamshela kule database nge-unix socket.",
+ "setupDatabaseChooseDatabase": "Ngowuphi umthombo wedatha ofuna ukuwusebenzisa?",
+ "setupDatabaseMariaDB": "Qhagamshela kwi-database yeMariaDB yangaphandle. Kuya kufuneka usethe ulwazi loqhagamshelo lwedathabase.",
+ "setupDatabaseSQLite": "I database elula, ecetyiswayo kusetyenziso oluncinci. Ngaphambi kwe v2.0.0, i-Uptime Kuma yayisebenzisa i-SQLite njenge database yomdibaniso.",
+ "settingUpDatabaseMSG": "Ukumisela i-database. Kungathatha ixesha, nceda ube nomonde."
+}
diff --git a/src/lang/zh-CN.json b/src/lang/zh-CN.json
index 6c10a037d..88134e3d8 100644
--- a/src/lang/zh-CN.json
+++ b/src/lang/zh-CN.json
@@ -117,11 +117,11 @@
"New Password": "新密码",
"Repeat New Password": "重复新密码",
"Update Password": "更新密码",
- "Disable Auth": "禁用身份验证",
- "Enable Auth": "启用身份验证",
+ "Disable Auth": "禁用登录验证",
+ "Enable Auth": "启用登录验证",
"disableauth.message1": "是否确定 {disableAuth}?",
"disable authentication": "取消登录验证",
- "disableauth.message2": "这是为 {intendThirdPartyAuth} 的用户提供的功能,如 Cloudflare Access。",
+ "disableauth.message2": "这是为 {intendThirdPartyAuth} (如 Cloudflare Access、Authelia 或其他认证方式)的用户提供的功能。",
"where you intend to implement third-party authentication": "您打算在哪里实施第三方身份验证",
"Please use this option carefully!": "请谨慎使用!",
"Logout": "退出",
@@ -341,7 +341,7 @@
"One record": "一条记录",
"steamApiKeyDescription": "要监控 Steam 游戏服务器,您需要 Steam Web-API 密钥。您可以在这里注册您的 API 密钥: ",
"Current User": "当前用户",
- "topic": "Topic",
+ "topic": "主题",
"topicExplanation": "要监控的 MQTT Topic",
"successMessage": "成功消息",
"successMessageExplanation": "视为成功的 MQTT 消息",
@@ -385,7 +385,6 @@
"Discard": "放弃",
"Cancel": "取消",
"Powered by": "本站使用",
- "shrinkDatabaseDescription": "触发 SQLite 数据库的 VACUUM 命令,如果您的数据库是在 1.10.0 版本之后创建的,则已启用 AUTO_VACUUM,不再需要此操作。",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API 用户名(包括 webapi_ 前缀)",
"serwersmsAPIPassword": "API 密码",
@@ -544,11 +543,11 @@
"pushoversounds pushover": "Pushover(默认)",
"pushoversounds bike": "自行车",
"pushoversounds bugle": "军号",
- "pushoversounds cashregister": "Cash Register",
+ "pushoversounds cashregister": "收银机",
"pushoversounds classical": "Classical",
"pushoversounds cosmic": "宇宙",
"pushoversounds falling": "Falling",
- "pushoversounds gamelan": "Gamelan",
+ "pushoversounds gamelan": "GameLAN",
"pushoversounds incoming": "Incoming",
"pushoversounds intermission": "Intermission",
"pushoversounds magic": "Magic",
@@ -780,7 +779,7 @@
"Badge Label Color": "徽章标签颜色",
"Show Clickable Link Description": "勾选后所有能访问本状态页的访客均可查看该监控项网址。",
"Show Clickable Link": "显示可点击的监控项链接",
- "Group": "组",
+ "Group": "分组",
"Monitor Group": "监控项组",
"Cannot connect to the socket server": "无法连接到后端服务器",
"Reconnecting...": "重连中……",
@@ -979,5 +978,147 @@
"smspartnerPhoneNumber": "手机号码",
"smspartnerApiurl": "你可以在此处找到你的 API 密钥:{0}",
"smspartnerSenderNameInfo": "不能使用特殊字符,字符数在 3 到 11 个之间",
- "smspartnerPhoneNumberHelptext": "号码必须使用国际通用格式,例如 {0}、{1}。多个号码必须使用 {2} 分隔"
+ "smspartnerPhoneNumberHelptext": "号码必须使用国际通用格式,例如 {0}、{1}。多个号码必须使用 {2} 分隔",
+ "threemaRecipientTypePhone": "电话号码",
+ "threemaRecipientTypeIdentityFormat": "8 位字符",
+ "threemaRecipientTypeIdentity": "Threema ID",
+ "threemaRecipientType": "收信人类型",
+ "threemaRecipient": "收件人",
+ "threemaApiAuthenticationSecret": "网关密钥",
+ "threemaSenderIdentityFormat": "8 位字符,通常以 * 开头",
+ "threemaSenderIdentity": "网关 ID",
+ "threemaRecipientTypeEmail": "邮件地址",
+ "threemaBasicModeInfo": "注:此通知类型所使用的 Threema 网关为基础模式(服务器端加密)。更多细节参见 {0}。",
+ "threemaRecipientTypePhoneFormat": "E.164 标准,不含前导 + 号",
+ "wayToGetThreemaGateway": "你可以在 {0} 注册 Threema 网关。",
+ "apiKeysDisabledMsg": "由于登录验证被禁用,API 密钥也被禁用。",
+ "now": "现在",
+ "Json Query Expression": "JSON 查询表达式",
+ "and": "与",
+ "cacheBusterParam": "添加参数 {0}",
+ "cacheBusterParamDescription": "随机生成一个参数以绕过缓存。",
+ "Community String": "SNMP 通讯字符串",
+ "snmpCommunityStringHelptext": "此字符串用作密码,以验证和控制对SNMP启用设备的访问。请将其与您的SNMP设备配置匹配。",
+ "Please enter a valid OID.": "请输入一个合法的 OID。",
+ "privateOnesenderDesc": "请确保电话号码有效。要向私人电话号码发送消息,格式形如:628123456789",
+ "wayToGetOnesenderUrlandToken": "你可以在 Onesender 网站获取地址和令牌。更多信息参见 {0}",
+ "signl4Docs": "你可以在此找到更多关于如何配置 SIGNL4 以及如何获取 SIGNL4 Webhook 地址的信息:{0}。",
+ "groupOnesenderDesc": "请确保分组 ID 有效。要向分组发送消息,格式形如:628123456789-342345",
+ "time ago": "{0} 之前",
+ "-year": "年",
+ "OID (Object Identifier)": "OID(对象标识符)",
+ "snmpOIDHelptext": "输入您想监控的传感器或状态的 OID。如果您不确定 OID 是什么,可以使用 MIB 浏览器或 SNMP 软件等网络管理工具进行查找。",
+ "Condition": "条件",
+ "SNMP Version": "SNMP 版本",
+ "Host Onesender": "Onesender 服务器",
+ "Token Onesender": "Onesender 令牌",
+ "Recipient Type": "收件人类型",
+ "Private Number": "私密号码",
+ "Add Remote Browser": "添加远程浏览器",
+ "OAuth2: Client Credentials": "OAuth2:客户端凭据",
+ "Authentication Method": "鉴权方式",
+ "Authorization Header": "鉴权请求头",
+ "Form Data Body": "表单数据请求体",
+ "OAuth Token URL": "OAuth 令牌地址",
+ "Client ID": "客户端 ID",
+ "Client Secret": "客户端秘钥",
+ "OAuth Scope": "OAuth 范围",
+ "New Group": "新分组",
+ "Group ID": "分组 ID",
+ "Group Name": "分组名称",
+ "Optional: Space separated list of scopes": "可选项:用空格分隔的范围列表",
+ "Go back to home page.": "返回到首页。",
+ "No tags found.": "未找到标签。",
+ "Lost connection to the socket server.": "与 socket 服务器的连接丢失。",
+ "Cannot connect to the socket server.": "无法连接到 socket 服务器。",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook 地址",
+ "Conditions": "条件",
+ "conditionAdd": "添加条件",
+ "conditionDelete": "删除条件",
+ "conditionAddGroup": "添加分组",
+ "conditionDeleteGroup": "删除分组",
+ "conditionValuePlaceholder": "值",
+ "equals": "相等",
+ "not equals": "不相等",
+ "contains": "包含",
+ "not contains": "不包含",
+ "starts with": "以此开头",
+ "not starts with": "不以此开头",
+ "ends with": "以此结尾",
+ "not ends with": "不以此结尾",
+ "less than": "少于",
+ "greater than": "多于",
+ "less than or equal to": "不多于",
+ "greater than or equal to": "不少于",
+ "record": "记录",
+ "jsonQueryDescription": "使用 JSON 查询解析并提取服务器 JSON 响应中的特定数据,或者,如果不期望得到 JSON 响应,则可使用 \"$\" 获取原始响应。然后将结果转为字符串并与期望值进行字符串比较。有关更多文档,请参阅 {0},亦可使用 {1} 来尝试查询。",
+ "shrinkDatabaseDescriptionSqlite": "触发 SQLite 数据库的 {vacuum} 命令。{auto_vacuum} 已经启用,但它不会像 {vacuum} 命令那样对数据库进行碎片整理,也不会重新打包各个数据库页面。",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "如需可被回复,请输入发送者 ID 或 E.164 格式的手机号码。",
+ "Copy": "复制",
+ "Debug": "Debug",
+ "CopyToClipboardSuccess": "已复制!",
+ "CopyToClipboardError": "无法复制到剪贴板:{error}",
+ "CurlDebugInfoProxiesUnsupported": "上述 {curl} 命令中的代理支持目前尚未实现。",
+ "docker networks": "Docker 网络",
+ "dns resolvers": "DNS 解析器",
+ "firewalls": "防火墙",
+ "Message format": "消息格式",
+ "Send rich messages": "发送富文本消息",
+ "Sound": "声音",
+ "Notification Channel": "通知频道",
+ "Bubble": "Bubble(气泡)",
+ "Reveal": "Reveal(揭示)",
+ "Harp": "Harp(竖琴)",
+ "Correct": "Correct(成功音)",
+ "Fail": "Fail(失败音)",
+ "Arcade": "Arcade(拱廊)",
+ "Alphanumerical string and hyphens only": "仅限字母、数字和连字符(-)",
+ "Custom sound to override default notification sound": "自定义声音,用以覆盖默认通知声音",
+ "Pop": "Pop(流行音乐)",
+ "Guitar": "Guitar(吉他)",
+ "Elevator": "Elevator(电梯)",
+ "Clear": "Clear(清除声)",
+ "Scifi": "Scifi(科幻)",
+ "Flute": "Flute(长笛)",
+ "Doorbell": "Doorbell(门铃)",
+ "The phone number of the recipient in E.164 format.": "收件人的 E.164 格式电话号码。",
+ "Can be found on:": "可在此找到:{0}",
+ "From": "发件人",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "即使设备处于专注模式,即时通知也会立即发送。",
+ "Time Sensitive (iOS Only)": "即时通知(仅 iOS 可用)",
+ "Money": "Money(钱)",
+ "CurlDebugInfoOAuth2CCUnsupported": "{curl} 不支持完整的 oauth 客户端凭证流。{newline}请获取承载令牌(bearer token)并通过 {oauth2_bearer} 选项传递。",
+ "CurlDebugInfo": "要调试监控项,您可以将该命令粘贴到您自己的或 uptime kuma 正在运行的机器的命令行终端中,并查看结果。{newiline}请注意网络差异,例如 {firewalls}、{dns_resolvers} 或 {docker_networks}。",
+ "ignoredTLSError": "TLS/SSL 错误已被忽略",
+ "SendGrid API Key": "SendGrid API 密钥",
+ "RabbitMQ Password": "RabbitMQ 密码",
+ "RabbitMQ Username": "RabbitMQ 用户名",
+ "rabbitmqNodesInvalid": "请使用 RabbitMQ 节点的完整 URL(即完全限定 URL,以 http 开头)。",
+ "rabbitmqNodesRequired": "请设置此监视项的节点。",
+ "rabbitmqNodesDescription": "输入 RabbitMQ 管理节点的 URL,包括协议和端口。例如:{0}",
+ "RabbitMQ Nodes": "RabbitMQ 管理节点",
+ "Separate multiple email addresses with commas": "用逗号分隔多个电子邮件地址",
+ "rabbitmqHelpText": "要使用此监控项,您需要在 RabbitMQ 设置中启用管理插件。有关更多信息,请参阅 {rabitmq_documentation}。",
+ "aboutSlackUsername": "更改消息发件人的显示名称。如果您想提及某人,请另行将其包含在友好名称中。",
+ "templateStatus": "状态",
+ "templateHostnameOrURL": "主机名或 URL",
+ "templateServiceName": "服务名",
+ "telegramUseTemplateDescription": "如果启用,该消息将使用自定义模板发送。",
+ "telegramUseTemplate": "使用自定义消息模板",
+ "wayToGetWahaSession": "在此会话中,WAHA 会向聊天 ID 发送通知。您可以在 WAHA 仪表板中找到它。",
+ "wayToGetWahaApiUrl": "你的 WAHA 实例 URL。",
+ "wahaChatId": "聊天 ID(电话号码 / 联系人 ID / 群组 ID)",
+ "wahaSession": "会话",
+ "Template Format": "模板格式",
+ "Message Template": "消息模板",
+ "Plain Text": "纯文本",
+ "wayToWriteWahaChatId": "包含国际区号但不含开头加号({0})的电话号码、联系人 ID({1})、组 ID({2})。通知将从 WAHA 会话发送到此聊天 ID。",
+ "wayToGetWahaApiKey": "API 密钥是你用于运行 WAHA 的 WHATSAPP_API_KEY 环境变量值。",
+ "telegramTemplateFormatDescription": "Telegram 允许在消息中使用不同的标记语言,具体细节请参见 Telegram {0}。",
+ "YZJ Webhook URL": "YZJ Webhook 地址",
+ "YZJ Robot Token": "YZJ 机器人令牌",
+ "telegramServerUrl": "(可选) 服务器 Url",
+ "telegramServerUrlDescription": "用以解除 Telegram 的机器人 API 限制或在封锁区域(中国、伊朗等)获得访问权限。获取更多信息,请点击 {0}。默认值:{1}",
+ "Font Twemoji by Twitter licensed under": "由 Twitter 制作的 Twemoji 字体根据此许可证授权"
}
diff --git a/src/lang/zh-HK.json b/src/lang/zh-HK.json
index f3b5069f0..9ecd5dd3a 100644
--- a/src/lang/zh-HK.json
+++ b/src/lang/zh-HK.json
@@ -47,7 +47,7 @@
"Retries": "重試數次確定為離線",
"retriesDescription": "重試多少次後才判定為離線及傳送通知。如數值為 0 會即判定為離線及傳送通知。",
"Advanced": "進階",
- "ignoreTLSError": "忽略 TLS/SSL 錯誤",
+ "ignoreTLSError": "忽略 HTTPS 網站的 TLS/SSL 錯誤",
"Upside Down Mode": "反轉模式",
"upsideDownModeDescription": "反轉狀態,如網址是可正常瀏覽,會被判定為 '離線/DOWN'",
"Max. Redirects": "跟隨重新導向 (Redirect) 的次數",
@@ -56,8 +56,8 @@
"acceptedStatusCodesDescription": "可多選",
"Save": "儲存",
"Notifications": "通知",
- "Not available, please setup.": "無法使用,需要設定",
- "Setup Notification": "設定通知",
+ "Not available, please setup.": "無法使用,需要設定。",
+ "Setup Notification": "設置通知",
"Light": "明亮",
"Dark": "暗黑",
"Auto": "自動",
@@ -82,7 +82,7 @@
"disableauth.message2": "這個功能是設計給已有{intendThirdPartyAuth}的用家,例如 Cloudflare Access。",
"where you intend to implement third-party authentication": "第三方認証",
"Please use this option carefully!": "請小心使用。",
- "Logout": "登出",
+ "Logout": "退出",
"notificationDescription": "新增後,你需要在監測器裡啟用。",
"Leave": "離開",
"I understand, please disable": "我明白,請取消登入認証",
@@ -92,7 +92,7 @@
"Username": "帳號",
"Password": "密碼",
"Remember me": "記住我",
- "Login": "登入",
+ "Login": "登錄",
"No Monitors, please": "沒有監測器,請",
"add one": "新增",
"Notification Type": "通知類型",
@@ -353,7 +353,6 @@
"Services": "服務",
"Discard": "捨棄",
"Cancel": "取消",
- "shrinkDatabaseDescription": "觸發 SQLite 的資料庫清理 (VACUUM)。如果您的資料庫是在 1.10.0 版本後建立,AUTO_VACUUM 已自動啟用,則無需此操作。",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API 使用者名稱 (包括 webapi_ 前綴)",
"serwersmsAPIPassword": "API 密碼",
@@ -386,7 +385,7 @@
"setAsDefaultProxyDescription": "預設情況下,新監測器將啟用此 Proxy。您仍可分別停用各監測器的 Proxy。",
"Maintenance": "維護",
"statusMaintenance": "維護中",
- "Enable DNS Cache": "啟用 DNS 快取",
+ "Enable DNS Cache": "(已棄用)啟用 DNS 快取",
"Enable": "啟用",
"Disable": "停用",
"Schedule maintenance": "計劃維護",
@@ -501,7 +500,7 @@
"Query": "Query",
"settingsCertificateExpiry": "TLS 証書到期",
"certificationExpiryDescription": "証書將於 X 天後到期時觸發 HTTPS 監測器通知:",
- "Setup Docker Host": "設定 Docker 主機",
+ "Setup Docker Host": "配置 Docker 宿主資訊",
"Connection Type": "連線方式",
"deleteDockerHostMsg": "您確定要為所有監測器刪除此 Docker 主機嗎?",
"socket": "Socket",
@@ -596,7 +595,7 @@
"wayToGetPagerDutyKey": "您可以前往 Service -> Service Directory -> (Select a service) -> Integrations -> Add integration 以取得。您可以搜尋 \"Events API V2\"。詳細資訊 {0}",
"Kook": "Kook",
"wayToGetKookBotToken": "到 {0} 創建應用並取得 Bot Token",
- "grpcMethodDescription": "Method 名稱將被轉換成 cammelCase 命名,如 sayHello、check 等。",
+ "grpcMethodDescription": "方法名會轉換為小駝峰格式,例如 sayHello、check 等等。",
"deleteMaintenanceMsg": "您確定要刪除此維護嗎?",
"dnsPortDescription": "DNS 伺服器 port。預設為 53。您可以隨時變更 port。",
"atLeastOneMonitor": "選擇至少一個受影響的監測器",
@@ -691,7 +690,7 @@
"Proxy server has authentication": "Proxy 伺服器啟用了驗證功能",
"Proxy Server": "Proxy 伺服器",
"Proxy Protocol": "Proxy 通訊協定",
- "Setup Proxy": "設定 Proxy",
+ "Setup Proxy": "設置代理",
"Topic": "Topic",
"Retry": "重試",
"High": "高",
@@ -738,7 +737,7 @@
"selectedMonitorCount": "已選:{0}",
"Check/Uncheck": "選取中/取消選取",
"telegramMessageThreadIDDescription": "(可選) Telegram 在超級群組使用的話題標識字串",
- "pushViewCode": "查看代碼",
+ "pushViewCode": "如何使用 Push 監控?(檢視程式碼)",
"pushOthers": "其他",
"webhookBodyCustomOption": "自定義內容",
"tailscalePingWarning": "如要使用 Tailscale Ping ,您需要以非 docker 方式安裝 Uptime Kuma,並在系統安裝 Tailscale 客戶端。",
@@ -755,5 +754,336 @@
"styleElapsedTimeShowNoLine": "顯示(不帶連接線)",
"styleElapsedTimeShowWithLine": "顯示(帶連接線)",
"Request Timeout": "請求超時",
- "timeoutAfter": "{0} 秒後為超時"
+ "timeoutAfter": "{0} 秒後為超時",
+ "settingUpDatabaseMSG": "正在設定資料庫。可能需要一段時間,請耐心等待。",
+ "Host URL": "主機網址",
+ "locally configured mail transfer agent": "本機設定的郵件傳輸代理",
+ "now": "現在",
+ "time ago": "{0} 之前",
+ "ignoreTLSErrorGeneral": "忽略連接中的TLS/SSL錯誤",
+ "liquidIntroduction": "可透過 Liquid 模板語言實現模板化。請參考 {0} 的使用說明。這些是可用的變數:",
+ "Reset Token": "重設代幣",
+ "shrinkDatabaseDescriptionSqlite": "觸發 SQLite 資料庫 {vacuum}。{auto_vacuum} 已經啟用,但這不會像 {vacuum} 指令那樣整理資料庫或重新包裝個別資料庫頁面。",
+ "statusPageSpecialSlugDesc": "特殊標題 {0}:當未提供標題時,將顯示此頁面",
+ "Add a new expiry notification day": "新增到期通知日",
+ "DockerHostRequired": "請設定此監視器的 Docker 主機。",
+ "and": "與",
+ "smtpLiquidIntroduction": "以下兩個欄位可透過 Liquid 模板語言進行模板化。請參考 {0} 的使用說明。這些是可用的變數:",
+ "Select message type": "選擇訊息類型",
+ "Create new forum post": "建立新的討論區文章",
+ "whatHappensAtForumPost": "建立新的論壇文章。這不會在現有的文章中發佈訊息。要在現有文章中發佈訊息,請使用 \"{option}\" 。",
+ "Search monitored sites": "搜尋受監控的網站",
+ "templateMsg": "通知訊息",
+ "templateMonitorJSON": "描述監視器的物件",
+ "templateLimitedToUpDownCertNotifications": "僅適用於上線/下線/證書到期通知",
+ "templateLimitedToUpDownNotifications": "僅適用於 上/下線 通知",
+ "Remove the expiry notification": "移除到期通知日",
+ "Refresh Interval": "刷新時間間隔",
+ "Refresh Interval Description": "狀態頁面會每隔 {0} 秒刷新一次全站",
+ "emailCustomisableContent": "可客製化內容",
+ "leave blank for default subject": "留空以使用默認主題",
+ "emailTemplateServiceName": "服務名",
+ "emailTemplateHostnameOrURL": "主機名稱或 URL",
+ "emailTemplateStatus": "狀態",
+ "emailTemplateMonitorJSON": "監視器物件的描述",
+ "emailTemplateMsg": "通知訊息內容",
+ "Send to channel": "傳送至頻道",
+ "postToExistingThread": "張貼到現有的主題/論壇文章",
+ "forumPostName": "論壇文章名稱",
+ "threadForumPostID": "主題 / 論壇文章 ID",
+ "wayToGetDiscordThreadId": "取得主題 / 論壇文章 id 與取得頻道 id 相似。閱讀更多如何取得id {0}",
+ "Channel access token (Long-lived)": "通道存取標記 (長效)",
+ "successKeywordExplanation": "將被視為成功的 MQTT 關鍵字",
+ "noDockerHostMsg": "無法使用。 請先設定 Docker 主機 。",
+ "ignoredTLSError": "已忽略 TLS/SSL 錯誤",
+ "-year": "-年",
+ "Json Query Expression": "Json 查詢表達式",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "請輸入您要連線的伺服器主機名稱 若要使用 {local_mta} 則輸入 {localhost}",
+ "RabbitMQ Nodes": "RabbitMQ 管理節點",
+ "jsonQueryDescription": "使用 JSON 查詢解析並提取伺服器 JSON 響應中的特定數據,或者,如果不期望得到 JSON 響應,則可使用 \"$\" 獲取原始響應。然後將結果轉為字符串並與期望值進行字符串比較。有關更多文檔,請參閱 {0},亦可使用 {1} 來嘗試查詢。",
+ "wayToGetKookGuildID": "在 Kook 設置中打開“開發者模式”,然後右鍵點擊頻道可獲取其 ID",
+ "Gateway Type": "網關類型",
+ "You can divide numbers with": "可用的數字分隔符包括",
+ "Base URL": "API 基礎地址",
+ "goAlertInfo": "GoAlert 是一個用於呼叫調度、自動匯報和通知(如 SMS 或語音呼叫)的開源應用程式。在正確的時間以正確的方式自動讓正確的人參與!{0}",
+ "goAlertIntegrationKeyInfo": "使用形如 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee 的通用 API 集成密鑰,通常是複製來的鏈接中的 token 參數值。",
+ "AccessKeyId": "AccessKey ID",
+ "SecretAccessKey": "AccessKey 密碼",
+ "PhoneNumbers": "電話號碼",
+ "TemplateCode": "TemplateCode",
+ "SignName": "SignName",
+ "Sms template must contain parameters: ": "短訊模板必須包含以下變量: ",
+ "Bark API Version": "Bark API 版本",
+ "Mentioning": "是否提及成員",
+ "Mention group": "提及 {group}",
+ "aboutSlackUsername": "更改消息發件人的顯示名稱。如果您想提及某人,請另行將其包含在友好名稱中。",
+ "smspartnerApiurl": "你可以在此處找到你的 API 密鑰:{0}",
+ "smspartnerPhoneNumber": "手機號碼",
+ "smspartnerPhoneNumberHelptext": "號碼必須使用國際通用格式,例如 {0}、{1}。多個號碼必須使用 {2} 分隔",
+ "smspartnerSenderName": "SMS 發件人名稱",
+ "smspartnerSenderNameInfo": "不能使用特殊字符,字符數在 3 到 11 個之間",
+ "Server URL should not contain the nfty topic": "伺服器地址不應包含 ntfy主題",
+ "PushDeer Server": "PushDeer 伺服器",
+ "pushDeerServerDescription": "留空則使用官方伺服器",
+ "pagertreeIntegrationUrl": "集成 URL 地址",
+ "pagertreeUrgency": "緊急程度",
+ "pagertreeSilent": "靜默",
+ "pagertreeCritical": "嚴重",
+ "pagertreeResolve": "自動解除",
+ "pagertreeDoNothing": "甚麼都不做",
+ "wayToGetPagerTreeIntegrationURL": "在 PagerTree 中創建 Uptime Kuma 集成後,複製端點 URL 到此處。在 {0} 查看詳情",
+ "lunaseaTarget": "目標",
+ "lunaseaDeviceID": "設備 ID",
+ "lunaseaUserID": "用戶 ID",
+ "ntfyAuthenticationMethod": "鑒權方式",
+ "ntfyPriorityHelptextAllEvents": "所有事件將使用最高優先級",
+ "ntfyPriorityHelptextAllExceptDown": "除了 {0} 類事件使用 {1} 優先級外,其他所有事件均使用該優先級",
+ "ntfyUsernameAndPassword": "用戶名和密碼",
+ "twilioAccountSID": "賬戶 SID",
+ "twilioApiKey": "API Key(可選)",
+ "twilioAuthToken": "鑒權 Token / API Key Secret",
+ "twilioFromNumber": "發信號碼",
+ "twilioToNumber": "收信號碼",
+ "Monitor Setting": "{0} 監控項設置",
+ "Show Clickable Link": "顯示可點擊的監控項鍊接",
+ "Show Clickable Link Description": "勾選後所有能訪問本狀態頁的訪客均可查看該監控項網址。",
+ "Open Badge Generator": "打開徽章生成器",
+ "Badge Generator": "{0} 徽章生成器",
+ "Badge Type": "徽章類型",
+ "Badge Duration (in hours)": "徽章時間範圍(以小時為單位)",
+ "Badge Label": "徽章標籤",
+ "Badge Prefix": "徽章內容前綴",
+ "Badge Suffix": "徽章內容後綴",
+ "Badge Label Color": "徽章標籤顏色",
+ "Badge Color": "徽章內容顏色",
+ "Badge Label Prefix": "徽章標籤前綴",
+ "Badge Preview": "徽章預覽",
+ "Badge Label Suffix": "徽章標籤後綴",
+ "Badge Up Color": "正常狀態下徽章顏色",
+ "Badge Down Color": "故障狀態下徽章顏色",
+ "Badge Pending Color": "重試中狀態下徽章顏色",
+ "Badge Maintenance Color": "維護狀態下徽章顏色",
+ "Badge Warn Color": "警告狀態下徽章顏色",
+ "Badge Warn Days": "徽章預警天數",
+ "Badge Down Days": "故障狀態所需剩餘天數",
+ "Badge Style": "徽章樣式",
+ "Badge value (For Testing only.)": "徽章內容(僅供測試)",
+ "Badge URL": "徽章網址",
+ "Group": "分組",
+ "Monitor Group": "監控項組",
+ "monitorToastMessagesLabel": "監控項的彈窗通知",
+ "monitorToastMessagesDescription": "監控項的彈窗通知的自動關閉用時,以秒為單位。設置為 -1 將禁用彈窗通知的自動關閉功能,設置為 0 將完全禁用彈窗通知功能。",
+ "toastErrorTimeout": "失敗類彈窗通知的自動關閉用時",
+ "Enter the list of brokers": "輸入緩存代理(broker)列表",
+ "Press Enter to add broker": "按回車鍵添加緩存代理(broker)",
+ "authInvalidToken": "無效的令牌。",
+ "Enable Kafka SSL": "啟用 Kafka SSL 功能",
+ "Enable Kafka Producer Auto Topic Creation": "啟用 Kafka 生成者(Producer)自動創建主題(Topic)功能",
+ "Kafka SASL Options": "Kafka SASL 選項",
+ "Pick a SASL Mechanism...": "選擇一種 SASL 鑒權方式……",
+ "Authorization Identity": "授權實體(Authorization Identity)",
+ "Secret AccessKey": "訪問密鑰(Secret AccessKey)",
+ "Session Token": "會話令牌(Session Token)",
+ "noGroupMonitorMsg": "暫無可用,請先創建一個監控項組。",
+ "Close": "關閉",
+ "Request Body": "請求體",
+ "wayToGetFlashDutyKey": "您可以進入 協作空間 -> (選擇一個 協作空間) -> 集成數據 -> 新增一個集成 頁面,添加“Uptime Kuma”集成獲得一個推送地址,複製地址中的 Integration Key,更多資訊前往{0}",
+ "FlashDuty Severity": "嚴重程度",
+ "nostrRelays": "Nostr relay 服務",
+ "nostrRelaysHelp": "Relay 服務地址,每行一個",
+ "nostrSender": "發送者私鑰(nsec 格式)",
+ "nostrRecipients": "接收者公鑰(npub 格式)",
+ "nostrRecipientsHelp": "npub 格式,每行一個",
+ "showCertificateExpiry": "顯示證書有效期",
+ "noOrBadCertificate": "無證書或證書錯誤",
+ "cacheBusterParam": "添加參數 {0}",
+ "cacheBusterParamDescription": "隨機生成一個參數以繞過緩存。",
+ "gamedigGuessPort": "Gamedig: 自動檢測端口號",
+ "gamedigGuessPortDescription": "Valve 伺服器查詢協議使用的端口可能與客戶端端口不同。如果監控器無法連接到伺服器,請嘗試此方法。",
+ "Message format": "消息格式",
+ "Send rich messages": "發送富文本消息",
+ "Bitrix24 Webhook URL": "Bitrix24 Webhook 地址",
+ "wayToGetBitrix24Webhook": "你可以按以下步驟創建一個 webhook:{0}",
+ "bitrix24SupportUserID": "輸入你在 Bitrix24 的用戶 ID。你可以在你的用戶個人資料頁找到你的用戶 ID。",
+ "authUserInactiveOrDeleted": "該用戶被禁用或刪除。",
+ "authIncorrectCreds": "錯誤的用戶名或密碼。",
+ "2faAlreadyEnabled": "2FA 已經啟用。",
+ "2faEnabled": "已成功啟用 2FA。",
+ "2faDisabled": "已成功禁用 2FA。",
+ "successAdded": "已成功添加。",
+ "successResumed": "已成功恢復。",
+ "successPaused": "已成功暫停。",
+ "successDeleted": "已成功刪除。",
+ "successEdited": "已成功編輯。",
+ "successAuthChangePassword": "已成功更新密碼。",
+ "successBackupRestored": "已成功恢復備份。",
+ "successDisabled": "已成功禁用。",
+ "tagNotFound": "標籤未找到。",
+ "foundChromiumVersion": "已找到 Chromium/Chrome。版本:{0}",
+ "Remote Browsers": "遠程瀏覽器",
+ "Remote Browser": "遠程瀏覽器",
+ "Add a Remote Browser": "添加一個遠程瀏覽器",
+ "Remote Browser not found!": "未找到遠程瀏覽器!",
+ "remoteBrowsersDescription": "遠程瀏覽器可用以代替本地 Chromium 瀏覽器。您可使用類似於 browserless.io 的服務,或者自行運行一個類似服務",
+ "self-hosted container": "自託管容器",
+ "remoteBrowserToggle": "默認情況下 Chromium 運行於 Uptime Kuma 所在容器內。您可以通過切換此開關來使用遠程瀏覽器。",
+ "useRemoteBrowser": "使用遠程瀏覽器",
+ "deleteRemoteBrowserMessage": "您確定要刪除此遠程瀏覽器嗎,這會影響所有監控項?",
+ "GrafanaOncallUrl": "Grafana Oncall 服務 URL",
+ "Browser Screenshot": "瀏覽器截圖",
+ "Command": "命令",
+ "mongodbCommandDescription": "對資料庫運行 MongoDB 命令。有關可用命令的資訊,請查閱 {documentation}",
+ "wayToGetSevenIOApiKey": "訪問 app.seven.io > 開發人員 > api 密鑰 > 綠色添加按鈕下的儀錶板",
+ "senderSevenIO": "發信人號碼或名稱",
+ "receiverSevenIO": "收信人號碼",
+ "receiverInfoSevenIO": "如果接收號碼不在德國,您必須在號碼前面添加國家代碼(例如,對於來自美國的國家代碼 1,請使用 117612121212 而不是 017612121212)",
+ "apiKeySevenIO": "SevenIO API 密鑰",
+ "wayToWriteWhapiRecipient": "可用格式為不含 + 號的國際通用格式手機號碼({0})、聯繫人 ID({1})或組 ID({2})。",
+ "wayToGetWhapiUrlAndToken": "您可以通過進入您想要的頻道來獲取 API URL 和令牌:{0}",
+ "whapiRecipient": "手機號碼 / 聯繫人 ID / 組 ID",
+ "API URL": "API 地址",
+ "What is a Remote Browser?": "甚麼是遠程瀏覽器?",
+ "wayToGetHeiiOnCallDetails": "如需了解如何獲取 Trigger ID 和 API 密鑰,請訪問 {documentation}",
+ "documentationOf": "{0} 文檔",
+ "callMeBotGet": "您可以在此處填寫您生成的用於 {0}、{1} 或 {2} 的端點。 請注意您可能會受到速率限制。 速率限制被推測為:{3}(僅供參考)",
+ "gtxMessagingApiKeyHint": "你可以在此找到你的 API 密鑰:My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "發件人電話號碼 / 傳輸路徑起始地址(TPOA)",
+ "gtxMessagingFromHint": "在手機上,收件人會看到 TPOA 地址作為消息的發送者。TPOA 允許的格式包括:至多11個字母或數字、短代碼、當地長代碼或國際號碼({e164}、{e212} 或 {e214} 格式)",
+ "To Phone Number": "收件人電話號碼",
+ "gtxMessagingToHint": "國際通用格式,需要前導 \"+\" ({e164}、{e212} 或 {e214} 格式)",
+ "Originator type": "發件人類型",
+ "Alphanumeric (recommended)": "字符或數字類型(推薦)",
+ "Telephone number": "手機號碼",
+ "cellsyntOriginatortypeAlphanumeric": "字符或數字類型(最多 11 個字母或數字)。收件人無法向此號碼回覆消息。",
+ "cellsyntOriginatortypeNumeric": "數字類型(最多 15 位數)需使用國際通用格式,不以 00+國家代碼開頭,例如若要使用英國的號碼 07920 110 000 需填寫 447920110000。收件人可向此號碼回覆消息。",
+ "Originator": "發件人",
+ "Destination": "收件人",
+ "Allow Long SMS": "允許長消息",
+ "cellsyntSplitLongMessages": "長消息會被切分為至多 6 段,每段至多 153 個字符,總共至多 918 個字符。",
+ "max 15 digits": "最多 15 位數字",
+ "max 11 alphanumeric characters": "最多 11 個字母或數字",
+ "Community String": "SNMP 通訊字符串",
+ "snmpCommunityStringHelptext": "此字符串用作密碼,以驗證和控制對SNMP啟用設備的訪問。請將其與您的SNMP設備配置匹配。",
+ "OID (Object Identifier)": "OID(對象標識符)",
+ "snmpOIDHelptext": "輸入您想監控的傳感器或狀態的 OID。如果您不確定 OID 是甚麼,可以使用 MIB 瀏覽器或 SNMP 軟件等網絡管理工具進行查找。",
+ "Condition": "條件",
+ "SNMP Version": "SNMP 版本",
+ "Please enter a valid OID.": "請輸入一個合法的 OID。",
+ "wayToGetThreemaGateway": "你可以在 {0} 註冊 Threema 網關。",
+ "threemaRecipientType": "收信人類型",
+ "threemaRecipientTypeIdentity": "Threema ID",
+ "threemaRecipientTypePhone": "電話號碼",
+ "threemaRecipientTypePhoneFormat": "E.164 標準,不含前導 + 號",
+ "threemaRecipientTypeEmail": "郵件地址",
+ "threemaSenderIdentity": "網關 ID",
+ "threemaSenderIdentityFormat": "8 位字符,通常以 * 開頭",
+ "threemaApiAuthenticationSecret": "網關密鑰",
+ "threemaBasicModeInfo": "註:此通知類型所使用的 Threema 網關為基礎模式(伺服器端加密)。更多細節參見 {0}。",
+ "apiKeysDisabledMsg": "由於登錄驗證被禁用,API 密鑰也被禁用。",
+ "Host Onesender": "Onesender 伺服器",
+ "Token Onesender": "Onesender 令牌",
+ "Recipient Type": "收件人類型",
+ "Private Number": "私密號碼",
+ "privateOnesenderDesc": "請確保電話號碼有效。要向私人電話號碼發送消息,格式形如:628123456789",
+ "groupOnesenderDesc": "請確保分組 ID 有效。要向分組發送消息,格式形如:628123456789-342345",
+ "Group ID": "分組 ID",
+ "wayToGetOnesenderUrlandToken": "你可以在 Onesender 網站獲取地址和令牌。更多資訊參見 {0}",
+ "Add Remote Browser": "添加遠程瀏覽器",
+ "New Group": "新分組",
+ "Group Name": "分組名稱",
+ "OAuth2: Client Credentials": "OAuth2:客戶端憑據",
+ "Authentication Method": "鑒權方式",
+ "Authorization Header": "鑒權請求頭",
+ "Form Data Body": "表單數據請求體",
+ "OAuth Token URL": "OAuth 令牌地址",
+ "Client ID": "客戶端 ID",
+ "Client Secret": "客戶端祕鑰",
+ "OAuth Scope": "OAuth 範圍",
+ "Optional: Space separated list of scopes": "可選項:用空格分隔的範圍列表",
+ "Go back to home page.": "返回到首頁。",
+ "No tags found.": "未找到標籤。",
+ "Lost connection to the socket server.": "與 socket 伺服器的連接丟失。",
+ "Cannot connect to the socket server.": "無法連接到 socket 伺服器。",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook 地址",
+ "signl4Docs": "你可以在此找到更多關於如何配置 SIGNL4 以及如何獲取 SIGNL4 Webhook 地址的資訊:{0}。",
+ "conditionAdd": "添加條件",
+ "conditionDelete": "刪除條件",
+ "conditionAddGroup": "添加分組",
+ "conditionDeleteGroup": "刪除分組",
+ "conditionValuePlaceholder": "值",
+ "equals": "相等",
+ "not equals": "不相等",
+ "contains": "包含",
+ "not contains": "不包含",
+ "starts with": "以此開頭",
+ "not starts with": "不以此開頭",
+ "ends with": "以此結尾",
+ "not ends with": "不以此結尾",
+ "less than": "少於",
+ "greater than": "多於",
+ "less than or equal to": "不多於",
+ "greater than or equal to": "不少於",
+ "record": "記錄",
+ "Notification Channel": "通知頻道",
+ "Sound": "聲音",
+ "Alphanumerical string and hyphens only": "僅限字母、數字和連字符(-)",
+ "Arcade": "Arcade(拱廊)",
+ "Correct": "Correct(成功音)",
+ "Fail": "Fail(失敗音)",
+ "Harp": "Harp(豎琴)",
+ "Reveal": "Reveal(揭示)",
+ "Bubble": "Bubble(氣泡)",
+ "Doorbell": "Doorbell(門鈴)",
+ "Flute": "Flute(長笛)",
+ "Money": "Money(錢)",
+ "Scifi": "Scifi(科幻)",
+ "Clear": "Clear(清除聲)",
+ "Elevator": "Elevator(電梯)",
+ "Guitar": "Guitar(結他)",
+ "Pop": "Pop(流行音樂)",
+ "Custom sound to override default notification sound": "自定義聲音,用以覆蓋默認通知聲音",
+ "Time Sensitive (iOS Only)": "即時通知(僅 iOS 可用)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "即使設備處於專注模式,即時通知也會立即發送。",
+ "From": "發件人",
+ "Can be found on:": "可在此找到:{0}",
+ "The phone number of the recipient in E.164 format.": "收件人的 E.164 格式電話號碼。",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "如需可被回復,請輸入發送者 ID 或 E.164 格式的手機號碼。",
+ "rabbitmqNodesDescription": "輸入 RabbitMQ 管理節點的 URL,包括協議和端口。例如:{0}",
+ "rabbitmqNodesRequired": "請設置此監視項的節點。",
+ "rabbitmqNodesInvalid": "請使用 RabbitMQ 節點的完整 URL(即完全限定 URL,以 http 開頭)。",
+ "RabbitMQ Username": "RabbitMQ 用戶名",
+ "RabbitMQ Password": "RabbitMQ 密碼",
+ "rabbitmqHelpText": "要使用此監控項,您需要在 RabbitMQ 設置中啟用管理插件。有關更多資訊,請參閱 {rabitmq_documentation}。",
+ "SendGrid API Key": "SendGrid API 密鑰",
+ "Separate multiple email addresses with commas": "用逗號分隔多個電子郵件地址",
+ "templateHeartbeatJSON": "描述心跳資訊的對象",
+ "successKeyword": "“成功”關鍵詞",
+ "emailCustomBody": "自定義正文",
+ "leave blank for default body": "留空以使用默認正文",
+ "emailTemplateHeartbeatJSON": "描述心跳資訊的對象",
+ "emailTemplateLimitedToUpDownNotification": "僅適用於“正常”、“故障”類心跳,否則為空",
+ "e.g. {discordThreadID}": "例如 {discordThreadID}",
+ "Your User ID": "你的用戶 ID",
+ "promosmsAllowLongSMS": "允許長的短訊",
+ "Notify Channel": "通知該頻道",
+ "aboutNotifyChannel": "勾選“通知該頻道”,會令該頻道內所有成員都收到一條桌面端或移動端通知,無論其狀態是在線或離開。",
+ "setup a new monitor group": "創建一個新的監控項組",
+ "openModalTo": "打開一個新窗口以{0}",
+ "Add a domain": "添加一個域名",
+ "Remove domain": "移除域名 {0}",
+ "successEnabled": "已成功啟用。",
+ "Conditions": "條件",
+ "Kafka Topic Name": "Kafka 主題名稱",
+ "Kafka Producer Message": "Kafka 生成者(Producer)消息",
+ "Mechanism": "鑒權方式",
+ "toastSuccessTimeout": "成功類彈窗通知的自動關閉用時",
+ "pushoverMessageTtl": "消息存活時間(秒)",
+ "Don't mention people": "不提及任何人",
+ "Kafka Brokers": "Kafka 緩存代理(Broker)",
+ "AccessKey Id": "密鑰 ID(AccessKey Id)",
+ "cellsyntOriginator": "在收件人處作為消息發送者顯示。允許的內容取決於發件人類型。",
+ "cellsyntDestination": "收件人的手機號碼需要使用以 00+國家代碼開頭的國際通用格式,例如若要發給英國的號碼 07920 110 000 需使用 00447920110000 作為收件人手機號碼(至多17位數)。需發送給多個收件人手機號碼時可使用英文逗號分隔,每次請求最 多250 00個收件人手機號碼。",
+ "threemaRecipient": "收件人",
+ "threemaRecipientTypeIdentityFormat": "8 位字符"
}
diff --git a/src/lang/zh-TW.json b/src/lang/zh-TW.json
index a528a89d4..b894f1298 100644
--- a/src/lang/zh-TW.json
+++ b/src/lang/zh-TW.json
@@ -239,7 +239,7 @@
"wayToGetDiscordURL": "您可以前往伺服器設定 (Server Settings) -> 整合 (Integrations) -> 檢視 Webhooks (View Webhooks) -> 新 Webhook (New Webhook) 以取得新的 Webhook",
"Bot Display Name": "機器人顯示名稱",
"Prefix Custom Message": "前綴自訂訊息",
- "Hello @everyone is...": "Hello {'@'}everyone is…",
+ "Hello @everyone is...": "哈囉 {'@'} 每個人都是…",
"teams": "Microsoft Teams",
"Webhook URL": "Webhook 網址",
"wayToGetTeamsURL": "您可以前往此頁面以瞭解如何建立 Webhook 網址 {0}。",
@@ -304,7 +304,7 @@
"lineDevConsoleTo": "Line 開發者控制檯 - {0}",
"Basic Settings": "基本設定",
"User ID": "使用者 ID",
- "Messaging API": "Messaging API",
+ "Messaging API": "即時通訊 API",
"wayToGetLineChannelToken": "首先,前往 {0},建立 provider 和 channel (Messaging API)。接著您就可以從上面提到的選單項目中取得頻道存取權杖及使用者 ID。",
"Icon URL": "圖示網址",
"aboutIconURL": "您可以在 \"圖示網址\" 中提供圖片網址以覆蓋預設個人檔案圖片。若已設定 Emoji 圖示,將忽略此設定。",
@@ -318,7 +318,7 @@
"promosmsSMSSender": "簡訊寄件人名稱:預先註冊的名稱或以下的預設名稱:InfoSMS、SMS Info、MaxSMS、INFO、SMS",
"Feishu WebHookUrl": "飛書 WebHook 網址",
"matrixHomeserverURL": "Homeserver 網址 (開頭為 http(s)://,結尾可能帶連接埠)",
- "Internal Room Id": "Internal Room ID",
+ "Internal Room Id": "內部識別碼",
"matrixDesc1": "您可以在 Matrix 客戶端的房間設定中的進階選項找到 internal room ID。應該看起來像 !QMdRCpUIfLwsfjxye6:home.server。",
"matrixDesc2": "使用您自己的 Matrix 使用者存取權杖將賦予存取您的帳號和您加入的房間的完整權限。建議建立新使用者,並邀請至您想要接收通知的房間中。您可以執行 {0} 以取得存取權杖",
"Method": "方法",
@@ -334,7 +334,7 @@
"One record": "一項記錄",
"steamApiKeyDescription": "若要監測 Steam 遊戲伺服器,您將需要 Steam Web-API 金鑰。您可以在此註冊您的 API 金鑰: ",
"Current User": "目前使用者",
- "topic": "Topic",
+ "topic": "問題",
"topicExplanation": "要監測的 MQTT Topic",
"successMessage": "成功訊息",
"successMessageExplanation": "視為成功的 MQTT 訊息",
@@ -378,7 +378,6 @@
"Discard": "捨棄",
"Cancel": "取消",
"Powered by": "技術支援",
- "shrinkDatabaseDescription": "觸發 SQLite 的資料庫清理 (VACUUM)。如果您的資料庫是在 1.10.0 版本後建立,AUTO_VACUUM 已自動啟用,則無需此操作。",
"serwersms": "SerwerSMS.pl",
"serwersmsAPIUser": "API 使用者名稱 (包括 webapi_ 前綴)",
"serwersmsAPIPassword": "API 密碼",
@@ -433,24 +432,24 @@
"Certificate Chain": "憑證鏈結",
"Valid": "有效",
"Invalid": "無效",
- "AccessKeyId": "AccessKey ID",
+ "AccessKeyId": "標識使用者 ID",
"SecretAccessKey": "AccessKey 密碼",
- "PhoneNumbers": "PhoneNumbers",
- "TemplateCode": "TemplateCode",
- "SignName": "SignName",
+ "PhoneNumbers": "電話號碼",
+ "TemplateCode": "範例程式碼",
+ "SignName": "簽名",
"Sms template must contain parameters: ": "Sms 範本必須包含參數: ",
"Bark Endpoint": "Bark 端點",
"Bark Group": "Bark 群組",
"Bark Sound": "Bark 鈴聲",
- "WebHookUrl": "WebHookUrl",
- "SecretKey": "SecretKey",
+ "WebHookUrl": "WebHookURL",
+ "SecretKey": "對稱金鑰",
"For safety, must use secret key": "為了安全起見,必須使用秘密金鑰",
"Device Token": "裝置權杖",
"Platform": "平臺",
"Huawei": "華為",
"High": "高",
"Retry": "重試",
- "Topic": "Topic",
+ "Topic": "問題",
"WeCom Bot Key": "WeCom 機器人金鑰",
"Setup Proxy": "設定 Proxy",
"Proxy Protocol": "Proxy 通訊協定",
@@ -512,7 +511,7 @@
"Domain Names": "網域名稱",
"signedInDisp": "以 {0} 身分登入",
"signedInDispDisabled": "驗證已停用。",
- "RadiusSecret": "Radius Secret",
+ "RadiusSecret": "Radius 加密",
"RadiusSecretDescription": "客戶端與伺服器端的共享機密",
"RadiusCalledStationId": "被叫站 Id",
"RadiusCalledStationIdDescription": "被呼叫裝置的識別碼",
@@ -587,7 +586,7 @@
"Domain": "網域",
"Workstation": "工作站",
"disableCloudflaredNoAuthMsg": "您處於無驗證模式。無須輸入密碼。",
- "trustProxyDescription": "信任 'X-Forwarded-*' 標頭。如果您想要取得正確的客戶端 IP,且您的 Uptime Kuma 架設於 Nginx 或 Apache 後方,您應啟用此選項。",
+ "trustProxyDescription": "信任 'X-Forwarded-*' 標頭。如果您想要取得正確的客戶端 IP,且您的 Uptime Kuma 架設於 Nginx 或 Apache 後方,您應該啟用此選項。",
"wayToGetLineNotifyToken": "您可以從 {0} 取得存取權杖",
"Examples": "範例",
"Home Assistant URL": "Home Assistant 網址",
@@ -611,7 +610,7 @@
"backupRecommend": "請直接備份磁碟區或 ./data/ 資料夾。",
"Optional": "選填",
"squadcast": "Squadcast",
- "SendKey": "SendKey",
+ "SendKey": "傳送金鑰",
"SMSManager API Docs": "SMSManager API 文件 ",
"Gateway Type": "閘道類型",
"SMSManager": "SMSManager",
@@ -657,7 +656,7 @@
"Date and Time": "時間和日期",
"DateTime Range": "DateTime 範圍",
"Strategy": "策略",
- "Free Mobile User Identifier": "Free Mobile User Identifier",
+ "Free Mobile User Identifier": "免費的行動用戶識別碼",
"Free Mobile API Key": "Free Mobile API 金鑰",
"Enable TLS": "啟用 TLS",
"Proto Service Name": "Proto 服務名稱",
@@ -700,8 +699,8 @@
"Clone Monitor": "複製監控項目",
"Clone": "複製",
"cloneOf": "從 {0} 複製",
- "uninstalling": "移除中",
- "notificationRegional": "地區限定",
+ "uninstalling": "正在卸載",
+ "notificationRegional": "地區性的",
"wayToGetZohoCliqURL": "您可以前往此頁面以瞭解如何建立 webhook 網址 {0}。",
"wayToGetKookBotToken": "到 {0} 建立應用程式並取得 bot token",
"dataRetentionTimeError": "保留期限必須為 0 或正數",
@@ -712,11 +711,11 @@
"ntfyUsernameAndPassword": "使用者名稱和密碼",
"ntfyAuthenticationMethod": "認證類型",
"API Keys": "API 金鑰",
- "Expiry": "到期",
+ "Expiry": "過期",
"apiKey-inactive": "無效",
- "apiKey-expired": "過期",
+ "apiKey-expired": "已過期",
"Reconnecting...": "重新連線...",
- "Expiry date": "到期時間",
+ "Expiry date": "過期時間",
"Don't expire": "不要過期",
"Continue": "繼續",
"Add Another": "新增作者",
@@ -744,7 +743,7 @@
"Expires": "過期",
"disableAPIKeyMsg": "您確定要停用這個 API 金鑰?",
"Monitor Setting": "{0} 的監視器設定",
- "Guild ID": "Guild ID",
+ "Guild ID": "公會 ID",
"chromeExecutableDescription": "如果您使用 Docker 且未安裝 Chromium,可能要花數分鐘安裝後才能顯示測試結果。安裝會使用 1GB 的硬碟空間。",
"promosmsAllowLongSMS": "允許長 SMS 訊息",
"Home": "首頁",
@@ -779,7 +778,7 @@
"pagertreeUrgency": "緊急程度",
"Expected Value": "預期值",
"Json Query": "JSON 查詢",
- "setupDatabaseChooseDatabase": "您想使用什麼資料庫?",
+ "setupDatabaseChooseDatabase": "您想使用哪個資料庫?",
"setupDatabaseEmbeddedMariaDB": "您不需要做任何設定。此 Docker 映像檔已內建並設定了 MariaDB。Uptime Kuma 將透過 unix socket 連線到該資料庫。",
"setupDatabaseMariaDB": "連線到外部 MariaDB 資料庫。 需要設定資料庫連線資訊。",
"dbName": "資料庫名稱",
@@ -788,7 +787,7 @@
"twilioApiKey": "API 金鑰 (選用)",
"Badge Preview": "徽章預覽",
"pushViewCode": "如何使用 Push 監控?(檢視程式碼)",
- "pushOthers": "其他",
+ "pushOthers": "其它",
"programmingLanguages": "程式語言",
"twilioToNumber": "目標號碼",
"Badge Duration (in hours)": "徽章持續時間(小時)",
@@ -865,7 +864,7 @@
"tagNotFound": "找不到標籤。",
"foundChromiumVersion": "找到 Chromium/Chrome。版本:{0}",
"setupDatabaseSQLite": "一個簡單的資料庫檔案,適用於小規模部署。在 v2.0.0 之前,Uptime Kuma 預設使用 SQLite 作為資料庫。",
- "Pick a SASL Mechanism...": "選擇一個 SASL 機制...",
+ "Pick a SASL Mechanism...": "選擇一個 SASL 機制...…",
"Authorization Identity": "授權身份",
"AccessKey Id": "存取金鑰 ID",
"Secret AccessKey": "秘密存取金鑰",
@@ -898,5 +897,193 @@
"self-hosted container": "自架容器",
"useRemoteBrowser": "使用遠端瀏覽器",
"Add a domain": "新增網域",
- "Remove domain": "移除網域 '{0}'"
+ "Remove domain": "移除網域 '{0}'",
+ "settingUpDatabaseMSG": "設定資料庫中,可能需要一段時間,請耐心等待。",
+ "smspartnerApiurl": "您可以在儀表板上的 {0} 找到您的 API 金鑰",
+ "smspartnerPhoneNumberHelptext": "號碼必須是國際格式 {0}, {1}。多個號碼必須用 {2} 分隔",
+ "statusPageSpecialSlugDesc": "特殊 slug {0}: 當未提供 slug 時,將顯示此頁面",
+ "Add a new expiry notification day": "新增到期通知日",
+ "Remove the expiry notification": "移除到期通知日",
+ "Mentioning": "提及",
+ "Select message type": "選擇訊息類型",
+ "Send to channel": "發送至頻道",
+ "Create new forum post": "新增論壇貼文",
+ "postToExistingThread": "發佈到現有的討論串/論壇貼文",
+ "forumPostName": "論壇貼文名稱",
+ "threadForumPostID": "討論串 / 論壇貼文 ID",
+ "e.g. {discordThreadID}": "例如: {discordThreadID}",
+ "Channel access token (Long-lived)": "頻道存取權杖(長期有效)",
+ "Your User ID": "你的 user ID",
+ "Host URL": "主機 URL",
+ "Refresh Interval": "更新間隔",
+ "ignoreTLSErrorGeneral": "忽略連接中的TLS/SSL錯誤",
+ "Search monitored sites": "搜索監控中的站點",
+ "openModalTo": "以 {0} 打開一個新的對話框",
+ "locally configured mail transfer agent": "本機端的郵件傳輸代理",
+ "Either enter the hostname of the server you want to connect to or localhost if you intend to use a locally configured mail transfer agent": "請輸入您要連接的伺服器主機名稱,或者輸入 {localhost} (如果您打算使用 {local_mta})",
+ "documentationOf": "{0} 文件",
+ "threemaRecipientType": "收件者類型",
+ "threemaRecipientTypeIdentityFormat": "8 個字元",
+ "threemaRecipientTypePhone": "電話號碼",
+ "threemaSenderIdentityFormat": "8 個字元,通常以 * 開頭",
+ "threemaRecipient": "收件者",
+ "mongodbCommandDescription": "對資料庫執行 MongoDB 指令。有關可用指令的資訊,請參閱 {documentation}",
+ "threemaRecipientTypeEmail": "電子郵件地址",
+ "Originator type": "發送者類型",
+ "smspartnerPhoneNumber": "電話號碼",
+ "Allow Long SMS": "允許長 SMS",
+ "cellsyntSplitLongMessages": "長訊息最多會被分成 6 段,每段最多 153 個字元,總共最多 918 字元。",
+ "max 15 digits": "最多 15 位數字",
+ "What is a Remote Browser?": "什麼是遠端瀏覽器?",
+ "Bitrix24 Webhook URL": "Bitrix24 WebHook URL",
+ "wayToGetBitrix24Webhook": "您可以按照 {0} 的步驟創建一個 Webhook",
+ "apiKeySevenIO": "SevenIO API 金鑰",
+ "ntfyPriorityHelptextAllEvents": "所有事件都以最高優先級發送",
+ "Telephone number": "手機號碼",
+ "Destination": "收件人",
+ "smspartnerSenderName": "SMS 寄件人名稱",
+ "setup a new monitor group": "設定新的監控群組",
+ "jsonQueryDescription": "使用 JSON 查詢從伺服器的 JSON 回應中解析並擷取特定資料,或者如果不需要 JSON,則使用“$”作為預設回應。然後將結果與字串形式的預期值進行比較。請參閱 {0} 以了解文件並使用 {1} 來測試查詢。",
+ "shrinkDatabaseDescriptionSqlite": "SQLite 的觸發器資料庫 {vacuum}。 {auto_vacuum} 已啟用,但這不會對資料庫進行片段整理,也不會像 {vacuum} 指令那樣重新打包各個資料庫頁面。",
+ "and": "和",
+ "whatHappensAtForumPost": "建立一個新的論壇文章。這不會在現有文章中發布。要在現有文章中發文,請使用“{option}”",
+ "aboutSlackUsername": "變更訊息寄件者的顯示名稱。如果您想提及他人,請將其包含在好友的名稱中。",
+ "remoteBrowsersDescription": "遠端瀏覽器是本機運行 Chromium 的替代方案。使用 browserless.io 等服務進行設定或連接到您自己的服務",
+ "Money": "錢",
+ "successKeyword": "成功關鍵字",
+ "successKeywordExplanation": "MQTT 關鍵字將被視為成功",
+ "Refresh Interval Description": "狀態頁面將每 {0} 秒刷新一次完整網站",
+ "wayToGetDiscordThreadId": "取得主題 / 論壇文章 ID 與取得頻道 ID 類似。詳細了解如何取得 ID {0}",
+ "Don't mention people": "不要提及他人",
+ "Mention group": "提及 {group}",
+ "smspartnerSenderNameInfo": "必須介於 3..=11 個字元之間",
+ "cacheBusterParam": "新增 {0} 參數",
+ "cacheBusterParamDescription": "隨機生成參數以跳過快取。",
+ "gamedigGuessPort": "GameDig:隨機埠",
+ "Message format": "訊息格式",
+ "Send rich messages": "發送豐富的訊息",
+ "bitrix24SupportUserID": "輸入您在 Bitrix24 中的使用者 ID。您可以透過使用者的個人資料連結找到 ID。",
+ "remoteBrowserToggle": "預設情況下,Chromium 在 Uptime Kuma 容器內運作。您可以透過切換此開關來使用遠端瀏覽器。",
+ "Elevator": "電梯",
+ "Clear": "清除",
+ "Scifi": "幻想",
+ "Doorbell": "電鈴",
+ "Bubble": "氣泡",
+ "Reveal": "暴露",
+ "Fail": "失敗",
+ "Correct": "正確的",
+ "time ago": "{0} 以前",
+ "ignoredTLSError": "TLS/SSL 錯誤已被略過",
+ "now": "現在",
+ "-year": "-年",
+ "Json Query Expression": "JSON查詢表達式",
+ "ntfyPriorityHelptextAllExceptDown": "所有事件均以此優先權發送,但 {0} 事件除外,其優先權為 {1}",
+ "receiverInfoSevenIO": "如果接收號碼不在德國,您必須在號碼前面添加國家代碼(例如,對於來自美國的國家代碼 1,請使用 117612121212 而不是 017612121212)",
+ "callMeBotGet": "您可以在此處填寫您生成的用於 {0}、{1} 或 {2} 的端點。 請注意您可能會受到速率限制。 速率限制被推測為:{3}(僅供參考)",
+ "gtxMessagingFromHint": "在手機上,收件人會看到 TPOA 地址作為消息的發送者。TPOA 允許的格式包括:至多11個字母或數字、短代碼、當地長代碼或國際號碼({e164}、{e212} 或 {e214} 格式)",
+ "deleteRemoteBrowserMessage": "您確定要刪除此遠程瀏覽器嗎,這會影響所有監控項?",
+ "Command": "命令",
+ "wayToGetSevenIOApiKey": "訪問 app.seven.io > 開發人員 > api 密鑰 > 綠色添加按鈕下的儀錶板",
+ "senderSevenIO": "發信人號碼或名稱",
+ "receiverSevenIO": "收信人號碼",
+ "wayToWriteWhapiRecipient": "可用格式為不含 + 號的國際通用格式手機號碼({0})、聯繫人 ID({1})或組 ID({2})。",
+ "wayToGetWhapiUrlAndToken": "您可以通過進入您想要的頻道來獲取 API URL 和令牌:{0}",
+ "whapiRecipient": "手機號碼 / 聯繫人 ID / 組 ID",
+ "API URL": "API 地址",
+ "wayToGetHeiiOnCallDetails": "如需了解如何獲取 Trigger ID 和 API 密鑰,請訪問 {documentation}",
+ "gtxMessagingApiKeyHint": "你可以在此找到你的 API 密鑰:My Routing Accounts > Show Account Information > API Credentials > REST API (v2.x)",
+ "From Phone Number / Transmission Path Originating Address (TPOA)": "發件人電話號碼 / 傳輸路徑起始地址(TPOA)",
+ "To Phone Number": "收件人電話號碼",
+ "gtxMessagingToHint": "國際通用格式,需要前導 \"+\" ({e164}、{e212} 或 {e214} 格式)",
+ "Alphanumeric (recommended)": "字符或數字類型(推薦)",
+ "cellsyntOriginatortypeAlphanumeric": "字符或數字類型(最多 11 個字母或數字)。收件人無法向此號碼回覆消息。",
+ "cellsyntOriginatortypeNumeric": "數字類型(最多 15 位數)需使用國際通用格式,不以 00+國家代碼開頭,例如若要使用英國的號碼 07920 110 000 需填寫 447920110000。收件人可向此號碼回覆消息。",
+ "max 11 alphanumeric characters": "最多 11 個字母或數字",
+ "Community String": "SNMP 通訊字符串",
+ "snmpCommunityStringHelptext": "此字符串用作密碼,以驗證和控制對SNMP啟用設備的訪問。請將其與您的SNMP設備配置匹配。",
+ "OID (Object Identifier)": "OID(對象標識符)",
+ "snmpOIDHelptext": "輸入您想監控的傳感器或狀態的 OID。如果您不確定 OID 是什麼,可以使用 MIB 瀏覽器或 SNMP 軟件等網絡管理工具進行查找。",
+ "Condition": "條件",
+ "SNMP Version": "SNMP 版本",
+ "Please enter a valid OID.": "請輸入一個合法的 OID。",
+ "wayToGetThreemaGateway": "你可以在 {0} 註冊 Threema 網關。",
+ "threemaRecipientTypeIdentity": "Threema ID",
+ "threemaRecipientTypePhoneFormat": "E.164 標準,不含前導 + 號",
+ "threemaSenderIdentity": "網關 ID",
+ "threemaApiAuthenticationSecret": "網關密鑰",
+ "threemaBasicModeInfo": "註:此通知類型所使用的 Threema 網關為基礎模式(服務器端加密)。更多細節參見 {0}。",
+ "apiKeysDisabledMsg": "由於登錄驗證被禁用,API 密鑰也被禁用。",
+ "Host Onesender": "Onesender 服務器",
+ "Token Onesender": "Onesender 令牌",
+ "Recipient Type": "收件人類型",
+ "Private Number": "私密號碼",
+ "privateOnesenderDesc": "請確保電話號碼有效。要向私人電話號碼發送消息,格式形如:628123456789",
+ "groupOnesenderDesc": "請確保分組 ID 有效。要向分組發送消息,格式形如:628123456789-342345",
+ "Group ID": "分組 ID",
+ "wayToGetOnesenderUrlandToken": "你可以在 Onesender 網站獲取地址和令牌。更多信息參見 {0}",
+ "Add Remote Browser": "添加遠程瀏覽器",
+ "Group Name": "分組名稱",
+ "OAuth2: Client Credentials": "OAuth2:客戶端憑據",
+ "Authentication Method": "鑒權方式",
+ "Authorization Header": "鑒權請求頭",
+ "Form Data Body": "表單數據請求體",
+ "OAuth Token URL": "OAuth 令牌地址",
+ "Client ID": "客戶端 ID",
+ "Client Secret": "客戶端秘鑰",
+ "OAuth Scope": "OAuth 範圍",
+ "Optional: Space separated list of scopes": "可選項:用空格分隔的範圍列表",
+ "Go back to home page.": "返回到首頁。",
+ "No tags found.": "未找到標籤。",
+ "Lost connection to the socket server.": "與 socket 服務器的連接丟失。",
+ "Cannot connect to the socket server.": "無法連接到 socket 服務器。",
+ "conditionDelete": "刪除條件",
+ "conditionAddGroup": "添加分組",
+ "conditionDeleteGroup": "刪除分組",
+ "equals": "相等",
+ "not equals": "不相等",
+ "contains": "包含",
+ "not contains": "不包含",
+ "starts with": "以此開頭",
+ "not starts with": "不以此開頭",
+ "ends with": "以此結尾",
+ "greater than": "多於",
+ "less than or equal to": "不多於",
+ "greater than or equal to": "不少於",
+ "Notification Channel": "通知頻道",
+ "Sound": "聲音",
+ "Alphanumerical string and hyphens only": "僅限字母、數字和連字符(-)",
+ "Arcade": "Arcade(拱廊)",
+ "Harp": "Harp(豎琴)",
+ "Flute": "Flute(長笛)",
+ "Guitar": "Guitar(吉他)",
+ "Pop": "Pop(流行音樂)",
+ "Custom sound to override default notification sound": "自定義聲音,用以覆蓋默認通知聲音",
+ "Time Sensitive (iOS Only)": "即時通知(僅 iOS 可用)",
+ "Time sensitive notifications will be delivered immediately, even if the device is in do not disturb mode.": "即使設備處於專注模式,即時通知也會立即發送。",
+ "From": "發件人",
+ "Can be found on:": "可在此找到:{0}",
+ "The phone number of the recipient in E.164 format.": "收件人的 E.164 格式電話號碼。",
+ "Either a text sender ID or a phone number in E.164 format if you want to be able to receive replies.": "如需可被回復,請輸入發送者 ID 或 E.164 格式的手機號碼。",
+ "RabbitMQ Nodes": "RabbitMQ 管理節點",
+ "rabbitmqNodesDescription": "輸入 RabbitMQ 管理節點的 URL,包括協議和端口。例如:{0}",
+ "rabbitmqNodesRequired": "請設置此監視項的節點。",
+ "rabbitmqNodesInvalid": "請使用 RabbitMQ 節點的完整 URL(即完全限定 URL,以 http 開頭)。",
+ "RabbitMQ Username": "RabbitMQ 用戶名",
+ "RabbitMQ Password": "RabbitMQ 密碼",
+ "rabbitmqHelpText": "要使用此監控項,您需要在 RabbitMQ 設置中啟用管理插件。有關更多信息,請參閱 {rabitmq_documentation}。",
+ "SendGrid API Key": "SendGrid API 密鑰",
+ "not ends with": "不以此結尾",
+ "less than": "少於",
+ "Originator": "發件人",
+ "cellsyntOriginator": "在收件人處作為消息發送者顯示。允許的內容取決於發件人類型。",
+ "cellsyntDestination": "收件人的手機號碼需要使用以 00+國家代碼開頭的國際通用格式,例如若要發給英國的號碼 07920 110 000 需使用 00447920110000 作為收件人手機號碼(至多17位數)。需發送給多個收件人手機號碼時可使用英文逗號分隔,每次請求最 多250 00個收件人手機號碼。",
+ "SIGNL4": "SIGNL4",
+ "SIGNL4 Webhook URL": "SIGNL4 Webhook 地址",
+ "signl4Docs": "你可以在此找到更多關於如何配置 SIGNL4 以及如何獲取 SIGNL4 Webhook 地址的信息:{0}。",
+ "Conditions": "條件",
+ "conditionAdd": "添加條件",
+ "conditionValuePlaceholder": "值",
+ "Separate multiple email addresses with commas": "用逗號分隔多個電子郵件地址",
+ "record": "記錄",
+ "New Group": "新分組"
}
diff --git a/src/mixins/socket.js b/src/mixins/socket.js
index 150e39a25..3272e042c 100644
--- a/src/mixins/socket.js
+++ b/src/mixins/socket.js
@@ -38,6 +38,7 @@ export default {
allowLoginDialog: false, // Allowed to show login dialog, but "loggedIn" have to be true too. This exists because prevent the login dialog show 0.1s in first before the socket server auth-ed.
loggedIn: false,
monitorList: { },
+ monitorTypeList: {},
maintenanceList: {},
apiKeyList: {},
heartbeatList: { },
@@ -140,19 +141,27 @@ export default {
});
socket.on("monitorList", (data) => {
- // Add Helper function
- Object.entries(data).forEach(([ monitorID, monitor ]) => {
- monitor.getUrl = () => {
- try {
- return new URL(monitor.url);
- } catch (_) {
- return null;
- }
- };
- });
+ this.assignMonitorUrlParser(data);
this.monitorList = data;
});
+ socket.on("updateMonitorIntoList", (data) => {
+ this.assignMonitorUrlParser(data);
+ Object.entries(data).forEach(([ monitorID, updatedMonitor ]) => {
+ this.monitorList[monitorID] = updatedMonitor;
+ });
+ });
+
+ socket.on("deleteMonitorFromList", (monitorID) => {
+ if (this.monitorList[monitorID]) {
+ delete this.monitorList[monitorID];
+ }
+ });
+
+ socket.on("monitorTypeList", (data) => {
+ this.monitorTypeList = data;
+ });
+
socket.on("maintenanceList", (data) => {
this.maintenanceList = data;
});
@@ -251,7 +260,7 @@ export default {
socket.on("disconnect", () => {
console.log("disconnect");
- this.connectionErrorMsg = "Lost connection to the socket server. Reconnecting...";
+ this.connectionErrorMsg = `${this.$t("Lost connection to the socket server.")} ${this.$t("Reconnecting...")}`;
this.socket.connected = false;
});
@@ -284,6 +293,23 @@ export default {
location.reload();
});
},
+ /**
+ * parse all urls from list.
+ * @param {object} data Monitor data to modify
+ * @returns {object} list
+ */
+ assignMonitorUrlParser(data) {
+ Object.entries(data).forEach(([ monitorID, monitor ]) => {
+ monitor.getUrl = () => {
+ try {
+ return new URL(monitor.url);
+ } catch (_) {
+ return null;
+ }
+ };
+ });
+ return data;
+ },
/**
* The storage currently in use
diff --git a/src/pages/AddStatusPage.vue b/src/pages/AddStatusPage.vue
index 4580c98da..b35091cc2 100644
--- a/src/pages/AddStatusPage.vue
+++ b/src/pages/AddStatusPage.vue
@@ -9,21 +9,18 @@
{{ $t("Name") }}
-
+
@@ -65,7 +62,7 @@ export default {
this.processing = false;
if (res.ok) {
- location.href = "/status/" + this.slug + "?edit";
+ location.href = "/status/" + res.slug + "?edit";
} else {
if (res.msg.includes("UNIQUE constraint")) {
@@ -85,4 +82,8 @@ export default {
.shadow-box {
padding: 20px;
}
+
+#slug {
+ text-transform: lowercase;
+}
diff --git a/src/pages/DashboardHome.vue b/src/pages/DashboardHome.vue
index 78bee91fc..a00dedb99 100644
--- a/src/pages/DashboardHome.vue
+++ b/src/pages/DashboardHome.vue
@@ -57,7 +57,7 @@
- {{ $root.monitorList[beat.monitorID]?.name }}
+ {{ $root.monitorList[beat.monitorID]?.name }}
{{ beat.msg }}
@@ -233,4 +233,16 @@ table {
overflow-wrap: break-word;
}
}
+
+@media screen and (max-width: 1280px) {
+ .name-column {
+ min-width: 150px;
+ }
+}
+
+@media screen and (min-aspect-ratio: 4/3) {
+ .name-column {
+ min-width: 200px;
+ }
+}
diff --git a/src/pages/Details.vue b/src/pages/Details.vue
index 16e45dab5..17d32365c 100644
--- a/src/pages/Details.vue
+++ b/src/pages/Details.vue
@@ -79,7 +79,7 @@
{{ $t("checkEverySecond", [ monitor.interval ]) }}
- {{ status.text }}
+ {{ status.text }}
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index fd2f3c72f..95b29aa58 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -10,7 +10,7 @@
{{ $t("Monitor Type") }}
-
+
{{ $t("Group") }}
@@ -24,6 +24,9 @@
Ping
+
+ SMTP
+
SNMP
@@ -64,6 +67,9 @@
MQTT
+
+ RabbitMQ
+
Kafka Producer
@@ -90,6 +96,13 @@
+
+
+
+ RabbitMQ documentation
+
+
+
+
+
+
+
{{ $t("RabbitMQ Nodes") }}
+
+
+ {{ $t("rabbitmqNodesDescription", ["https://node1.rabbitmq.com:15672"]) }}
+
+
+
+
+ RabbitMQ {{ $t("RabbitMQ Username") }}
+
+
+
+
+ {{ $t("RabbitMQ Password") }}
+
+
+
+
-
-
+
+
{{ $t("Hostname") }}
-
+
-
+
{{ $t("Port") }}
@@ -274,6 +332,18 @@
+
+
{{ $t("SMTP Security") }}
+
+ SMTPS
+ Ignore STARTTLS
+ Use STARTTLS
+
+
+ {{ $t("smtpHelpText") }}
+
+
+
@@ -343,6 +413,7 @@
:preselect-first="false"
:max-height="500"
:taggable="false"
+ data-testid="resolve-type-select"
>
@@ -509,6 +580,14 @@
+
+
+
{{ $t("Heartbeat Interval") }} ({{ $t("checkEverySecond", [ monitor.interval ]) }})
@@ -531,10 +610,14 @@
-
-
-
{{ $t("Request Timeout") }} ({{ $t("timeoutAfter", [ monitor.timeout || clampTimeout(monitor.interval) ]) }})
-
+
+
+
+ {{ monitor.type === 'ping' ? $t("pingGlobalTimeoutLabel") : $t("Request Timeout") }}
+ ({{ $t("timeoutAfter", [monitor.timeout || clampTimeout(monitor.interval)]) }})
+
+
+
{{ $t("pingGlobalTimeoutDescription") }}
@@ -548,8 +631,8 @@
{{ $t("Advanced") }}
-
-
+
+
+
{{ $t("pingCountLabel") }}
+
+
+ {{ $t("pingCountDescription") }}
+
+
+
+
+
+
+
{{ $t("Packet Size") }}
-
+
+
+
+
+
+
{{ $t("pingPerRequestTimeoutLabel") }}
+
+
+ {{ $t("pingPerRequestTimeoutDescription") }}
+
@@ -951,7 +1075,15 @@
- {{ $t("Save") }}
+
+ {{ $t("Save") }}
+
@@ -960,7 +1092,7 @@
-
+
@@ -976,11 +1108,18 @@ import DockerHostDialog from "../components/DockerHostDialog.vue";
import RemoteBrowserDialog from "../components/RemoteBrowserDialog.vue";
import ProxyDialog from "../components/ProxyDialog.vue";
import TagsManager from "../components/TagsManager.vue";
-import { genSecret, isDev, MAX_INTERVAL_SECOND, MIN_INTERVAL_SECOND, sleep } from "../util.ts";
+import {
+ genSecret,
+ isDev,
+ MAX_INTERVAL_SECOND,
+ MIN_INTERVAL_SECOND,
+ sleep,
+} from "../util.ts";
import { hostNameRegexPattern } from "../util-frontend";
import HiddenInput from "../components/HiddenInput.vue";
+import EditMonitorConditions from "../components/EditMonitorConditions.vue";
-const toast = useToast;
+const toast = useToast();
const pushTokenLength = 32;
@@ -997,7 +1136,6 @@ const monitorDefaults = {
notificationIDList: {},
ignoreTls: false,
upsideDown: false,
- packetSize: 56,
expiryNotification: false,
maxredirects: 10,
accepted_statuscodes: [ "200-299" ],
@@ -1018,10 +1156,15 @@ const monitorDefaults = {
kafkaProducerSaslOptions: {
mechanism: "None",
},
+ cacheBust: false,
kafkaProducerSsl: false,
kafkaProducerAllowAutoTopicCreation: false,
gamedigGivenPortOnly: true,
- remote_browser: null
+ remote_browser: null,
+ rabbitmqNodes: [],
+ rabbitmqUsername: "",
+ rabbitmqPassword: "",
+ conditions: []
};
export default {
@@ -1036,6 +1179,7 @@ export default {
RemoteBrowserDialog,
TagsManager,
VueMultiselect,
+ EditMonitorConditions,
},
data() {
@@ -1066,6 +1210,47 @@ export default {
},
computed: {
+ timeoutStep() {
+ return this.monitor.type === "ping" ? 1 : 0.1;
+ },
+
+ timeoutMin() {
+ return this.monitor.type === "ping" ? 1 : 0;
+ },
+
+ timeoutMax() {
+ return this.monitor.type === "ping" ? 60 : undefined;
+ },
+
+ timeoutLabel() {
+ return this.monitor.type === "ping" ? this.$t("pingTimeoutLabel") : this.$t("Request Timeout");
+ },
+
+ timeoutDescription() {
+ if (this.monitor.type === "ping") {
+ return this.$t("pingTimeoutDescription");
+ }
+ return "";
+ },
+
+ defaultFriendlyName() {
+ if (this.monitor.hostname) {
+ return this.monitor.hostname;
+ }
+ if (this.monitor.url) {
+ if (this.monitor.url !== "http://" && this.monitor.url !== "https://") {
+ // Ensure monitor without a URL is not affected by invisible URL.
+ try {
+ const url = new URL(this.monitor.url);
+ return url.hostname;
+ } catch (e) {
+ return this.monitor.url.replace(/https?:\/\//, "");
+ }
+ }
+ }
+ // Default placeholder if neither hostname nor URL is available
+ return this.$t("defaultFriendlyName");
+ },
ipRegex() {
@@ -1085,6 +1270,7 @@ export default {
}
return this.$t(name);
},
+
remoteBrowsersOptions() {
return this.$root.remoteBrowserList.map(browser => {
return {
@@ -1093,6 +1279,7 @@ export default {
};
});
},
+
remoteBrowsersToggle: {
get() {
return this.remoteBrowsersEnabled || this.monitor.remote_browser != null;
@@ -1110,6 +1297,7 @@ export default {
}
}
},
+
isAdd() {
return this.$route.path === "/add";
},
@@ -1160,6 +1348,7 @@ message HealthCheckResponse {
}
` ]);
},
+
bodyPlaceholder() {
if (this.monitor && this.monitor.httpBodyEncoding && this.monitor.httpBodyEncoding === "xml") {
return this.$t("Example:", [ `
@@ -1290,7 +1479,15 @@ message HealthCheckResponse {
value: null,
}];
}
- }
+ },
+
+ supportsConditions() {
+ return this.$root.monitorTypeList[this.monitor.type]?.supportsConditions || false;
+ },
+
+ conditionVariables() {
+ return this.$root.monitorTypeList[this.monitor.type]?.conditionVariables || [];
+ },
},
watch: {
"$root.proxyList"() {
@@ -1317,13 +1514,29 @@ message HealthCheckResponse {
},
"monitor.timeout"(value, oldValue) {
- // keep timeout within 80% range
- if (value && value !== oldValue) {
- this.monitor.timeout = this.clampTimeout(value);
+ if (this.monitor.type === "ping") {
+ this.finishUpdateInterval();
+ } else {
+ // keep timeout within 80% range
+ if (value && value !== oldValue) {
+ this.monitor.timeout = this.clampTimeout(value);
+ }
}
},
- "monitor.type"() {
+ "monitor.ping_count"() {
+ if (this.monitor.type === "ping") {
+ this.finishUpdateInterval();
+ }
+ },
+
+ "monitor.ping_per_request_timeout"() {
+ if (this.monitor.type === "ping") {
+ this.finishUpdateInterval();
+ }
+ },
+
+ "monitor.type"(newType, oldType) {
if (this.monitor.type === "push") {
if (! this.monitor.pushToken) {
// ideally this would require checking if the generated token is already used
@@ -1345,11 +1558,16 @@ message HealthCheckResponse {
}
}
- if (this.monitor.type === "snmp") {
- // snmp is not expected to be executed via the internet => we can choose a lower default timeout
- this.monitor.timeout = 5;
- } else {
- this.monitor.timeout = 48;
+ // Set a default timeout if the monitor type has changed or if it's a new monitor
+ if (oldType || this.isAdd) {
+ if (this.monitor.type === "snmp") {
+ // snmp is not expected to be executed via the internet => we can choose a lower default timeout
+ this.monitor.timeout = 5;
+ } else if (this.monitor.type === "ping") {
+ this.monitor.timeout = 10;
+ } else {
+ this.monitor.timeout = 48;
+ }
}
// Set default SNMP version
@@ -1395,6 +1613,10 @@ message HealthCheckResponse {
}
}
+ // Reset conditions since condition variables likely change:
+ if (oldType && newType !== oldType) {
+ this.monitor.conditions = [];
+ }
},
currentGameObject(newGameObject, previousGameObject) {
@@ -1403,6 +1625,12 @@ message HealthCheckResponse {
}
this.monitor.game = newGameObject.keys[0];
},
+
+ "monitor.ignoreTls"(newVal) {
+ if (newVal) {
+ this.monitor.expiryNotification = false;
+ }
+ },
},
mounted() {
this.init();
@@ -1453,7 +1681,11 @@ message HealthCheckResponse {
if (this.isAdd) {
this.monitor = {
- ...monitorDefaults
+ ...monitorDefaults,
+ ping_count: 3,
+ ping_numeric: true,
+ packetSize: 56,
+ ping_per_request_timeout: 2,
};
if (this.$root.proxyList && !this.monitor.proxyId) {
@@ -1516,7 +1748,12 @@ message HealthCheckResponse {
}
// Handling for monitors that are missing/zeroed timeout
if (!this.monitor.timeout) {
- this.monitor.timeout = ~~(this.monitor.interval * 8) / 10;
+ if (this.monitor.type === "ping") {
+ // set to default
+ this.monitor.timeout = 10;
+ } else {
+ this.monitor.timeout = ~~(this.monitor.interval * 8) / 10;
+ }
}
} else {
this.$root.toastError(res.msg);
@@ -1532,6 +1769,10 @@ message HealthCheckResponse {
this.monitor.kafkaProducerBrokers.push(newBroker);
},
+ addRabbitmqNode(newNode) {
+ this.monitor.rabbitmqNodes.push(newNode);
+ },
+
/**
* Validate form input
* @returns {boolean} Is the form input valid?
@@ -1559,6 +1800,17 @@ message HealthCheckResponse {
return false;
}
}
+
+ if (this.monitor.type === "rabbitmq") {
+ if (this.monitor.rabbitmqNodes.length === 0) {
+ toast.error(this.$t("rabbitmqNodesRequired"));
+ return false;
+ }
+ if (!this.monitor.rabbitmqNodes.every(node => node.startsWith("http://") || node.startsWith("https://"))) {
+ toast.error(this.$t("rabbitmqNodesInvalid"));
+ return false;
+ }
+ }
return true;
},
@@ -1574,6 +1826,10 @@ message HealthCheckResponse {
this.processing = true;
+ if (!this.monitor.name) {
+ this.monitor.name = this.defaultFriendlyName;
+ }
+
if (!this.isInputValid()) {
this.processing = false;
return;
@@ -1636,7 +1892,6 @@ message HealthCheckResponse {
await this.startParentGroupMonitor();
}
this.processing = false;
- this.$root.getMonitorList();
this.$router.push("/dashboard/" + res.monitorID);
} else {
this.processing = false;
@@ -1715,11 +1970,48 @@ message HealthCheckResponse {
return Number.isFinite(clamped) ? clamped : maxTimeout;
},
+ calculatePingInterval() {
+ // If monitor.type is not "ping", simply return the configured interval
+ if (this.monitor.type !== "ping") {
+ return this.monitor.interval;
+ }
+
+ // Calculate the maximum theoretical time needed if every ping request times out
+ const theoreticalTotal = this.monitor.ping_count * this.monitor.ping_per_request_timeout;
+
+ // The global timeout (aka deadline) forces ping to terminate, so the effective limit
+ // is the smaller value between deadline and theoreticalTotal
+ const effectiveLimit = Math.min(this.monitor.timeout, theoreticalTotal);
+
+ // Add a 10% margin to the effective limit to ensure proper handling
+ const adjustedLimit = Math.ceil(effectiveLimit * 1.1);
+
+ // If the calculated limit is lower than the minimum allowed interval, use the minimum interval
+ if (adjustedLimit < this.minInterval) {
+ return this.minInterval;
+ }
+
+ return adjustedLimit;
+ },
+
finishUpdateInterval() {
- // Update timeout if it is greater than the clamp timeout
- let clampedValue = this.clampTimeout(this.monitor.interval);
- if (this.monitor.timeout > clampedValue) {
- this.monitor.timeout = clampedValue;
+ if (this.monitor.type === "ping") {
+ // Calculate the minimum required interval based on ping configuration
+ const calculatedPingInterval = this.calculatePingInterval();
+
+ // If the configured interval is too small, adjust it to the minimum required value
+ if (this.monitor.interval < calculatedPingInterval) {
+ this.monitor.interval = calculatedPingInterval;
+
+ // Notify the user that the interval has been automatically adjusted
+ toast.info(this.$t("pingIntervalAdjustedInfo"));
+ }
+ } else {
+ // Update timeout if it is greater than the clamp timeout
+ let clampedValue = this.clampTimeout(this.monitor.interval);
+ if (this.monitor.timeout > clampedValue) {
+ this.monitor.timeout = clampedValue;
+ }
}
},
diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue
index 16853586d..e12c921fe 100644
--- a/src/pages/StatusPage.vue
+++ b/src/pages/StatusPage.vue
@@ -1,7 +1,7 @@
-